diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 00000000..03fcfb7b
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 94a25f7f..be11f249 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/Partner-Api/dependency-reduced-pom.xml b/Partner-Api/dependency-reduced-pom.xml
new file mode 100644
index 00000000..a2bbbe00
--- /dev/null
+++ b/Partner-Api/dependency-reduced-pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ Partner
+ work.slhaf
+ 0.5.0
+
+ 4.0.0
+ Partner-Api
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ hamcrest-core
+ org.hamcrest
+
+
+
+
+
+ 21
+ 21
+ UTF-8
+
+
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.java
index 75e28ecf..0bab4feb 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.java
@@ -13,6 +13,7 @@ import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule;
import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
@@ -99,7 +100,7 @@ public class CapabilityRegisterFactory extends AgentBaseFactory {
}
Object o = constructor.newInstance();
capabilityHolderInstances.put(clazz, o);
- }catch (Exception e){
+ } catch (Exception e) {
throw new CapabilityFactoryExecuteFailedException("创建代理对象失败: " + clazz, e);
}
}
@@ -149,7 +150,7 @@ public class CapabilityRegisterFactory extends AgentBaseFactory {
for (Class> c : reflections.getTypesAnnotatedWith(CoordinateManager.class)) {
Constructor> constructor = c.getDeclaredConstructor();
Object instance = constructor.newInstance();
-
+ setCores(instance, c);
Arrays.stream(c.getMethods())
.filter(method -> method.isAnnotationPresent(Coordinated.class))
.forEach(method -> {
@@ -160,6 +161,15 @@ public class CapabilityRegisterFactory extends AgentBaseFactory {
return map;
}
+ private void setCores(Object cmInstance, Class> cmClazz) throws IllegalAccessException {
+ for (Field field : cmClazz.getFields()) {
+ if (field.getType().isAnnotationPresent(CapabilityCore.class)) {
+ field.setAccessible(true);
+ field.set(cmInstance, coreInstances.get(field.getType()));
+ }
+ }
+ }
+
/**
* 扫描`@Capability`与`@CapabilityMethod`注解的类与方法
* 将`capabilityValue.methodSignature`作为key,函数对象为通过反射拿到的core实例对应的方法
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/annotation/CoordinateManager.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/annotation/CoordinateManager.java
index 9d9c673c..875e01b5 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/annotation/CoordinateManager.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/annotation/CoordinateManager.java
@@ -5,6 +5,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+/**
+ * Core的协调类,该注解的实现类中如果存在任何{@link CapabilityCore}实例的引用,都将被自动注入
+ */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CoordinateManager {
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java
index 291936dc..123d729d 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java
@@ -9,8 +9,7 @@ import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig;
import work.slhaf.partner.api.agent.factory.module.pojo.MetaModule;
import work.slhaf.partner.api.chat.pojo.Message;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
@Slf4j
@Data
@@ -23,7 +22,8 @@ public abstract class AgentConfigManager {
protected HashMap modelConfigMap;
protected HashMap> modelPromptMap;
protected HashMap moduleEnabledStatus;
- protected List moduleList;
+ protected Map> moduleOrderedMap = new LinkedHashMap<>();
+ protected Map moduleMap = new HashMap<>();
public void load() {
modelConfigMap = loadModelConfig();
@@ -38,11 +38,24 @@ public abstract class AgentConfigManager {
protected abstract void dumpModuleEnabledStatus();
- protected abstract HashMap loadModuleEnabledStatusMap();
+ protected abstract HashMap loadModuleEnabledStatusMap(List moduleList);
public void moduleEnabledStatusFilterAndRecord(List moduleList) {
- this.moduleList = moduleList;
- this.moduleEnabledStatus = loadModuleEnabledStatusMap();
+ updateModuleMap(moduleList);
+ updateModuleEnabledStatus(moduleList);
+ }
+
+ private void updateModuleMap(List moduleList) {
+ //在ModuleRegisterFactory已进行过排序操作
+ for (MetaModule module : moduleList) {
+ int k = module.getOrder();
+ moduleOrderedMap.computeIfAbsent(k, order -> new ArrayList<>()).add(module);
+ moduleMap.put(module.getName(), module);
+ }
+ }
+
+ private void updateModuleEnabledStatus(List moduleList) {
+ this.moduleEnabledStatus = loadModuleEnabledStatusMap(moduleList);
boolean unmatch = false;
for (MetaModule metaModule : moduleList) {
@@ -84,12 +97,7 @@ public abstract class AgentConfigManager {
}
moduleEnabledStatus.put(key, status);
dumpModuleEnabledStatus();
- for (MetaModule metaModule : moduleList) {
- if (metaModule.getName().equals(key)) {
- metaModule.setEnabled(status);
- break;
- }
- }
+ moduleMap.get(key).setEnabled(status);
}
}
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java
index 011ac781..301a0a97 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java
@@ -74,7 +74,7 @@ public class FileAgentConfigManager extends AgentConfigManager {
}
@Override
- protected HashMap loadModuleEnabledStatusMap() {
+ protected HashMap loadModuleEnabledStatusMap(List moduleList) {
File file = new File(MODULE_ENABLED_STATUS_CONFIG_FILE);
try {
moduleEnabledStatus = new HashMap<>();
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java
new file mode 100644
index 00000000..edf8e007
--- /dev/null
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java
@@ -0,0 +1,11 @@
+package work.slhaf.partner.api.agent.runtime.exception;
+
+public class AgentRunningFailedException extends AgentRuntimeException{
+ public AgentRunningFailedException(String message) {
+ super(message);
+ }
+
+ public AgentRunningFailedException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java
index ce373d28..9d0de831 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java
@@ -9,18 +9,28 @@ public class GlobalExceptionHandler {
private AgentExceptionCallback exceptionCallback = new LogAgentExceptionCallback();
- public void handle(Throwable e) {
-
- switch (e.getClass().getSimpleName()) {
- case "AgentRuntimeException":
- exceptionCallback.onRuntimeException((AgentRuntimeException) e);
- break;
- case "AgentLaunchFailedException":
- exceptionCallback.onFailedException((AgentLaunchFailedException) e);
- break;
- default:
- log.error("未知异常: ", e);
+ public boolean handle(Throwable e) {
+ boolean exit;
+ Throwable cause = e.getCause();
+ switch (cause) {
+ case AgentRunningFailedException arfe -> {
+ exit = true;
+ exceptionCallback.onRuntimeException((AgentRuntimeException) cause);
+ }
+ case AgentRuntimeException are -> {
+ exit = false;
+ exceptionCallback.onRuntimeException((AgentRuntimeException) cause);
+ }
+ case AgentLaunchFailedException alfe -> {
+ exit = true;
+ exceptionCallback.onFailedException((AgentLaunchFailedException) cause);
+ }
+ default -> {
+ exit = true;
+ log.error("意外异常: ", cause);
+ }
}
+ return exit;
}
public static void setExceptionCallback(AgentExceptionCallback callback) {
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java
index 52bf595c..1a4b7705 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java
@@ -8,14 +8,15 @@ import work.slhaf.partner.api.agent.runtime.interaction.flow.AgentRunningFlow;
import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext;
import java.util.List;
+import java.util.Map;
public abstract class AgentInteractionAdapter {
protected AgentRunningFlow agentRunningFlow = new AgentRunningFlow<>();
- protected List moduleList = AgentConfigManager.INSTANCE.getModuleList();
+ protected Map> moduleOrderedMap = AgentConfigManager.INSTANCE.getModuleOrderedMap();
public C call(C finalInputData){
- return agentRunningFlow.launch(moduleList, finalInputData);
+ return agentRunningFlow.launch(moduleOrderedMap, finalInputData);
}
protected abstract O parseOutputData(C outputContext);
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java
index 0bee1fd3..531cdc88 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java
@@ -1,27 +1,52 @@
package work.slhaf.partner.api.agent.runtime.interaction.flow;
import work.slhaf.partner.api.agent.factory.module.pojo.MetaModule;
+import work.slhaf.partner.api.agent.runtime.exception.AgentRuntimeException;
import work.slhaf.partner.api.agent.runtime.exception.GlobalExceptionHandler;
import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
/**
* Agent执行流程
*/
public class AgentRunningFlow {
- public C launch(List moduleList, C interactionContext){
- try {
+ public C launch(Map> modules, C interactionContext) {
+ try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
//流程执行启动
- for (MetaModule metaModule : moduleList) {
- metaModule.getInstance().execute(interactionContext);
+ for (Map.Entry> entry : modules.entrySet()) {
+ List> futures = new ArrayList<>();
+ List moduleList = entry.getValue();
+ for (MetaModule module : moduleList) {
+ Future> future = executor.submit(() -> {
+ try {
+ module.getInstance().execute(interactionContext);
+ } catch (Exception e) {
+ throw new AgentRuntimeException("模块执行出错: " + module.getName(), e);
+ }
+ });
+ futures.add(future);
+ }
+ for (Future> future : futures) {
+ try {
+ future.get();
+ } catch (Exception e) {
+ boolean exit = GlobalExceptionHandler.INSTANCE.handle(e);
+ if (exit) throw new AgentRuntimeException("Agent执行出错!", e);
+ interactionContext.getErrMsg().add(e.getLocalizedMessage());
+ }
+ }
}
interactionContext.setOk(1);
- }catch (Exception e){
- GlobalExceptionHandler.INSTANCE.handle(e);
+ } catch (Exception e) {
interactionContext.setOk(0);
- interactionContext.setErrMsg(e.getMessage());
+ interactionContext.getErrMsg().add(e.getLocalizedMessage());
}
return interactionContext;
}
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java
index 1c61d561..2b8a222d 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java
@@ -87,6 +87,9 @@ public interface ActivateModel {
((Module) this).setModel(model);
}
+ /**
+ * 对应调用的模型配置名称
+ */
String modelKey();
boolean withBasicPrompt();
diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java
index 0e47e639..b05cd63a 100644
--- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java
+++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java
@@ -4,6 +4,9 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import work.slhaf.partner.api.common.entity.PersistableObject;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* 流程上下文
*/
@@ -11,5 +14,5 @@ import work.slhaf.partner.api.common.entity.PersistableObject;
@Data
public abstract class RunningFlowContext extends PersistableObject {
protected int ok;
- protected String errMsg;
+ protected List errMsg = new ArrayList<>();
}
diff --git a/Partner-Api/src/test/java/module/ModuleProxyTest.java b/Partner-Api/src/test/java/module/ModuleProxyTest.java
index b5c67a24..e39cbc4a 100644
--- a/Partner-Api/src/test/java/module/ModuleProxyTest.java
+++ b/Partner-Api/src/test/java/module/ModuleProxyTest.java
@@ -6,11 +6,12 @@ import net.bytebuddy.matcher.ElementMatchers;
import org.junit.jupiter.api.Test;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule;
+import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
public class ModuleProxyTest {
@Test
- public void test() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
+ public void test() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException, ClassNotFoundException {
Class extends AgentRunningModule> clazz = new ByteBuddy().subclass(MyAgentRunningModule.class)
.method(ElementMatchers.isOverriddenFrom(AgentRunningModule.class))
.intercept(MethodDelegation.to(
diff --git a/Partner-Main/dependency-reduced-pom.xml b/Partner-Main/dependency-reduced-pom.xml
new file mode 100644
index 00000000..a04bb1c9
--- /dev/null
+++ b/Partner-Main/dependency-reduced-pom.xml
@@ -0,0 +1,43 @@
+
+
+
+ Partner
+ work.slhaf
+ 0.5.0
+
+ 4.0.0
+ Partner-Main
+
+
+
+ maven-shade-plugin
+
+
+ package
+
+ shade
+
+
+
+
+ work.slhaf.partner.Main
+
+
+
+
+
+
+
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
+ 21
+ 21
+ UTF-8
+
+
diff --git a/Partner-Main/pom.xml b/Partner-Main/pom.xml
index 6abb0aa0..cb06e7da 100644
--- a/Partner-Main/pom.xml
+++ b/Partner-Main/pom.xml
@@ -22,6 +22,12 @@
Partner-Api
0.5.0
+
+ org.jetbrains.kotlinx
+ kotlinx-coroutines-core
+ 1.10.2
+ test
+
@@ -30,4 +36,35 @@
UTF-8
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+ package
+
+ shade
+
+
+
+
+ work.slhaf.partner.Main
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/Partner-Main/src/main/java/work/slhaf/Main.java b/Partner-Main/src/main/java/work/slhaf/partner/Main.java
similarity index 95%
rename from Partner-Main/src/main/java/work/slhaf/Main.java
rename to Partner-Main/src/main/java/work/slhaf/partner/Main.java
index a366defd..14dc1c1d 100644
--- a/Partner-Main/src/main/java/work/slhaf/Main.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/Main.java
@@ -1,4 +1,4 @@
-package work.slhaf;
+package work.slhaf.partner;
import work.slhaf.partner.api.agent.Agent;
import work.slhaf.partner.common.config.PartnerAgentConfigManager;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception/callback/GlobalExceptionHandler.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/callback/GlobalExceptionHandler.java
deleted file mode 100644
index 6e57a644..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/common/exception/callback/GlobalExceptionHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package work.slhaf.partner.common.exception.callback;
-
-import lombok.extern.slf4j.Slf4j;
-import work.slhaf.partner.runtime.exception.pojo.GlobalException;
-import work.slhaf.partner.runtime.exception.pojo.GlobalExceptionData;
-
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-@Slf4j
-public class GlobalExceptionHandler {
-
- private static final String EXCEPTION_STATIC_PATH = "./data/exception_snapshot/";
-
- public static void writeExceptionState(GlobalException exception) {
- GlobalExceptionData exceptionData = exception.getData();
- Path filePath = Paths.get(EXCEPTION_STATIC_PATH, exceptionData.getExceptionTime() + ".dat");
- try {
- Files.createDirectories(Path.of(EXCEPTION_STATIC_PATH));
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath.toFile()));
- oos.writeObject(exceptionData);
- oos.close();
- log.warn("[GlobalExceptionHandler] 捕获异常, 已保存到: {}", filePath);
- } catch (IOException e) {
- log.error("[GlobalExceptionHandler] 捕获异常, 保存失败: ", e);
- }
- }
-
- public static GlobalExceptionData readExceptionState(String filePath) {
- try {
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
- GlobalExceptionData exceptionData = (GlobalExceptionData) ois.readObject();
- ois.close();
- log.info("[GlobalExceptionHandler] 已从: {} 读取异常快照", filePath);
- return exceptionData;
- } catch (IOException | ClassNotFoundException e) {
- log.error("[GlobalExceptionHandler] 读取异常, 读取失败: ", e);
- return null;
- }
- }
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java b/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java
index 7fbd27f5..27686167 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java
@@ -5,16 +5,13 @@ import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.capability.annotation.CoordinateManager;
import work.slhaf.partner.api.agent.factory.capability.annotation.Coordinated;
import work.slhaf.partner.api.chat.constant.ChatConstant;
-import work.slhaf.partner.common.exception.callback.GlobalExceptionHandler;
+import work.slhaf.partner.core.cache.CacheCore;
import work.slhaf.partner.core.cognation.CognationCore;
-import work.slhaf.partner.core.submodule.cache.CacheCore;
-import work.slhaf.partner.core.submodule.dispatch.DispatchCore;
-import work.slhaf.partner.core.submodule.memory.MemoryCore;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySliceResult;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCore;
-import work.slhaf.partner.runtime.exception.pojo.GlobalException;
+import work.slhaf.partner.core.memory.MemoryCore;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.memory.pojo.MemorySliceResult;
+import work.slhaf.partner.core.perceive.PerceiveCore;
import java.io.IOException;
import java.io.Serial;
@@ -35,35 +32,13 @@ public class CoordinatedManager implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
- private static volatile CoordinatedManager coordinatedManager;
private final Lock sliceInsertLock = new ReentrantLock();
+ //在框架将自动注入core,详见CapabilityRegistryFactory
private CognationCore cognationCore;
private CacheCore cacheCore;
private MemoryCore memoryCore;
private PerceiveCore perceiveCore;
- private DispatchCore dispatchCore;
-
- public static CoordinatedManager getInstance() throws IOException, ClassNotFoundException {
- if (coordinatedManager == null) {
- synchronized (CoordinatedManager.class) {
- if (coordinatedManager == null) {
- coordinatedManager = new CoordinatedManager();
- coordinatedManager.setCognationCore(CognationCore.getInstance());
- coordinatedManager.setCores();
- log.info("[CoordinatedManager] MemoryManager注册完毕...");
- }
- }
- }
- return coordinatedManager;
- }
-
- private void setCores() {
- this.setCacheCore(this.getCognationCore().getCacheCore());
- this.setMemoryCore(this.getCognationCore().getMemoryCore());
- this.setPerceiveCore(this.getCognationCore().getPerceiveCore());
- }
-
@Coordinated(capability = "memory")
public MemoryResult selectMemory(String topicPathStr) {
@@ -89,7 +64,6 @@ public class CoordinatedManager implements Serializable {
memoryResult = new MemoryResult();
memoryResult.setRelatedMemorySliceResult(new ArrayList<>());
memoryResult.setMemorySliceResult(new CopyOnWriteArrayList<>());
- GlobalExceptionHandler.writeExceptionState(new GlobalException(e.getLocalizedMessage()));
}
return cacheFilter(memoryResult);
}
@@ -127,7 +101,6 @@ public class CoordinatedManager implements Serializable {
}
} catch (Exception e) {
log.error("[CoordinatedManager] 插入记忆时出错: ", e);
- GlobalExceptionHandler.writeExceptionState(new GlobalException("插入记忆时出错: " + e.getLocalizedMessage()));
}
log.debug("[CoordinatedManager] 插入切片: {}, 路径: {}", memorySlice, topicPath);
sliceInsertLock.unlock();
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/PartnerCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/PartnerCore.java
new file mode 100644
index 00000000..eee0652c
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/PartnerCore.java
@@ -0,0 +1,93 @@
+package work.slhaf.partner.core;
+
+import cn.hutool.core.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager;
+import work.slhaf.partner.api.common.entity.PersistableObject;
+import work.slhaf.partner.common.config.PartnerAgentConfigManager;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+@Slf4j
+public abstract class PartnerCore> extends PersistableObject {
+
+ private static final String STORAGE_DIR = "./data/memory/";
+ private final String id = ((PartnerAgentConfigManager) AgentConfigManager.INSTANCE).getConfig().getAgentId();
+
+ public PartnerCore() throws IOException, ClassNotFoundException {
+ createStorageDirectory();
+ Path filePath = getFilePath(id);
+ if (Files.exists(filePath)) {
+ T deserialize = deserialize();
+ setupData(deserialize, (T) this);
+ } else {
+ FileUtils.createParentDirectories(filePath.toFile().getParentFile());
+ this.serialize();
+ }
+ setupHook(this);
+ log.info("[{}] 注册完毕", getCoreKey());
+
+ }
+
+ private void setupHook(PartnerCore temp) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ try {
+ temp.serialize();
+ log.info("[{}] 已保存", getCoreKey());
+ } catch (IOException e) {
+ log.error("[{}] 保存失败: ", getCoreKey(), e);
+ }
+ }));
+
+ }
+
+ private void setupData(T source, T current) {
+ BeanUtil.copyProperties(source, current);
+ }
+
+ public void serialize() throws IOException {
+ //先写入到临时文件,如果正常写入则覆盖原文件
+ Path filePath = getFilePath(id + "-temp");
+ Files.createDirectories(Path.of(STORAGE_DIR));
+ try {
+ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath.toFile()));
+ oos.writeObject(this);
+ oos.close();
+ Path path = getFilePath(id);
+ Files.move(filePath, path, StandardCopyOption.REPLACE_EXISTING);
+ log.info("[{}] 已保存到: {}", getCoreKey(), path);
+ } catch (IOException e) {
+ Files.delete(filePath);
+ log.error("[{}] 序列化保存失败: {}", getCoreKey(), e.getMessage());
+ }
+ }
+
+ private T deserialize() throws IOException, ClassNotFoundException {
+ Path filePath = getFilePath(id);
+ try (ObjectInputStream ois = new ObjectInputStream(
+ new FileInputStream(filePath.toFile()))) {
+ T graph = (T) ois.readObject();
+ log.info("[{}] 已从文件加载: {}", getCoreKey(), filePath);
+ return graph;
+ }
+ }
+
+ private Path getFilePath(String s) {
+ return Paths.get(STORAGE_DIR, s + "-" + getCoreKey() + ".memory");
+ }
+
+ private void createStorageDirectory() {
+ try {
+ Files.createDirectories(Paths.get(STORAGE_DIR));
+ } catch (IOException e) {
+ log.error("[{}]创建存储目录失败: {}", getCoreKey(), e.getMessage());
+ }
+ }
+
+ protected abstract String getCoreKey();
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionData.java
new file mode 100644
index 00000000..4fed2443
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionData.java
@@ -0,0 +1,11 @@
+package work.slhaf.partner.core.action.entity;
+
+import lombok.Data;
+
+@Data
+public class ActionData {
+ private String key;
+ private String[] array;
+ private String reason;
+ private String description;
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionStatus.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionStatus.java
new file mode 100644
index 00000000..1bb77215
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionStatus.java
@@ -0,0 +1,5 @@
+package work.slhaf.partner.core.action.entity;
+
+public enum ActionStatus {
+ SUCCESS, FAILED, EXECUTING, WAITING
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionType.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionType.java
new file mode 100644
index 00000000..2354929e
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/ActionType.java
@@ -0,0 +1,5 @@
+package work.slhaf.partner.core.action.entity;
+
+public enum ActionType {
+ IMMEDIATE, PLANNING
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/MetaActionInfo.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/MetaActionInfo.java
new file mode 100644
index 00000000..7cf97bf3
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/entity/MetaActionInfo.java
@@ -0,0 +1,13 @@
+package work.slhaf.partner.core.action.entity;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class MetaActionInfo {
+ private ActionData actionData;
+ private ActionStatus status;
+ private String Result;
+ private LocalDateTime dateTime;
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cache/CacheCapability.java
similarity index 50%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCapability.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/cache/CacheCapability.java
index 36422753..43da5c81 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCapability.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cache/CacheCapability.java
@@ -1,9 +1,11 @@
-package work.slhaf.partner.core.submodule.cache;
+package work.slhaf.partner.core.cache;
import work.slhaf.partner.api.agent.factory.capability.annotation.Capability;
+import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
import java.time.LocalDateTime;
import java.util.HashMap;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
@Capability(value = "cache")
@@ -13,4 +15,11 @@ public interface CacheCapability {
void updateDialogMap(LocalDateTime dateTime, String newDialogCache);
String getDialogMapStr();
String getUserDialogMapStr(String userId);
+ void updateActivatedSlices(String userId, List memorySlices);
+ String getActivatedSlicesStr(String userId);
+ HashMap> getActivatedSlices();
+ void clearActivatedSlices(String userId);
+ boolean hasActivatedSlices(String userId);
+ int getActivatedSlicesSize(String userId);
+ List getActivatedSlices(String userId);
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cache/CacheCore.java
similarity index 76%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/cache/CacheCore.java
index 2dc96f33..f1a316e4 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cache/CacheCore.java
@@ -1,14 +1,18 @@
-package work.slhaf.partner.core.submodule.cache;
+package work.slhaf.partner.core.cache;
import lombok.EqualsAndHashCode;
import lombok.Getter;
+import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod;
-import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.PartnerCore;
+import work.slhaf.partner.core.cognation.pojo.ActiveData;
+import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
+import java.io.IOException;
import java.io.Serial;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -19,11 +23,11 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@CapabilityCore(value = "cache")
@Getter
-public class CacheCore extends PersistableObject {
+@Setter
+public class CacheCore extends PartnerCore {
@Serial
private static final long serialVersionUID = 1L;
- public static volatile CacheCore cacheCore;
/**
* 近两日的对话总结缓存, 用于为大模型提供必要的记忆补充, hashmap以切片的存储时间为键,总结为值
@@ -58,13 +62,11 @@ public class CacheCore extends PersistableObject {
*/
private Set selectedSlices = new HashSet<>();
- public CacheCore() {
- cacheCore = this;
+ private ActiveData activeData = new ActiveData();
+
+ public CacheCore() throws IOException, ClassNotFoundException {
}
- public static CacheCore getInstance(){
- return cacheCore;
- }
@CapabilityMethod
public void updateDialogMap(LocalDateTime dateTime, String newDialogCache) {
@@ -179,4 +181,44 @@ public class CacheCore extends PersistableObject {
return null;
}
+ @CapabilityMethod
+ public void updateActivatedSlices(String userId, List memorySlices) {
+ activeData.updateActivatedSlices(userId, memorySlices);
+ log.debug("[CoordinatedManager] 已更新激活切片, userId: {}", userId);
+ }
+
+ @CapabilityMethod
+ public String getActivatedSlicesStr(String userId) {
+ return activeData.getActivatedSlicesStr(userId);
+ }
+
+ @CapabilityMethod
+ public HashMap> getActivatedSlices() {
+ return activeData.getActivatedSlices();
+ }
+
+ @CapabilityMethod
+ public void clearActivatedSlices(String userId) {
+ activeData.clearActivatedSlices(userId);
+ }
+
+ @CapabilityMethod
+ public boolean hasActivatedSlices(String userId) {
+ return activeData.hasActivatedSlices(userId);
+ }
+
+ @CapabilityMethod
+ public int getActivatedSlicesSize(String userId) {
+ return activeData.getActivatedSlices().get(userId).size();
+ }
+
+ @CapabilityMethod
+ public List getActivatedSlices(String userId) {
+ return activeData.getActivatedSlices().get(userId);
+ }
+
+ @Override
+ protected String getCoreKey() {
+ return "cache-core";
+ }
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java
index 3a0b8c3e..81c4b290 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java
@@ -3,7 +3,7 @@ package work.slhaf.partner.core.cognation;
import work.slhaf.partner.api.agent.factory.capability.annotation.Capability;
import work.slhaf.partner.api.agent.factory.capability.annotation.ToCoordinated;
import work.slhaf.partner.api.chat.pojo.Message;
-import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice;
+import work.slhaf.partner.api.chat.pojo.MetaMessage;
import java.util.HashMap;
import java.util.List;
@@ -15,14 +15,14 @@ public interface CognationCapability {
List getChatMessages();
void setChatMessages(List chatMessages);
void cleanMessage(List messages);
- void updateActivatedSlices(String userId, List memorySlices);
- String getActivatedSlicesStr(String userId);
- HashMap> getActivatedSlices();
- void clearActivatedSlices(String userId);
- boolean hasActivatedSlices(String userId);
- int getActivatedSlicesSize(String userId);
- List getActivatedSlices(String userId);
Lock getMessageLock();
+ void addMetaMessage(String userId, MetaMessage metaMessage);
+ List unpackAndClear(String userId);
+ void refreshMemoryId();
+ void resetLastUpdatedTime();
+ long getLastUpdatedTime();
+ HashMap> getSingleMetaMessageMap();
+ String getCurrentMemoryId();
@ToCoordinated
boolean isSingleUser();
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java
index 3e416460..2c4587d6 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java
@@ -1,72 +1,46 @@
package work.slhaf.partner.core.cognation;
-import lombok.Data;
+import com.alibaba.fastjson2.JSONObject;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.FileUtils;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod;
import work.slhaf.partner.api.chat.pojo.Message;
-import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.cognation.pojo.ActiveData;
-import work.slhaf.partner.core.submodule.cache.CacheCore;
-import work.slhaf.partner.core.submodule.memory.MemoryCore;
-import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCore;
+import work.slhaf.partner.api.chat.pojo.MetaMessage;
+import work.slhaf.partner.core.PartnerCore;
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
+import java.io.IOException;
+import java.io.Serial;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.UUID;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@EqualsAndHashCode(callSuper = true)
-@Data
@Slf4j
@CapabilityCore(value = "cognation")
-public class CognationCore extends PersistableObject {
+@Getter
+@Setter
+public class CognationCore extends PartnerCore {
@Serial
private static final long serialVersionUID = 1L;
- private static final String STORAGE_DIR = "./data/memory/";
- private static volatile CognationCore cognationCore;
-
- private MemoryCore memoryCore = new MemoryCore();
- private CacheCore cacheCore = new CacheCore();
- private PerceiveCore perceiveCore = new PerceiveCore();
- private ReentrantLock messageLock = new ReentrantLock();
- private ActiveData activeData;
+ private final ReentrantLock messageLock = new ReentrantLock();
/**
* 主模型的聊天记录
*/
private List chatMessages = new ArrayList<>();
+ private HashMap> singleMetaMessageMap = new HashMap<>();
+ private String currentMemoryId;
+ private long lastUpdatedTime;
public CognationCore() throws IOException, ClassNotFoundException {
- createStorageDirectory();
- Path filePath = getFilePath("partner");
- if (Files.exists(filePath)) {
- setupData(this);
- } else {
- FileUtils.createParentDirectories(filePath.toFile().getParentFile());
- connectCores(this);
- this.activeData = new ActiveData();
- this.serialize();
- }
- setupHook(this);
- log.info("CognationCore注册完毕...");
- }
-
- private void connectCores(CognationCore temp) {
- temp.setCacheCore(CacheCore.getInstance());
- temp.setMemoryCore(MemoryCore.getInstance());
- temp.setPerceiveCore(PerceiveCore.getInstance());
}
@CapabilityMethod
@@ -74,76 +48,26 @@ public class CognationCore extends PersistableObject {
return chatMessages;
}
+ @CapabilityMethod
+ public long getLastUpdatedTime(){
+ return lastUpdatedTime;
+ }
+
+ @CapabilityMethod
+ public HashMap> getSingleMetaMessageMap(){
+ return singleMetaMessageMap;
+ }
+
+ @CapabilityMethod
+ public String getCurrentMemoryId(){
+ return currentMemoryId;
+ }
+
@CapabilityMethod
public void setChatMessages(List chatMessages) {
this.chatMessages = chatMessages;
}
- private void setupHook(CognationCore temp) {
- Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- try {
- temp.serialize();
- log.info("[CognationCore] CognationCore已保存");
- } catch (IOException e) {
- log.error("[CognationCore] CognationCore保存失败: ", e);
- }
- }));
-
- }
-
- private void setupData(CognationCore temp) throws IOException, ClassNotFoundException {
- CognationCore deserialize = deserialize();
- temp.activeData = deserialize.activeData;
- temp.memoryCore = deserialize.memoryCore;
- temp.cacheCore = deserialize.cacheCore;
- temp.perceiveCore = deserialize.perceiveCore;
- temp.chatMessages = deserialize.chatMessages;
- }
-
-
- public static CognationCore getInstance() {
- return cognationCore;
- }
-
- public void serialize() throws IOException {
- //先写入到临时文件,如果正常写入则覆盖原文件
- Path filePath = getFilePath("partner-temp");
- Files.createDirectories(Path.of(STORAGE_DIR));
- try {
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath.toFile()));
- oos.writeObject(this);
- oos.close();
- Path path = getFilePath("partner");
- Files.move(filePath, path, StandardCopyOption.REPLACE_EXISTING);
- log.info("CognationCore 已保存到: {}", path);
- } catch (IOException e) {
- Files.delete(filePath);
- log.error("序列化保存失败: {}", e.getMessage());
- }
- }
-
- private static CognationCore deserialize() throws IOException, ClassNotFoundException {
- Path filePath = getFilePath("partner");
- try (ObjectInputStream ois = new ObjectInputStream(
- new FileInputStream(filePath.toFile()))) {
- CognationCore graph = (CognationCore) ois.readObject();
- log.info("CognationCore 已从文件加载: {}", filePath);
- return graph;
- }
- }
-
- private static Path getFilePath(String s) {
- return Paths.get(STORAGE_DIR, s + ".memory");
- }
-
- private static void createStorageDirectory() {
- try {
- Files.createDirectories(Paths.get(STORAGE_DIR));
- } catch (IOException e) {
- System.err.println("创建存储目录失败: " + e.getMessage());
- }
- }
-
@CapabilityMethod
public void cleanMessage(List messages) {
messageLock.lock();
@@ -152,45 +76,46 @@ public class CognationCore extends PersistableObject {
}
- @CapabilityMethod
- public void updateActivatedSlices(String userId, List memorySlices) {
- activeData.updateActivatedSlices(userId, memorySlices);
- log.debug("[CoordinatedManager] 已更新激活切片, userId: {}", userId);
- }
-
- @CapabilityMethod
- public String getActivatedSlicesStr(String userId) {
- return activeData.getActivatedSlicesStr(userId);
- }
-
- @CapabilityMethod
- public HashMap> getActivatedSlices() {
- return activeData.getActivatedSlices();
- }
-
- @CapabilityMethod
- public void clearActivatedSlices(String userId) {
- activeData.clearActivatedSlices(userId);
- }
-
- @CapabilityMethod
- public boolean hasActivatedSlices(String userId) {
- return activeData.hasActivatedSlices(userId);
- }
-
- @CapabilityMethod
- public int getActivatedSlicesSize(String userId) {
- return activeData.getActivatedSlices().get(userId).size();
- }
-
- @CapabilityMethod
- public List getActivatedSlices(String userId) {
- return activeData.getActivatedSlices().get(userId);
- }
-
@CapabilityMethod
public Lock getMessageLock() {
return messageLock;
}
-}
+ @CapabilityMethod
+ public void addMetaMessage(String userId, MetaMessage metaMessage) {
+ log.debug("[{}] 当前会话历史: {}", JSONObject.toJSONString(singleMetaMessageMap));
+ if (singleMetaMessageMap.containsKey(userId)) {
+ singleMetaMessageMap.get(userId).add(metaMessage);
+ } else {
+ singleMetaMessageMap.put(userId, new java.util.ArrayList<>());
+ singleMetaMessageMap.get(userId).add(metaMessage);
+ }
+ log.debug("[SessionManager] 会话历史更新: {}", JSONObject.toJSONString(singleMetaMessageMap));
+ }
+
+ @CapabilityMethod
+ public List unpackAndClear(String userId) {
+ List messages = new ArrayList<>();
+ for (MetaMessage metaMessage : singleMetaMessageMap.get(userId)) {
+ messages.add(metaMessage.getUserMessage());
+ messages.add(metaMessage.getAssistantMessage());
+ }
+ singleMetaMessageMap.remove(userId);
+ return messages;
+ }
+
+ @CapabilityMethod
+ public void refreshMemoryId() {
+ currentMemoryId = UUID.randomUUID().toString();
+ }
+
+ @CapabilityMethod
+ public void resetLastUpdatedTime() {
+ lastUpdatedTime = System.currentTimeMillis();
+ }
+
+ @Override
+ protected String getCoreKey() {
+ return "cognation-core";
+ }
+}
\ No newline at end of file
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java
index a6826748..2bffa94b 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java
@@ -3,7 +3,7 @@ package work.slhaf.partner.core.cognation.pojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice;
+import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
import java.io.Serial;
import java.util.HashMap;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/MemoryCapability.java
similarity index 77%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/MemoryCapability.java
index 35b639c4..57381567 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/MemoryCapability.java
@@ -1,9 +1,9 @@
-package work.slhaf.partner.core.submodule.memory;
+package work.slhaf.partner.core.memory;
import work.slhaf.partner.api.agent.factory.capability.annotation.Capability;
import work.slhaf.partner.api.agent.factory.capability.annotation.ToCoordinated;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
import java.io.IOException;
import java.time.LocalDate;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java
similarity index 93%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java
index 902176f4..beb70878 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java
@@ -1,17 +1,18 @@
-package work.slhaf.partner.core.submodule.memory;
+package work.slhaf.partner.core.memory;
-import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod;
-import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.submodule.memory.exception.UnExistedDateIndexException;
-import work.slhaf.partner.core.submodule.memory.exception.UnExistedTopicException;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySliceResult;
-import work.slhaf.partner.core.submodule.memory.pojo.node.MemoryNode;
-import work.slhaf.partner.core.submodule.memory.pojo.node.TopicNode;
+import work.slhaf.partner.core.PartnerCore;
+import work.slhaf.partner.core.memory.exception.UnExistedDateIndexException;
+import work.slhaf.partner.core.memory.exception.UnExistedTopicException;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.memory.pojo.MemorySliceResult;
+import work.slhaf.partner.core.memory.pojo.node.MemoryNode;
+import work.slhaf.partner.core.memory.pojo.node.TopicNode;
import java.io.IOException;
import java.io.Serial;
@@ -21,13 +22,13 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@EqualsAndHashCode(callSuper = true)
-@Data
@CapabilityCore(value = "memory")
-public class MemoryCore extends PersistableObject {
+@Getter
+@Setter
+public class MemoryCore extends PartnerCore {
@Serial
private static final long serialVersionUID = 1L;
- public static MemoryCore memoryCore;
/**
* key: 根主题名称 value: 根主题节点
@@ -57,13 +58,9 @@ public class MemoryCore extends PersistableObject {
private HashMap> userIndex = new HashMap<>();
- public MemoryCore(){
- memoryCore = this;
+ public MemoryCore() throws IOException, ClassNotFoundException {
}
- public static MemoryCore getInstance() {
- return memoryCore;
- }
public MemoryResult selectMemory(LocalDate date) throws IOException, ClassNotFoundException {
MemoryResult memoryResult = new MemoryResult();
@@ -328,6 +325,11 @@ public class MemoryCore extends PersistableObject {
@CapabilityMethod
public void cleanSelectedSliceFilter() {
- this.getSelectedSlices().clear();
+ this.selectedSlices.clear();
+ }
+
+ @Override
+ protected String getCoreKey() {
+ return "memory-core";
}
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/NullSliceListException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/NullSliceListException.java
similarity index 71%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/NullSliceListException.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/NullSliceListException.java
index cdf03e1e..3884da49 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/NullSliceListException.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/NullSliceListException.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.exception;
+package work.slhaf.partner.core.memory.exception;
public class NullSliceListException extends RuntimeException {
public NullSliceListException(String message) {
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedDateIndexException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/UnExistedDateIndexException.java
similarity index 72%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedDateIndexException.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/UnExistedDateIndexException.java
index 241ee983..4c45070b 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedDateIndexException.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/UnExistedDateIndexException.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.exception;
+package work.slhaf.partner.core.memory.exception;
public class UnExistedDateIndexException extends RuntimeException {
public UnExistedDateIndexException(String message) {
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedTopicException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/UnExistedTopicException.java
similarity index 71%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedTopicException.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/UnExistedTopicException.java
index 42218a53..57700c9b 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedTopicException.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/exception/UnExistedTopicException.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.exception;
+package work.slhaf.partner.core.memory.exception;
public class UnExistedTopicException extends RuntimeException {
public UnExistedTopicException(String message) {
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/EvaluatedSlice.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java
similarity index 89%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/EvaluatedSlice.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java
index 50a0affb..a7ac48f4 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/EvaluatedSlice.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.pojo;
+package work.slhaf.partner.core.memory.pojo;
import lombok.Builder;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemoryResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java
similarity index 93%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemoryResult.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java
index 3f9f5ad2..39b33bec 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemoryResult.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.pojo;
+package work.slhaf.partner.core.memory.pojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySlice.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemorySlice.java
similarity index 97%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySlice.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemorySlice.java
index 51f771b6..84f9f899 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySlice.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemorySlice.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.pojo;
+package work.slhaf.partner.core.memory.pojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySliceResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemorySliceResult.java
similarity index 90%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySliceResult.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemorySliceResult.java
index edb79efa..06e3f8d6 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySliceResult.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/MemorySliceResult.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.pojo;
+package work.slhaf.partner.core.memory.pojo;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/MemoryNode.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java
similarity index 92%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/MemoryNode.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java
index 0c3b4c8d..f2e5dec2 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/MemoryNode.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java
@@ -1,11 +1,11 @@
-package work.slhaf.partner.core.submodule.memory.pojo.node;
+package work.slhaf.partner.core.memory.pojo.node;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.submodule.memory.exception.NullSliceListException;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.memory.exception.NullSliceListException;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
import java.io.*;
import java.nio.file.Files;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/TopicNode.java b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java
similarity index 90%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/TopicNode.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java
index 9f0638ee..93d06a6f 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/TopicNode.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.memory.pojo.node;
+package work.slhaf.partner.core.memory.pojo.node;
import lombok.Data;
import lombok.EqualsAndHashCode;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java
similarity index 74%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCapability.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java
index 1602585d..502283c2 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCapability.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java
@@ -1,7 +1,7 @@
-package work.slhaf.partner.core.submodule.perceive;
+package work.slhaf.partner.core.perceive;
import work.slhaf.partner.api.agent.factory.capability.annotation.Capability;
-import work.slhaf.partner.core.submodule.perceive.pojo.User;
+import work.slhaf.partner.core.perceive.pojo.User;
@Capability(value = "perceive")
public interface PerceiveCapability {
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/perceive/PerceiveCore.java
similarity index 84%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCore.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/perceive/PerceiveCore.java
index eea1a495..b4895952 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCore.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/perceive/PerceiveCore.java
@@ -1,13 +1,15 @@
-package work.slhaf.partner.core.submodule.perceive;
+package work.slhaf.partner.core.perceive;
-import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore;
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod;
-import work.slhaf.partner.api.common.entity.PersistableObject;
+import work.slhaf.partner.core.PartnerCore;
import work.slhaf.partner.core.cognation.exception.UserNotExistsException;
-import work.slhaf.partner.core.submodule.perceive.pojo.User;
+import work.slhaf.partner.core.perceive.pojo.User;
+import java.io.IOException;
import java.io.Serial;
import java.util.ArrayList;
import java.util.HashMap;
@@ -16,13 +18,13 @@ import java.util.UUID;
import java.util.concurrent.locks.ReentrantLock;
@EqualsAndHashCode(callSuper = true)
-@Data
@CapabilityCore(value = "perceive")
-public class PerceiveCore extends PersistableObject {
+@Getter
+@Setter
+public class PerceiveCore extends PartnerCore {
@Serial
private static final long serialVersionUID = 1L;
- private static volatile PerceiveCore perceiveCore;
private static final ReentrantLock usersLock = new ReentrantLock();
/**
@@ -30,12 +32,7 @@ public class PerceiveCore extends PersistableObject {
*/
private List users = new ArrayList<>();
- public PerceiveCore() {
- perceiveCore = this;
- }
-
- public static PerceiveCore getInstance() {
- return perceiveCore;
+ public PerceiveCore() throws IOException, ClassNotFoundException {
}
@CapabilityMethod
@@ -94,4 +91,9 @@ public class PerceiveCore extends PersistableObject {
user.updateRelationChange(user.getRelationChange());
usersLock.unlock();
}
+
+ @Override
+ protected String getCoreKey() {
+ return "perceive-core";
+ }
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/pojo/User.java b/Partner-Main/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java
similarity index 96%
rename from Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/pojo/User.java
rename to Partner-Main/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java
index c6251634..5f970d10 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/pojo/User.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.core.submodule.perceive.pojo;
+package work.slhaf.partner.core.perceive.pojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCapability.java
deleted file mode 100644
index e1a0d05b..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCapability.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package work.slhaf.partner.core.submodule.dispatch;
-
-public interface DispatchCapability {
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCore.java
deleted file mode 100644
index 73ad8eb3..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCore.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package work.slhaf.partner.core.submodule.dispatch;
-
-import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.submodule.dispatch.pojo.DispatchData;
-
-import java.io.Serial;
-
-public class DispatchCore extends PersistableObject {
-
- @Serial
- private static final long serialVersionUID = 1L;
- public static volatile DispatchCore dispatchCore;
-
- public static DispatchCore getInstance() {
- if (dispatchCore == null) {
- synchronized (DispatchCore.class) {
- if (dispatchCore == null) {
- dispatchCore = new DispatchCore();
- }
- }
- }
- return dispatchCore;
- }
-
- public void dispatch(DispatchData dispatchData){
-
- }
-
- public void listDispatchData(){
-
- }
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/pojo/DispatchData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/pojo/DispatchData.java
deleted file mode 100644
index 36a26247..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/pojo/DispatchData.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package work.slhaf.partner.core.submodule.dispatch.pojo;
-
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Data
-public class DispatchData {
- private LocalDateTime dateTime;
- private String userId;
- private String comment;
-
- //TODO 替换为<执行器>或者<插件>
- private String executor;
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java
index 4b05fdb0..9bfc1277 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java
@@ -10,12 +10,12 @@ public abstract class PostRunningModule extends AgentRunningModule {
- private void setAppendedPrompt(PartnerRunningFlowContext context) {
+ private synchronized void setAppendedPrompt(PartnerRunningFlowContext context) {
AppendPromptData data = new AppendPromptData();
data.setModuleName(moduleName());
HashMap map = getPromptDataMap(context.getUserId());
@@ -21,12 +21,15 @@ public abstract class PreRunningModule extends AgentRunningModule getPromptDataMap(String userId);
+ /**
+ * 用于在CoreModule接收到的模块Prompt中标识模块名称
+ */
protected abstract String moduleName();
@Override
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java
new file mode 100644
index 00000000..fabbb404
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java
@@ -0,0 +1,46 @@
+package work.slhaf.partner.module.modules.action.planner;
+
+import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
+import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
+import work.slhaf.partner.module.common.module.PreRunningModule;
+import work.slhaf.partner.module.modules.action.planner.evaluator.ActionEvaluator;
+import work.slhaf.partner.module.modules.action.planner.extractor.ActionExtractor;
+import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorInput;
+import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+/**
+ * 负责针对本次输入生成基础的行动建议,是否执行由主模型判断。
+ */
+@AgentModule(name = "task_planner",order = 2)
+public class ActionPlanner extends PreRunningModule {
+
+ @InjectModule
+ private ActionEvaluator actionEvaluator;
+ @InjectModule
+ private ActionExtractor actionExtractor;
+
+ @Override
+ protected void doExecute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException {
+ ExtractorInput extractorInput = getExtractorInput(context);
+ }
+
+ private ExtractorInput getExtractorInput(PartnerRunningFlowContext context) {
+ ExtractorInput input = new ExtractorInput();
+ input.setInput(context.getInput());
+ input.setRecentMessages();
+ return input;
+ }
+
+ @Override
+ protected HashMap getPromptDataMap(String userId) {
+ return null;
+ }
+
+ @Override
+ protected String moduleName() {
+ return "task_planner";
+ }
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java
new file mode 100644
index 00000000..299b3259
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java
@@ -0,0 +1,27 @@
+package work.slhaf.partner.module.modules.action.planner.evaluator;
+
+import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule;
+import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
+import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
+import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorInput;
+import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorResult;
+
+@AgentSubModule
+public class ActionEvaluator extends AgentRunningSubModule implements ActivateModel {
+
+ @Override
+ public EvaluatorResult execute(EvaluatorInput data) {
+
+ return null;
+ }
+
+ @Override
+ public String modelKey() {
+ return "action_evaluator";
+ }
+
+ @Override
+ public boolean withBasicPrompt() {
+ return true;
+ }
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java
new file mode 100644
index 00000000..f933e97d
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java
@@ -0,0 +1,11 @@
+package work.slhaf.partner.module.modules.action.planner.evaluator.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EvaluatorInput {
+ private List recentMessages;
+ private String tendency;
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorResult.java
new file mode 100644
index 00000000..84302d18
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorResult.java
@@ -0,0 +1,13 @@
+package work.slhaf.partner.module.modules.action.planner.evaluator.entity;
+
+import lombok.Data;
+import work.slhaf.partner.core.action.entity.ActionData;
+import work.slhaf.partner.core.action.entity.ActionType;
+
+@Data
+public class EvaluatorResult {
+ private boolean ok;
+ private ActionType type;
+ private String typeInfo;
+ private ActionData actionData;
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java
new file mode 100644
index 00000000..2e66d1dd
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java
@@ -0,0 +1,27 @@
+package work.slhaf.partner.module.modules.action.planner.extractor;
+
+import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule;
+import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
+import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
+import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorInput;
+import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorResult;
+
+@AgentSubModule
+public class ActionExtractor extends AgentRunningSubModule implements ActivateModel {
+
+ @Override
+ public ExtractorResult execute(ExtractorInput data) {
+
+ return null;
+ }
+
+ @Override
+ public String modelKey() {
+ return "action_extractor";
+ }
+
+ @Override
+ public boolean withBasicPrompt() {
+ return false;
+ }
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/entity/ExtractorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/entity/ExtractorInput.java
new file mode 100644
index 00000000..bd42536c
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/entity/ExtractorInput.java
@@ -0,0 +1,12 @@
+package work.slhaf.partner.module.modules.action.planner.extractor.entity;
+
+import lombok.Data;
+import work.slhaf.partner.api.chat.pojo.Message;
+
+import java.util.List;
+
+@Data
+public class ExtractorInput {
+ private String input;
+ private List recentMessages;
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/entity/ExtractorResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/entity/ExtractorResult.java
new file mode 100644
index 00000000..7afc9301
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/entity/ExtractorResult.java
@@ -0,0 +1,9 @@
+package work.slhaf.partner.module.modules.action.planner.extractor.entity;
+
+import lombok.Data;
+
+@Data
+public class ExtractorResult {
+ private boolean action;
+ private String tendency;
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/scheduler/ActionDispatcher.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/scheduler/ActionDispatcher.java
new file mode 100644
index 00000000..7b2c8805
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/scheduler/ActionDispatcher.java
@@ -0,0 +1,4 @@
+package work.slhaf.partner.module.modules.action.scheduler;
+
+public class ActionDispatcher {
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/scheduler/TaskScheduler.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/scheduler/TaskScheduler.java
new file mode 100644
index 00000000..72e88c4c
--- /dev/null
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/scheduler/TaskScheduler.java
@@ -0,0 +1,7 @@
+package work.slhaf.partner.module.modules.action.scheduler;
+
+/**
+ * 负责综合前置模块
+ */
+public class TaskScheduler {
+}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java
index 1de74159..7f07ad00 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java
@@ -17,7 +17,6 @@ import work.slhaf.partner.core.cognation.CognationCapability;
import work.slhaf.partner.module.common.entity.AppendPromptData;
import work.slhaf.partner.module.common.model.ModelConstant;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
-import work.slhaf.partner.runtime.session.SessionManager;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -34,7 +33,6 @@ public class CoreModel extends AgentRunningModule imp
@InjectCapability
private CognationCapability cognationCapability;
- private SessionManager sessionManager;
private List appendedMessages;
@Init
@@ -42,7 +40,6 @@ public class CoreModel extends AgentRunningModule imp
List chatMessages = this.cognationCapability.getChatMessages();
this.getModel().setChatMessages(chatMessages);
this.appendedMessages = new ArrayList<>();
- this.sessionManager = SessionManager.getInstance();
updateChatClientSettings();
log.info("[CoreModel] CoreModel注册完毕...");
@@ -181,7 +178,7 @@ public class CoreModel extends AgentRunningModule imp
//区分单人聊天场景
if (runningFlowContext.isSingle()) {
MetaMessage metaMessage = new MetaMessage(primaryUserMessage, assistantMessage);
- sessionManager.addMetaMessage(runningFlowContext.getUserId(), metaMessage);
+ cognationCapability.addMetaMessage(runningFlowContext.getUserId(), metaMessage);
}
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java
index 127647f9..3295814a 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java
@@ -7,20 +7,20 @@ import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
+import work.slhaf.partner.core.cache.CacheCapability;
import work.slhaf.partner.core.cognation.CognationCapability;
-import work.slhaf.partner.core.submodule.cache.CacheCapability;
-import work.slhaf.partner.core.submodule.memory.MemoryCapability;
-import work.slhaf.partner.core.submodule.memory.exception.UnExistedDateIndexException;
-import work.slhaf.partner.core.submodule.memory.exception.UnExistedTopicException;
-import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.memory.MemoryCapability;
+import work.slhaf.partner.core.memory.exception.UnExistedDateIndexException;
+import work.slhaf.partner.core.memory.exception.UnExistedTopicException;
+import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
import work.slhaf.partner.module.common.module.PreRunningModule;
import work.slhaf.partner.module.modules.memory.selector.evaluator.SliceSelectEvaluator;
-import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput;
+import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.EvaluatorInput;
import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor;
-import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorMatchData;
-import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorResult;
+import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorMatchData;
+import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorResult;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
import java.io.IOException;
@@ -33,7 +33,7 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
-@AgentModule(name="memory_selector",order=1)
+@AgentModule(name="memory_selector",order=2)
public class MemorySelector extends PreRunningModule {
@InjectCapability
@@ -54,9 +54,9 @@ public class MemorySelector extends PreRunningModule {
//获取主题路径
ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext);
if (extractorResult.isRecall() || !extractorResult.getMatches().isEmpty()) {
- cognationCapability.clearActivatedSlices(userId);
+ cacheCapability.clearActivatedSlices(userId);
List evaluatedSlices = selectAndEvaluateMemory(runningFlowContext, extractorResult);
- cognationCapability.updateActivatedSlices(userId, evaluatedSlices);
+ cacheCapability.updateActivatedSlices(userId, evaluatedSlices);
}
setModuleContextRecall(runningFlowContext);
}
@@ -81,10 +81,10 @@ public class MemorySelector extends PreRunningModule {
private void setModuleContextRecall(PartnerRunningFlowContext runningFlowContext) {
String userId = runningFlowContext.getUserId();
- boolean recall = cognationCapability.hasActivatedSlices(userId);
+ boolean recall = cacheCapability.hasActivatedSlices(userId);
runningFlowContext.getModuleContext().getExtraContext().put("recall", recall);
if (recall) {
- runningFlowContext.getModuleContext().getExtraContext().put("recall_count", cognationCapability.getActivatedSlicesSize(userId));
+ runningFlowContext.getModuleContext().getExtraContext().put("recall_count", cacheCapability.getActivatedSlicesSize(userId));
}
}
@@ -148,7 +148,7 @@ public class MemorySelector extends PreRunningModule {
map.put("[用户记忆缓存] <与最新一条消息的发送者的近两天对话记忆印象, 可能与[记忆缓存]稍有重复>", userDialogMapStr);
}
- String sliceStr = cognationCapability.getActivatedSlicesStr(userId);
+ String sliceStr = cacheCapability.getActivatedSlicesStr(userId);
if (sliceStr != null && !sliceStr.isEmpty()) {
map.put("[记忆切片] <你与最新一条消息的发送者的相关回忆, 不会与[记忆缓存]重复, 如果有重复你也可以指出来()>", sliceStr);
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java
index 66e2c751..0165b87d 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java
@@ -11,14 +11,14 @@ import work.slhaf.partner.api.agent.factory.module.annotation.Init;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
-import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice;
-import work.slhaf.partner.core.submodule.memory.pojo.MemorySliceResult;
-import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorBatchInput;
-import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput;
-import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorResult;
-import work.slhaf.partner.module.modules.memory.selector.evaluator.data.SliceSummary;
+import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemorySlice;
+import work.slhaf.partner.core.memory.pojo.MemorySliceResult;
+import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.EvaluatorBatchInput;
+import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.EvaluatorInput;
+import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.EvaluatorResult;
+import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.SliceSummary;
import java.util.*;
import java.util.concurrent.Callable;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorBatchInput.java
similarity index 96%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorBatchInput.java
index 2395be66..d38427a1 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorBatchInput.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.memory.selector.evaluator.data;
+package work.slhaf.partner.module.modules.memory.selector.evaluator.entity;
import lombok.Builder;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorInput.java
similarity index 81%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorInput.java
index 89b01f11..29ff6a96 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorInput.java
@@ -1,9 +1,9 @@
-package work.slhaf.partner.module.modules.memory.selector.evaluator.data;
+package work.slhaf.partner.module.modules.memory.selector.evaluator.entity;
import lombok.Builder;
import lombok.Data;
import work.slhaf.partner.api.chat.pojo.Message;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
import java.util.List;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorResult.java
similarity index 93%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorResult.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorResult.java
index 426ebb31..d7ab99ee 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorResult.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/EvaluatorResult.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.memory.selector.evaluator.data;
+package work.slhaf.partner.module.modules.memory.selector.evaluator.entity;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/SliceSummary.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/SliceSummary.java
similarity index 95%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/SliceSummary.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/SliceSummary.java
index 6335149d..92e36f2e 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/SliceSummary.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/entity/SliceSummary.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.memory.selector.evaluator.data;
+package work.slhaf.partner.module.modules.memory.selector.evaluator.entity;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java
index f4350063..43a33185 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java
@@ -7,21 +7,18 @@ import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule;
-import work.slhaf.partner.api.agent.factory.module.annotation.Init;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.api.chat.pojo.MetaMessage;
-import work.slhaf.partner.common.exception.callback.GlobalExceptionHandler;
+import work.slhaf.partner.core.cache.CacheCapability;
import work.slhaf.partner.core.cognation.CognationCapability;
-import work.slhaf.partner.core.submodule.memory.MemoryCapability;
-import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice;
-import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorInput;
-import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorMatchData;
-import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorResult;
-import work.slhaf.partner.runtime.exception.pojo.GlobalException;
+import work.slhaf.partner.core.memory.MemoryCapability;
+import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
+import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorInput;
+import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorMatchData;
+import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorResult;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
-import work.slhaf.partner.runtime.session.SessionManager;
import java.util.ArrayList;
import java.util.List;
@@ -40,22 +37,18 @@ public class MemorySelectExtractor extends AgentRunningSubModule chatMessages = new ArrayList<>();
- List metaMessages = sessionManager.getSingleMetaMessageMap().get(context.getUserId());
+ List metaMessages = cognationCapability.getSingleMetaMessageMap().get(context.getUserId());
if (metaMessages == null) {
- sessionManager.getSingleMetaMessageMap().put(context.getUserId(), new ArrayList<>());
+ cognationCapability.getSingleMetaMessageMap().put(context.getUserId(), new ArrayList<>());
} else {
for (MetaMessage metaMessage : metaMessages) {
chatMessages.add(metaMessage.getUserMessage());
@@ -65,7 +58,7 @@ public class MemorySelectExtractor extends AgentRunningSubModule activatedMemorySlices = cognationCapability.getActivatedSlices(context.getUserId());
+ List activatedMemorySlices = cacheCapability.getActivatedSlices(context.getUserId());
ExtractorInput extractorInput = ExtractorInput.builder()
.text(context.getInput())
.date(context.getDateTime().toLocalDate())
@@ -79,7 +72,6 @@ public class MemorySelectExtractor extends AgentRunningSubModule UPDATE_TRIGGER_INTERVAL && chatCount > 1) {
updateMemory();
cognationCapability.getChatMessages().clear();
// 重置MemoryId
- sessionManager.refreshMemoryId();
+ cognationCapability.refreshMemoryId();
log.info("[MemoryUpdater] 记忆更新: 自动触发");
}
Thread.sleep(SCHEDULED_UPDATE_INTERVAL);
@@ -133,7 +130,7 @@ public class MemoryUpdater extends PostRunningModule {
updateSingleChatSlices(singleMemorySummary);
// 更新多人场景下的记忆及相关的确定性记忆
updateMultiChatSlices(singleMemorySummary);
- sessionManager.resetLastUpdatedTime();
+ cognationCapability.resetLastUpdatedTime();
log.debug("[MemoryUpdater] 记忆更新流程结束...");
}
@@ -219,12 +216,12 @@ public class MemoryUpdater extends PostRunningModule {
private void updateSingleChatSlices(HashMap singleMemorySummary) {
log.debug("[MemoryUpdater] 单聊记忆更新流程开始...");
// 更新单聊记忆,同时从chatMessages中去掉单聊记忆
- Set userIdSet = new HashSet<>(sessionManager.getSingleMetaMessageMap().keySet());
+ Set userIdSet = new HashSet<>(cognationCapability.getSingleMetaMessageMap().keySet());
List> tasks = new ArrayList<>();
// 多人聊天?
AtomicInteger count = new AtomicInteger(0);
for (String id : userIdSet) {
- List messages = sessionManager.unpackAndClear(id);
+ List messages = cognationCapability.unpackAndClear(id);
tasks.add(() -> {
int thisCount = count.incrementAndGet();
log.debug("[MemoryUpdater] 单聊记忆[{}]更新: {}", thisCount, id);
@@ -262,7 +259,7 @@ public class MemoryUpdater extends PostRunningModule {
private MemorySlice getMemorySlice(String userId, SummarizeResult summarizeResult, List chatMessages) {
MemorySlice memorySlice = new MemorySlice();
// 设置 memoryId,timestamp
- memorySlice.setMemoryId(sessionManager.getCurrentMemoryId());
+ memorySlice.setMemoryId(cognationCapability.getCurrentMemoryId());
memorySlice.setTimestamp(System.currentTimeMillis());
// 补充信息
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java
index 989d3bdf..e075fbd1 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java
@@ -10,8 +10,8 @@ import work.slhaf.partner.api.agent.factory.module.annotation.Init;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
import work.slhaf.partner.api.chat.pojo.ChatResponse;
-import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeInput;
-import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeResult;
+import work.slhaf.partner.module.modules.memory.updater.summarizer.entity.SummarizeInput;
+import work.slhaf.partner.module.modules.memory.updater.summarizer.entity.SummarizeResult;
import java.util.ArrayList;
import java.util.List;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/entity/SummarizeInput.java
similarity index 96%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/entity/SummarizeInput.java
index 1c1d3d08..6fddd484 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/entity/SummarizeInput.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.memory.updater.summarizer.data;
+package work.slhaf.partner.module.modules.memory.updater.summarizer.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/entity/SummarizeResult.java
similarity index 95%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeResult.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/entity/SummarizeResult.java
index f3eae4db..5485149f 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeResult.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/entity/SummarizeResult.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.memory.updater.summarizer.data;
+package work.slhaf.partner.module.modules.memory.updater.summarizer.entity;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java
index 92ba1028..3d9f70ef 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java
@@ -4,8 +4,8 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCapability;
-import work.slhaf.partner.core.submodule.perceive.pojo.User;
+import work.slhaf.partner.core.perceive.PerceiveCapability;
+import work.slhaf.partner.core.perceive.pojo.User;
import work.slhaf.partner.module.common.module.PreRunningModule;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java
index 3dfc4bf3..65d4f08c 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java
@@ -9,11 +9,11 @@ import work.slhaf.partner.api.agent.factory.module.annotation.Init;
import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
import work.slhaf.partner.core.cognation.CognationCapability;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCapability;
-import work.slhaf.partner.core.submodule.perceive.pojo.User;
+import work.slhaf.partner.core.perceive.PerceiveCapability;
+import work.slhaf.partner.core.perceive.pojo.User;
import work.slhaf.partner.module.common.module.PostRunningModule;
import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.RelationExtractor;
-import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult;
+import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity.RelationExtractResult;
import work.slhaf.partner.module.modules.perceive.updater.static_extractor.StaticMemoryExtractor;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
@@ -29,7 +29,7 @@ import java.util.concurrent.locks.ReentrantLock;
@EqualsAndHashCode(callSuper = true)
@Slf4j
@Data
-@AgentModule(name = "perceive_updater", order = 8)
+@AgentModule(name = "perceive_updater", order = 7)
public class PerceiveUpdater extends PostRunningModule {
private static volatile PerceiveUpdater perceiveUpdater;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java
index 2cc4f187..91284b98 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java
@@ -10,10 +10,10 @@ import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunn
import work.slhaf.partner.api.chat.pojo.ChatResponse;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.core.cognation.CognationCapability;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCapability;
-import work.slhaf.partner.core.submodule.perceive.pojo.User;
-import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractInput;
-import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult;
+import work.slhaf.partner.core.perceive.PerceiveCapability;
+import work.slhaf.partner.core.perceive.pojo.User;
+import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity.RelationExtractInput;
+import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity.RelationExtractResult;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
import java.util.ArrayList;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractInput.java
similarity index 93%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractInput.java
index fef6b732..81f77c0c 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractInput.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo;
+package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity;
import lombok.Data;
import work.slhaf.partner.api.chat.pojo.Message;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractResult.java
similarity index 93%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractResult.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractResult.java
index e25695dc..286820ba 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractResult.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractResult.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo;
+package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java
index d0eaa684..2e01ba9f 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java
@@ -10,8 +10,8 @@ import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateM
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
import work.slhaf.partner.api.chat.pojo.ChatResponse;
import work.slhaf.partner.core.cognation.CognationCapability;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCapability;
-import work.slhaf.partner.module.modules.perceive.updater.static_extractor.data.StaticMemoryExtractInput;
+import work.slhaf.partner.core.perceive.PerceiveCapability;
+import work.slhaf.partner.module.modules.perceive.updater.static_extractor.entity.StaticMemoryExtractInput;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
import java.util.HashMap;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java
similarity index 94%
rename from Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java
rename to Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java
index 5fd6fde3..a35ca889 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java
@@ -1,4 +1,4 @@
-package work.slhaf.partner.module.modules.perceive.updater.static_extractor.data;
+package work.slhaf.partner.module.modules.perceive.updater.static_extractor.entity;
import lombok.Builder;
import lombok.Data;
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java
index e90a5b05..83fa6a67 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java
@@ -5,14 +5,12 @@ import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
-import work.slhaf.partner.api.agent.factory.module.annotation.Init;
import work.slhaf.partner.core.cognation.CognationCapability;
-import work.slhaf.partner.core.submodule.perceive.PerceiveCapability;
-import work.slhaf.partner.core.submodule.perceive.pojo.User;
+import work.slhaf.partner.core.perceive.PerceiveCapability;
+import work.slhaf.partner.core.perceive.pojo.User;
import work.slhaf.partner.module.common.module.PreRunningModule;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
import work.slhaf.partner.runtime.interaction.data.context.subcontext.CoreContext;
-import work.slhaf.partner.runtime.session.SessionManager;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -30,12 +28,6 @@ public class PreprocessExecutor extends PreRunningModule {
private CognationCapability cognationCapability;
@InjectCapability
private PerceiveCapability perceiveCapability;
- private SessionManager sessionManager;
-
- @Init
- public void init() {
- this.sessionManager = SessionManager.getInstance();
- }
@Override
public void doExecute(PartnerRunningFlowContext context) {
@@ -44,9 +36,9 @@ public class PreprocessExecutor extends PreRunningModule {
}
private void checkAndSetMemoryId() {
- String currentMemoryId = sessionManager.getCurrentMemoryId();
+ String currentMemoryId = cognationCapability.getCurrentMemoryId();
if (currentMemoryId == null || cognationCapability.getChatMessages().isEmpty()) {
- sessionManager.refreshMemoryId();
+ cognationCapability.refreshMemoryId();
}
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskEvaluator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskEvaluator.java
deleted file mode 100644
index cf7d4521..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskEvaluator.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package work.slhaf.partner.module.modules.task;
-
-import lombok.Data;
-
-@Data
-public class TaskEvaluator {
- private static TaskEvaluator taskEvaluator;
-
- private TaskEvaluator (){}
-
- public static TaskEvaluator getInstance() {
- if (taskEvaluator == null) {
- taskEvaluator = new TaskEvaluator();
- }
- return taskEvaluator;
- }
-
- protected String modelKey() {
- return "task_evaluator";
- }
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskExecutor.java
deleted file mode 100644
index 2ba09776..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskExecutor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package work.slhaf.partner.module.modules.task;
-
-import lombok.Data;
-import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
-
-@Data
-public class TaskExecutor {
-
- private static TaskExecutor taskExecutor;
- private InteractionThreadPoolExecutor executor;
- private TaskExecutor(){}
-
- public static TaskExecutor getInstance(){
- if (taskExecutor == null){
- taskExecutor = new TaskExecutor();
- taskExecutor.setExecutor(InteractionThreadPoolExecutor.getInstance());
- }
- return taskExecutor;
- }
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java
deleted file mode 100644
index c3c70166..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package work.slhaf.partner.module.modules.task;
-
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
-
-@Data
-@Slf4j
-public class TaskScheduler {
- private static TaskScheduler taskScheduler;
-
- private TaskScheduler() {
- }
-
- public static TaskScheduler getInstance() {
- if (taskScheduler == null) {
- taskScheduler = new TaskScheduler();
- log.info("TaskScheduler注册完毕...");
- }
-
- return taskScheduler;
- }
-
- public void execute(PartnerRunningFlowContext runningFlowContext) {
-
- }
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/data/TaskData.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/data/TaskData.java
deleted file mode 100644
index ff24197f..00000000
--- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/data/TaskData.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package work.slhaf.partner.module.modules.task.data;
-
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-@Data
-public class TaskData implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- private String id;
-
- /**
- * 执行类别: 即时任务/定时任务
- */
- private String executeType;
-
- /**
- * cron表达式,仅定时任务需要填写
- */
- private String cronStr;
- private String comment;
-
- public static class Constant {
- public static final String CURRENT = "current";
- public static final String SCHEDULE = "schedule";
- }
-}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java
index eb7db433..b50527a9 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java
@@ -3,9 +3,7 @@ package work.slhaf.partner.runtime.exception.pojo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import work.slhaf.partner.api.common.entity.PersistableObject;
-import work.slhaf.partner.core.cognation.CognationCore;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
-import work.slhaf.partner.runtime.session.SessionManager;
import java.io.Serial;
import java.util.HashMap;
@@ -20,7 +18,5 @@ public class GlobalExceptionData extends PersistableObject {
private String exceptionMessage;
protected HashMap context = PartnerRunningFlowContext.getInstance();
- protected SessionManager sessionManager = SessionManager.getInstance();
- protected CognationCore cognationCore = CognationCore.getInstance();
protected Long exceptionTime = System.currentTimeMillis();
}
diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java
index 2d6f28b0..a2223701 100644
--- a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java
+++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java
@@ -10,12 +10,20 @@ public class PartnerInteractionAdapter extends AgentInteractionAdapter> singleMetaMessageMap;
- private String currentMemoryId;
- private long lastUpdatedTime;
-
- public static SessionManager getInstance() {
- if (sessionManager == null) {
- synchronized (SessionManager.class) {
- if (sessionManager == null) {
- String id = ((PartnerAgentConfigManager) AgentConfigManager.INSTANCE).getConfig().getAgentId();
- Path filePath = Paths.get(STORAGE_DIR, id + ".session");
- if (Files.exists(filePath)) {
- sessionManager = deserialize(id);
- if (sessionManager == null){
- throw new ServiceLoadFailedException("SessionManager 加载失败");
- }
- } else {
- sessionManager = new SessionManager();
- sessionManager.setSingleMetaMessageMap(new HashMap<>());
- sessionManager.id = id;
- sessionManager.setShutdownHook();
- sessionManager.lastUpdatedTime = 0;
- }
- }
- }
- }
- return sessionManager;
- }
-
- private void setShutdownHook() {
- Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- try {
- sessionManager.serialize();
- log.info("[SessionManager] SessionManager 已保存");
- } catch (IOException e) {
- log.error("[SessionManager] 保存 SessionManager 失败: ", e);
- }
- }));
- }
-
- public void addMetaMessage(String userId, MetaMessage metaMessage) {
- log.debug("[SessionManager] 当前会话历史: {}", JSONObject.toJSONString(singleMetaMessageMap));
- if (singleMetaMessageMap.containsKey(userId)) {
- singleMetaMessageMap.get(userId).add(metaMessage);
- } else {
- singleMetaMessageMap.put(userId, new java.util.ArrayList<>());
- singleMetaMessageMap.get(userId).add(metaMessage);
- }
- log.debug("[SessionManager] 会话历史更新: {}", JSONObject.toJSONString(singleMetaMessageMap));
- }
-
- public List unpackAndClear(String userId) {
- List messages = new ArrayList<>();
- for (MetaMessage metaMessage : singleMetaMessageMap.get(userId)) {
- messages.add(metaMessage.getUserMessage());
- messages.add(metaMessage.getAssistantMessage());
- }
- singleMetaMessageMap.remove(userId);
- return messages;
- }
-
- public void refreshMemoryId() {
- currentMemoryId = UUID.randomUUID().toString();
- }
-
- public void serialize() throws IOException {
- //先写入到临时文件,如果正常写入,则覆盖正式文件;否则删除临时文件
- Path filePath = getFilePath(this.id + "-temp");
- Files.createDirectories(Path.of(STORAGE_DIR));
- try {
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath.toFile()));
- oos.writeObject(this);
- oos.close();
- Path path = getFilePath(this.id);
- Files.move(filePath, path, StandardCopyOption.REPLACE_EXISTING);
- log.info("[SessionManager] SessionManager 已保存到: {}", path);
- } catch (IOException e) {
- Files.delete(filePath);
- log.error("[SessionManager] 序列化保存失败: {}", e.getMessage());
- }
- }
-
- private static SessionManager deserialize(String id) {
- Path filePath = getFilePath(id);
- try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath.toFile()))) {
- SessionManager sessionManager = (SessionManager) ois.readObject();
- log.info("[SessionManager] SessionManager 已从文件加载: {}", filePath);
- return sessionManager;
- }catch (IOException | ClassNotFoundException e) {
- log.error("[SessionManager] 读取异常, 读取失败: ", e);
- return null;
- }
- }
-
- public void resetLastUpdatedTime() {
- lastUpdatedTime = System.currentTimeMillis();
- }
-
- private static Path getFilePath(String id) {
- return Paths.get(STORAGE_DIR, id + ".session");
- }
-}
-
-
diff --git a/Partner-Main/src/test/java/ReflectionTest.java b/Partner-Main/src/test/java/ReflectionTest.java
index c4a10305..d316e96d 100644
--- a/Partner-Main/src/test/java/ReflectionTest.java
+++ b/Partner-Main/src/test/java/ReflectionTest.java
@@ -1,9 +1,8 @@
import org.junit.jupiter.api.Test;
-import work.slhaf.partner.core.submodule.memory.MemoryCapability;
-import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult;
+import work.slhaf.partner.core.memory.MemoryCapability;
+import work.slhaf.partner.core.memory.pojo.MemoryResult;
import java.lang.reflect.Proxy;
-import java.util.function.Function;
public class ReflectionTest {
@@ -21,9 +20,5 @@ public class ReflectionTest {
return null;
});
memory.selectMemory("111");
-
- Function function = s -> {
- return s.length();
- };
}
}
diff --git a/Partner-Main/src/test/java/RegexTest.kt b/Partner-Main/src/test/java/RegexTest.kt
index 5c7171e3..bc97f9c2 100644
--- a/Partner-Main/src/test/java/RegexTest.kt
+++ b/Partner-Main/src/test/java/RegexTest.kt
@@ -1,53 +1,48 @@
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Test
+import java.lang.String.join
+import java.util.regex.Pattern
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+class RegexTest {
+ @Test
+ fun regexTest() {
+ val examples = arrayListOf(
+ "[小明(abc)] 我在开会] (te[]st)",
+ "[用户(昵)称(userId)] 你好[呀]",
+ "[测试账号(userId)] 这是一个(test(123))消息"
+ )
-public class RegexTest {
+ val pattern = Pattern.compile("\\[.*?\\(([^)]+)\\)\\]")
-// @Test
- public void regexTest(){
- String[] examples = {
- "[小明(abc)] 我在开会] (te[]st)",
- "[用户(昵)称(userId)] 你好[呀]",
- "[测试账号(userId)] 这是一个(test(123))消息"
- };
-
- Pattern pattern = Pattern.compile("\\[.*?\\(([^)]+)\\)\\]");
-
- for (String example : examples) {
- Matcher matcher = pattern.matcher(example);
+ for (example in examples) {
+ val matcher = pattern.matcher(example)
if (matcher.find()) {
- System.out.println("在 '" + example + "' 中找到 userId: " + matcher.group(1));
- System.out.println();
+ println("在 '$example' 中找到 userId: ${matcher.group(1)}")
+ println()
} else {
- System.out.println("在 '" + example + "' 中未找到 userId");
+ println("在 '$example' 中未找到 userId")
}
}
-
}
@Test
- public void topicPathFixTest(){
- String a = "xxxxx[awdohno][awdsjo]";
- a = fix(a);
- System.out.println(a);
+ fun topicPathFixTest() {
+ var a = "xxxxx[awdohno][awdsjo]"
+ a = fix(a)
+ println(a)
}
- private String fix(String topicPath) {
- String[] parts = topicPath.split("->");
- List cleanedParts = new ArrayList<>();
+ private fun fix(topicPath: String): String {
+ val parts = topicPath.split("->".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
+ val cleanedParts: MutableList = ArrayList()
- for (String part : parts) {
+ for (part in parts) {
// 修正正则表达式,正确移除 [xxx] 部分
- String cleaned = part.replaceAll("\\[[^\\]]*\\]", "").trim();
+ val cleaned = part.replace("\\[[^\\]]*\\]".toRegex(), "").trim { it <= ' ' }
if (!cleaned.isEmpty()) { // 忽略空字符串
- cleanedParts.add(cleaned);
+ cleanedParts.add(cleaned)
}
}
- return String.join("->", cleanedParts);
+ return join("->", cleanedParts)
}
}
diff --git a/Partner-Main/src/test/java/SelfAwarenessTest.java b/Partner-Main/src/test/java/SelfAwarenessTest.java
index b03aaab0..be2cc518 100644
--- a/Partner-Main/src/test/java/SelfAwarenessTest.java
+++ b/Partner-Main/src/test/java/SelfAwarenessTest.java
@@ -6,7 +6,7 @@ import work.slhaf.partner.api.chat.pojo.ChatResponse;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.common.util.ResourcesUtil;
import work.slhaf.partner.module.common.model.ModelConstant;
-import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorInput;
+import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorInput;
import java.time.LocalDate;
import java.util.ArrayList;
diff --git a/Partner-Main/src/test/java/timewheel/TimeWheelTest.kt b/Partner-Main/src/test/java/timewheel/TimeWheelTest.kt
new file mode 100644
index 00000000..6a76f691
--- /dev/null
+++ b/Partner-Main/src/test/java/timewheel/TimeWheelTest.kt
@@ -0,0 +1,20 @@
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+
+fun main(): Unit = runBlocking {
+ launch {
+ delay(1000)
+ println(11)
+ }
+ launch {
+ delay(1000)
+ println(22)
+ }
+ launch {
+ delay(1000)
+ println(33)
+ }
+ launch {
+ }
+}
diff --git a/Partner-Test-Demo/dependency-reduced-pom.xml b/Partner-Test-Demo/dependency-reduced-pom.xml
new file mode 100644
index 00000000..ccbb65ef
--- /dev/null
+++ b/Partner-Test-Demo/dependency-reduced-pom.xml
@@ -0,0 +1,55 @@
+
+
+
+ Partner
+ work.slhaf
+ 0.5.0
+
+ 4.0.0
+ Partner-Test-Demo
+
+
+
+ maven-jar-plugin
+ 3.2.0
+
+
+
+ work.slhaf.demo.AgentDemoApplication
+
+
+
+
+
+ maven-shade-plugin
+ 3.4.1
+
+
+ package
+
+ shade
+
+
+
+
+ work.slhaf.demo.AgentDemoApplication
+
+
+
+
+
+
+
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
+ 21
+ 21
+ UTF-8
+
+
diff --git a/Partner-Test-Demo/pom.xml b/Partner-Test-Demo/pom.xml
index 691c3e20..de2f801e 100644
--- a/Partner-Test-Demo/pom.xml
+++ b/Partner-Test-Demo/pom.xml
@@ -25,4 +25,49 @@
UTF-8
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.0
+
+
+
+ work.slhaf.demo.AgentDemoApplication
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.4.1
+
+
+ package
+
+ shade
+
+
+
+
+ work.slhaf.demo.AgentDemoApplication
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3245d701..a8783473 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,42 +18,79 @@
21
21
UTF-8
+ 2.2.0
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib-jdk8
+ ${kotlin.version}
+
+
+ org.jetbrains.kotlin
+ kotlin-test
+ ${kotlin.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.4.1
+
+
+ package
+
+ shade
+
+
+
+
+ work.slhaf.demo.AgentDemoApplication
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
- org.apache.maven.plugins
- maven-jar-plugin
- 3.2.0
-
-
-
- work.slhaf.demo.AgentDemoApplication
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 3.4.1
+ org.jetbrains.kotlin
+ kotlin-maven-plugin
+ ${kotlin.version}
- package
+ compile
+ compile
- shade
+ compile
+
+
+
+ test-compile
+ test-compile
+
+ test-compile
-
-
-
- work.slhaf.demo.AgentDemoApplication
-
-
-
+
+ ${maven.compiler.target}
+