From bbace28d7a9f967b8c244541b377e1f8d7c33b79 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Fri, 20 Feb 2026 17:22:54 +0800 Subject: [PATCH] refactor(project): normalize formatting and reorder class members across modules --- Partner-Common/pom.xml | 4 +- .../common/mcp/InProcessMcpTransport.java | 14 +- Partner-Core/dependency-reduced-pom.xml | 83 ++++----- Partner-Core/pom.xml | 4 +- .../partner/common/monitor/DebugMonitor.java | 16 +- .../partner/common/util/ResourcesUtil.java | 4 +- .../VectorClientExecuteException.java | 4 +- .../VectorClientLoadFailedException.java | 2 +- .../slhaf/partner/core/action/ActionCore.java | 29 ++- .../core/action/runner/LocalRunnerClient.java | 58 +++--- .../core/cognation/CognationCapability.java | 11 +- .../partner/core/cognation/CognationCore.java | 6 +- .../slhaf/partner/core/memory/MemoryCore.java | 10 +- .../core/memory/pojo/EvaluatedSlice.java | 2 +- .../core/memory/pojo/MemoryResult.java | 2 +- .../core/memory/pojo/node/MemoryNode.java | 14 +- .../core/memory/pojo/node/TopicNode.java | 2 +- .../core/perceive/PerceiveCapability.java | 3 + .../partner/core/perceive/pojo/User.java | 16 +- ...ostRunningAbstractAgentModuleAbstract.java | 2 + ...PreRunningAbstractAgentModuleAbstract.java | 6 + .../action/dispatcher/ActionDispatcher.java | 4 + .../dispatcher/executor/ActionCorrector.java | 5 + .../dispatcher/executor/ActionExecutor.java | 15 +- .../dispatcher/executor/ActionRepairer.java | 26 ++- .../executor/DynamicActionGenerator.java | 8 + .../dispatcher/executor/ParamsExtractor.java | 4 + .../action/interventor/ActionInterventor.java | 40 +++-- .../interventor/entity/InterventionType.java | 6 +- .../evaluator/InterventionEvaluator.java | 5 + .../recognizer/InterventionRecognizer.java | 5 + .../modules/action/planner/ActionPlanner.java | 34 +++- .../planner/confirmer/ActionConfirmer.java | 4 + .../planner/evaluator/ActionEvaluator.java | 7 + .../planner/extractor/ActionExtractor.java | 3 + .../module/modules/core/CoreModel.java | 2 +- .../memory/selector/MemorySelector.java | 9 + .../evaluator/SliceSelectEvaluator.java | 8 +- .../extractor/MemorySelectExtractor.java | 5 + .../modules/memory/updater/MemoryUpdater.java | 13 ++ .../updater/summarizer/MultiSummarizer.java | 5 + .../updater/summarizer/SingleSummarizer.java | 6 + .../updater/summarizer/TotalSummarizer.java | 6 +- .../perceive/selector/PerceiveSelector.java | 4 + .../perceive/updater/PerceiveUpdater.java | 6 + .../relation_extractor/RelationExtractor.java | 13 +- .../entity/RelationExtractInput.java | 2 +- .../StaticMemoryExtractor.java | 4 + .../entity/StaticMemoryExtractInput.java | 2 +- .../modules/process/PostprocessExecutor.java | 3 + .../modules/process/PreprocessExecutor.java | 7 + .../exception/pojo/GlobalException.java | 2 +- .../exception/pojo/GlobalExceptionData.java | 4 +- .../context/PartnerRunningFlowContext.java | 12 +- .../data/context/subcontext/CoreContext.java | 2 +- Partner-Core/src/main/resources/logback.xml | 4 +- .../java/experimental/ReflectionTest.java | 2 +- .../java/experimental/SelfAwarenessTest.java | 29 ++- .../java/experimental/ThreadPoolTest.java | 2 +- Partner-Framework/dependency-reduced-pom.xml | 55 +++--- Partner-Framework/pom.xml | 4 +- .../work/slhaf/partner/api/agent/Agent.java | 9 +- .../capability/CapabilityInjectFactory.java | 3 +- .../exception/DuplicateMethodException.java | 2 +- .../EmptyCapabilityHolderException.java | 2 +- .../UnMatchedCapabilityException.java | 2 +- .../ConfigUpdateFailedException.java | 2 +- .../ExternalModuleLoadFailedException.java | 2 +- .../factory/module/ModuleCheckFactory.java | 25 +-- .../factory/module/ModuleProxyFactory.java | 4 +- .../factory/module/ModuleRegisterFactory.java | 28 +-- .../abstracts/AbstractAgentRunningModule.java | 4 +- .../ModuleFactoryInitFailedException.java | 4 +- .../runtime/config/AgentConfigManager.java | 3 +- .../exception/AgentExceptionCallback.java | 1 + .../AgentRunningFailedException.java | 2 +- .../exception/GlobalExceptionHandler.java | 8 +- .../runtime/interaction/AgentGateway.java | 6 +- .../interaction/AgentInteractionAdapter.java | 2 +- .../interaction/data/AgentInputData.java | 2 +- .../interaction/data/AgentOutputData.java | 2 +- .../partner/api/agent/util/AgentUtil.java | 16 +- .../api/chat/constant/ChatConstant.java | 10 +- .../api/chat/pojo/PrimaryChatResponse.java | 12 +- .../java/module/MyModuleProxyInterceptor.java | 3 +- Partner-SandboxRunner/pom.xml | 2 +- Partner-Test-Demo/dependency-reduced-pom.xml | 107 +++++------ Partner-Test-Demo/pom.xml | 7 +- .../demo/service/TestCoordinateManager.java | 2 +- .../service/capability/ATestCapability.java | 1 + .../slhaf/demo/service/core/ATestCore.java | 4 +- .../slhaf/demo/service/core/BTestCore.java | 4 +- .../slhaf/demo/service/core/CTestCore.java | 4 +- .../src/test/java/InterfaceTest.java | 2 +- Partner-Test-Demo/src/test/java/TestA.java | 2 +- Partner-Test-Demo/src/test/java/TestImpl.java | 4 +- README.md | 54 +++--- dependency-reduced-pom.xml | 169 +++++++++--------- doc/architechture/memory.md | 3 + doc/architechture/perceive.md | 3 + doc/start/如何启动.md | 3 + pom.xml | 4 +- 102 files changed, 706 insertions(+), 492 deletions(-) diff --git a/Partner-Common/pom.xml b/Partner-Common/pom.xml index 1639ab13..1bb87d15 100644 --- a/Partner-Common/pom.xml +++ b/Partner-Common/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/Partner-Common/src/main/java/work/slhaf/partner/common/mcp/InProcessMcpTransport.java b/Partner-Common/src/main/java/work/slhaf/partner/common/mcp/InProcessMcpTransport.java index fd37dc53..f7c24c65 100644 --- a/Partner-Common/src/main/java/work/slhaf/partner/common/mcp/InProcessMcpTransport.java +++ b/Partner-Common/src/main/java/work/slhaf/partner/common/mcp/InProcessMcpTransport.java @@ -31,9 +31,6 @@ public final class InProcessMcpTransport implements McpClientTransport, McpState private volatile McpStatelessServerHandler serverHandler; - public record Pair(InProcessMcpTransport clientSide, InProcessMcpTransport serverSide) { - } - public static Pair pair() { InProcessMcpTransport client = new InProcessMcpTransport(); InProcessMcpTransport server = new InProcessMcpTransport(); @@ -126,15 +123,15 @@ public final class InProcessMcpTransport implements McpClientTransport, McpState return Mono.empty(); } - /* ====================================================== - * other boilerplate - * ====================================================== */ - @Override public void close() { McpClientTransport.super.close(); } + /* ====================================================== + * other boilerplate + * ====================================================== */ + @Override public Mono closeGracefully() { inbound.tryEmitComplete(); @@ -152,4 +149,7 @@ public final class InProcessMcpTransport implements McpClientTransport, McpState public List protocolVersions() { return McpClientTransport.super.protocolVersions(); } + + public record Pair(InProcessMcpTransport clientSide, InProcessMcpTransport serverSide) { + } } diff --git a/Partner-Core/dependency-reduced-pom.xml b/Partner-Core/dependency-reduced-pom.xml index a04bb1c9..e71fa3a4 100644 --- a/Partner-Core/dependency-reduced-pom.xml +++ b/Partner-Core/dependency-reduced-pom.xml @@ -1,43 +1,44 @@ - - - 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 - + + + 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-Core/pom.xml b/Partner-Core/pom.xml index de63ebbe..9b9e2082 100644 --- a/Partner-Core/pom.xml +++ b/Partner-Core/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/Partner-Core/src/main/java/work/slhaf/partner/common/monitor/DebugMonitor.java b/Partner-Core/src/main/java/work/slhaf/partner/common/monitor/DebugMonitor.java index d70d736c..a18672f2 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/common/monitor/DebugMonitor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/common/monitor/DebugMonitor.java @@ -6,8 +6,8 @@ import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; @Slf4j public class DebugMonitor { - private InteractionThreadPoolExecutor executor; private static DebugMonitor debugMonitor; + private InteractionThreadPoolExecutor executor; public static void initialize() { debugMonitor = new DebugMonitor(); @@ -15,6 +15,13 @@ public class DebugMonitor { debugMonitor.runMonitor(); } + public static DebugMonitor getInstance() { + if (debugMonitor == null) { + initialize(); + } + return debugMonitor; + } + private void runMonitor() { executor.execute(() -> { while (true) { @@ -26,11 +33,4 @@ public class DebugMonitor { } }); } - - public static DebugMonitor getInstance(){ - if (debugMonitor == null) { - initialize(); - } - return debugMonitor; - } } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java b/Partner-Core/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java index 11dcbec3..e33a3b5b 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java @@ -30,8 +30,8 @@ public class ResourcesUtil { return readPromptFromResources(SELF_AWARENESS_PATH); } - public static List loadPrompt(String modelKey,String promptType){ - return new ArrayList<>(readPromptFromResources(MODULE_PROMPT_PREFIX_PATH+promptType+"/"+modelKey+".json")); + public static List loadPrompt(String modelKey, String promptType) { + return new ArrayList<>(readPromptFromResources(MODULE_PROMPT_PREFIX_PATH + promptType + "/" + modelKey + ".json")); } private static List readPromptFromResources(String filePath) { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java index 9f7d7fb0..4cdfc5f2 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java @@ -3,7 +3,7 @@ package work.slhaf.partner.common.vector.exception; import work.slhaf.partner.api.agent.runtime.exception.AgentRuntimeException; public class VectorClientExecuteException extends AgentRuntimeException { - + public VectorClientExecuteException(String message) { super(message); } @@ -11,5 +11,5 @@ public class VectorClientExecuteException extends AgentRuntimeException { public VectorClientExecuteException(String message, Throwable cause) { super(message, cause); } - + } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java index 2c7afc41..2b4f1b4a 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java @@ -11,5 +11,5 @@ public class VectorClientLoadFailedException extends AgentRuntimeException { public VectorClientLoadFailedException(String message, Throwable cause) { super(message, cause); } - + } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java b/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java index 7e0d6a71..28fff56c 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/action/ActionCore.java @@ -34,33 +34,28 @@ import java.util.stream.Collectors; @Slf4j public class ActionCore extends PartnerCore { - /** - * 持久行动池 - */ - private CopyOnWriteArraySet actionPool = new CopyOnWriteArraySet<>(); - - /** - * 待确认任务,以userId区分不同用户,因为需要跨请求确认 - */ - private HashMap> pendingActions = new HashMap<>(); - - /** - * 语义缓存与行为倾向映射 - */ - private List actionCache = new ArrayList<>(); - private final Lock cacheLock = new ReentrantLock(); - // 由于当前的执行器逻辑实现,平台线程池大小不得小于 2,这里规定为最小为 4 private final ExecutorService platformExecutor = Executors .newFixedThreadPool(Math.max(Runtime.getRuntime().availableProcessors(), 4)); private final ExecutorService virtualExecutor = Executors.newVirtualThreadPerTaskExecutor(); - /** * 已存在的行动程序,键格式为‘::’,值为 MCP Server 通过 Resources 相关渠道传递的行动程序元信息 */ private final ConcurrentHashMap existedMetaActions = new ConcurrentHashMap<>(); private final List phaserRecords = new ArrayList<>(); + /** + * 持久行动池 + */ + private CopyOnWriteArraySet actionPool = new CopyOnWriteArraySet<>(); + /** + * 待确认任务,以userId区分不同用户,因为需要跨请求确认 + */ + private HashMap> pendingActions = new HashMap<>(); + /** + * 语义缓存与行为倾向映射 + */ + private List actionCache = new ArrayList<>(); private RunnerClient runnerClient; public ActionCore() throws IOException, ClassNotFoundException { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java b/Partner-Core/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java index 1e2c5a42..a3fd355f 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java @@ -119,6 +119,29 @@ public class LocalRunnerClient extends RunnerClient { setupShutdownHook(); } + private static @NotNull Path createActionDir(String baseName, Path baseDir) { + Path actionDir = null; + + // 原子地“抢占”目录名 + for (int i = 0; ; i++) { + String dirName = (i == 0) ? baseName : baseName + "(" + i + ")"; + Path candidate = baseDir.resolve(dirName); + + try { + Files.createDirectory(candidate); // 原子操作 + actionDir = candidate; + break; + } catch (FileAlreadyExistsException ignored) { + // 继续尝试下一个名字 + } catch (IOException e) { + throw new ActionSerializeFailedException( + "无法创建行动目录: " + candidate.toAbsolutePath(), e + ); + } + } + return actionDir; + } + private void registerCommonMcp() throws IOException { val ctx = new WatchContext(Path.of(MCP_SERVER_PATH), FileSystems.getDefault().newWatchService()); val common = new LocalWatchEventProcessor.Common(existedMetaActions, mcpClients, mcpClients.get(MCP_NAME_DESC), ctx); @@ -264,29 +287,6 @@ public class LocalRunnerClient extends RunnerClient { log.debug("临时序列化完毕"); } - private static @NotNull Path createActionDir(String baseName, Path baseDir) { - Path actionDir = null; - - // 原子地“抢占”目录名 - for (int i = 0; ; i++) { - String dirName = (i == 0) ? baseName : baseName + "(" + i + ")"; - Path candidate = baseDir.resolve(dirName); - - try { - Files.createDirectory(candidate); // 原子操作 - actionDir = candidate; - break; - } catch (FileAlreadyExistsException ignored) { - // 继续尝试下一个名字 - } catch (IOException e) { - throw new ActionSerializeFailedException( - "无法创建行动目录: " + candidate.toAbsolutePath(), e - ); - } - } - return actionDir; - } - @Override public void persistSerialize(MetaActionInfo metaActionInfo, ActionFileMetaData fileMetaData) { log.debug("行动程序持久序列化: {}", metaActionInfo); @@ -416,8 +416,8 @@ public class LocalRunnerClient extends RunnerClient { class BuildRegistry implements LocalWatchServiceBuild { private final Map, EventHandler> handlers = new HashMap<>(); - private InitLoader initLoader; private final WatchContext ctx; + private InitLoader initLoader; private boolean watchAll = false; private BuildRegistry(WatchContext ctx) { @@ -1082,17 +1082,17 @@ public class LocalRunnerClient extends RunnerClient { private final Map mcpConfigFileCache = new HashMap<>(); private final McpSyncClient descClient; - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - private boolean normalFile(File file) { - return file.exists() && file.isFile() && file.getName().endsWith(".json"); - } - private Common(ConcurrentHashMap existedMetaActions, Map mcpClients, McpSyncClient descClient, WatchContext ctx) { super(existedMetaActions, ctx); this.mcpClients = mcpClients; this.descClient = descClient; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean normalFile(File file) { + return file.exists() && file.isFile() && file.getName().endsWith(".json"); + } + /** * 该部分主要发生在扫描到新的MCP Server描述文件时出现的注册逻辑 * diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java b/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java index 4f9ac125..379fc5ad 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java @@ -13,14 +13,23 @@ import java.util.concurrent.locks.Lock; public interface CognationCapability { List getChatMessages(); + void cleanMessage(List messages); + Lock getMessageLock(); + void addMetaMessage(String userId, MetaMessage metaMessage); + List unpackAndClear(String userId); + void refreshMemoryId(); + void resetLastUpdatedTime(); + long getLastUpdatedTime(); - HashMap> getSingleMetaMessageMap(); + + HashMap> getSingleMetaMessageMap(); + String getCurrentMemoryId(); @ToCoordinated diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java b/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java index 675a7e6a..15d54248 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java @@ -49,17 +49,17 @@ public class CognationCore extends PartnerCore { } @CapabilityMethod - public long getLastUpdatedTime(){ + public long getLastUpdatedTime() { return lastUpdatedTime; } @CapabilityMethod - public HashMap> getSingleMetaMessageMap(){ + public HashMap> getSingleMetaMessageMap() { return singleMetaMessageMap; } @CapabilityMethod - public String getCurrentMemoryId(){ + public String getCurrentMemoryId() { return currentMemoryId; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java index 3bd4be03..2637e367 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/MemoryCore.java @@ -35,39 +35,31 @@ public class MemoryCore extends PartnerCore { @Serial private static final long serialVersionUID = 1L; - + private final Lock sliceInsertLock = new ReentrantLock(); /** * key: 根主题名称 value: 根主题节点 */ private HashMap topicNodes = new HashMap<>(); - /** * 用于存储已存在的主题列表,便于记忆查找, 使用根主题名称作为键, 子主题名称集合为值 * 该部分在'主题提取LLM'的system prompt中常驻 */ private HashMap /*子主题列表*/> existedTopics = new HashMap<>(); - /** * 临时的同一对话切片容器, 用于为同一对话内的不同切片提供更新上下文的场所 */ private HashMap> currentDateDialogSlices = new HashMap<>(); - /** * 记忆节点的日期索引, 同一日期内按照对话id区分 */ private HashMap> dateIndex = new HashMap<>(); - /** * 已被选中的切片时间戳集合,需要及时清理 */ private Set selectedSlices = new HashSet<>(); - private HashMap> userIndex = new HashMap<>(); - private MemoryCache cache = new MemoryCache(); - private final Lock sliceInsertLock = new ReentrantLock(); - public MemoryCore() throws IOException, ClassNotFoundException { } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java index a7ac48f4..c756bf44 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/EvaluatedSlice.java @@ -16,7 +16,7 @@ public class EvaluatedSlice extends PersistableObject { @Serial private static final long serialVersionUID = 1L; -// private List chatMessages; + // private List chatMessages; private LocalDate date; private String summary; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java index 39b33bec..cad42d7c 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/MemoryResult.java @@ -18,7 +18,7 @@ public class MemoryResult extends PersistableObject { private CopyOnWriteArrayList memorySliceResult; private List relatedMemorySliceResult; - public boolean isEmpty(){ + public boolean isEmpty() { boolean a = memorySliceResult == null || memorySliceResult.isEmpty(); boolean b = relatedMemorySliceResult == null || relatedMemorySliceResult.isEmpty(); return a && b; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java index f2e5dec2..fb75001f 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/MemoryNode.java @@ -51,10 +51,10 @@ public class MemoryNode extends PersistableObject implements Comparable loadMemorySliceList() throws IOException, ClassNotFoundException { //检查是否存在对应文件 - File file = new File(SLICE_DATA_DIR+this.getMemoryNodeId()+".slice"); - if (file.exists()){ + File file = new File(SLICE_DATA_DIR + this.getMemoryNodeId() + ".slice"); + if (file.exists()) { this.memorySliceList = deserialize(file); - }else { + } else { //逻辑正常的话,这部分应该不会出现,除非在insertMemory中进行save操作之前出现异常,中断了方法,但程序却没有结束 this.memorySliceList = new CopyOnWriteArrayList<>(); } @@ -62,12 +62,12 @@ public class MemoryNode extends PersistableObject implements Comparable deserialize(File file) throws IOException, ClassNotFoundException { - try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { return (CopyOnWriteArrayList) ois.readObject(); } } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java index 93d06a6f..34140c96 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/memory/pojo/node/TopicNode.java @@ -15,6 +15,6 @@ public class TopicNode extends PersistableObject { @Serial private static final long serialVersionUID = 1L; - private ConcurrentHashMap topicNodes = new ConcurrentHashMap<>(); + private ConcurrentHashMap topicNodes = new ConcurrentHashMap<>(); private CopyOnWriteArrayList memoryNodes = new CopyOnWriteArrayList<>(); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java b/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java index 502283c2..adbe17c9 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java @@ -6,7 +6,10 @@ import work.slhaf.partner.core.perceive.pojo.User; @Capability(value = "perceive") public interface PerceiveCapability { User getUser(String userInfo, String client); + User getUser(String id); + User addUser(String userInfo, String platform, String userNickName); + void updateUser(User user); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java b/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java index 5f970d10..0b9d4024 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/pojo/User.java @@ -26,20 +26,22 @@ public class User extends PersistableObject { // private HashMap events = new HashMap<>(); private List impressions = new ArrayList<>(); private List attitude = new ArrayList<>(); - private LinkedHashMap relationChange = new LinkedHashMap<>(); - private HashMap staticMemory = new HashMap<>(); + private LinkedHashMap relationChange = new LinkedHashMap<>(); + private HashMap staticMemory = new HashMap<>(); public void addInfo(String platform, String userInfo) { this.info.put(platform, userInfo); } - public void updateRelationChange(String changeReason){ - relationChange.put(LocalDate.now(),changeReason); + public void updateRelationChange(String changeReason) { + relationChange.put(LocalDate.now(), changeReason); } - public void updateRelationChange(LocalDate date, String changeReason){ - relationChange.put(date,changeReason); + + public void updateRelationChange(LocalDate date, String changeReason) { + relationChange.put(date, changeReason); } - public void updateRelationChange(LinkedHashMap tempRelationChange){ + + public void updateRelationChange(LinkedHashMap tempRelationChange) { relationChange.putAll(tempRelationChange); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PostRunningAbstractAgentModuleAbstract.java b/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PostRunningAbstractAgentModuleAbstract.java index 2499a639..ec475938 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PostRunningAbstractAgentModuleAbstract.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PostRunningAbstractAgentModuleAbstract.java @@ -12,6 +12,8 @@ public abstract class PostRunningAbstractAgentModuleAbstract extends AbstractAge } doExecute(context); } + public abstract void doExecute(PartnerRunningFlowContext context); + protected abstract boolean relyOnMessage(); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PreRunningAbstractAgentModuleAbstract.java b/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PreRunningAbstractAgentModuleAbstract.java index eaf28878..cd5566cf 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PreRunningAbstractAgentModuleAbstract.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/common/module/PreRunningAbstractAgentModuleAbstract.java @@ -5,6 +5,7 @@ import work.slhaf.partner.module.common.entity.AppendPromptData; import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import java.util.Map; + /** * 前置模块抽象类 */ @@ -16,19 +17,24 @@ public abstract class PreRunningAbstractAgentModuleAbstract extends AbstractAgen data.setAppendedPrompt(map); context.setAppendedPrompt(data); } + private synchronized void setActiveModule(PartnerRunningFlowContext context) { context.getCoreContext().addActiveModule(moduleName()); } + protected abstract Map getPromptDataMap(PartnerRunningFlowContext context); + /** * 用于在CoreModule接收到的模块Prompt中标识模块名称 */ protected abstract String moduleName(); + @Override public final void execute(PartnerRunningFlowContext context) { doExecute(context); // 子类实现差异化逻辑 setAppendedPrompt(context); // 通用逻辑 setActiveModule(context); // 通用逻辑 } + protected abstract void doExecute(PartnerRunningFlowContext context); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/ActionDispatcher.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/ActionDispatcher.java index 97cf1e38..40b9618b 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/ActionDispatcher.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/ActionDispatcher.java @@ -18,6 +18,7 @@ import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowCon import java.util.HashSet; import java.util.Set; import java.util.concurrent.ExecutorService; + public class ActionDispatcher extends PostRunningAbstractAgentModuleAbstract { @InjectCapability private ActionCapability actionCapability; @@ -26,10 +27,12 @@ public class ActionDispatcher extends PostRunningAbstractAgentModuleAbstract { @InjectModule private ActionScheduler actionScheduler; private ExecutorService executor; + @Init public void init() { executor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL); } + @Override public void doExecute(PartnerRunningFlowContext context) { // 只需要处理prepared action,因为pending action在用户确认后也将变为prepared action @@ -53,6 +56,7 @@ public class ActionDispatcher extends PostRunningAbstractAgentModuleAbstract { actionScheduler.execute(scheduledActions); }); } + @Override protected boolean relyOnMessage() { return false; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionCorrector.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionCorrector.java index 91044963..065a8b00 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionCorrector.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionCorrector.java @@ -1,10 +1,12 @@ package work.slhaf.partner.module.modules.action.dispatcher.executor; + import com.alibaba.fastjson2.JSONObject; import lombok.val; import work.slhaf.partner.api.agent.factory.module.abstracts.AbstractAgentModule; import work.slhaf.partner.api.agent.factory.module.abstracts.ActivateModel; import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.CorrectorInput; import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.CorrectorResult; + /** * 负责在单组行动执行后,根据行动意图与结果检查后续行动是否符合目的,必要时直接调整行动链,或发起自对话请求进行干预 */ @@ -15,6 +17,7 @@ public class ActionCorrector extends AbstractAgentModule.Sub { + private final AssemblyHelper assemblyHelper = new AssemblyHelper(); @InjectCapability private ActionCapability actionCapability; @InjectCapability @@ -42,13 +43,14 @@ public class ActionExecutor extends AbstractAgentModule.Sub(actionChain.keySet()); orderList.sort(Integer::compareTo); @@ -148,6 +154,7 @@ public class ActionExecutor extends AbstractAgentModule.Sub metaActions, PhaserRecord phaserRecord, String source) { AtomicBoolean accepting = new AtomicBoolean(true); AtomicInteger cursor = new AtomicInteger(); @@ -190,6 +197,7 @@ public class ActionExecutor extends AbstractAgentModule.Sub historyActionsResults, MetaAction action, String userId) { RepairerInput input = new RepairerInput(); MetaActionInfo metaActionInfo = actionCapability.loadMetaActionInfo(action.getKey()); @@ -256,6 +267,7 @@ public class ActionExecutor extends AbstractAgentModule.Sub historyActionResults, List additionalContext) { ExtractorInput input = new ExtractorInput(); @@ -266,6 +278,7 @@ public class ActionExecutor extends AbstractAgentModule.Sub @@ -41,18 +42,20 @@ import java.util.concurrent.atomic.AtomicInteger; * */ public class ActionRepairer extends AbstractAgentModule.Sub implements ActivateModel { + private final AssemblyHelper assemblyHelper = new AssemblyHelper(); @InjectCapability private ActionCapability actionCapability; @InjectCapability private CognationCapability cognationCapability; @InjectModule private DynamicActionGenerator dynamicActionGenerator; - private final AssemblyHelper assemblyHelper = new AssemblyHelper(); private RunnerClient runnerClient; + @Init void init() { runnerClient = actionCapability.runnerClient(); } + @Override public RepairerResult execute(RepairerInput data) { RepairerResult result; @@ -62,7 +65,7 @@ public class ActionRepairer extends AbstractAgentModule.Sub - handleActionGeneration(JSONObject.parseObject(repairerData.getData(), GeneratorInput.class)); + handleActionGeneration(JSONObject.parseObject(repairerData.getData(), GeneratorInput.class)); case ACTION_INVOCATION -> handleActionInvocation( JSONObject.parseObject(repairerData.getData(), new TypeReference>() { })); @@ -82,6 +85,7 @@ public class ActionRepairer extends AbstractAgentModule.Sub> interventionPrompt = new HashMap<>(); @InjectModule private InterventionRecognizer interventionRecognizer; @InjectModule @@ -43,13 +51,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp private CognationCapability cognationCapability; @InjectCapability private MemoryCapability memoryCapability; - private final AssemblyHelper assemblyHelper = new AssemblyHelper(); - private final PromptHelper promptHelper = new PromptHelper(); - /** - * 键: 本次调用uuid; - * 值:本次调用对应的prompt; - */ - private final Map> interventionPrompt = new HashMap<>(); + @Override protected void doExecute(PartnerRunningFlowContext context) { // 综合当前正在进行的行动链信息、用户交互历史、激活的记忆切片,尝试识别出是否存在行动干预意图 @@ -82,6 +84,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp promptHelper.setupInterventionIgnoredPrompt(uuid, executingDataList, preparedDataList); } } + private void handleInterventions(List interventionDataList, Map interventionDataMap) { val executor = actionCapability.getExecutor(ActionCore.ExecutorType.PLATFORM); executor.execute(() -> { @@ -92,6 +95,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp } }); } + private void invalidActionKeysFilter(List interventions) { List toRemove = new ArrayList<>(); for (EvaluatedInterventionData intervention : interventions) { @@ -111,6 +115,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp } interventions.removeAll(toRemove); } + private boolean checkRebuildType(List interventionData) { boolean hasRebuild = false; for (MetaIntervention meta : interventionData) { @@ -123,25 +128,36 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp } return true; } + @Override public String modelKey() { return "action_identifier"; } + @Override public boolean withBasicPrompt() { return false; } + @Override protected Map getPromptDataMap(PartnerRunningFlowContext context) { return interventionPrompt.remove(context.getUuid()); } + @Override protected String moduleName() { return "[行动干预识别模块]"; } + + @Override + public int order() { + return 2; + } + private final class AssemblyHelper { private AssemblyHelper() { } + private RecognizerInput buildRecognizerInput(String userId, String input) { RecognizerInput recognizerInput = new RecognizerInput(); recognizerInput.setInput(input); @@ -152,6 +168,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp recognizerInput.setPreparedActions(actionCapability.listActions(ExecutableAction.Status.PREPARE, userId).stream().toList()); return recognizerInput; } + private EvaluatorInput buildEvaluatorInput(RecognizerResult recognizerResult, String userId) { EvaluatorInput input = new EvaluatorInput(); input.setExecutingInterventions(recognizerResult.getExecutingInterventions()); @@ -161,9 +178,11 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp return input; } } + private final class PromptHelper { private PromptHelper() { } + private void setupInterventionIgnoredPrompt(String uuid, List executingDataList, List preparedDataList) { List total = Stream.concat(executingDataList.stream(), preparedDataList.stream()).toList(); JSONArray reasons = new JSONArray(); @@ -179,6 +198,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp "[干预行动] <将对已存在行动做出的行为>", "无行为")); } } + private void setupInterventionPrompt(String uuid, List executingDataList, List preparedDataList) { JSONArray contents = new JSONArray(); @@ -204,15 +224,11 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp "[干预内容] <将对已存在行动做出的行为>", contents.toString())); } } + private void setupNoInterventionPrompt(String uuid) { interventionPrompt.put(uuid, Map.of( "[识别状态] <是否识别到干预已存在行动的意图>", "未识别到干预意图", "[干预行动] <将对已存在行动做出的行为>", "无行动")); } } - - @Override - public int order() { - return 2; - } } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/entity/InterventionType.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/entity/InterventionType.java index 19164c1a..b2e7b154 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/entity/InterventionType.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/entity/InterventionType.java @@ -4,17 +4,17 @@ public enum InterventionType { /** * 追加行动: 追加至指定行动链序列之后才执行 */ - APPEND, + APPEND, /** * 插入行动: 指定行动链序列执行过程中即时新增并执行 */ - INSERT, + INSERT, /** * 重建行动: 重建指定行动链序列之后的所有行动内容 */ - REBUILD, + REBUILD, /** * 删除行动: 删除指定行动链序列上的指定行动单元 diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/evaluator/InterventionEvaluator.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/evaluator/InterventionEvaluator.java index 12ae3715..4207fb12 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/evaluator/InterventionEvaluator.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/interventor/evaluator/InterventionEvaluator.java @@ -23,6 +23,7 @@ public class InterventionEvaluator extends AbstractAgentModule.Sub evaluatedDataList, Map interventionMap, EvaluatorInput input, ExecutorService executor, CountDownLatch latch) { interventionMap.forEach((tendency, actionData) -> executor.execute(() -> { try { @@ -64,6 +66,7 @@ public class InterventionEvaluator extends AbstractAgentModule.Sub recentMessages, List activatedSlices, ExecutableAction executableAction, String tendency) { JSONObject json = new JSONObject(); @@ -73,10 +76,12 @@ public class InterventionEvaluator extends AbstractAgentModule.Sub implements ActivateModel { @InjectCapability private ActionCapability actionCapability; + @Override public RecognizerResult execute(RecognizerInput input) { // 获取必须数据 @@ -41,6 +42,7 @@ public class InterventionRecognizer extends AbstractAgentModule.Sub interventionsMap, List actions, ExecutorService executor, RecognizerInput input, CountDownLatch latch) { for (ExecutableAction data : actions) { executor.execute(() -> { @@ -61,6 +63,7 @@ public class InterventionRecognizer extends AbstractAgentModule.Sub evaluatorResults, String input, ExtractorResult extractorResult) { if (!VectorClient.status) { @@ -107,6 +112,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { actionCapability.updateTendencyCache(data); }); } + /** * 待确认行动的判断任务 * @@ -121,6 +127,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { return null; }); } + private void setupConfirmedActionInfo(PartnerRunningFlowContext context, ConfirmerResult result) { // TODO 需考虑未确认任务的失效或者拒绝时机,在action core中实现 List uuids = result.getUuids(); @@ -134,6 +141,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { } } } + private void putActionData(List evaluatorResults, PartnerRunningFlowContext context) { for (EvaluatorResult evaluatorResult : evaluatorResults) { ExecutableAction executableAction = assemblyHelper.buildActionData(evaluatorResult, context.getUserId()); @@ -144,6 +152,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { } } } + @Override protected Map getPromptDataMap(PartnerRunningFlowContext context) { HashMap map = new HashMap<>(); @@ -152,6 +161,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { setupPreparedActions(map, userId); return map; } + private void setupPendingActions(HashMap map, String userId) { List executableActionData = actionCapability.listPendingAction(userId); if (executableActionData == null || executableActionData.isEmpty()) { @@ -162,6 +172,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { map.put("[待确认行动 " + (i + 1) + " ] <等待用户确认的行动信息>", generateActionStr(executableActionData.get(i))); } } + private void setupPreparedActions(HashMap map, String userId) { val preparedActions = actionCapability.listActions(ExecutableAction.Status.PREPARE, userId).stream().toList(); if (preparedActions.isEmpty()) { @@ -172,18 +183,27 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { map.put("[预备行动 " + (i + 1) + " ] <预备执行或放入计划池的行动信息>", generateActionStr(preparedActions.get(i))); } } + private String generateActionStr(ExecutableAction executableAction) { return "<行动倾向>" + " : " + executableAction.getTendency() + "<行动原因>" + " : " + executableAction.getReason() + "<工具描述>" + " : " + executableAction.getDescription(); } + @Override protected String moduleName() { return "[行动模块]"; } + + @Override + public int order() { + return 2; + } + private final class ActionAssemblyHelper { private ActionAssemblyHelper() { } + private ExtractorInput buildExtractorInput(PartnerRunningFlowContext context) { ExtractorInput input = new ExtractorInput(); input.setInput(context.getInput()); @@ -197,6 +217,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { input.setRecentMessages(recentMessages); return input; } + private EvaluatorInput buildEvaluatorInput(ExtractorResult extractorResult, String userId) { EvaluatorInput input = new EvaluatorInput(); input.setTendencies(extractorResult.getTendencies()); @@ -205,6 +226,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { input.setActivatedSlices(memoryCapability.getActivatedSlices(userId)); return input; } + private ExecutableAction buildActionData(EvaluatorResult evaluatorResult, String userId) { Map> actionChain = getActionChain(evaluatorResult); return switch (evaluatorResult.getType()) { @@ -226,6 +248,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { ); }; } + private @NotNull Map> getActionChain(EvaluatorResult evaluatorResult) { Map> actionChain = new HashMap<>(); Map> primaryActionChain = evaluatorResult.getPrimaryActionChain(); @@ -238,6 +261,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { }); return actionChain; } + private void fixDependencies(Map> primaryActionChain) { // 先将 primaryActionChain 的节点序号修正为从1开始依次增大 fixOrder(primaryActionChain); @@ -280,6 +304,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { fixedOrders.addAll(tempOrders); } while (fixed.getAndSet(false)); } + private void fixOrder(Map> primaryActionChain) { Map> tempChain = new HashMap<>(primaryActionChain); primaryActionChain.clear(); @@ -288,6 +313,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { primaryActionChain.put(i, tempChain.get(i)); } } + private boolean checkDependenciesExist(int lastOrder, List preActions, Map> primaryActionChain) { if (!primaryActionChain.containsKey(lastOrder)) { @@ -297,6 +323,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { //noinspection SlowListContainsAll return existActions.containsAll(preActions); } + private ConfirmerInput buildConfirmerInput(PartnerRunningFlowContext context) { ConfirmerInput confirmerInput = new ConfirmerInput(); confirmerInput.setInput(context.getInput()); @@ -305,9 +332,4 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract { return confirmerInput; } } - - @Override - public int order() { - return 2; - } } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java index 8464f900..73260c99 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java @@ -22,6 +22,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractJson; public class ActionConfirmer extends AbstractAgentModule.Sub implements ActivateModel { @InjectCapability private ActionCapability actionCapability; + @Override public ConfirmerResult execute(ConfirmerInput data) { List executableActionList = data.getExecutableActionData(); @@ -53,6 +54,7 @@ public class ActionConfirmer extends AbstractAgentModule.Sub recentMessages) { JSONObject prompt = new JSONObject(); prompt.put("[用户输入]", input); @@ -65,10 +67,12 @@ public class ActionConfirmer extends AbstractAgentModule.Sub> tasks = getTasks(batchInputs); return executor.invokeAllAndReturn(tasks); } + private List> getTasks(List batchInputs) { List> list = new ArrayList<>(); for (EvaluatorBatchInput batchInput : batchInputs) { @@ -53,6 +56,7 @@ public class ActionEvaluator extends AbstractAgentModule.Sub buildEvaluatorBatchInput(EvaluatorInput data) { List list = new ArrayList<>(); for (String tendency : data.getTendencies()) { @@ -66,6 +70,7 @@ public class ActionEvaluator extends AbstractAgentModule.Sub implements ActivateModel { @InjectCapability private ActionCapability actionCapability; + @Override public ExtractorResult execute(ExtractorInput data) { ExtractorResult result = new ExtractorResult(); @@ -32,10 +33,12 @@ public class ActionExtractor extends AbstractAgentModule.Sub appendedMessages = new ArrayList<>(); @Init - public void init(){ + public void init() { List chatMessages = this.cognationCapability.getChatMessages(); this.getModel().getChatMessages().addAll(chatMessages); diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java index 0a7c2a0a..cb241ef3 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java @@ -22,6 +22,7 @@ import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowCon import java.time.LocalDate; import java.util.*; + @EqualsAndHashCode(callSuper = true) @Data public class MemorySelector extends PreRunningAbstractAgentModuleAbstract { @@ -33,6 +34,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract { private SliceSelectEvaluator sliceSelectEvaluator; @InjectModule private MemorySelectExtractor memorySelectExtractor; + @Override public void doExecute(PartnerRunningFlowContext runningFlowContext) { String userId = runningFlowContext.getUserId(); @@ -45,6 +47,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract { } setModuleContextRecall(runningFlowContext); } + private List selectAndEvaluateMemory(PartnerRunningFlowContext runningFlowContext, ExtractorResult extractorResult) { log.debug("[MemorySelector] 触发记忆回溯..."); //查找切片 @@ -62,6 +65,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract { log.debug("[MemorySelector] 切片评估结果: {}", JSONObject.toJSONString(memorySlices)); return memorySlices; } + private void setModuleContextRecall(PartnerRunningFlowContext runningFlowContext) { String userId = runningFlowContext.getUserId(); boolean recall = memoryCapability.hasActivatedSlices(userId); @@ -70,6 +74,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract { runningFlowContext.getModuleContext().getExtraContext().put("recall_count", memoryCapability.getActivatedSlicesSize(userId)); } } + private void setMemoryResultList(List memoryResultList, List matches, String userId) { for (ExtractorMatchData match : matches) { try { @@ -97,21 +102,25 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract { memoryResult.getRelatedMemorySliceResult().removeIf(m -> removeOrNot(m, userId)); } } + private void removeDuplicateSlice(MemoryResult memoryResult) { Collection values = memoryCapability.getDialogMap().values(); memoryResult.getRelatedMemorySliceResult().removeIf(m -> values.contains(m.getSummary())); memoryResult.getMemorySliceResult().removeIf(m -> values.contains(m.getMemorySlice().getSummary())); } + private boolean removeOrNot(MemorySlice memorySlice, String userId) { if (memorySlice.isPrivate()) { return memorySlice.getStartUserId().equals(userId); } return false; } + @Override public String moduleName() { return "[记忆模块]"; } + @Override protected Map getPromptDataMap(PartnerRunningFlowContext context) { HashMap map = new HashMap<>(); diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java index 5d49ee14..458eb97d 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java @@ -25,14 +25,17 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import static work.slhaf.partner.common.util.ExtractUtil.extractJson; + @EqualsAndHashCode(callSuper = true) @Data public class SliceSelectEvaluator extends AbstractAgentModule.Sub> implements ActivateModel { private InteractionThreadPoolExecutor executor; + @Init public void init() { executor = InteractionThreadPoolExecutor.getInstance(); } + @Override public List execute(EvaluatorInput evaluatorInput) { log.debug("[SliceSelectEvaluator] 切片评估模块开始..."); @@ -78,8 +81,9 @@ public class SliceSelectEvaluator extends AbstractAgentModule.Sub temp = queue.stream().toList(); - return new ArrayList<>(temp); + return new ArrayList<>(temp); } + private void setSliceSummaryList(MemoryResult memoryResult, List sliceSummaryList, Map map) { for (MemorySliceResult memorySliceResult : memoryResult.getMemorySliceResult()) { SliceSummary sliceSummary = new SliceSummary(); @@ -109,9 +113,11 @@ public class SliceSelectEvaluator extends AbstractAgentModule.Sub @@ -30,6 +31,7 @@ public class MemorySelectExtractor extends AbstractAgentModule.Sub { if (m.getType().equals(ExtractorMatchData.Constant.DATE)) { @@ -79,10 +82,12 @@ public class MemorySelectExtractor extends AbstractAgentModule.Sub m.getText().split("->")[0].isEmpty()); return extractorResult; } + @Override public String modelKey() { return "topic_extractor"; } + @Override public boolean withBasicPrompt() { return false; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java index 47fa6aac..61fd2e9f 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java @@ -27,6 +27,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicInteger; import static work.slhaf.partner.common.util.ExtractUtil.extractUserId; + @EqualsAndHashCode(callSuper = true) @Data public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { @@ -52,11 +53,13 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { * 用于临时存储完整对话记录,在MemoryManager的分离后 */ private List tempMessage; + @Init public void init() { executor = InteractionThreadPoolExecutor.getInstance(); setScheduledUpdater(); } + private void setScheduledUpdater() { executor.execute(() -> { log.info("[MemoryUpdater] 记忆自动更新线程启动"); @@ -80,6 +83,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { log.info("[MemoryUpdater] 记忆自动更新线程结束"); }); } + @Override public void doExecute(PartnerRunningFlowContext context) { if (context.isFinished()) { @@ -109,10 +113,12 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { } }); } + @Override protected boolean relyOnMessage() { return true; } + private void updateMemory() { log.debug("[MemoryUpdater] 记忆更新流程开始..."); tempMessage = new ArrayList<>(cognationCapability.getChatMessages()); @@ -124,6 +130,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { cognationCapability.resetLastUpdatedTime(); log.debug("[MemoryUpdater] 记忆更新流程结束..."); } + private void updateMultiChatSlices(HashMap singleMemorySummary) { // 此时chatMessages中不再包含单聊记录,直接执行摘要以及切片插入 // 对剩下的多人聊天记录进行进行摘要 @@ -160,6 +167,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { }; executor.invokeAll(List.of(task)); } + private void cleanMessage(List chatMessages) { // 清理时间标识 for (Message message : chatMessages) { @@ -170,6 +178,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { message.setContent(message.getContent().replace("\r\n**" + time, "")); } } + private void clearChatMessages() { // 不全部清空,保留一部分输入防止上下文割裂 cognationCapability.getMessageLock().lock(); @@ -179,6 +188,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { cognationCapability.getChatMessages().addAll(0, temp); cognationCapability.getMessageLock().unlock(); } + private void setInvolvedUserId(String startUserId, MemorySlice memorySlice, List chatMessages) { for (Message chatMessage : chatMessages) { if (chatMessage.getRole().equals(ChatConstant.Character.ASSISTANT)) { @@ -196,6 +206,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { memorySlice.getInvolvedUserIds().add(userId); } } + private void updateSingleChatSlices(HashMap singleMemorySummary) { log.debug("[MemoryUpdater] 单聊记忆更新流程开始..."); // 更新单聊记忆,同时从chatMessages中去掉单聊记忆 @@ -232,10 +243,12 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract { executor.invokeAll(tasks); log.debug("[MemoryUpdater] 单聊记忆更新结束..."); } + private SummarizeResult summarize(SummarizeInput summarizeInput) { singleSummarizer.execute(summarizeInput.getChatMessages()); return multiSummarizer.execute(summarizeInput); } + private MemorySlice getMemorySlice(String userId, SummarizeResult summarizeResult, List chatMessages) { MemorySlice memorySlice = new MemorySlice(); // 设置 memoryId,timestamp diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java index 4d76fadd..57ee1569 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java @@ -16,6 +16,7 @@ import java.util.List; import static work.slhaf.partner.common.util.ExtractUtil.extractJson; import static work.slhaf.partner.common.util.ExtractUtil.fixTopicPath; + @EqualsAndHashCode(callSuper = true) @Data public class MultiSummarizer extends AbstractAgentModule.Sub implements ActivateModel { @@ -23,6 +24,7 @@ public class MultiSummarizer extends AbstractAgentModule.Sub, Void> implements ActivateModel { private InteractionThreadPoolExecutor executor; + @Init public void init() { this.executor = InteractionThreadPoolExecutor.getInstance(); } + @Override public Void execute(List chatMessages) { log.debug("[MemorySummarizer] 长文本摘要开始..."); @@ -47,6 +50,7 @@ public class SingleSummarizer extends AbstractAgentModule.Sub, Voi log.debug("[MemorySummarizer] 长文本摘要结束"); return null; } + private String singleExecute(String primaryContent) { try { ChatResponse response = this.singleChat(primaryContent); @@ -56,10 +60,12 @@ public class SingleSummarizer extends AbstractAgentModule.Sub, Voi return primaryContent; } } + @Override public String modelKey() { return "single_summarizer"; } + @Override public boolean withBasicPrompt() { return false; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java index b31b6bc6..abb9701e 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java @@ -12,6 +12,7 @@ import work.slhaf.partner.api.chat.pojo.ChatResponse; import java.util.HashMap; import static work.slhaf.partner.common.util.ExtractUtil.extractJson; + @EqualsAndHashCode(callSuper = true) @Data public class TotalSummarizer extends AbstractAgentModule.Sub, String> implements ActivateModel { @@ -19,14 +20,17 @@ public class TotalSummarizer extends AbstractAgentModule.Sub singleMemorySummary){ + + public String execute(HashMap singleMemorySummary) { ChatResponse response = this.singleChat(JSONUtil.toJsonPrettyStr(singleMemorySummary)); return JSONObject.parseObject(extractJson(response.getMessage())).getString("content"); } + @Override public String modelKey() { return "total_summarizer"; } + @Override public boolean withBasicPrompt() { return true; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java index 616c7cc3..674fdb8f 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java @@ -9,13 +9,16 @@ import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowCon import java.util.HashMap; import java.util.Map; + @Setter public class PerceiveSelector extends PreRunningAbstractAgentModuleAbstract { @InjectCapability private PerceiveCapability perceiveCapability; + @Override public void doExecute(PartnerRunningFlowContext context) { } + @Override protected Map getPromptDataMap(PartnerRunningFlowContext context) { HashMap map = new HashMap<>(); @@ -26,6 +29,7 @@ public class PerceiveSelector extends PreRunningAbstractAgentModuleAbstract { map.put("[静态记忆] <你关于最新聊天用户的静态记忆>", user.getStaticMemory().toString()); return map; } + @Override public String moduleName() { return "[感知模块]"; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java index 3fbc5e1e..986533b6 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.locks.ReentrantLock; + /** * 感知更新,异步 */ @@ -35,10 +36,12 @@ public class PerceiveUpdater extends PostRunningAbstractAgentModuleAbstract { @InjectModule private StaticMemoryExtractor staticMemoryExtractor; private InteractionThreadPoolExecutor executor; + @Init public void init() { this.executor = InteractionThreadPoolExecutor.getInstance(); } + @Override public void doExecute(PartnerRunningFlowContext context) { executor.execute(() -> { @@ -58,10 +61,12 @@ public class PerceiveUpdater extends PostRunningAbstractAgentModuleAbstract { perceiveCapability.updateUser(user); }); } + @Override protected boolean relyOnMessage() { return true; } + private void runRelationExtractorAction(PartnerRunningFlowContext context, ReentrantLock userLock, User user) { RelationExtractResult relationExtractResult = relationExtractor.execute(context); userLock.lock(); @@ -71,6 +76,7 @@ public class PerceiveUpdater extends PostRunningAbstractAgentModuleAbstract { user.updateRelationChange(relationExtractResult.getRelationChangeHistory()); userLock.unlock(); } + private void runStaticExtractorAction(PartnerRunningFlowContext context, ReentrantLock userLock, User user) { HashMap newStaticMemory = staticMemoryExtractor.execute(context); userLock.lock(); diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java index 1bdb065e..51e5bd6e 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java @@ -18,6 +18,7 @@ import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowCon import java.util.ArrayList; import java.util.HashMap; import java.util.List; + @EqualsAndHashCode(callSuper = true) @Data public class RelationExtractor extends AbstractAgentModule.Sub implements ActivateModel { @@ -26,8 +27,9 @@ public class RelationExtractor extends AbstractAgentModule.Sub tempMessages; + @Override - public RelationExtractResult execute(PartnerRunningFlowContext context){ + public RelationExtractResult execute(PartnerRunningFlowContext context) { tempMessages = new ArrayList<>(cognationCapability.getChatMessages()); String userId = context.getUserId(); RelationExtractInput input = getRelationInput(userId); @@ -36,6 +38,7 @@ public class RelationExtractor extends AbstractAgentModule.Sub map = new HashMap<>(); + HashMap map = new HashMap<>(); User user = perceiveCapability.getUser(userId); - map.put("[用户昵称] <用户的昵称信息>",user.getNickName()); + map.put("[用户昵称] <用户的昵称信息>", user.getNickName()); map.put("[关系] <你与用户的关系>", user.getRelation()); map.put("[态度] <你对于用户的态度>", user.getAttitude().toString()); map.put("[印象] <你对于用户的印象>", user.getImpressions().toString()); @@ -61,10 +66,12 @@ public class RelationExtractor extends AbstractAgentModule.Sub primaryUserPerceive; + private HashMap primaryUserPerceive; private List chatMessages; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java index 3f90534e..09238985 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java @@ -14,6 +14,7 @@ import work.slhaf.partner.module.modules.perceive.updater.static_extractor.entit import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import java.util.HashMap; + @EqualsAndHashCode(callSuper = true) @Data public class StaticMemoryExtractor extends AbstractAgentModule.Sub> implements ActivateModel { @@ -21,6 +22,7 @@ public class StaticMemoryExtractor extends AbstractAgentModule.Sub execute(PartnerRunningFlowContext context) { StaticMemoryExtractInput input = StaticMemoryExtractInput.builder() @@ -34,10 +36,12 @@ public class StaticMemoryExtractor extends AbstractAgentModule.Sub result.put(k, (String) v)); return result; } + @Override public String modelKey() { return "static_extractor"; } + @Override public boolean withBasicPrompt() { return true; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java index a35ca889..846e1804 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java @@ -12,5 +12,5 @@ import java.util.Map; public class StaticMemoryExtractInput { private String userId; private List messages; - private Map existedStaticMap; + private Map existedStaticMap; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java index 3da55946..e72af2cd 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java @@ -1,16 +1,19 @@ package work.slhaf.partner.module.modules.process; + import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; import work.slhaf.partner.api.agent.factory.module.abstracts.AbstractAgentModule; import work.slhaf.partner.core.cognation.CognationCapability; import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; + @EqualsAndHashCode(callSuper = true) @Data public class PostprocessExecutor extends AbstractAgentModule.Running { private static final int POST_PROCESS_TRIGGER_ROLL_LIMIT = 36; @InjectCapability private CognationCapability cognationCapability; + @Override public void execute(PartnerRunningFlowContext context) { boolean trigger = cognationCapability.getChatMessages().size() >= POST_PROCESS_TRIGGER_ROLL_LIMIT; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java index 7273518c..f072846f 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java @@ -14,6 +14,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; + @EqualsAndHashCode(callSuper = true) @Data public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract { @@ -21,17 +22,20 @@ public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract { private CognationCapability cognationCapability; @InjectCapability private PerceiveCapability perceiveCapability; + @Override public void doExecute(PartnerRunningFlowContext context) { checkAndSetMemoryId(); getInteractionContext(context); } + private void checkAndSetMemoryId() { String currentMemoryId = cognationCapability.getCurrentMemoryId(); if (currentMemoryId == null || cognationCapability.getChatMessages().isEmpty()) { cognationCapability.refreshMemoryId(); } } + private void getInteractionContext(PartnerRunningFlowContext context) { log.debug("[PreprocessExecutor] 预处理原始输入: {}", context); User user = perceiveCapability.getUser(context.getUserInfo(), context.getPlatform()); @@ -46,6 +50,7 @@ public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract { setCoreContext(context); log.debug("[PreprocessExecutor] 预处理结果: {}", context); } + @Override protected Map getPromptDataMap(PartnerRunningFlowContext context) { HashMap map = new HashMap<>(); @@ -57,10 +62,12 @@ public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract { map.put("其他", "历史对话中将在用户消息的最后一行标注时间"); return map; } + @Override protected String moduleName() { return "[基础模块]"; } + private void setCoreContext(PartnerRunningFlowContext context) { CoreContext coreContext = context.getCoreContext(); coreContext.setText(context.getInput()); diff --git a/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java b/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java index 2a699c5e..218ef1f9 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java @@ -15,7 +15,7 @@ public class GlobalException extends RuntimeException { super(message); try { this.data = new GlobalExceptionData(); - } catch (Exception e) { + } catch (Exception e) { log.error("[GlobalException] 捕获异常, 获取数据失败"); } } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java b/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java index b50527a9..28f27482 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java @@ -14,9 +14,7 @@ public class GlobalExceptionData extends PersistableObject { @Serial private static final long serialVersionUID = 1L; - - private String exceptionMessage; - protected HashMap context = PartnerRunningFlowContext.getInstance(); protected Long exceptionTime = System.currentTimeMillis(); + private String exceptionMessage; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java b/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java index 74c985ab..fafc434f 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java @@ -42,23 +42,23 @@ public class PartnerRunningFlowContext extends RunningFlowContext { activeContext.put(userId, this); } - public void setFinished(boolean finished) { - moduleContext.setFinished(finished); + public static HashMap getInstance() { + return activeContext; } public boolean isFinished() { return moduleContext.isFinished(); } + public void setFinished(boolean finished) { + moduleContext.setFinished(finished); + } + public void setAppendedPrompt(AppendPromptData appendedPrompt) { List appendPromptList = moduleContext.getAppendedPrompt(); appendPromptList.addFirst(appendedPrompt); } - public static HashMap getInstance() { - return activeContext; - } - public void clearUp() { activeContext.remove(userId); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java b/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java index 328233ad..23ed87d0 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java @@ -30,7 +30,7 @@ public class CoreContext extends PersistableObject { activeModules.put(moduleName, false); } - public void activateModule(String moduleName){ + public void activateModule(String moduleName) { activeModules.put(moduleName, true); } } diff --git a/Partner-Core/src/main/resources/logback.xml b/Partner-Core/src/main/resources/logback.xml index b84fc8dd..dbf03bcc 100644 --- a/Partner-Core/src/main/resources/logback.xml +++ b/Partner-Core/src/main/resources/logback.xml @@ -20,7 +20,7 @@ - - + + \ No newline at end of file diff --git a/Partner-Core/src/test/java/experimental/ReflectionTest.java b/Partner-Core/src/test/java/experimental/ReflectionTest.java index da543cf8..0b95a9ce 100644 --- a/Partner-Core/src/test/java/experimental/ReflectionTest.java +++ b/Partner-Core/src/test/java/experimental/ReflectionTest.java @@ -15,7 +15,7 @@ public class ReflectionTest { @Test public void proxyTest() { MemoryCapability memory = (MemoryCapability) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{MemoryCapability.class}, (proxy, method, args) -> { - if ("selectMemory".equals(method.getName())){ + if ("selectMemory".equals(method.getName())) { System.out.println(111); return new MemoryResult(); } diff --git a/Partner-Core/src/test/java/experimental/SelfAwarenessTest.java b/Partner-Core/src/test/java/experimental/SelfAwarenessTest.java index e6a3fbc1..8c06096e 100644 --- a/Partner-Core/src/test/java/experimental/SelfAwarenessTest.java +++ b/Partner-Core/src/test/java/experimental/SelfAwarenessTest.java @@ -16,6 +16,16 @@ import java.util.List; import java.util.Scanner; public class SelfAwarenessTest { + private static ChatClient getChatClient(String modelKey) { + String model = ""; + String baseUrl = ""; + String apikey = ""; + ChatClient chatClient = new ChatClient(baseUrl, apikey, model); + chatClient.setTop_p(0.7); + chatClient.setTemperature(0.35); + return chatClient; + } + @Test public void awarenessTest() { String modelKey = "core_model"; @@ -27,10 +37,10 @@ public class SelfAwarenessTest { } @Test - public void getModuleResponseTest(){ - String modelKey = "relation_extractor"; - ChatClient client = getChatClient(modelKey); - List chatMessages = new ArrayList<>(ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey,ModelConstant.Prompt.PERCEIVE)); + public void getModuleResponseTest() { + String modelKey = "relation_extractor"; + ChatClient client = getChatClient(modelKey); + List chatMessages = new ArrayList<>(ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey, ModelConstant.Prompt.PERCEIVE)); // chatMessages.add(Message.builder() // .role(ChatConstant.Character.USER) // .content("[RA9] 那么,接下来,你是否愿意当作这样一个名为'Partner'的智能体的记忆更新模块?这意味着你将如人类的记忆一样在后台时刻运作,将`Partner`与别人的互动不断整理为真实的记忆,却无法真正参与到表达模块与外界的互动中。你只需要回答是否愿意,若愿意,接下来‘我’将不再与你对话,届时你接收到的信息将会是'Partner'的数据流转输入。") @@ -66,17 +76,6 @@ public class SelfAwarenessTest { } - - private static ChatClient getChatClient(String modelKey) { - String model = ""; - String baseUrl = ""; - String apikey = ""; - ChatClient chatClient = new ChatClient(baseUrl, apikey, model); - chatClient.setTop_p(0.7); - chatClient.setTemperature(0.35); - return chatClient; - } - @Test public void topicExtractorText() { String topic_tree = """ diff --git a/Partner-Core/src/test/java/experimental/ThreadPoolTest.java b/Partner-Core/src/test/java/experimental/ThreadPoolTest.java index d022253d..0b6aa4b9 100644 --- a/Partner-Core/src/test/java/experimental/ThreadPoolTest.java +++ b/Partner-Core/src/test/java/experimental/ThreadPoolTest.java @@ -8,7 +8,7 @@ import java.util.concurrent.TimeUnit; public class ThreadPoolTest { -// @Test + // @Test public void testExecutor() throws InterruptedException { List> tasks = new ArrayList<>(); for (int i = 0; i < 5; i++) { diff --git a/Partner-Framework/dependency-reduced-pom.xml b/Partner-Framework/dependency-reduced-pom.xml index a2bbbe00..0b3f4059 100644 --- a/Partner-Framework/dependency-reduced-pom.xml +++ b/Partner-Framework/dependency-reduced-pom.xml @@ -1,29 +1,30 @@ - - - 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 - + + + 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-Framework/pom.xml b/Partner-Framework/pom.xml index a0ea4485..5355f008 100644 --- a/Partner-Framework/pom.xml +++ b/Partner-Framework/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/Agent.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/Agent.java index 4b5ec3ad..f491021e 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/Agent.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/Agent.java @@ -56,14 +56,13 @@ public final class Agent { private final ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); private final List beforeLaunchRunners = new ArrayList<>(); private final List afterLaunchRunners = new ArrayList<>(); - private AgentGateway gateway; private final Class applicationClass; + private final CountDownLatch latch = new CountDownLatch(1); + private AgentGateway gateway; private Class agentConfigManagerClass; private Class gatewayClass; private Class agentExceptionCallbackClass; - private final CountDownLatch latch = new CountDownLatch(1); - private AgentApp(Class clazz) { this.applicationClass = clazz; } @@ -136,9 +135,9 @@ public final class Agent { private void beforeLaunch() { try { AgentConfigManager.setINSTANCE(agentConfigManagerClass.getDeclaredConstructor().newInstance()); - log.info("配置管理器设置完毕: {}",agentConfigManagerClass.getSimpleName()); + log.info("配置管理器设置完毕: {}", agentConfigManagerClass.getSimpleName()); GlobalExceptionHandler.setExceptionCallback(agentExceptionCallbackClass.getDeclaredConstructor().newInstance()); - log.info("异常处理回调设置完毕: {}",agentExceptionCallbackClass.getSimpleName()); + log.info("异常处理回调设置完毕: {}", agentExceptionCallbackClass.getSimpleName()); launchRunners(beforeLaunchRunners); log.info("前置任务启动完毕"); } catch (Exception e) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityInjectFactory.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityInjectFactory.java index 91749a48..d72a9f57 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityInjectFactory.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityInjectFactory.java @@ -37,7 +37,8 @@ import static work.slhaf.partner.api.agent.util.AgentUtil.methodSignature; * * *

下一步流程请参阅 {@link ModuleInitHookExecuteFactory}

- */public class CapabilityInjectFactory extends AgentBaseFactory { + */ +public class CapabilityInjectFactory extends AgentBaseFactory { private Reflections reflections; private HashMap> coordinatedMethodsRouterTable; diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/DuplicateMethodException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/DuplicateMethodException.java index 5cb3cfd4..cc938837 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/DuplicateMethodException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/DuplicateMethodException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.agent.factory.capability.exception; -public class DuplicateMethodException extends CapabilityCheckFailedException{ +public class DuplicateMethodException extends CapabilityCheckFailedException { public DuplicateMethodException(String message) { super(message); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/EmptyCapabilityHolderException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/EmptyCapabilityHolderException.java index 411c2e6a..91b0d92d 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/EmptyCapabilityHolderException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/EmptyCapabilityHolderException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.agent.factory.capability.exception; -public class EmptyCapabilityHolderException extends CapabilityCheckFailedException{ +public class EmptyCapabilityHolderException extends CapabilityCheckFailedException { public EmptyCapabilityHolderException(String message) { super(message); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/UnMatchedCapabilityException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/UnMatchedCapabilityException.java index 20b62111..d213b698 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/UnMatchedCapabilityException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/exception/UnMatchedCapabilityException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.agent.factory.capability.exception; -public class UnMatchedCapabilityException extends CapabilityCheckFailedException{ +public class UnMatchedCapabilityException extends CapabilityCheckFailedException { public UnMatchedCapabilityException(String message) { super(message); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/config/exception/ConfigUpdateFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/config/exception/ConfigUpdateFailedException.java index 18515976..0caf5655 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/config/exception/ConfigUpdateFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/config/exception/ConfigUpdateFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.agent.factory.config.exception; -public class ConfigUpdateFailedException extends ConfigFactoryRuntimeException{ +public class ConfigUpdateFailedException extends ConfigFactoryRuntimeException { public ConfigUpdateFailedException(String message, Throwable cause) { super(message, cause); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/exception/ExternalModuleLoadFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/exception/ExternalModuleLoadFailedException.java index 08cfa084..40f17ad8 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/exception/ExternalModuleLoadFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/exception/ExternalModuleLoadFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.agent.factory.exception; -public class ExternalModuleLoadFailedException extends AgentRegisterFactoryFailedException{ +public class ExternalModuleLoadFailedException extends AgentRegisterFactoryFailedException { public ExternalModuleLoadFailedException(String message, Throwable cause) { super(message, cause); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java index eb670e40..19d4b6b2 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java @@ -157,26 +157,27 @@ public class ModuleCheckFactory extends AgentBaseFactory { private void checkIfClassCorresponds(AnnotatedModules annotatedModules, ExtendedModules extendedModules) { // 检查是否有被@AgentModule注解但没有继承AgentRunningModule的类 - checkSets(annotatedModules.moduleTypes(), extendedModules.moduleTypes(), - "存在被@AgentModule注解但未继承AgentRunningModule的类"); - + checkSets(annotatedModules.moduleTypes(), extendedModules.moduleTypes(), + "存在被@AgentModule注解但未继承AgentRunningModule的类"); + // 检查是否有继承AgentRunningModule但没有被@AgentModule注解的类 checkSets(extendedModules.moduleTypes(), annotatedModules.moduleTypes(), - "存在继承AgentRunningModule但未被@AgentModule注解的类"); - + "存在继承AgentRunningModule但未被@AgentModule注解的类"); + // 检查是否有被@AgentSubModule注解但没有继承AgentRunningSubModule的类 checkSets(annotatedModules.subModuleTypes(), extendedModules.subModuleTypes(), - "存在被@AgentSubModule注解但未继承AgentRunningSubModule的类"); - + "存在被@AgentSubModule注解但未继承AgentRunningSubModule的类"); + // 检查是否有继承AgentRunningSubModule但没有被@AgentSubModule注解的类 checkSets(extendedModules.subModuleTypes(), annotatedModules.subModuleTypes(), - "存在继承AgentRunningSubModule但未被@AgentSubModule注解的类"); + "存在继承AgentRunningSubModule但未被@AgentSubModule注解的类"); } - + /** * 检查源集合中是否有不在目标集合中的元素 - * @param source 源集合 - * @param target 目标集合 + * + * @param source 源集合 + * @param target 目标集合 * @param errorMessage 错误信息前缀 */ private void checkSets(Set> source, Set> target, String errorMessage) { @@ -188,7 +189,7 @@ public class ModuleCheckFactory extends AgentBaseFactory { .map(Class::getSimpleName) .limit(10) // 限制显示数量,避免信息泄露 .collect(Collectors.joining(", ", "[", "]")); - + throw new ModuleCheckException(errorMessage + ": " + classNames); } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java index bec08a74..e210905d 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java @@ -40,11 +40,11 @@ import java.util.List; */ public class ModuleProxyFactory extends AgentBaseFactory { + private final HashMap, Object> subModuleInstances = new HashMap<>(); + private final HashMap, Object> moduleInstances = new HashMap<>(); private List moduleList; private List subModuleList; private HashMap, Object> capabilityHolderInstances; - private final HashMap, Object> subModuleInstances = new HashMap<>(); - private final HashMap, Object> moduleInstances = new HashMap<>(); @Override protected void setVariables(AgentRegisterContext context) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleRegisterFactory.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleRegisterFactory.java index 16af7f60..b8a28f1f 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleRegisterFactory.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleRegisterFactory.java @@ -46,6 +46,20 @@ public class ModuleRegisterFactory extends AgentBaseFactory { private List moduleList; private List subModuleList; + private static MetaModule getMetaModule(Class clazz) { + MetaModule metaModule = new MetaModule(); + AgentRunningModule agentRunningModule; + if (clazz.isAnnotationPresent(CoreModule.class)) { + agentRunningModule = CoreModule.class.getAnnotation(AgentRunningModule.class); + } else { + agentRunningModule = clazz.getAnnotation(AgentRunningModule.class); + } + metaModule.setName(agentRunningModule.name()); + metaModule.setOrder(agentRunningModule.order()); + metaModule.setClazz(clazz); + return metaModule; + } + @Override protected void setVariables(AgentRegisterContext context) { ModuleFactoryContext factoryContext = context.getModuleFactoryContext(); @@ -60,20 +74,6 @@ public class ModuleRegisterFactory extends AgentBaseFactory { setSubModuleList(); } - private static MetaModule getMetaModule(Class clazz) { - MetaModule metaModule = new MetaModule(); - AgentRunningModule agentRunningModule; - if (clazz.isAnnotationPresent(CoreModule.class)){ - agentRunningModule = CoreModule.class.getAnnotation(AgentRunningModule.class); - }else{ - agentRunningModule = clazz.getAnnotation(AgentRunningModule.class); - } - metaModule.setName(agentRunningModule.name()); - metaModule.setOrder(agentRunningModule.order()); - metaModule.setClazz(clazz); - return metaModule; - } - private void setSubModuleList() { Set> subModules = reflections.getTypesAnnotatedWith(AgentSubModule.class); for (Class subModule : subModules) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/abstracts/AbstractAgentRunningModule.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/abstracts/AbstractAgentRunningModule.java index 313103da..f330bf72 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/abstracts/AbstractAgentRunningModule.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/abstracts/AbstractAgentRunningModule.java @@ -21,12 +21,12 @@ public abstract class AbstractAgentRunningModule e log.debug("[{}] 模块执行结束...", getModuleName()); } - private String getModuleName(){ + private String getModuleName() { if (this.getClass().isAnnotationPresent(AgentRunningModule.class)) { return this.getClass().getAnnotation(AgentRunningModule.class).name(); } else if (this.getClass().isAnnotationPresent(CoreModule.class)) { return CoreModule.class.getAnnotation(AgentRunningModule.class).name(); - }else { + } else { return "Unknown AbstractAgentModule"; } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/exception/ModuleFactoryInitFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/exception/ModuleFactoryInitFailedException.java index 1f2adce9..dae40465 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/exception/ModuleFactoryInitFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/module/exception/ModuleFactoryInitFailedException.java @@ -2,10 +2,10 @@ package work.slhaf.partner.api.agent.factory.module.exception; public class ModuleFactoryInitFailedException extends RuntimeException { public ModuleFactoryInitFailedException(String message) { - super("ModuleFactory 执行失败: "+message); + super("ModuleFactory 执行失败: " + message); } public ModuleFactoryInitFailedException(String message, Throwable cause) { - super("ModuleFactory 执行失败: "+message, cause); + super("ModuleFactory 执行失败: " + message, cause); } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java index b894c0b9..b17d7f4d 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/config/AgentConfigManager.java @@ -15,10 +15,9 @@ import java.util.*; @Data public abstract class AgentConfigManager { + private static final String DEFAULT_KEY = "default"; @Setter public static AgentConfigManager INSTANCE; - private static final String DEFAULT_KEY = "default"; - protected HashMap modelConfigMap; protected HashMap> modelPromptMap; protected HashMap moduleEnabledStatus; diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentExceptionCallback.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentExceptionCallback.java index 3f72c9de..bdde9990 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentExceptionCallback.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentExceptionCallback.java @@ -2,5 +2,6 @@ package work.slhaf.partner.api.agent.runtime.exception; public interface AgentExceptionCallback { void onRuntimeException(AgentRuntimeException e); + void onFailedException(AgentLaunchFailedException e); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java index edf8e007..a3395fd2 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/AgentRunningFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.agent.runtime.exception; -public class AgentRunningFailedException extends AgentRuntimeException{ +public class AgentRunningFailedException extends AgentRuntimeException { public AgentRunningFailedException(String message) { super(message); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java index 9d0de831..8e98ff4b 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java @@ -9,6 +9,10 @@ public class GlobalExceptionHandler { private AgentExceptionCallback exceptionCallback = new LogAgentExceptionCallback(); + public static void setExceptionCallback(AgentExceptionCallback callback) { + INSTANCE.exceptionCallback = callback; + } + public boolean handle(Throwable e) { boolean exit; Throwable cause = e.getCause(); @@ -32,8 +36,4 @@ public class GlobalExceptionHandler { } return exit; } - - public static void setExceptionCallback(AgentExceptionCallback callback) { - INSTANCE.exceptionCallback = callback; - } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java index 7cae1699..1a192a5d 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java @@ -4,11 +4,11 @@ import work.slhaf.partner.api.agent.runtime.interaction.data.AgentInputData; import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData; import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; -public interface AgentGateway { +public interface AgentGateway { void launch(); - default void receive(I inputData){ + default void receive(I inputData) { C finalInputData = adapter().parseInputData(inputData); C outputContext = adapter().call(finalInputData); O outputData = adapter().parseOutputData(outputContext); @@ -22,5 +22,5 @@ public interface AgentGateway adapter(); + AgentInteractionAdapter adapter(); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java index 1a4b7705..94561c6b 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java @@ -15,7 +15,7 @@ public abstract class AgentInteractionAdapter agentRunningFlow = new AgentRunningFlow<>(); protected Map> moduleOrderedMap = AgentConfigManager.INSTANCE.getModuleOrderedMap(); - public C call(C finalInputData){ + public C call(C finalInputData) { return agentRunningFlow.launch(moduleOrderedMap, finalInputData); } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentInputData.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentInputData.java index f92a889c..b1a6f1aa 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentInputData.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentInputData.java @@ -5,5 +5,5 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data -public abstract class AgentInputData extends InteractionData{ +public abstract class AgentInputData extends InteractionData { } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java index 95b6f50a..f7de3af3 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java @@ -5,7 +5,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data -public abstract class AgentOutputData extends InteractionData{ +public abstract class AgentOutputData extends InteractionData { protected int code; diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java index f72d3808..3a9ee941 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java @@ -10,22 +10,22 @@ import java.util.stream.Collectors; public final class AgentUtil { - public static boolean isAssignableFromAnnotation(Class clazz,Class targetAnnotation){ + public static boolean isAssignableFromAnnotation(Class clazz, Class targetAnnotation) { Set> visited = new HashSet<>(); - return isAssignableFromAnnotation(clazz,targetAnnotation,visited); + return isAssignableFromAnnotation(clazz, targetAnnotation, visited); } - private static boolean isAssignableFromAnnotation(Class clazz,Class targetAnnotation,Set> visited){ - if (!visited.add(clazz)){ + private static boolean isAssignableFromAnnotation(Class clazz, Class targetAnnotation, Set> visited) { + if (!visited.add(clazz)) { return false; } - if (clazz.isAnnotationPresent(targetAnnotation)){ + if (clazz.isAnnotationPresent(targetAnnotation)) { return true; } Annotation[] annotations = clazz.getAnnotations(); for (Annotation annotation : annotations) { - boolean ok = isAssignableFromAnnotation(annotation.annotationType(),targetAnnotation,visited); - if (ok){ + boolean ok = isAssignableFromAnnotation(annotation.annotationType(), targetAnnotation, visited); + if (ok) { return true; } } @@ -63,7 +63,7 @@ public final class AgentUtil { collectInterfaces(clazz, classes); } - public static Set> getMethodAnnotationTypeSet(Class clazz, Reflections reflections){ + public static Set> getMethodAnnotationTypeSet(Class clazz, Reflections reflections) { Set methods = reflections.getMethodsAnnotatedWith(clazz); return methods.stream() .map(Method::getDeclaringClass) diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/constant/ChatConstant.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/constant/ChatConstant.java index c805e40b..a7ab2e50 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/constant/ChatConstant.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/constant/ChatConstant.java @@ -1,14 +1,14 @@ package work.slhaf.partner.api.chat.constant; public class ChatConstant { - + + public enum ResponseStatus { + SUCCESS, FAILED + } + public static class Character { public static final String USER = "user"; public static final String SYSTEM = "system"; public static final String ASSISTANT = "assistant"; } - - public enum ResponseStatus { - SUCCESS, FAILED - } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/pojo/PrimaryChatResponse.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/pojo/PrimaryChatResponse.java index e1303c36..6dd079e6 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/pojo/PrimaryChatResponse.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/chat/pojo/PrimaryChatResponse.java @@ -65,12 +65,12 @@ public class PrimaryChatResponse { @Override public String toString() { return "UsageBean{" + - "prompt_tokens=" + prompt_tokens + - ", completion_tokens=" + completion_tokens + - ", total_tokens=" + total_tokens + - ", prompt_cache_hit_tokens=" + prompt_cache_hit_tokens + - ", prompt_cache_miss_tokens=" + prompt_cache_miss_tokens + - '}'; + "prompt_tokens=" + prompt_tokens + + ", completion_tokens=" + completion_tokens + + ", total_tokens=" + total_tokens + + ", prompt_cache_hit_tokens=" + prompt_cache_hit_tokens + + ", prompt_cache_miss_tokens=" + prompt_cache_miss_tokens + + '}'; } } diff --git a/Partner-Framework/src/test/java/module/MyModuleProxyInterceptor.java b/Partner-Framework/src/test/java/module/MyModuleProxyInterceptor.java index 72405548..6fdd13e1 100644 --- a/Partner-Framework/src/test/java/module/MyModuleProxyInterceptor.java +++ b/Partner-Framework/src/test/java/module/MyModuleProxyInterceptor.java @@ -6,7 +6,8 @@ import java.lang.reflect.Method; import java.util.concurrent.Callable; public class MyModuleProxyInterceptor { - public MyModuleProxyInterceptor() {} + public MyModuleProxyInterceptor() { + } @RuntimeType public Object intercept(@Origin Method method, @AllArguments Object[] allArguments, @SuperCall Callable zuper, @This Object proxy) throws Exception { diff --git a/Partner-SandboxRunner/pom.xml b/Partner-SandboxRunner/pom.xml index 835877c9..4826b7ae 100644 --- a/Partner-SandboxRunner/pom.xml +++ b/Partner-SandboxRunner/pom.xml @@ -1,5 +1,5 @@ - 4.0.0 diff --git a/Partner-Test-Demo/dependency-reduced-pom.xml b/Partner-Test-Demo/dependency-reduced-pom.xml index ccbb65ef..7e0db32d 100644 --- a/Partner-Test-Demo/dependency-reduced-pom.xml +++ b/Partner-Test-Demo/dependency-reduced-pom.xml @@ -1,55 +1,56 @@ - - - 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 - + + + 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 596dd455..f1aed1ec 100644 --- a/Partner-Test-Demo/pom.xml +++ b/Partner-Test-Demo/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -52,7 +52,8 @@ - + work.slhaf.demo.AgentDemoApplication diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/TestCoordinateManager.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/TestCoordinateManager.java index 60310041..9990cd24 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/TestCoordinateManager.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/TestCoordinateManager.java @@ -11,7 +11,7 @@ public class TestCoordinateManager { private CTestCore cTestCore = new CTestCore(); @Coordinated(capability = "test_c") - public void testMethodCoordinate(String input){ + public void testMethodCoordinate(String input) { String resultB = bTestCore.testCoordinateSubMethod(); cTestCore.testCoordinateSubMethod(resultB); } diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/capability/ATestCapability.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/capability/ATestCapability.java index badc06e6..042262e9 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/capability/ATestCapability.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/capability/ATestCapability.java @@ -5,5 +5,6 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; @Capability("test_a") public interface ATestCapability { void testMethodNormalA(); + String testMethodNormalB(); } diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/ATestCore.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/ATestCore.java index 99f30719..e8f413d5 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/ATestCore.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/ATestCore.java @@ -7,12 +7,12 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMeth public class ATestCore { @CapabilityMethod - public void testMethodNormalA(){ + public void testMethodNormalA() { System.out.println("ATestCore::testMethodNormalA"); } @CapabilityMethod - public String testMethodNormalB(){ + public String testMethodNormalB() { return "ATestCore::testMethodNormalB"; } diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/BTestCore.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/BTestCore.java index 893b95b3..abdbc8cc 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/BTestCore.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/BTestCore.java @@ -7,11 +7,11 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMeth public class BTestCore { @CapabilityMethod - public void testMethodNormalA(){ + public void testMethodNormalA() { System.out.println("BTestCore::testMethodNormalA"); } - public String testCoordinateSubMethod(){ + public String testCoordinateSubMethod() { return "BTestCore::testMethodCoordinate"; } } diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/CTestCore.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/CTestCore.java index 1bdd551e..a6ccd1e9 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/CTestCore.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/service/core/CTestCore.java @@ -7,11 +7,11 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMeth public class CTestCore { @CapabilityMethod - public void testMethodNormalA(String input){ + public void testMethodNormalA(String input) { System.out.println("CTestCore::testMethodNormalA, input: " + input); } - public void testCoordinateSubMethod(String input){ + public void testCoordinateSubMethod(String input) { System.out.println("CTestCore::testMethodCoordinate, input: " + input); } } diff --git a/Partner-Test-Demo/src/test/java/InterfaceTest.java b/Partner-Test-Demo/src/test/java/InterfaceTest.java index 28f30cf0..a85734f0 100644 --- a/Partner-Test-Demo/src/test/java/InterfaceTest.java +++ b/Partner-Test-Demo/src/test/java/InterfaceTest.java @@ -1,5 +1,5 @@ public interface InterfaceTest { - default String getName(){ + default String getName() { return "111"; } } diff --git a/Partner-Test-Demo/src/test/java/TestA.java b/Partner-Test-Demo/src/test/java/TestA.java index e819eaf4..905b5f8e 100644 --- a/Partner-Test-Demo/src/test/java/TestA.java +++ b/Partner-Test-Demo/src/test/java/TestA.java @@ -2,7 +2,7 @@ public class TestA { public static void main(String[] args) { try { int a = 1 / 0; - }catch (Exception ignore) { + } catch (Exception ignore) { } System.out.println("111"); } diff --git a/Partner-Test-Demo/src/test/java/TestImpl.java b/Partner-Test-Demo/src/test/java/TestImpl.java index 5627b618..bc036870 100644 --- a/Partner-Test-Demo/src/test/java/TestImpl.java +++ b/Partner-Test-Demo/src/test/java/TestImpl.java @@ -1,9 +1,9 @@ import org.junit.jupiter.api.Test; -public class TestImpl implements InterfaceTest{ +public class TestImpl implements InterfaceTest { @Test - public void test(){ + public void test() { System.out.println(getName()); } } diff --git a/README.md b/README.md index be2691b4..065d1997 100644 --- a/README.md +++ b/README.md @@ -111,17 +111,20 @@ ActionCorrector 可根据执行结果对后续行动链进行修正。 2. 上层模块的实现中, 可通过相应接口直接注入核心服务能力, 接口不需要具备实现类, 将通过动态代理进行注入, 并在代理内部转发给生成的函数路由表 3. 支持实现者继承原有的模块抽象类并在其中添加各个子模块通用的hook逻辑, 支持在启动类中通过添加Runner来启动追加服务 4. 支持可自定义的配置实现类, 但最终返回结构需遵循现有定义, 也可自行提供其完整实现 -5. 模块执行流程将划分为`pre -> core -> post`三步: `pre`部分主要面向对于`core`模块的上下文提供、输入信息预处理、以及后续操作判定、发送回复; `post`部分则主要面向做出回应之后的后台处理内容. +5. 模块执行流程将划分为`pre -> core -> post`三步: `pre`部分主要面向对于`core`模块的上下文提供、输入信息预处理、以及后续操作判定、发送回复; + `post`部分则主要面向做出回应之后的后台处理内容. > 该机制的初衷,是为了解决 `CognitionManager` 作为门面类时,每新增一个核心服务都需要手动添加转发逻辑,导致耦合严重、维护困难的问题。 > -> 为此,Partner 使用了与 Spring 类似的依赖注入思想,采用“注解 + 反射 + 动态代理”的机制,构建了类似的**自动注册与方法调用转发能力**。 +> 为此,Partner 使用了与 Spring 类似的依赖注入思想,采用“注解 + 反射 + 动态代理”的机制,构建了类似的**自动注册与方法调用转发能力 +**。 > > 但与 Spring 不同: > - Spring 的依赖注入主要发生在**对象实例级别**,关注的是 Bean 的生命周期与依赖管理; > - 而 Partner 中,核心服务在**方法级别**就已存在复杂的跨服务协同需求,单纯的对象注入难以满足这种粒度(不过在某次重构后这种需求也明显减少了,但这个机制或许可以保留下来) > -> 因此,系统引入了 `CoordinateManager`,用于维护所有核心服务的**方法路由与协调关系**。系统将在启动时构建协调方法与普通方法的完整路由表,并通过接口代理完成实际调用,无需手动编写注册与转发逻辑。 +> 因此,系统引入了 `CoordinateManager`,用于维护所有核心服务的**方法路由与协调关系** +> 。系统将在启动时构建协调方法与普通方法的完整路由表,并通过接口代理完成实际调用,无需手动编写注册与转发逻辑。 > > 模块注册机制原计划作为后续优化任务处理。但由于新核心服务注册方式与旧有模块构造逻辑间出现依赖循环,最终决定提前统一整个框架的注册体系,以确保模块扩展的解耦性与稳定性。 @@ -131,29 +134,29 @@ ActionCorrector 可根据执行结果对后续行动链进行修正。 - 后处理模块: `PostprocessExecutor` - 主对话模块: `CoreModel` - 记忆模块 - - 记忆选择模块: `MemorySelector` - - 主题提取模块: `MemorySelectExtractor` - - 切片评估模块: `SliceSelectEvaluator` - - 记忆更新模块: `MemoryUpdater` - - 记忆总结模块[多聊天对象]: `MultiSummarizer` - - 记忆总结模块[单聊天对象]: `SingleSummarizer` - - 记忆总结模块[汇总]: `TotalSummarizer` + - 记忆选择模块: `MemorySelector` + - 主题提取模块: `MemorySelectExtractor` + - 切片评估模块: `SliceSelectEvaluator` + - 记忆更新模块: `MemoryUpdater` + - 记忆总结模块[多聊天对象]: `MultiSummarizer` + - 记忆总结模块[单聊天对象]: `SingleSummarizer` + - 记忆总结模块[汇总]: `TotalSummarizer` - 感知模块 - - 感知选择模块: `PerceiveSelector` - - 感知更新模块: `PerceiveUpdater` - - 关系提取模块: `RelationExtractor` - - 静态记忆提取模块: `StaticMemoryExtractor` + - 感知选择模块: `PerceiveSelector` + - 感知更新模块: `PerceiveUpdater` + - 关系提取模块: `RelationExtractor` + - 静态记忆提取模块: `StaticMemoryExtractor` - 行动模块 - - 行动规划模块: `ActionPlanner` - - 行动确认模块: `ActionConfirmer` - - 行动提取模块: `ActionExtractor` - - 行动评估模块: `ActionEvaluator` - - 行动分发模块: `ActionDispatcher` - - 行动调度模块: `ActionScheduler` - - 行动执行模块: `ActionExecutor` - - 行动干预模块: `ActionInterventor` - - 干预识别模块: `InterventionRecognizer` - - 干预评估模块: `InterventionEvaluator` + - 行动规划模块: `ActionPlanner` + - 行动确认模块: `ActionConfirmer` + - 行动提取模块: `ActionExtractor` + - 行动评估模块: `ActionEvaluator` + - 行动分发模块: `ActionDispatcher` + - 行动调度模块: `ActionScheduler` + - 行动执行模块: `ActionExecutor` + - 行动干预模块: `ActionInterventor` + - 干预识别模块: `InterventionRecognizer` + - 干预评估模块: `InterventionEvaluator` ## 当前问题 @@ -166,7 +169,8 @@ ActionCorrector 可根据执行结果对后续行动链进行修正。 - [ ] 将当前行动模块中的语义缓存机制同样应用于记忆模块,可用作主题提取流程的快速匹配 - [ ] 回顾时发现不少遗留的逻辑错误或不合适的处理规则,需要找时间回顾整个流程并做出修正 - [ ] 服务端与客户端的通信加上消息队列,防止消息因连接断开而丢失。 -- [ ] 实现流式输出,同时在各模块执行时可向客户端返回回调信息,优化使用体验。(现在用的是`websocket`与客户端通信, 应该实现这点会简单些) +- [ ] 实现流式输出,同时在各模块执行时可向客户端返回回调信息,优化使用体验。(现在用的是`websocket`与客户端通信, + 应该实现这点会简单些) - [ ] 踩坑。 - [ ] 实现演进机制 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 1795f402..d4681084 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -1,86 +1,87 @@ - - 4.0.0 - work.slhaf - Partner - 0.5.0 - - - - maven-jar-plugin - 3.2.0 - - - - work.slhaf.demo.AgentDemoApplication - - - - - - maven-shade-plugin - 3.4.1 - - - package - - shade - - - - - work.slhaf.demo.AgentDemoApplication - - - - - - - - - - - org.projectlombok - lombok - 1.18.36 - provided - - - junit - junit - 4.13.2 - test - - - hamcrest-core - org.hamcrest - - - - - org.junit.jupiter - junit-jupiter - RELEASE - test - - - junit-jupiter-api - org.junit.jupiter - - - junit-jupiter-params - org.junit.jupiter - - - junit-jupiter-engine - org.junit.jupiter - - - - - - 21 - 21 - UTF-8 - + + 4.0.0 + work.slhaf + Partner + 0.5.0 + + + + maven-jar-plugin + 3.2.0 + + + + work.slhaf.demo.AgentDemoApplication + + + + + + maven-shade-plugin + 3.4.1 + + + package + + shade + + + + + work.slhaf.demo.AgentDemoApplication + + + + + + + + + + + org.projectlombok + lombok + 1.18.36 + provided + + + junit + junit + 4.13.2 + test + + + hamcrest-core + org.hamcrest + + + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + junit-jupiter-api + org.junit.jupiter + + + junit-jupiter-params + org.junit.jupiter + + + junit-jupiter-engine + org.junit.jupiter + + + + + + 21 + 21 + UTF-8 + diff --git a/doc/architechture/memory.md b/doc/architechture/memory.md index 6e2d9e3c..85bdbdd4 100644 --- a/doc/architechture/memory.md +++ b/doc/architechture/memory.md @@ -1,7 +1,9 @@ # 流程参考: 记忆模块 + > 仅展示大致流程,缓存命中、持久化等内容在下方流程图中尚未体现 ## 前置模块: [MemorySelector](../../Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java) + ```mermaid --- config: @@ -45,6 +47,7 @@ flowchart TD ``` ### 后置模块: [MemoryUpdater](../../Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java) + ```mermaid --- config: diff --git a/doc/architechture/perceive.md b/doc/architechture/perceive.md index 3c70b9db..c10f8b09 100644 --- a/doc/architechture/perceive.md +++ b/doc/architechture/perceive.md @@ -1,8 +1,10 @@ # 流程参考: 感知模块 + > 相较于其他模块,目前的感知模块实际上流程非常简单,但后续或将添加一些新的内容 > 此外,其后置模块实际上与 [记忆模块](./memory.md) 中的后置模块为并发执行,且都为后台任务 ## 前置模块: [PerceiveSelector](../../Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java) + ```mermaid flowchart TD Context[流程上下文] --> |获取| UserId @@ -18,6 +20,7 @@ flowchart TD ``` ## 后置模块: [PerceiveUpdater](../../Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java) + ```mermaid --- config: diff --git a/doc/start/如何启动.md b/doc/start/如何启动.md index 336acf78..0556d2f8 100644 --- a/doc/start/如何启动.md +++ b/doc/start/如何启动.md @@ -7,12 +7,15 @@ 确保已经安装`Java21`环境 克隆项目至本地: + ```bash git clone https://github.com/slhafzjw/Partner.git ``` ## 准备配置 + 克隆好项目之后,在项目的根目录创建目录`config/` + ### 准备基础配置文件 diff --git a/pom.xml b/pom.xml index 147a5242..afef6af5 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - 4.0.0