From ade922cbc2f2e4b1bdfd0e753f4aea0c03b11866 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Thu, 24 Jul 2025 23:31:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E8=BF=9B=E6=A0=B8=E5=BF=83=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=B8=8E=E6=A8=A1=E5=9D=97=E6=B3=A8=E5=86=8C=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 完善Agent流程执行框架 - Api包下新增flow流程包,该部分对应模块的执行流程 - 明确ModuleFactory与CapabilityFactory以及ModuleHook的共同运作流程 - 调整了Hook注解名称 --- .idea/misc.xml | 3 +- .../java/work/slhaf/partner/api/Agent.java | 14 +- .../partner/api/AgentRegisterFactory.java | 16 -- .../partner/api}/common/chat/ChatClient.java | 12 +- .../common/chat/constant/ChatConstant.java | 9 +- .../api}/common/chat/pojo/ChatBody.java | 2 +- .../api}/common/chat/pojo/ChatResponse.java | 2 +- .../api}/common/chat/pojo/Message.java | 4 +- .../api}/common/chat/pojo/MetaMessage.java | 4 +- .../common/chat/pojo/PrimaryChatResponse.java | 2 +- .../common/entity/AgentRegisterContext.java | 10 - .../api/common/entity}/PersistableObject.java | 2 +- .../partner/api/entity/AgentContext.java | 17 ++ .../api/factory/AgentRegisterFactory.java | 37 ++++ .../capability/CapabilityCheckFactory.java} | 198 ++---------------- .../capability/CapabilityInjectFactory.java | 67 ++++++ .../capability/CapabilityRegisterFactory.java | 142 +++++++++++++ .../capability/annotation/Capability.java | 2 +- .../capability/annotation/CapabilityCore.java | 2 +- .../annotation/CapabilityHolder.java | 2 +- .../annotation/CapabilityMethod.java | 2 +- .../annotation/CoordinateManager.java | 2 +- .../capability/annotation/Coordinated.java | 2 +- .../annotation/InjectCapability.java | 2 +- .../capability/annotation/ToCoordinated.java | 2 +- .../CapabilityCheckFailedException.java | 2 +- .../CoreInstancesCreateFailedException.java | 2 +- .../DuplicateCapabilityException.java | 2 +- .../exception/DuplicateMethodException.java | 2 +- .../EmptyCapabilityHolderException.java | 2 +- .../FactoryExecuteFailedException.java | 2 +- .../exception/ProxySetFailedException.java | 2 +- .../UnMatchedCapabilityException.java | 2 +- .../UnMatchedCapabilityMethodException.java | 2 +- .../UnMatchedCoordinatedMethodException.java | 2 +- .../api/factory/entity/AgentBaseFactory.java | 20 ++ .../factory/entity/AgentRegisterContext.java | 23 ++ .../factory/module/ModuleCheckFactory.java | 17 ++ .../factory/module/ModuleHookExecutor.java | 4 + .../factory/module/ModuleRegisterFactory.java | 20 ++ .../api/factory/module/annotation/After.java | 13 ++ .../module/annotation/AgentModule.java | 24 +++ .../api/factory/module/annotation/Before.java | 12 ++ .../partner/api/flow/AgentInteraction.java | 15 ++ .../api/flow/abstracts/ActivateModel.java | 74 +++++++ .../abstracts/AgentInteractionModule.java | 10 + .../abstracts/AgentInteractionSubModule.java | 13 ++ .../partner/api/flow/abstracts}/Model.java | 6 +- .../partner/api/flow/abstracts/Module.java | 14 ++ .../flow/entity/InteractionFlowContext.java | 10 + .../api/module/ModuleRegisterFactory.java | 4 - Partner-Main/pom.xml | 15 -- .../slhaf/partner/common/config/Config.java | 1 - .../pojo/GlobalExceptionData.java | 2 +- .../partner/common/util/ResourcesUtil.java | 2 +- .../core/cognation/CoordinatedManager.java | 6 +- .../cognation/CognationCapability.java | 8 +- .../cognation/cognation/CognationCore.java | 6 +- .../cognation/common/pojo/MemoryResult.java | 2 +- .../common/pojo/MemorySliceResult.java | 2 +- .../submodule/cache/CacheCapability.java | 2 +- .../cognation/submodule/cache/CacheCore.java | 6 +- .../submodule/dispatch/DispatchCore.java | 2 +- .../submodule/memory/MemoryCapability.java | 4 +- .../submodule/memory/MemoryCore.java | 6 +- .../submodule/memory/pojo/EvaluatedSlice.java | 2 +- .../submodule/memory/pojo/MemorySlice.java | 4 +- .../memory/pojo/node/MemoryNode.java | 2 +- .../submodule/memory/pojo/node/TopicNode.java | 2 +- .../perceive/PerceiveCapability.java | 2 +- .../submodule/perceive/PerceiveCore.java | 6 +- .../submodule/perceive/pojo/User.java | 2 +- .../data/context/InteractionContext.java | 2 +- .../data/context/subcontext/CoreContext.java | 2 +- .../context/subcontext/ModuleContext.java | 2 +- .../partner/core/session/SessionManager.java | 6 +- .../common/entity/AppendPromptData.java | 2 +- .../module/common/model/ActivateModel.java | 75 ------- .../common/module/InteractionModule.java | 2 +- .../partner/module/common/module/Module.java | 15 -- .../module/common/module/SubModule.java | 13 -- .../module/modules/core/CoreModel.java | 14 +- .../memory/selector/MemorySelector.java | 2 +- .../evaluator/SliceSelectEvaluator.java | 6 +- .../evaluator/data/EvaluatorBatchInput.java | 2 +- .../evaluator/data/EvaluatorInput.java | 2 +- .../extractor/MemorySelectExtractor.java | 12 +- .../extractor/data/ExtractorInput.java | 2 +- .../modules/memory/updater/MemoryUpdater.java | 6 +- .../updater/summarizer/MemorySummarizer.java | 4 +- .../updater/summarizer/MultiSummarizer.java | 8 +- .../updater/summarizer/SingleSummarizer.java | 12 +- .../updater/summarizer/TotalSummarizer.java | 8 +- .../summarizer/data/SummarizeInput.java | 2 +- .../perceive/selector/PerceiveSelector.java | 2 +- .../perceive/updater/PerceiveUpdater.java | 2 +- .../relation_extractor/RelationExtractor.java | 10 +- .../pojo/RelationExtractInput.java | 2 +- .../StaticMemoryExtractor.java | 10 +- .../data/StaticMemoryExtractInput.java | 2 +- .../modules/process/PostprocessExecutor.java | 2 +- .../modules/process/PreprocessExecutor.java | 4 +- .../src/test/java/SelfAwarenessTest.java | 8 +- .../work/slhaf/demo/MyCognationManager.java | 4 +- .../main/java/work/slhaf/demo/TestModule.java | 4 +- .../slhaf/demo/ability/CacheCapability.java | 2 +- .../slhaf/demo/ability/MemoryCapability.java | 4 +- .../demo/ability/PerceiveCapability.java | 2 +- .../java/work/slhaf/demo/core/CacheCore.java | 4 +- .../java/work/slhaf/demo/core/MemoryCore.java | 4 +- .../work/slhaf/demo/core/PerceiveCore.java | 4 +- README.md | 17 +- pom.xml | 15 ++ 113 files changed, 744 insertions(+), 497 deletions(-) delete mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/AgentRegisterFactory.java rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/ChatClient.java (84%) rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/constant/ChatConstant.java (52%) rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/pojo/ChatBody.java (90%) rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/pojo/ChatResponse.java (86%) rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/pojo/Message.java (74%) rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/pojo/MetaMessage.java (76%) rename {Partner-Main/src/main/java/work/slhaf/partner => Partner-Api/src/main/java/work/slhaf/partner/api}/common/chat/pojo/PrimaryChatResponse.java (97%) delete mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/AgentRegisterContext.java rename {Partner-Main/src/main/java/work/slhaf/partner/common/serialize => Partner-Api/src/main/java/work/slhaf/partner/api/common/entity}/PersistableObject.java (68%) create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/entity/AgentContext.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java rename Partner-Api/src/main/java/work/slhaf/partner/api/{capability/CapabilityRegisterFactory.java => factory/capability/CapabilityCheckFactory.java} (50%) create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/Capability.java (85%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/CapabilityCore.java (85%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/CapabilityHolder.java (70%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/CapabilityMethod.java (81%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/CoordinateManager.java (81%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/Coordinated.java (85%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/InjectCapability.java (82%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/annotation/ToCoordinated.java (88%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/CapabilityCheckFailedException.java (84%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/CoreInstancesCreateFailedException.java (83%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/DuplicateCapabilityException.java (82%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/DuplicateMethodException.java (81%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/EmptyCapabilityHolderException.java (82%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/FactoryExecuteFailedException.java (85%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/ProxySetFailedException.java (80%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/UnMatchedCapabilityException.java (82%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/UnMatchedCapabilityMethodException.java (83%) rename Partner-Api/src/main/java/work/slhaf/partner/api/{ => factory}/capability/exception/UnMatchedCoordinatedMethodException.java (83%) create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentRegisterContext.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleCheckFactory.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleHookExecutor.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/After.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/Before.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/flow/AgentInteraction.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionModule.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionSubModule.java rename {Partner-Main/src/main/java/work/slhaf/partner/module/common/model => Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts}/Model.java (55%) create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java create mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/flow/entity/InteractionFlowContext.java delete mode 100644 Partner-Api/src/main/java/work/slhaf/partner/api/module/ModuleRegisterFactory.java delete mode 100644 Partner-Main/src/main/java/work/slhaf/partner/module/common/model/ActivateModel.java delete mode 100644 Partner-Main/src/main/java/work/slhaf/partner/module/common/module/Module.java delete mode 100644 Partner-Main/src/main/java/work/slhaf/partner/module/common/module/SubModule.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 98b28166..14dcb2b0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,10 @@ - + + diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java b/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java index f67d6aee..c1a63ca3 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java @@ -1,7 +1,17 @@ package work.slhaf.partner.api; -public class Agent { - public static void run(Class clazz) { +import work.slhaf.partner.api.entity.AgentContext; +import work.slhaf.partner.api.factory.AgentRegisterFactory; +import work.slhaf.partner.api.flow.AgentInteraction; +/** + * Agent启动类 + */ +public class Agent { + + public static void run(Class clazz) { + AgentContext context = AgentRegisterFactory.launch(clazz.getPackage().getName()); + AgentInteraction.launch(context); } + } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/AgentRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/AgentRegisterFactory.java deleted file mode 100644 index b07afa9d..00000000 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/AgentRegisterFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package work.slhaf.partner.api; - -import work.slhaf.partner.api.common.entity.AgentRegisterContext; - -public class AgentRegisterFactory { - - private AgentRegisterContext context = new AgentRegisterContext(); - - private AgentRegisterFactory(){} - - public static void launch(){ - //TODO 通过调用module与capability的注册逻辑,完成完整的注册过程,需要考虑hook机制 - AgentRegisterFactory factory = new AgentRegisterFactory(); - } - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/ChatClient.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/ChatClient.java similarity index 84% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/ChatClient.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/ChatClient.java index 63334dac..2909c3f8 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/ChatClient.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/ChatClient.java @@ -1,15 +1,15 @@ -package work.slhaf.partner.common.chat; +package work.slhaf.partner.api.common.chat; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; import lombok.Data; import lombok.NoArgsConstructor; -import work.slhaf.partner.common.chat.constant.ChatConstant; -import work.slhaf.partner.common.chat.pojo.ChatBody; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.chat.pojo.PrimaryChatResponse; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.pojo.ChatBody; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.PrimaryChatResponse; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/constant/ChatConstant.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/constant/ChatConstant.java similarity index 52% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/constant/ChatConstant.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/constant/ChatConstant.java index a327a25e..b68b24aa 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/constant/ChatConstant.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/constant/ChatConstant.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.common.chat.constant; +package work.slhaf.partner.api.common.chat.constant; public class ChatConstant { @@ -7,13 +7,6 @@ public class ChatConstant { public static final String SYSTEM = "system"; public static final String ASSISTANT = "assistant"; } - - public static class Model { - public static final String DEEP_SEEK_CHAT = "deepseek-chat"; - public static final String GLM_4_FLASH = "glm-4_flash"; - public static final String GLM_4_PLUS = "glm-4_plus"; - public static final String GLM_4_0520 = "glm-4_0520"; - } public static class Response { public static final String SUCCESS = "success"; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/ChatBody.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/ChatBody.java similarity index 90% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/ChatBody.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/ChatBody.java index f8f25ab4..49ad1809 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/ChatBody.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/ChatBody.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.common.chat.pojo; +package work.slhaf.partner.api.common.chat.pojo; import lombok.*; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/ChatResponse.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/ChatResponse.java similarity index 86% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/ChatResponse.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/ChatResponse.java index 289c7e57..ac67d849 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/ChatResponse.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/ChatResponse.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.common.chat.pojo; +package work.slhaf.partner.api.common.chat.pojo; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/Message.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/Message.java similarity index 74% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/Message.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/Message.java index b36f7cdb..14e0f401 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/Message.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/Message.java @@ -1,7 +1,7 @@ -package work.slhaf.partner.common.chat.pojo; +package work.slhaf.partner.api.common.chat.pojo; import lombok.*; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/MetaMessage.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/MetaMessage.java similarity index 76% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/MetaMessage.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/MetaMessage.java index 3a26bdda..4dfebbe7 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/MetaMessage.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/MetaMessage.java @@ -1,9 +1,9 @@ -package work.slhaf.partner.common.chat.pojo; +package work.slhaf.partner.api.common.chat.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/PrimaryChatResponse.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/PrimaryChatResponse.java similarity index 97% rename from Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/PrimaryChatResponse.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/PrimaryChatResponse.java index 5d4e439c..f7a59b39 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/chat/pojo/PrimaryChatResponse.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/pojo/PrimaryChatResponse.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.common.chat.pojo; +package work.slhaf.partner.api.common.chat.pojo; import lombok.Getter; import lombok.Setter; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/AgentRegisterContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/AgentRegisterContext.java deleted file mode 100644 index b5569b1d..00000000 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/AgentRegisterContext.java +++ /dev/null @@ -1,10 +0,0 @@ -package work.slhaf.partner.api.common.entity; - -import lombok.Data; -import org.reflections.Reflections; - -@Data -public class AgentRegisterContext { - //TODO 抽取出必要的注册工厂共用的上下文 - private Reflections reflections; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/serialize/PersistableObject.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/PersistableObject.java similarity index 68% rename from Partner-Main/src/main/java/work/slhaf/partner/common/serialize/PersistableObject.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/PersistableObject.java index f0496b95..ff9b55c6 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/serialize/PersistableObject.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/entity/PersistableObject.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.common.serialize; +package work.slhaf.partner.api.common.entity; import java.io.Serializable; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/entity/AgentContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/entity/AgentContext.java new file mode 100644 index 00000000..0a1b2012 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/entity/AgentContext.java @@ -0,0 +1,17 @@ +package work.slhaf.partner.api.entity; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Set; +import java.util.function.Function; + +@Data +public class AgentContext { + private HashMap> methodsRouterTable; + private HashMap> coordinatedMethodsRouterTable; + private HashMap, Object> capabilityCoreInstances; + private HashMap, Object> capabilityHolderInstances; + private Set> cores; + private Set> capabilities; +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java new file mode 100644 index 00000000..1623c65a --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java @@ -0,0 +1,37 @@ +package work.slhaf.partner.api.factory; + +import cn.hutool.core.bean.BeanUtil; +import work.slhaf.partner.api.entity.AgentContext; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; +import work.slhaf.partner.api.factory.capability.CapabilityCheckFactory; +import work.slhaf.partner.api.factory.capability.CapabilityRegisterFactory; +import work.slhaf.partner.api.factory.module.ModuleCheckFactory; +import work.slhaf.partner.api.factory.module.ModuleRegisterFactory; + +public class AgentRegisterFactory { + + private AgentRegisterFactory() { + } + + public static AgentContext launch(String path) { + AgentRegisterContext registerContext = new AgentRegisterContext(path); + //流程 + //1. 执行register和check逻辑 + new CapabilityRegisterFactory().execute(registerContext); + new CapabilityCheckFactory().execute(registerContext); + new ModuleRegisterFactory().execute(registerContext); + new ModuleCheckFactory().execute(registerContext); + + //2. 为module通过动态代理添加后hook逻辑并进行实例化 + + //3. 先一步注入Capability,避免因前hook逻辑存在针对能力的引用而报错 + + //4. 执行前hook逻辑 + + + AgentContext agentContext = new AgentContext(); + BeanUtil.copyProperties(registerContext,agentContext); + return agentContext; + } + +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/CapabilityRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java similarity index 50% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/CapabilityRegisterFactory.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java index a8f9cf56..13f60918 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/CapabilityRegisterFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java @@ -1,178 +1,41 @@ -package work.slhaf.partner.api.capability; +package work.slhaf.partner.api.factory.capability; import org.reflections.Reflections; -import org.reflections.scanners.Scanners; -import org.reflections.util.ClasspathHelper; -import org.reflections.util.ConfigurationBuilder; -import work.slhaf.partner.api.capability.annotation.*; -import work.slhaf.partner.api.capability.exception.*; +import work.slhaf.partner.api.factory.entity.AgentBaseFactory; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; import work.slhaf.partner.api.common.util.AgentUtil; +import work.slhaf.partner.api.factory.capability.annotation.*; +import work.slhaf.partner.api.factory.capability.exception.DuplicateCapabilityException; +import work.slhaf.partner.api.factory.capability.exception.UnMatchedCapabilityException; +import work.slhaf.partner.api.factory.capability.exception.UnMatchedCapabilityMethodException; +import work.slhaf.partner.api.factory.capability.exception.UnMatchedCoordinatedMethodException; -import java.lang.reflect.*; -import java.net.URL; +import java.lang.reflect.Method; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; import static work.slhaf.partner.api.common.util.AgentUtil.methodSignature; - -public final class CapabilityRegisterFactory { +public class CapabilityCheckFactory extends AgentBaseFactory { private Reflections reflections; - private final HashMap> methodsRouterTable = new HashMap<>(); - private final HashMap> coordinatedMethodsRouterTable = new HashMap<>(); - private final HashMap, Object> capabilityCoreInstances = new HashMap<>(); - private final HashMap, Object> capabilityHolderInstances = new HashMap<>(); private Set> cores; private Set> capabilities; - private CapabilityRegisterFactory() { + + @Override + protected void setVariables(AgentRegisterContext context) { + reflections = context.getReflections(); + cores = context.getCores(); + capabilities = context.getCapabilities(); } - //TODO 需决定是否分离检查与路由表生成、注入逻辑,如果分离,可进一步添加hook点,但目前似乎并非必要 - public void registerCapabilities(String scannerPath) { - setBasicVariable(scannerPath); - //检查可注册能力是否正常 - statusCheck(); - //扫描现有Capability, value为键,返回函数路由表, 函数路由表内部通过反射调用对应core的方法 - generateRouterTable(); - //通过动态代理注入能力 - injectCapability(); - } - - private void generateRouterTable() { - generateMethodsRouterTable(); - generateCoordinatedMethodsRouterTable(); - } - - private void generateCoordinatedMethodsRouterTable() { - Set methodsAnnotatedWith = reflections.getMethodsAnnotatedWith(Coordinated.class); - if (methodsAnnotatedWith.isEmpty()) { - return; - } - try { - //获取所有CM实例 - HashMap cognationManagerInstances = getCognationManagerInstances(); - methodsAnnotatedWith.forEach(method -> { - String key = method.getAnnotation(Coordinated.class).capability() + "." + methodSignature(method); - Function function = args -> { - try { - return method.invoke(cognationManagerInstances.get(key), args); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - }; - coordinatedMethodsRouterTable.put(key, function); - }); - } catch (Exception e) { - throw new FactoryExecuteFailedException("创建协调方法路由表出错", e); - } - - } - - private HashMap getCognationManagerInstances() throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { - HashMap map = new HashMap<>(); - for (Class c : reflections.getTypesAnnotatedWith(CoordinateManager.class)) { - Constructor constructor = c.getDeclaredConstructor(); - Object instance = constructor.newInstance(); - - Arrays.stream(c.getMethods()) - .filter(method -> method.isAnnotationPresent(Coordinated.class)) - .forEach(method -> { - String key = method.getAnnotation(Coordinated.class).capability() + "." + methodSignature(method); - map.put(key, instance); - }); - } - return map; - } - - private void setBasicVariable(String scannerPath) { - setReflections(scannerPath); - setAnnotatedClasses(); - } - - private void setAnnotatedClasses() { - cores = reflections.getTypesAnnotatedWith(CapabilityCore.class); - capabilities = reflections.getTypesAnnotatedWith(Capability.class); - } - - private void setReflections(String scannerPath) { - //后续可替换为根据传入的启动类获取路径 - Collection urls = ClasspathHelper.forPackage(scannerPath); - reflections = new Reflections( - new ConfigurationBuilder() - .setUrls(urls) - .setScanners( - Scanners.TypesAnnotated, - Scanners.MethodsAnnotated, - Scanners.SubTypes, - Scanners.FieldsAnnotated - ) - ); - } - - private void generateMethodsRouterTable() { - //扫描`@Capability`与`@CapabilityMethod`注解的类与方法 - //将`capabilityValue.methodSignature`作为key,函数对象为通过反射拿到的core实例对应的方法 - cores.forEach(core -> Arrays.stream(core.getMethods()) - .filter(method -> method.isAnnotationPresent(CapabilityMethod.class)) - .forEach(method -> { - Function function = args -> { - try { - return method.invoke(capabilityCoreInstances.get(core), args); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - }; - String key = core.getAnnotation(CapabilityCore.class).value() + "." + methodSignature(method); - if (methodsRouterTable.containsKey(key)) { - throw new DuplicateMethodException("重复注册能力方法: " + core.getPackage().getName() + "." + core.getSimpleName() + "#" + method.getName()); - } - methodsRouterTable.put(key, function); - })); - } - - - private void injectCapability() { - //获取现有的`@InjectCapability`注解所在字段,并获取对应的类,通过动态代理注入对象 - Set fields = reflections.getFieldsAnnotatedWith(InjectCapability.class); - //在动态代理内部,通过函数路由表调用对应的方法 - createProxy(fields); - } - - private void createProxy(Set fields) { - try { - for (Field field : fields) { - field.setAccessible(true); - Class fieldType = field.getType(); - Object instance = Proxy.newProxyInstance( - fieldType.getClassLoader(), - new Class[]{fieldType}, - (proxy, method, objects) -> { - if (method.isAnnotationPresent(ToCoordinated.class)) { - String key = method.getDeclaringClass().getAnnotation(Capability.class).value() + "." + methodSignature(method); - return coordinatedMethodsRouterTable.get(key).apply(objects); - } - String key = fieldType.getAnnotation(Capability.class).value() + "." + methodSignature(method); - return methodsRouterTable.get(key).apply(objects); - } - ); - field.set(capabilityHolderInstances.get(field.getDeclaringClass()), instance); - } - } catch (Exception e) { - throw new ProxySetFailedException("代理设置失败", e); - } - } - - private void statusCheck() { - capabilityHolderCheck(); + @Override + protected void run() { checkCountAndCapabilities(); checkCapabilityMethods(); checkCoordinatedMethods(); checkInjectCapability(); - //检查完毕,设置core的实例类 - setCapabilityCoreInstances(); } private void checkInjectCapability() { @@ -183,25 +46,6 @@ public final class CapabilityRegisterFactory { }); } - private void capabilityHolderCheck() { - if (capabilityHolderInstances.isEmpty()) { - throw new EmptyCapabilityHolderException("Capability 持有者实例为空"); - } - } - - private void setCapabilityCoreInstances() { - try { - for (Class core : cores) { - Constructor constructor = core.getDeclaredConstructor(); - constructor.setAccessible(true); - capabilityCoreInstances.put(core, constructor.newInstance()); - } - } catch (InvocationTargetException | NoSuchMethodException | InstantiationException | - IllegalAccessException e) { - throw new CoreInstancesCreateFailedException("core实例创建失败"); - } - } - private void checkCoordinatedMethods() { //检查各个capability中是否含有ToCoordinated注解 //如果含有,则需要查找AbstractCognationManager的子类,看这里是否有对应的Coordinated注解所在方法 @@ -249,7 +93,6 @@ public final class CapabilityRegisterFactory { return methodsCoordinated; } - private void checkCapabilityMethods() { HashMap> capabilitiesMethods = getCapabilityMethods(capabilities); StringBuilder sb = new StringBuilder(); @@ -317,7 +160,6 @@ public final class CapabilityRegisterFactory { } } - private boolean checkValuesMatched(Set> cores, Set> capabilities) { Set coresValues = new HashSet<>(); Set capabilitiesValues = new HashSet<>(); @@ -342,10 +184,6 @@ public final class CapabilityRegisterFactory { return coresValues.equals(capabilitiesValues); } - public void registerModule(CapabilityHolder capabilityHolder) { - capabilityHolderInstances.put(capabilityHolder.getClass(), capabilityHolder); - } - record LackRecord(List coreLack, List capLack) { public boolean hasNotEmptyRecord() { return !coreLack.isEmpty() || !capLack.isEmpty(); diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java new file mode 100644 index 00000000..7170b337 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java @@ -0,0 +1,67 @@ +package work.slhaf.partner.api.factory.capability; + +import org.reflections.Reflections; +import work.slhaf.partner.api.factory.entity.AgentBaseFactory; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; +import work.slhaf.partner.api.factory.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated; +import work.slhaf.partner.api.factory.capability.exception.ProxySetFailedException; + +import java.lang.reflect.Field; +import java.lang.reflect.Proxy; +import java.util.HashMap; +import java.util.Set; +import java.util.function.Function; + +import static work.slhaf.partner.api.common.util.AgentUtil.methodSignature; + +public class CapabilityInjectFactory extends AgentBaseFactory { + + private Reflections reflections; + private HashMap> coordinatedMethodsRouterTable; + private HashMap> methodsRouterTable; + private HashMap, Object> capabilityHolderInstances; + + @Override + protected void setVariables(AgentRegisterContext context) { + reflections = context.getReflections(); + coordinatedMethodsRouterTable = context.getCoordinatedMethodsRouterTable(); + methodsRouterTable = context.getMethodsRouterTable(); + capabilityHolderInstances = context.getCapabilityHolderInstances(); + } + + @Override + protected void run() { + //获取现有的`@InjectCapability`注解所在字段,并获取对应的类,通过动态代理注入对象 + Set fields = reflections.getFieldsAnnotatedWith(InjectCapability.class); + //在动态代理内部,通过函数路由表调用对应的方法 + createProxy(fields); + + } + + private void createProxy(Set fields) { + try { + for (Field field : fields) { + field.setAccessible(true); + Class fieldType = field.getType(); + Object instance = Proxy.newProxyInstance( + fieldType.getClassLoader(), + new Class[]{fieldType}, + (proxy, method, objects) -> { + if (method.isAnnotationPresent(ToCoordinated.class)) { + String key = method.getDeclaringClass().getAnnotation(Capability.class).value() + "." + methodSignature(method); + return coordinatedMethodsRouterTable.get(key).apply(objects); + } + String key = fieldType.getAnnotation(Capability.class).value() + "." + methodSignature(method); + return methodsRouterTable.get(key).apply(objects); + } + ); + field.set(capabilityHolderInstances.get(field.getDeclaringClass()), instance); + } + } catch (Exception e) { + throw new ProxySetFailedException("代理设置失败", e); + } + } + +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java new file mode 100644 index 00000000..56e28c68 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java @@ -0,0 +1,142 @@ +package work.slhaf.partner.api.factory.capability; + +import org.reflections.Reflections; +import work.slhaf.partner.api.factory.entity.AgentBaseFactory; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; +import work.slhaf.partner.api.factory.capability.annotation.*; +import work.slhaf.partner.api.factory.capability.exception.CoreInstancesCreateFailedException; +import work.slhaf.partner.api.factory.capability.exception.DuplicateMethodException; +import work.slhaf.partner.api.factory.capability.exception.FactoryExecuteFailedException; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Set; +import java.util.function.Function; + +import static work.slhaf.partner.api.common.util.AgentUtil.methodSignature; + + +public final class CapabilityRegisterFactory extends AgentBaseFactory { + + private Reflections reflections; + private HashMap> methodsRouterTable; + private HashMap> coordinatedMethodsRouterTable; + private HashMap, Object> capabilityCoreInstances; + private HashMap, Object> capabilityHolderInstances; + private Set> cores; + private Set> capabilities; + + @Override + protected void setVariables(AgentRegisterContext context) { + reflections = context.getReflections(); + methodsRouterTable = context.getMethodsRouterTable(); + coordinatedMethodsRouterTable = context.getCoordinatedMethodsRouterTable(); + capabilityCoreInstances = context.getCapabilityCoreInstances(); + capabilityHolderInstances = context.getCapabilityHolderInstances(); + cores = context.getCores(); + capabilities = context.getCapabilities(); + } + + @Override + protected void run() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + setCapabilityCoreInstances(); + setAnnotatedClasses(); + generateRouterTable(); + } + + private void setAnnotatedClasses() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + cores.addAll(reflections.getTypesAnnotatedWith(CapabilityCore.class)); + capabilities.addAll(reflections.getTypesAnnotatedWith(Capability.class)); + setCapabilityHolderInstances(); + } + + private void setCapabilityHolderInstances() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + for (Class clazz : reflections.getTypesAnnotatedWith(CapabilityHolder.class)) { + Object o = clazz.getDeclaredConstructor().newInstance(); + capabilityHolderInstances.put(clazz, o); + } + } + + private void generateRouterTable() { + generateMethodsRouterTable(); + generateCoordinatedMethodsRouterTable(); + } + + private void generateCoordinatedMethodsRouterTable() { + Set methodsAnnotatedWith = reflections.getMethodsAnnotatedWith(Coordinated.class); + if (methodsAnnotatedWith.isEmpty()) { + return; + } + try { + //获取所有CM实例 + HashMap coordinateManagerInstances = getCoordinateManagerInstances(); + methodsAnnotatedWith.forEach(method -> { + String key = method.getAnnotation(Coordinated.class).capability() + "." + methodSignature(method); + Function function = args -> { + try { + return method.invoke(coordinateManagerInstances.get(key), args); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + }; + coordinatedMethodsRouterTable.put(key, function); + }); + } catch (Exception e) { + throw new FactoryExecuteFailedException("创建协调方法路由表出错", e); + } + + } + + private HashMap getCoordinateManagerInstances() throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { + HashMap map = new HashMap<>(); + for (Class c : reflections.getTypesAnnotatedWith(CoordinateManager.class)) { + Constructor constructor = c.getDeclaredConstructor(); + Object instance = constructor.newInstance(); + + Arrays.stream(c.getMethods()) + .filter(method -> method.isAnnotationPresent(Coordinated.class)) + .forEach(method -> { + String key = method.getAnnotation(Coordinated.class).capability() + "." + methodSignature(method); + map.put(key, instance); + }); + } + return map; + } + + private void generateMethodsRouterTable() { + //扫描`@Capability`与`@CapabilityMethod`注解的类与方法 + //将`capabilityValue.methodSignature`作为key,函数对象为通过反射拿到的core实例对应的方法 + cores.forEach(core -> Arrays.stream(core.getMethods()) + .filter(method -> method.isAnnotationPresent(CapabilityMethod.class)) + .forEach(method -> { + Function function = args -> { + try { + return method.invoke(capabilityCoreInstances.get(core), args); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + }; + String key = core.getAnnotation(CapabilityCore.class).value() + "." + methodSignature(method); + if (methodsRouterTable.containsKey(key)) { + throw new DuplicateMethodException("重复注册能力方法: " + core.getPackage().getName() + "." + core.getSimpleName() + "#" + method.getName()); + } + methodsRouterTable.put(key, function); + })); + } + + private void setCapabilityCoreInstances() { + try { + for (Class core : cores) { + Constructor constructor = core.getDeclaredConstructor(); + constructor.setAccessible(true); + capabilityCoreInstances.put(core, constructor.newInstance()); + } + } catch (InvocationTargetException | NoSuchMethodException | InstantiationException | + IllegalAccessException e) { + throw new CoreInstancesCreateFailedException("core实例创建失败"); + } + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/Capability.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/Capability.java similarity index 85% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/Capability.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/Capability.java index 89dc0c65..cce9c585 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/Capability.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/Capability.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityCore.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityCore.java similarity index 85% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityCore.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityCore.java index 2986491d..44f0fe02 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityCore.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityCore.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityHolder.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityHolder.java similarity index 70% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityHolder.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityHolder.java index f08210de..c686f115 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityHolder.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityHolder.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.*; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityMethod.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityMethod.java similarity index 81% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityMethod.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityMethod.java index 68b2f6a8..bf0957d3 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CapabilityMethod.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CapabilityMethod.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CoordinateManager.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CoordinateManager.java similarity index 81% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CoordinateManager.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CoordinateManager.java index de50b271..b1bb6116 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/CoordinateManager.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/CoordinateManager.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/Coordinated.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/Coordinated.java similarity index 85% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/Coordinated.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/Coordinated.java index c3aa3c3f..47fcf7a8 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/Coordinated.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/Coordinated.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/InjectCapability.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/InjectCapability.java similarity index 82% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/InjectCapability.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/InjectCapability.java index 0070a0d9..78179240 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/InjectCapability.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/InjectCapability.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/ToCoordinated.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/ToCoordinated.java similarity index 88% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/ToCoordinated.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/ToCoordinated.java index 9d76afae..a4dcec69 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/annotation/ToCoordinated.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/annotation/ToCoordinated.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.annotation; +package work.slhaf.partner.api.factory.capability.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/CapabilityCheckFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CapabilityCheckFailedException.java similarity index 84% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/CapabilityCheckFailedException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CapabilityCheckFailedException.java index 6255dffa..7c72f484 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/CapabilityCheckFailedException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CapabilityCheckFailedException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class CapabilityCheckFailedException extends RuntimeException { public CapabilityCheckFailedException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/CoreInstancesCreateFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedException.java similarity index 83% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/CoreInstancesCreateFailedException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedException.java index 2b93e11c..6031b82e 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/CoreInstancesCreateFailedException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class CoreInstancesCreateFailedException extends FactoryExecuteFailedException { public CoreInstancesCreateFailedException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/DuplicateCapabilityException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/DuplicateCapabilityException.java similarity index 82% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/DuplicateCapabilityException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/DuplicateCapabilityException.java index f6a23251..a2b8dc4b 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/DuplicateCapabilityException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/DuplicateCapabilityException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class DuplicateCapabilityException extends CapabilityCheckFailedException { public DuplicateCapabilityException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/DuplicateMethodException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/DuplicateMethodException.java similarity index 81% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/DuplicateMethodException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/DuplicateMethodException.java index 9fedda12..518be014 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/DuplicateMethodException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/DuplicateMethodException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class DuplicateMethodException extends CapabilityCheckFailedException{ public DuplicateMethodException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/EmptyCapabilityHolderException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/EmptyCapabilityHolderException.java similarity index 82% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/EmptyCapabilityHolderException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/EmptyCapabilityHolderException.java index 24d4cc2f..32924d15 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/EmptyCapabilityHolderException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/EmptyCapabilityHolderException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class EmptyCapabilityHolderException extends CapabilityCheckFailedException{ public EmptyCapabilityHolderException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/FactoryExecuteFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/FactoryExecuteFailedException.java similarity index 85% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/FactoryExecuteFailedException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/FactoryExecuteFailedException.java index bd30663c..bd04cad0 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/FactoryExecuteFailedException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/FactoryExecuteFailedException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class FactoryExecuteFailedException extends RuntimeException { public FactoryExecuteFailedException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/ProxySetFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedException.java similarity index 80% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/ProxySetFailedException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedException.java index 9294e484..91ab94da 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/ProxySetFailedException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class ProxySetFailedException extends FactoryExecuteFailedException{ public ProxySetFailedException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCapabilityException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCapabilityException.java similarity index 82% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCapabilityException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCapabilityException.java index 69ca59c7..d1314f93 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCapabilityException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCapabilityException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class UnMatchedCapabilityException extends CapabilityCheckFailedException{ public UnMatchedCapabilityException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCapabilityMethodException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCapabilityMethodException.java similarity index 83% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCapabilityMethodException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCapabilityMethodException.java index 1f60969c..5255a67f 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCapabilityMethodException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCapabilityMethodException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class UnMatchedCapabilityMethodException extends CapabilityCheckFailedException { public UnMatchedCapabilityMethodException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCoordinatedMethodException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCoordinatedMethodException.java similarity index 83% rename from Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCoordinatedMethodException.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCoordinatedMethodException.java index 616499ce..82bc75c3 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/capability/exception/UnMatchedCoordinatedMethodException.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/UnMatchedCoordinatedMethodException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.api.capability.exception; +package work.slhaf.partner.api.factory.capability.exception; public class UnMatchedCoordinatedMethodException extends CapabilityCheckFailedException { public UnMatchedCoordinatedMethodException(String message) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java new file mode 100644 index 00000000..b7c37953 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java @@ -0,0 +1,20 @@ +package work.slhaf.partner.api.factory.entity; + +import work.slhaf.partner.api.factory.capability.exception.FactoryExecuteFailedException; + +import java.lang.reflect.InvocationTargetException; + +public abstract class AgentBaseFactory { + public void execute(AgentRegisterContext context) { + try { + setVariables(context); + run(); + } catch (Exception e) { + throw new FactoryExecuteFailedException(e.getMessage(), e); + } + } + + protected abstract void setVariables(AgentRegisterContext context); + + protected abstract void run() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException; +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentRegisterContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentRegisterContext.java new file mode 100644 index 00000000..29a47bd0 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentRegisterContext.java @@ -0,0 +1,23 @@ +package work.slhaf.partner.api.factory.entity; + +import lombok.Data; +import org.reflections.Reflections; + +import java.util.HashMap; +import java.util.Set; +import java.util.function.Function; + +@Data +public class AgentRegisterContext { + private Reflections reflections; + private final HashMap> methodsRouterTable = new HashMap<>(); + private final HashMap> coordinatedMethodsRouterTable = new HashMap<>(); + private final HashMap, Object> capabilityCoreInstances = new HashMap<>(); + private final HashMap, Object> capabilityHolderInstances = new HashMap<>(); + private Set> cores; + private Set> capabilities; + + public AgentRegisterContext(String path) { + reflections = new Reflections(path); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleCheckFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleCheckFactory.java new file mode 100644 index 00000000..b4f62f93 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleCheckFactory.java @@ -0,0 +1,17 @@ +package work.slhaf.partner.api.factory.module; + +import work.slhaf.partner.api.factory.entity.AgentBaseFactory; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; + +public class ModuleCheckFactory extends AgentBaseFactory { + @Override + protected void setVariables(AgentRegisterContext context) { + + } + + @Override + protected void run() { + //检查注解AgentModule所在类是否继承了AgentInteractionModule + //检查hook注解所在方法是否位于AgentInteractionModule子类/AgentInteractionSubModule子类/ActivateModel子类 + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleHookExecutor.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleHookExecutor.java new file mode 100644 index 00000000..f3dc3b36 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleHookExecutor.java @@ -0,0 +1,4 @@ +package work.slhaf.partner.api.factory.module; + +public class ModuleHookExecutor { +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java new file mode 100644 index 00000000..dcb016d0 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java @@ -0,0 +1,20 @@ +package work.slhaf.partner.api.factory.module; + +import org.reflections.Reflections; +import work.slhaf.partner.api.factory.entity.AgentBaseFactory; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; + +public class ModuleRegisterFactory extends AgentBaseFactory { + + private Reflections reflections; + + @Override + protected void setVariables(AgentRegisterContext context) { + reflections = context.getReflections(); + } + + @Override + protected void run() { + //反射扫描获取InteractionModule所在类与hook注解所在方法 + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/After.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/After.java new file mode 100644 index 00000000..03baf1a0 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/After.java @@ -0,0 +1,13 @@ +package work.slhaf.partner.api.factory.module.annotation; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface After { + int order() default 0; +} \ No newline at end of file diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java new file mode 100644 index 00000000..c12e6c33 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java @@ -0,0 +1,24 @@ +package work.slhaf.partner.api.factory.module.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 用于注解执行模块 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface AgentModule { + + /** + * 模块名称 + */ + String name(); + + /** + * 模块执行顺序,数字越小执行越靠前 + */ + int order(); +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/Before.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/Before.java new file mode 100644 index 00000000..b296bad5 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/Before.java @@ -0,0 +1,12 @@ +package work.slhaf.partner.api.factory.module.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Before { + int order() default 0; +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/AgentInteraction.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/AgentInteraction.java new file mode 100644 index 00000000..016f023e --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/AgentInteraction.java @@ -0,0 +1,15 @@ +package work.slhaf.partner.api.flow; + +import work.slhaf.partner.api.entity.AgentContext; + +/** + * Agent执行流程 + */ +public class AgentInteraction { + + private AgentInteraction(){} + + public static void launch(AgentContext context){ + //流程执行启动,需考虑模块热插拔,可结合http调整模块启用情况,并序列化至本地或数据库中 + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java new file mode 100644 index 00000000..5e2a2e19 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java @@ -0,0 +1,74 @@ +package work.slhaf.partner.api.flow.abstracts; + +import work.slhaf.partner.api.common.chat.ChatClient; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.factory.module.annotation.Before; + +import java.util.ArrayList; +import java.util.List; + +public interface ActivateModel { + + + @Before + default void modelSettings() { +// Model model = new Model(); +// ModelConfig modelConfig = ModelConfig.load(modelKey()); +// model.setBaseMessages(withAwareness() ? ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey(), promptModule()) : ResourcesUtil.Prompt.loadPrompt(modelKey(), promptModule())); +// model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel())); + } + + default ChatResponse chat() { + Model model = getModel(); + List temp = new ArrayList<>(); + temp.addAll(model.getBaseMessages()); + temp.addAll(model.getChatMessages()); + return model.getChatClient().runChat(temp); + } + + default ChatResponse singleChat(String input) { + Model model = getModel(); + List temp = new ArrayList<>(model.getBaseMessages()); + temp.add(new Message(ChatConstant.Character.USER, input)); + return model.getChatClient().runChat(temp); + } + + default void updateChatClientSettings() { + Model model = getModel(); + model.getChatClient().setTemperature(0.4); + model.getChatClient().setTop_p(0.8); + } + + default List chatMessages() { + return getModel().getChatMessages(); + } + + default List baseMessages() { + return getModel().getBaseMessages(); + } + + default ChatClient chatClient() { + return getModel().getChatClient(); + } + + /** + * 仅适用Module子类,否则需要重写 + * + * @return 持有的model实例 + */ + default Model getModel() { + return ((Module) this).getModel(); + } + + default void setModel(Model model) { + ((Module) this).setModel(model); + } + + String modelKey(); + + boolean withAwareness(); + + String promptModule(); +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionModule.java new file mode 100644 index 00000000..43dcf97a --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionModule.java @@ -0,0 +1,10 @@ +package work.slhaf.partner.api.flow.abstracts; + +import work.slhaf.partner.api.flow.entity.InteractionFlowContext; + +/** + * 流程执行模块基类 + */ +public abstract class AgentInteractionModule extends Module { + public abstract void execute(InteractionFlowContext context); +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionSubModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionSubModule.java new file mode 100644 index 00000000..ab243ed7 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/AgentInteractionSubModule.java @@ -0,0 +1,13 @@ +package work.slhaf.partner.api.flow.abstracts; + + +/** + * 流程子模块基类 + * @param 输入类型 + * @param 输出类型 + */ +public abstract class AgentInteractionSubModule extends Module { + + public abstract O execute(I data); + +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/model/Model.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Model.java similarity index 55% rename from Partner-Main/src/main/java/work/slhaf/partner/module/common/model/Model.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Model.java index 82e8efe6..82b24bc7 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/model/Model.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Model.java @@ -1,8 +1,8 @@ -package work.slhaf.partner.module.common.model; +package work.slhaf.partner.api.flow.abstracts; import lombok.Data; -import work.slhaf.partner.common.chat.ChatClient; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.ChatClient; +import work.slhaf.partner.api.common.chat.pojo.Message; import java.util.List; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java new file mode 100644 index 00000000..acdbec1f --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java @@ -0,0 +1,14 @@ +package work.slhaf.partner.api.flow.abstracts; + +import lombok.Getter; +import lombok.Setter; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityHolder; + +@CapabilityHolder +public abstract class Module { + + @Getter + @Setter + protected Model model = new Model(); + +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/entity/InteractionFlowContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/entity/InteractionFlowContext.java new file mode 100644 index 00000000..950c1890 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/entity/InteractionFlowContext.java @@ -0,0 +1,10 @@ +package work.slhaf.partner.api.flow.entity; + +import lombok.Data; + +/** + * 流程上下文 + */ +@Data +public class InteractionFlowContext { +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/module/ModuleRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/module/ModuleRegisterFactory.java deleted file mode 100644 index 54f8d1b5..00000000 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/module/ModuleRegisterFactory.java +++ /dev/null @@ -1,4 +0,0 @@ -package work.slhaf.partner.api.module; - -public class ModuleRegisterFactory { -} diff --git a/Partner-Main/pom.xml b/Partner-Main/pom.xml index bdf6e327..6abb0aa0 100644 --- a/Partner-Main/pom.xml +++ b/Partner-Main/pom.xml @@ -12,21 +12,6 @@ Partner-Main - - com.alibaba - fastjson - 2.0.56 - - - commons-io - commons-io - 2.18.0 - - - cn.hutool - hutool-all - 5.8.36 - org.java-websocket Java-WebSocket diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java b/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java index 24f43ae9..1724d843 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java @@ -101,7 +101,6 @@ public class Config { new ModuleConfig(CoreModel.class.getName(), ModuleConfig.Constant.INTERNAL, null), new ModuleConfig(PostprocessExecutor.class.getName(),ModuleConfig.Constant.INTERNAL,null), new ModuleConfig(MemoryUpdater.class.getName(), ModuleConfig.Constant.INTERNAL, null) -// new ModuleConfig(TaskScheduler.class.getName(), ModuleConfig.Constant.INTERNAL, null) ); config.setModuleConfigList(moduleConfigList); } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java index fd88a748..7c60bb38 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java @@ -2,7 +2,7 @@ package work.slhaf.partner.common.exception_handler.pojo; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.cognation.cognation.CognationCore; import work.slhaf.partner.core.interaction.data.context.InteractionContext; import work.slhaf.partner.core.session.SessionManager; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java b/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java index 530e24b9..60091270 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java @@ -2,7 +2,7 @@ package work.slhaf.partner.common.util; import com.alibaba.fastjson2.JSONArray; import work.slhaf.partner.Agent; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import java.io.InputStream; import java.nio.charset.StandardCharsets; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java index 9718de2a..a40a4a9e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java @@ -2,9 +2,9 @@ package work.slhaf.partner.core.cognation; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.CoordinateManager; -import work.slhaf.partner.api.capability.annotation.Coordinated; -import work.slhaf.partner.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.factory.capability.annotation.CoordinateManager; +import work.slhaf.partner.api.factory.capability.annotation.Coordinated; import work.slhaf.partner.common.exception_handler.GlobalExceptionHandler; import work.slhaf.partner.common.exception_handler.pojo.GlobalException; import work.slhaf.partner.core.cognation.cognation.CognationCore; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java index 6e583788..5cf4e0d3 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java @@ -1,9 +1,9 @@ package work.slhaf.partner.core.cognation.cognation; -import work.slhaf.partner.api.capability.annotation.Capability; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; -import work.slhaf.partner.api.capability.annotation.ToCoordinated; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.factory.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; +import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated; import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; import java.util.HashMap; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java index b7897028..8302e89e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java @@ -4,9 +4,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.common.entity.PersistableObject; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.core.cognation.cognation.pojo.ActiveData; import work.slhaf.partner.core.cognation.submodule.cache.CacheCore; import work.slhaf.partner.core.cognation.submodule.memory.MemoryCore; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java index 45528557..8f538b06 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java @@ -2,7 +2,7 @@ package work.slhaf.partner.core.cognation.common.pojo; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java index 49922aad..03591b62 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java @@ -3,7 +3,7 @@ package work.slhaf.partner.core.cognation.common.pojo; import com.alibaba.fastjson2.annotation.JSONField; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java index 03e8a009..93630fbf 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java @@ -1,6 +1,6 @@ package work.slhaf.partner.core.cognation.submodule.cache; -import work.slhaf.partner.api.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.Capability; import java.time.LocalDateTime; import java.util.HashMap; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java index 7077da0a..2adb9f4f 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java @@ -3,9 +3,9 @@ package work.slhaf.partner.core.cognation.submodule.cache; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java index b52734e3..af720747 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java @@ -1,6 +1,6 @@ package work.slhaf.partner.core.cognation.submodule.dispatch; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.cognation.submodule.dispatch.pojo.DispatchData; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java index 678f8ceb..cb35be9f 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java @@ -1,7 +1,7 @@ package work.slhaf.partner.core.cognation.submodule.memory; -import work.slhaf.partner.api.capability.annotation.Capability; -import work.slhaf.partner.api.capability.annotation.ToCoordinated; +import work.slhaf.partner.api.factory.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated; import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java index 5c17e60e..f99a377d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java @@ -2,9 +2,9 @@ package work.slhaf.partner.core.cognation.submodule.memory; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; import work.slhaf.partner.core.cognation.common.pojo.MemorySliceResult; import work.slhaf.partner.core.cognation.submodule.memory.exception.UnExistedDateIndexException; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java index 2e37ded7..468210b3 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java @@ -3,7 +3,7 @@ package work.slhaf.partner.core.cognation.submodule.memory.pojo; import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; import java.time.LocalDate; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java index 4409cb27..36719fea 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java @@ -3,8 +3,8 @@ package work.slhaf.partner.core.cognation.submodule.memory.pojo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java index 991e2565..a6a14d07 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java @@ -3,7 +3,7 @@ package work.slhaf.partner.core.cognation.submodule.memory.pojo.node; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.cognation.submodule.memory.exception.NullSliceListException; import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java index b16a5ff1..fb7119eb 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java @@ -2,7 +2,7 @@ package work.slhaf.partner.core.cognation.submodule.memory.pojo.node; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; import java.util.concurrent.ConcurrentHashMap; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java index 2c96e8f7..13d119f4 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java @@ -1,6 +1,6 @@ package work.slhaf.partner.core.cognation.submodule.perceive; -import work.slhaf.partner.api.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.Capability; import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; @Capability(value = "perceive") diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java index dda1e6f1..3345c12b 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java @@ -2,9 +2,9 @@ package work.slhaf.partner.core.cognation.submodule.perceive; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.core.cognation.cognation.exception.UserNotExistsException; import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java index 3e3b3e8d..4afb6774 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java @@ -2,7 +2,7 @@ package work.slhaf.partner.core.cognation.submodule.perceive.pojo; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; import java.time.LocalDate; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java index c7fabf8c..ad94a3d7 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java @@ -3,7 +3,7 @@ package work.slhaf.partner.core.interaction.data.context; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.interaction.data.context.subcontext.CoreContext; import work.slhaf.partner.core.interaction.data.context.subcontext.ModuleContext; import work.slhaf.partner.module.common.entity.AppendPromptData; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java index 8cf4654e..6beac340 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java @@ -3,7 +3,7 @@ package work.slhaf.partner.core.interaction.data.context.subcontext; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; import java.util.HashMap; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java index 4fd9d630..93d05d0a 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java @@ -3,7 +3,7 @@ package work.slhaf.partner.core.interaction.data.context.subcontext; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.module.common.entity.AppendPromptData; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java b/Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java index 24de47f5..b3f561c5 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java @@ -4,10 +4,10 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.chat.pojo.MetaMessage; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.MetaMessage; +import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.common.config.Config; -import work.slhaf.partner.common.serialize.PersistableObject; import java.io.*; import java.nio.file.Files; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/entity/AppendPromptData.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/entity/AppendPromptData.java index 58dcf689..050158c0 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/entity/AppendPromptData.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/entity/AppendPromptData.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.common.entity; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.serialize.PersistableObject; +import work.slhaf.partner.api.common.entity.PersistableObject; import java.io.Serial; import java.util.HashMap; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/model/ActivateModel.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/model/ActivateModel.java deleted file mode 100644 index e3df4ef6..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/model/ActivateModel.java +++ /dev/null @@ -1,75 +0,0 @@ -package work.slhaf.partner.module.common.model; - -import work.slhaf.partner.common.chat.ChatClient; -import work.slhaf.partner.common.chat.constant.ChatConstant; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.config.ModelConfig; -import work.slhaf.partner.common.util.ResourcesUtil; -import work.slhaf.partner.module.common.module.Module; - -import java.util.ArrayList; -import java.util.List; - -public interface ActivateModel { - - default void modelSettings() { - Model model = new Model(); - ModelConfig modelConfig = ModelConfig.load(modelKey()); - model.setBaseMessages(withAwareness() ? ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey(), promptModule()) : ResourcesUtil.Prompt.loadPrompt(modelKey(), promptModule())); - model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel())); - } - - default ChatResponse chat() { - Model model = getModel(); - List temp = new ArrayList<>(); - temp.addAll(model.baseMessages); - temp.addAll(model.chatMessages); - return model.chatClient.runChat(temp); - } - - default ChatResponse singleChat(String input) { - Model model = getModel(); - List temp = new ArrayList<>(model.baseMessages); - temp.add(new Message(ChatConstant.Character.USER, input)); - return model.chatClient.runChat(temp); - } - - default void updateChatClientSettings() { - Model model = getModel(); - model.chatClient.setTemperature(0.4); - model.chatClient.setTop_p(0.8); - } - - default List chatMessages() { - return getModel().getChatMessages(); - } - - default List baseMessages() { - return getModel().getBaseMessages(); - } - - default ChatClient chatClient() { - return getModel().getChatClient(); - } - - /** - * 仅适用Module子类,否则需要重写 - * - * @return 持有的model实例 - */ - default Model getModel() { - return ((Module) this).getModel(); - } - - default void setModel(Model model) { - ((Module) this).setModel(model); - } - - String modelKey(); - - boolean withAwareness(); - - String promptModule(); - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java index e6537d82..adb9ecab 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java @@ -2,6 +2,6 @@ package work.slhaf.partner.module.common.module; import work.slhaf.partner.core.interaction.module.InteractionFlow; -public abstract class InteractionModule extends Module implements InteractionFlow { +public abstract class InteractionModule/* extends Module*/ implements InteractionFlow { } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/Module.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/Module.java deleted file mode 100644 index 5f2284ff..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/Module.java +++ /dev/null @@ -1,15 +0,0 @@ -package work.slhaf.partner.module.common.module; - -import lombok.Getter; -import lombok.Setter; -import work.slhaf.partner.api.capability.annotation.CapabilityHolder; -import work.slhaf.partner.module.common.model.Model; - -@CapabilityHolder -public abstract class Module { - - @Getter - @Setter - protected Model model; - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/SubModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/SubModule.java deleted file mode 100644 index dd0c4f48..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/SubModule.java +++ /dev/null @@ -1,13 +0,0 @@ -package work.slhaf.partner.module.common.module; - - -/** - * 子模块基类 - * @param 输入类型 - * @param 输出类型 - */ -public abstract class SubModule extends Module { - - public abstract O execute(I data); - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java index b28346e4..f956ba38 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java @@ -4,16 +4,16 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; -import work.slhaf.partner.common.chat.constant.ChatConstant; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.chat.pojo.MetaMessage; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.MetaMessage; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.interaction.data.context.InteractionContext; import work.slhaf.partner.core.session.SessionManager; import work.slhaf.partner.module.common.entity.AppendPromptData; -import work.slhaf.partner.module.common.model.ActivateModel; import work.slhaf.partner.module.common.model.ModelConstant; import work.slhaf.partner.module.common.module.CoreModule; @@ -46,7 +46,7 @@ public class CoreModel extends CoreModule implements ActivateModel { synchronized (CoreModel.class) { if (coreModel == null) { coreModel = new CoreModel(); - coreModel.model.setChatMessages(coreModel.cognationCapability.getChatMessages()); + coreModel.getModel().setChatMessages(coreModel.cognationCapability.getChatMessages()); coreModel.appendedMessages = new ArrayList<>(); coreModel.sessionManager = SessionManager.getInstance(); coreModel.updateChatClientSettings(); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java index 9e9c0028..ffe2855d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; import work.slhaf.partner.core.cognation.submodule.cache.CacheCapability; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java index a0d71b8b..2e816280 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java @@ -6,14 +6,14 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; import work.slhaf.partner.core.cognation.common.pojo.MemorySliceResult; import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; -import work.slhaf.partner.module.common.model.ActivateModel; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorBatchInput; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorResult; @@ -31,7 +31,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractJson; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class SliceSelectEvaluator extends SubModule> implements ActivateModel { +public class SliceSelectEvaluator extends AgentInteractionSubModule> implements ActivateModel { private static volatile SliceSelectEvaluator sliceSelectEvaluator; private InteractionThreadPoolExecutor executor; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java index c21a13d4..f6c6c775 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorBatchInput.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.modules.memory.selector.evaluator.data; import lombok.Builder; import lombok.Data; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java index defaf878..7a494d66 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/data/EvaluatorInput.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.modules.memory.selector.evaluator.data; import lombok.Builder; import lombok.Data; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java index ea245275..0257b88f 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/MemorySelectExtractor.java @@ -5,9 +5,11 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; -import work.slhaf.partner.common.chat.pojo.Message; -import work.slhaf.partner.common.chat.pojo.MetaMessage; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.MetaMessage; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.common.exception_handler.GlobalExceptionHandler; import work.slhaf.partner.common.exception_handler.pojo.GlobalException; import work.slhaf.partner.core.cognation.cognation.CognationCapability; @@ -15,9 +17,7 @@ import work.slhaf.partner.core.cognation.submodule.memory.MemoryCapability; import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; import work.slhaf.partner.core.interaction.data.context.InteractionContext; import work.slhaf.partner.core.session.SessionManager; -import work.slhaf.partner.module.common.model.ActivateModel; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorInput; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorMatchData; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorResult; @@ -32,7 +32,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.fixTopicPath; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class MemorySelectExtractor extends SubModule implements ActivateModel { +public class MemorySelectExtractor extends AgentInteractionSubModule implements ActivateModel { private static volatile MemorySelectExtractor memorySelectExtractor; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java index 2bc631c6..80a032c4 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.modules.memory.selector.extractor.data; import lombok.Builder; import lombok.Data; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; import java.time.LocalDate; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java index f21d99db..facc5ca9 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java @@ -4,9 +4,9 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; -import work.slhaf.partner.common.chat.constant.ChatConstant; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.cognation.submodule.cache.CacheCapability; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MemorySummarizer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MemorySummarizer.java index 3f52e90f..5f95fe38 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MemorySummarizer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MemorySummarizer.java @@ -3,8 +3,8 @@ package work.slhaf.partner.module.modules.memory.updater.summarizer; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.module.common.module.SubModule; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeInput; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeResult; @@ -13,7 +13,7 @@ import java.util.HashMap; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class MemorySummarizer extends SubModule { +public class MemorySummarizer extends AgentInteractionSubModule { private static volatile MemorySummarizer memorySummarizer; public static final String MODEL_KEY = "memory_summarizer"; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java index ce727450..0648e1ce 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MultiSummarizer.java @@ -5,10 +5,10 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.module.common.model.ActivateModel; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeInput; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeResult; @@ -21,7 +21,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.fixTopicPath; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class MultiSummarizer extends SubModule implements ActivateModel { +public class MultiSummarizer extends AgentInteractionSubModule implements ActivateModel { private static volatile MultiSummarizer multiSummarizer; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/SingleSummarizer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/SingleSummarizer.java index df590879..c9603a61 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/SingleSummarizer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/SingleSummarizer.java @@ -4,13 +4,13 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.chat.constant.ChatConstant; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.module.common.model.ActivateModel; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import java.util.ArrayList; import java.util.List; @@ -21,7 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger; @EqualsAndHashCode(callSuper = true) @Slf4j @Data -public class SingleSummarizer extends SubModule,Void> implements ActivateModel { +public class SingleSummarizer extends AgentInteractionSubModule,Void> implements ActivateModel { private static volatile SingleSummarizer singleSummarizer; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java index 9219d210..a1326129 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java @@ -5,10 +5,10 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.module.common.model.ActivateModel; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import java.util.HashMap; @@ -17,7 +17,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractJson; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class TotalSummarizer extends SubModule, String> implements ActivateModel { +public class TotalSummarizer extends AgentInteractionSubModule, String> implements ActivateModel { private static volatile TotalSummarizer totalSummarizer; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java index ccd99291..0df51623 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/data/SummarizeInput.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.modules.memory.updater.summarizer.data; import lombok.AllArgsConstructor; import lombok.Data; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java index 2693c7ff..a1c5eca9 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.modules.perceive.selector; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; import work.slhaf.partner.core.interaction.data.context.InteractionContext; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java index 0c32cda4..e84b7bfa 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java @@ -3,7 +3,7 @@ package work.slhaf.partner.module.modules.perceive.updater; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java index bf17caeb..98c23e67 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java @@ -3,15 +3,15 @@ package work.slhaf.partner.module.modules.perceive.updater.relation_extractor; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.module.common.model.ActivateModel; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractInput; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult; @@ -22,7 +22,7 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data -public class RelationExtractor extends SubModule implements ActivateModel { +public class RelationExtractor extends AgentInteractionSubModule implements ActivateModel { private static volatile RelationExtractor relationExtractor; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java index c562b2bc..fb749748 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/pojo/RelationExtractInput.java @@ -1,7 +1,7 @@ package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo; import lombok.Data; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import java.util.HashMap; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java index ae2906a3..9a58bd17 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java @@ -4,14 +4,14 @@ import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.capability.annotation.InjectCapability; -import work.slhaf.partner.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.flow.abstracts.AgentInteractionSubModule; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.module.common.model.ActivateModel; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.SubModule; import work.slhaf.partner.module.modules.perceive.updater.static_extractor.data.StaticMemoryExtractInput; import java.io.IOException; @@ -19,7 +19,7 @@ import java.util.HashMap; @EqualsAndHashCode(callSuper = true) @Data -public class StaticMemoryExtractor extends SubModule> implements ActivateModel { +public class StaticMemoryExtractor extends AgentInteractionSubModule> implements ActivateModel { private static volatile StaticMemoryExtractor staticMemoryExtractor; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java index e32ea576..ec551d30 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/data/StaticMemoryExtractInput.java @@ -2,7 +2,7 @@ package work.slhaf.partner.module.modules.perceive.updater.static_extractor.data import lombok.Builder; import lombok.Data; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.pojo.Message; import java.util.List; import java.util.Map; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java index dc9a359a..df4b3e20 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java @@ -3,7 +3,7 @@ package work.slhaf.partner.module.modules.process; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.interaction.data.context.InteractionContext; import work.slhaf.partner.module.common.module.PostModule; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java index 8ad61760..e3b37140 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java @@ -2,8 +2,8 @@ package work.slhaf.partner.module.modules.process; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.CapabilityHolder; -import work.slhaf.partner.api.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityHolder; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.core.cognation.cognation.CognationCapability; import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; diff --git a/Partner-Main/src/test/java/SelfAwarenessTest.java b/Partner-Main/src/test/java/SelfAwarenessTest.java index b6127c8a..e7602626 100644 --- a/Partner-Main/src/test/java/SelfAwarenessTest.java +++ b/Partner-Main/src/test/java/SelfAwarenessTest.java @@ -1,9 +1,9 @@ import cn.hutool.json.JSONUtil; import org.junit.jupiter.api.Test; -import work.slhaf.partner.common.chat.ChatClient; -import work.slhaf.partner.common.chat.constant.ChatConstant; -import work.slhaf.partner.common.chat.pojo.ChatResponse; -import work.slhaf.partner.common.chat.pojo.Message; +import work.slhaf.partner.api.common.chat.ChatClient; +import work.slhaf.partner.api.common.chat.constant.ChatConstant; +import work.slhaf.partner.api.common.chat.pojo.ChatResponse; +import work.slhaf.partner.api.common.chat.pojo.Message; import work.slhaf.partner.common.config.ModelConfig; import work.slhaf.partner.common.util.ResourcesUtil; import work.slhaf.partner.module.common.model.ModelConstant; diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/MyCognationManager.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/MyCognationManager.java index 27afa1c2..d4719799 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/MyCognationManager.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/MyCognationManager.java @@ -1,8 +1,8 @@ package work.slhaf.demo; -import work.slhaf.partner.api.capability.annotation.CoordinateManager; -import work.slhaf.partner.api.capability.annotation.Coordinated; +import work.slhaf.partner.api.factory.capability.annotation.CoordinateManager; +import work.slhaf.partner.api.factory.capability.annotation.Coordinated; import java.util.List; diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/TestModule.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/TestModule.java index 9167f529..833c245b 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/TestModule.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/TestModule.java @@ -1,8 +1,8 @@ package work.slhaf.demo; import work.slhaf.demo.ability.MemoryCapability; -import work.slhaf.partner.api.capability.annotation.CapabilityHolder; -import work.slhaf.partner.api.capability.annotation.InjectCapability; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityHolder; +import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; @CapabilityHolder public class TestModule { diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/CacheCapability.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/CacheCapability.java index bd2c439a..a0049e60 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/CacheCapability.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/CacheCapability.java @@ -2,7 +2,7 @@ package work.slhaf.demo.ability; -import work.slhaf.partner.api.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.Capability; import java.time.LocalDateTime; import java.util.HashMap; diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/MemoryCapability.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/MemoryCapability.java index a3152058..58156171 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/MemoryCapability.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/MemoryCapability.java @@ -1,8 +1,8 @@ package work.slhaf.demo.ability; -import work.slhaf.partner.api.capability.annotation.Capability; -import work.slhaf.partner.api.capability.annotation.ToCoordinated; +import work.slhaf.partner.api.factory.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated; import java.util.List; diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/PerceiveCapability.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/PerceiveCapability.java index bf7a33c4..541d38af 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/PerceiveCapability.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/ability/PerceiveCapability.java @@ -1,7 +1,7 @@ package work.slhaf.demo.ability; -import work.slhaf.partner.api.capability.annotation.Capability; +import work.slhaf.partner.api.factory.capability.annotation.Capability; @Capability(value = "perceive") public interface PerceiveCapability { diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/CacheCore.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/CacheCore.java index 36ede4fd..5946d26d 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/CacheCore.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/CacheCore.java @@ -1,8 +1,8 @@ package work.slhaf.demo.core; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; import java.time.LocalDateTime; import java.util.HashMap; diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/MemoryCore.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/MemoryCore.java index 5eb6cca4..8934f03f 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/MemoryCore.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/MemoryCore.java @@ -1,8 +1,8 @@ package work.slhaf.demo.core; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; import java.util.ArrayList; import java.util.List; diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/PerceiveCore.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/PerceiveCore.java index 91f176fb..cf34d363 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/PerceiveCore.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/core/PerceiveCore.java @@ -1,8 +1,8 @@ package work.slhaf.demo.core; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.capability.annotation.CapabilityCore; -import work.slhaf.partner.api.capability.annotation.CapabilityMethod; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.factory.capability.annotation.CapabilityMethod; @CapabilityCore(value = "perceive") @Slf4j diff --git a/README.md b/README.md index 3e7ecc48..7780fb8f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,13 @@ ### 针对LLM的'自我引导'机制 > 通过特定的交互对话, 引导LLM产生一定的'自我定位'特征, 但似乎大多数模型都不太适合(要么幻觉严重, 要么工具底色太强), 经测试, qwen3系列的qwen-plus-latest、qwen-max-latest比较合适. +### 基于注解驱动的核心服务与上层模块注册机制 +结合自定义注解通过反射获取核心服务类,并根据其中的特定方法生成函数路由表. +上层模块调用时将通过相应的接口进行调用.接口不需要具备实现类,将通过动态代理进行注入,并在代理内部转发给生成的函数路由表. +该部分主要是为了处理原有的`CognitionManager`门面类中每添加一个核心服务就需要增加大量转发方法的问题,通过注解+反射+动态代理,可以实现类似Spring风格的自动注入模式,同时结合`CoordinateManager`,也可以针对不同的核心服务进行协调处理,这时将生成另一个路由表`coordinatedMethodsRouterTable`,它的运作方式与`methodsRouterTable`一样,都会在接口实际调用时进入的代理中被真正执行. +> 在添加了这个机制后,实际上还是相当于取消了原CM门面类的作用,而是替换为了`CoordinateManager`充当协调类,仍然通过接口暴露核心能力,但统一转发到两个路由表中进行真正的执行操作. +> 这对于上层模块的调用来说,实际上与原来相比改变前后上层模块都不需要关注核心服务的实现逻辑,更多的还是侧重于简化了CM的注册流程吧. + ## 模块(已实现/正在实现) - 预处理模块: `PreprocessExecutor` - 后处理模块: `PostprocessExecutor` @@ -39,12 +46,12 @@ ## 规划 -- [ ] 调整模块加载机制,将记忆模块以及后续的任务调度模块作为不可替换的核心模块,但允许在主模块与前后模块之间添加新的模块。 -- [ ] 实现流式输出,同时在各模块执行时可向客户端返回回调信息,优化使用体验。(现在用的是`websocket`与客户端通信, 应该实现这点会简单些) -- [ ] 服务端与客户端的通信加上消息队列,防止消息因连接断开而丢失。 -- [ ] 实现角色演进机制 -- [ ] 实现任务调度模块(主动调度、意图推断、定时调度) +- [ ] 完善注解驱动的注册机制 - [ ] 实现任务与主动调度模块,目前打算用 `时间轮算法` 实现定时操作 +- [ ] 服务端与客户端的通信加上消息队列,防止消息因连接断开而丢失。 +- [ ] 实现流式输出,同时在各模块执行时可向客户端返回回调信息,优化使用体验。(现在用的是`websocket`与客户端通信, 应该实现这点会简单些) +- [ ] 实现角色演进机制 +- [ ] 调整模块加载机制,将记忆模块以及后续的任务调度模块作为不可替换的核心模块,但允许在主模块与前后模块之间添加新的模块。 - [ ] 踩坑。 ## License diff --git a/pom.xml b/pom.xml index a371ef48..b7287697 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,21 @@ logback-classic 1.5.17 + + commons-io + commons-io + 2.18.0 + + + cn.hutool + hutool-all + 5.8.36 + + + com.alibaba + fastjson + 2.0.56 +