From 3c2ac3270870012f3f95863d15676f502fa12f8b Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Thu, 18 Sep 2025 16:03:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=9C=AC=E4=BD=93?= =?UTF-8?q?=E4=B8=8E=E6=A1=86=E6=9E=B6=E7=9A=84=E9=80=82=E9=85=8D=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=EF=BC=8C=E5=B9=B6=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=9F=90?= =?UTF-8?q?=E4=BA=9B=E9=97=AE=E9=A2=98=E3=80=82=E9=9C=80=E8=A6=81=E8=BF=9B?= =?UTF-8?q?=E4=B8=80=E6=AD=A5=E8=BF=9B=E8=A1=8C=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复了 CognationCapability 相关的注解使用错误 - 将前置模块中的 setAppendedPrompt 与 setActiveModule 方法抽取到 execute 模板方法中 - 完善了已有模块的适配工作, 并去除了不必要的单例配置 --- .idea/misc.xml | 12 +- .../agent/factory/AgentRegisterFactory.java | 2 +- .../capability/CapabilityCheckFactory.java | 1 - .../factory/context/ModuleFactoryContext.java | 2 - .../factory/module/ModuleCheckFactory.java | 5 +- .../module/ModuleInitHookExecuteFactory.java | 5 +- .../factory/module/ModuleProxyFactory.java | 5 +- .../module/annotation/AgentModule.java | 5 +- .../module/annotation/AgentSubModule.java | 5 +- .../factory/module/pojo/BaseMetaModule.java | 1 - .../flow/abstracts/ActivateModel.java | 5 +- .../partner/api/agent/util/AgentUtil.java | 6 +- .../partner/core/CoordinatedManager.java | 6 +- .../core/cognation/CognationCapability.java | 22 ---- .../partner/core/cognation/CognationCore.java | 19 ++++ .../core/submodule/cache/CacheCore.java | 2 +- .../submodule/memory/MemoryCapability.java | 2 +- .../core/submodule/memory/MemoryCore.java | 4 +- .../memory}/pojo/MemoryResult.java | 3 +- .../memory}/pojo/MemorySliceResult.java | 3 +- .../common/module/PreRunningModule.java | 25 ++++- .../module/modules/core/CoreModel.java | 12 +- .../memory/selector/MemorySelector.java | 15 +-- .../evaluator/SliceSelectEvaluator.java | 5 +- .../evaluator/data/EvaluatorInput.java | 2 +- .../extractor/MemorySelectExtractor.java | 6 +- .../modules/memory/updater/MemoryUpdater.java | 103 ++++++++---------- .../updater/summarizer/MemorySummarizer.java | 52 --------- .../updater/summarizer/MultiSummarizer.java | 18 +-- .../updater/summarizer/SingleSummarizer.java | 22 +--- .../updater/summarizer/TotalSummarizer.java | 23 +--- .../perceive/selector/PerceiveSelector.java | 25 +---- .../perceive/updater/PerceiveUpdater.java | 32 +++--- .../relation_extractor/RelationExtractor.java | 23 +--- .../StaticMemoryExtractor.java | 20 +--- .../modules/process/PostprocessExecutor.java | 16 +-- .../modules/process/PreprocessExecutor.java | 74 ++++++------- .../module/modules/task/TaskScheduler.java | 4 +- .../exception/pojo/GlobalException.java | 3 - .../PartnerInteractionAdapter.java | 2 + .../context/PartnerRunningFlowContext.java | 3 +- .../src/test/java/ReflectionTest.java | 2 +- 42 files changed, 233 insertions(+), 369 deletions(-) rename Partner-Main/src/main/java/work/slhaf/partner/core/{common => submodule/memory}/pojo/MemoryResult.java (86%) rename Partner-Main/src/main/java/work/slhaf/partner/core/{common => submodule/memory}/pojo/MemorySliceResult.java (83%) delete mode 100644 Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MemorySummarizer.java diff --git a/.idea/misc.xml b/.idea/misc.xml index f01d6df0..d7b37c98 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,7 @@ - + @@ -9,10 +9,12 @@ - - - - + + + + + + diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/AgentRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/AgentRegisterFactory.java index 472ddb3b..9e1e1350 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/AgentRegisterFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/AgentRegisterFactory.java @@ -14,8 +14,8 @@ import work.slhaf.partner.api.agent.factory.module.ModuleInitHookExecuteFactory; import work.slhaf.partner.api.agent.factory.module.ModuleProxyFactory; import work.slhaf.partner.api.agent.factory.module.ModuleRegisterFactory; import work.slhaf.partner.api.agent.factory.module.pojo.MetaModule; -import work.slhaf.partner.api.agent.runtime.data.AgentContext; import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; +import work.slhaf.partner.api.agent.runtime.data.AgentContext; import work.slhaf.partner.api.agent.runtime.interaction.flow.AgentRunningFlow; import java.io.File; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityCheckFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityCheckFactory.java index 00d59a0b..5f140e07 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityCheckFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityCheckFactory.java @@ -9,7 +9,6 @@ import work.slhaf.partner.api.agent.factory.capability.exception.UnMatchedCapabi import work.slhaf.partner.api.agent.factory.capability.exception.UnMatchedCoordinatedMethodException; import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext; import work.slhaf.partner.api.agent.factory.context.CapabilityFactoryContext; -import work.slhaf.partner.api.agent.factory.module.ModuleCheckFactory; import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; import work.slhaf.partner.api.agent.util.AgentUtil; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/context/ModuleFactoryContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/context/ModuleFactoryContext.java index 14feb990..39357b51 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/context/ModuleFactoryContext.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/context/ModuleFactoryContext.java @@ -3,8 +3,6 @@ package work.slhaf.partner.api.agent.factory.context; import lombok.Data; import work.slhaf.partner.api.agent.factory.module.pojo.MetaModule; import work.slhaf.partner.api.agent.factory.module.pojo.MetaSubModule; -import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; -import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import java.util.ArrayList; import java.util.List; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java index 9f4eefa9..5901ff9c 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleCheckFactory.java @@ -4,7 +4,10 @@ import cn.hutool.core.util.ClassUtil; import org.reflections.Reflections; import work.slhaf.partner.api.agent.factory.AgentBaseFactory; import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext; -import work.slhaf.partner.api.agent.factory.module.annotation.*; +import work.slhaf.partner.api.agent.factory.module.annotation.AfterExecute; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; +import work.slhaf.partner.api.agent.factory.module.annotation.BeforeExecute; import work.slhaf.partner.api.agent.factory.module.exception.ModuleCheckException; import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleInitHookExecuteFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleInitHookExecuteFactory.java index c8d17722..55e569fb 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleInitHookExecuteFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleInitHookExecuteFactory.java @@ -14,7 +14,10 @@ import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunn import work.slhaf.partner.api.agent.util.AgentUtil; import java.lang.reflect.InvocationTargetException; -import java.util.*; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import static work.slhaf.partner.api.agent.util.AgentUtil.collectExtendedClasses; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java index 9fa617bf..ae077c6e 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/ModuleProxyFactory.java @@ -21,7 +21,6 @@ import work.slhaf.partner.api.agent.factory.module.pojo.MetaSubModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.Module; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.Callable; @@ -146,8 +145,8 @@ public class ModuleProxyFactory extends AgentBaseFactory { List pre = new ArrayList<>(); //获取该类本身的hook逻辑 collectHookMethods(post, pre, clazz); - //获取它所继承、实现的抽象类或接口, 以AgentInteractionModule、ActiveModel为终点 - Set> classes = collectExtendedClasses(clazz, AgentRunningModule.class); + //获取它所继承、实现的抽象类或接口, 以Module为终点,收集继承链上所有父类和接口 + Set> classes = collectExtendedClasses(clazz, Module.class); //获取这些类中的hook逻辑 collectHookMethods(post, pre, classes); return new MethodsListRecord(post, pre); diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentModule.java index 3afd4da1..d60a0a37 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentModule.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentModule.java @@ -3,7 +3,10 @@ package work.slhaf.partner.api.agent.factory.module.annotation; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityHolder; -import java.lang.annotation.*; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 用于注解执行模块 diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentSubModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentSubModule.java index eddf7461..b0ac2489 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentSubModule.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/annotation/AgentSubModule.java @@ -2,7 +2,10 @@ package work.slhaf.partner.api.agent.factory.module.annotation; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityHolder; -import java.lang.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) diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/pojo/BaseMetaModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/pojo/BaseMetaModule.java index 7a1fde7f..02862736 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/pojo/BaseMetaModule.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/module/pojo/BaseMetaModule.java @@ -1,7 +1,6 @@ package work.slhaf.partner.api.agent.factory.module.pojo; import lombok.Data; -import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.Module; @Data diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java index 1c61d561..bf78b4f2 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java @@ -2,6 +2,7 @@ package work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts; import cn.hutool.core.bean.BeanUtil; import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.Model; @@ -87,7 +88,9 @@ public interface ActivateModel { ((Module) this).setModel(model); } - String modelKey(); + default String modelKey(){ + return this.getClass().getAnnotation(AgentModule.class).name(); + } boolean withBasicPrompt(); diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java index 2d64a4f0..f8041587 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/util/AgentUtil.java @@ -1,8 +1,8 @@ package work.slhaf.partner.api.agent.util; import org.reflections.Reflections; -import work.slhaf.partner.api.agent.factory.module.annotation.Init; +import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; @@ -40,8 +40,8 @@ public final class AgentUtil { collectInterfaces(clazz, classes); } - public static Set> getMethodAnnotationTypeSet(Class clazz, Reflections reflections){ - Set methods = reflections.getMethodsAnnotatedWith(Init.class); + public static Set> getMethodAnnotationTypeSet(Class clazz, Reflections reflections){ + Set methods = reflections.getMethodsAnnotatedWith(clazz); return methods.stream() .map(Method::getDeclaringClass) .collect(Collectors.toSet()); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java b/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java index 99e2a1e6..ea9c2e4a 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java @@ -6,15 +6,15 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.CoordinateMana import work.slhaf.partner.api.agent.factory.capability.annotation.Coordinated; import work.slhaf.partner.api.chat.constant.ChatConstant; import work.slhaf.partner.common.exception.callback.GlobalExceptionHandler; -import work.slhaf.partner.runtime.exception.pojo.GlobalException; import work.slhaf.partner.core.cognation.CognationCore; -import work.slhaf.partner.core.common.pojo.MemoryResult; -import work.slhaf.partner.core.common.pojo.MemorySliceResult; import work.slhaf.partner.core.submodule.cache.CacheCore; import work.slhaf.partner.core.submodule.dispatch.DispatchCore; import work.slhaf.partner.core.submodule.memory.MemoryCore; +import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySliceResult; import work.slhaf.partner.core.submodule.perceive.PerceiveCore; +import work.slhaf.partner.runtime.exception.pojo.GlobalException; import java.io.IOException; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java index 80399840..3a0b8c3e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java @@ -1,7 +1,6 @@ package work.slhaf.partner.core.cognation; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; -import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.agent.factory.capability.annotation.ToCoordinated; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; @@ -13,37 +12,16 @@ import java.util.concurrent.locks.Lock; @Capability("cognation") public interface CognationCapability { - @CapabilityMethod List getChatMessages(); - - @CapabilityMethod void setChatMessages(List chatMessages); - - @CapabilityMethod void cleanMessage(List messages); - - @CapabilityMethod void updateActivatedSlices(String userId, List memorySlices); - - @CapabilityMethod String getActivatedSlicesStr(String userId); - - @CapabilityMethod HashMap> getActivatedSlices(); - - @CapabilityMethod void clearActivatedSlices(String userId); - - @CapabilityMethod boolean hasActivatedSlices(String userId); - - @CapabilityMethod int getActivatedSlicesSize(String userId); - - @CapabilityMethod List getActivatedSlices(String userId); - - @CapabilityMethod Lock getMessageLock(); @ToCoordinated diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java index 9f5981df..f11e4e24 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java @@ -5,6 +5,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; +import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.core.cognation.pojo.ActiveData; @@ -66,6 +67,16 @@ public class CognationCore extends PersistableObject { temp.setPerceiveCore(PerceiveCore.getInstance()); } + @CapabilityMethod + public List getChatMessages() { + return chatMessages; + } + + @CapabilityMethod + public void setChatMessages(List chatMessages) { + this.chatMessages = chatMessages; + } + private void setupHook(CognationCore temp) { Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { @@ -131,6 +142,7 @@ public class CognationCore extends PersistableObject { } } + @CapabilityMethod public void cleanMessage(List messages) { messageLock.lock(); this.getChatMessages().removeAll(messages); @@ -138,31 +150,38 @@ public class CognationCore extends PersistableObject { } + @CapabilityMethod public void updateActivatedSlices(String userId, List memorySlices) { activeData.updateActivatedSlices(userId, memorySlices); log.debug("[CoordinatedManager] 已更新激活切片, userId: {}", userId); } + @CapabilityMethod public String getActivatedSlicesStr(String userId) { return activeData.getActivatedSlicesStr(userId); } + @CapabilityMethod public HashMap> getActivatedSlices() { return activeData.getActivatedSlices(); } + @CapabilityMethod public void clearActivatedSlices(String userId) { activeData.clearActivatedSlices(userId); } + @CapabilityMethod public boolean hasActivatedSlices(String userId) { return activeData.hasActivatedSlices(userId); } + @CapabilityMethod public int getActivatedSlicesSize(String userId) { return activeData.getActivatedSlices().get(userId).size(); } + @CapabilityMethod public List getActivatedSlices(String userId) { return activeData.getActivatedSlices().get(userId); } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java index ac777407..2dc96f33 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java @@ -6,7 +6,7 @@ import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java index 9abaa119..35b639c4 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java @@ -2,7 +2,7 @@ package work.slhaf.partner.core.submodule.memory; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; import work.slhaf.partner.api.agent.factory.capability.annotation.ToCoordinated; -import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.IOException; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java index 01cac98e..902176f4 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java @@ -5,11 +5,11 @@ import lombok.EqualsAndHashCode; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.common.pojo.MemoryResult; -import work.slhaf.partner.core.common.pojo.MemorySliceResult; import work.slhaf.partner.core.submodule.memory.exception.UnExistedDateIndexException; import work.slhaf.partner.core.submodule.memory.exception.UnExistedTopicException; +import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySliceResult; import work.slhaf.partner.core.submodule.memory.pojo.node.MemoryNode; import work.slhaf.partner.core.submodule.memory.pojo.node.TopicNode; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemoryResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemoryResult.java similarity index 86% rename from Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemoryResult.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemoryResult.java index 9d602a61..3f9f5ad2 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemoryResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemoryResult.java @@ -1,9 +1,8 @@ -package work.slhaf.partner.core.common.pojo; +package work.slhaf.partner.core.submodule.memory.pojo; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.Serial; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemorySliceResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySliceResult.java similarity index 83% rename from Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemorySliceResult.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySliceResult.java index 1a21a18a..edb79efa 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemorySliceResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySliceResult.java @@ -1,10 +1,9 @@ -package work.slhaf.partner.core.common.pojo; +package work.slhaf.partner.core.submodule.memory.pojo; import com.alibaba.fastjson2.annotation.JSONField; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java index 776b8a9b..024f2b65 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java @@ -1,28 +1,45 @@ package work.slhaf.partner.module.common.module; +import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.common.entity.AppendPromptData; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import java.io.IOException; import java.util.HashMap; /** * 前置模块抽象类 */ +@Slf4j public abstract class PreRunningModule extends AgentRunningModule { - protected void setAppendedPrompt(PartnerRunningFlowContext context) { + private void setAppendedPrompt(PartnerRunningFlowContext context) { AppendPromptData data = new AppendPromptData(); data.setModuleName(moduleName()); HashMap map = getPromptDataMap(context.getUserId()); data.setAppendedPrompt(map); - context.getModuleContext().getAppendedPrompt().add(data); + context.setAppendedPrompt(data); } - protected void setActiveModule(PartnerRunningFlowContext context) { + private void setActiveModule(PartnerRunningFlowContext context) { context.getCoreContext().addActiveModule(moduleName()); } protected abstract HashMap getPromptDataMap(String userId); protected abstract String moduleName(); + + @Override + public final void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { + log.debug("[{}] 模块执行开始...", this.getClass().getAnnotation(AgentModule.class).name()); + doExecute(context); // 子类实现差异化逻辑 + setAppendedPrompt(context); // 通用逻辑 + setActiveModule(context); // 通用逻辑 + log.debug("[{}] 模块执行结束...", this.getClass().getAnnotation(AgentModule.class).name()); + } + + protected abstract void doExecute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException; + + } 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 35117212..ad066f1b 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 @@ -13,13 +13,12 @@ import work.slhaf.partner.api.chat.pojo.ChatResponse; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.api.chat.pojo.MetaMessage; import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import work.slhaf.partner.runtime.session.SessionManager; import work.slhaf.partner.module.common.entity.AppendPromptData; import work.slhaf.partner.module.common.model.ModelConstant; import work.slhaf.partner.module.common.module.CoreRunningModule; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; -import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -44,6 +43,8 @@ public class CoreModel extends CoreRunningModule implements ActivateModel { this.getModel().setChatMessages(chatMessages); this.appendedMessages = new ArrayList<>(); this.sessionManager = SessionManager.getInstance(); + + updateChatClientSettings(); log.info("[CoreModel] CoreModel注册完毕..."); } @@ -53,11 +54,6 @@ public class CoreModel extends CoreRunningModule implements ActivateModel { chatClient().setTop_p(0.7); } - @Override - public String modelKey() { - return "core_model"; - } - @Override public boolean withBasicPrompt() { return true; 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 6dfd2852..d87fb69b 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 @@ -5,24 +5,24 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.AfterExecute; import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule; import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.core.common.pojo.MemoryResult; import work.slhaf.partner.core.submodule.cache.CacheCapability; import work.slhaf.partner.core.submodule.memory.MemoryCapability; import work.slhaf.partner.core.submodule.memory.exception.UnExistedDateIndexException; import work.slhaf.partner.core.submodule.memory.exception.UnExistedTopicException; import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import work.slhaf.partner.runtime.session.SessionManager; import work.slhaf.partner.module.common.module.PreRunningModule; import work.slhaf.partner.module.modules.memory.selector.evaluator.SliceSelectEvaluator; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput; import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorMatchData; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorResult; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import java.io.IOException; import java.time.LocalDate; @@ -50,8 +50,7 @@ public class MemorySelector extends PreRunningModule { private MemorySelectExtractor memorySelectExtractor; @Override - public void execute(PartnerRunningFlowContext runningFlowContext) throws IOException, ClassNotFoundException { - log.debug("[MemorySelector] 记忆回溯流程开始..."); + public void doExecute(PartnerRunningFlowContext runningFlowContext) throws IOException, ClassNotFoundException { String userId = runningFlowContext.getUserId(); //获取主题路径 ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext); @@ -60,11 +59,6 @@ public class MemorySelector extends PreRunningModule { List evaluatedSlices = selectAndEvaluateMemory(runningFlowContext, extractorResult); cognationCapability.updateActivatedSlices(userId, evaluatedSlices); } - //设置追加提示词 - setAppendedPrompt(runningFlowContext); - setModuleContextRecall(runningFlowContext); - setActiveModule(runningFlowContext); - log.debug("[MemorySelector] 记忆回溯完成..."); } private List selectAndEvaluateMemory(PartnerRunningFlowContext runningFlowContext, ExtractorResult extractorResult) throws IOException, ClassNotFoundException { @@ -85,6 +79,7 @@ public class MemorySelector extends PreRunningModule { return memorySlices; } + @AfterExecute(order = 1) private void setModuleContextRecall(PartnerRunningFlowContext runningFlowContext) { String userId = runningFlowContext.getUserId(); boolean recall = cognationCapability.hasActivatedSlices(userId); 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 1c9aca7b..66e2c751 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java @@ -11,16 +11,15 @@ import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.core.common.pojo.MemoryResult; -import work.slhaf.partner.core.common.pojo.MemorySliceResult; import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemoryResult; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySliceResult; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorBatchInput; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorResult; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.SliceSummary; -import java.io.IOException; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentLinkedDeque; 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 7f0c2759..89b01f11 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 @@ -3,7 +3,7 @@ package work.slhaf.partner.module.modules.memory.selector.evaluator.data; import lombok.Builder; import lombok.Data; import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.memory.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 87da2026..bd2e34fa 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 @@ -12,15 +12,15 @@ import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunn import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.api.chat.pojo.MetaMessage; import work.slhaf.partner.common.exception.callback.GlobalExceptionHandler; -import work.slhaf.partner.runtime.exception.pojo.GlobalException; import work.slhaf.partner.core.cognation.CognationCapability; import work.slhaf.partner.core.submodule.memory.MemoryCapability; import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import work.slhaf.partner.runtime.session.SessionManager; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorInput; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorMatchData; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorResult; +import work.slhaf.partner.runtime.exception.pojo.GlobalException; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; import java.util.ArrayList; import java.util.List; 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 1095f06f..418740eb 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 @@ -16,15 +16,15 @@ import work.slhaf.partner.core.submodule.cache.CacheCapability; import work.slhaf.partner.core.submodule.memory.MemoryCapability; import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import work.slhaf.partner.runtime.session.SessionManager; import work.slhaf.partner.module.common.module.PostRunningModule; -import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor; -import work.slhaf.partner.module.modules.memory.updater.summarizer.MemorySummarizer; +import work.slhaf.partner.module.modules.memory.updater.summarizer.MultiSummarizer; +import work.slhaf.partner.module.modules.memory.updater.summarizer.SingleSummarizer; +import work.slhaf.partner.module.modules.memory.updater.summarizer.TotalSummarizer; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeInput; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeResult; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; -import java.io.IOException; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.Callable; @@ -35,11 +35,9 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractUserId; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -@AgentModule(name="memory_updater",order=6) +@AgentModule(name = "memory_updater", order = 7) public class MemoryUpdater extends PostRunningModule { - private static volatile MemoryUpdater memoryUpdater; - private static final long SCHEDULED_UPDATE_INTERVAL = 10 * 1000; private static final long UPDATE_TRIGGER_INTERVAL = 60 * 60 * 1000; @@ -53,9 +51,11 @@ public class MemoryUpdater extends PostRunningModule { private PerceiveCapability perceiveCapability; @InjectModule - private MemorySelectExtractor memorySelectExtractor; + private MultiSummarizer multiSummarizer; @InjectModule - private MemorySummarizer memorySummarizer; + private SingleSummarizer singleSummarizer; + @InjectModule + private TotalSummarizer totalSummarizer; private SessionManager sessionManager; private InteractionThreadPoolExecutor executor; @@ -64,20 +64,6 @@ public class MemoryUpdater extends PostRunningModule { */ private List tempMessage; - public static MemoryUpdater getInstance() throws IOException, ClassNotFoundException { - if (memoryUpdater == null) { - synchronized (MemoryUpdater.class) { - if (memoryUpdater == null) { - memoryUpdater = new MemoryUpdater(); - memoryUpdater.setSessionManager(SessionManager.getInstance()); - memoryUpdater.setExecutor(InteractionThreadPoolExecutor.getInstance()); - memoryUpdater.setScheduledUpdater(); - } - } - } - return memoryUpdater; - } - @Init public void init() { executor = InteractionThreadPoolExecutor.getInstance(); @@ -96,7 +82,7 @@ public class MemoryUpdater extends PostRunningModule { if (lastUpdatedTime != 0 && currentTime - lastUpdatedTime > UPDATE_TRIGGER_INTERVAL && chatCount > 1) { updateMemory(); cognationCapability.getChatMessages().clear(); - //重置MemoryId + // 重置MemoryId sessionManager.refreshMemoryId(); log.info("[MemoryUpdater] 记忆更新: 自动触发"); } @@ -116,7 +102,7 @@ public class MemoryUpdater extends PostRunningModule { return; } executor.execute(() -> { - //如果token 大于阈值,则更新记忆 + // 如果token 大于阈值,则更新记忆 JSONObject moduleContext = context.getModuleContext().getExtraContext(); boolean recall = moduleContext.getBoolean("recall"); if (recall) { @@ -128,14 +114,14 @@ public class MemoryUpdater extends PostRunningModule { if (!trigger) { return; } - try { - log.debug("[MemoryUpdater] 记忆更新触发"); - updateMemory(); - //清空chatMessages - clearChatMessages(); - } catch (Exception e) { - log.error("[MemoryUpdater] 记忆更新线程出错: ", e); - } + try { + log.debug("[MemoryUpdater] 记忆更新触发"); + updateMemory(); + // 清空chatMessages + clearChatMessages(); + } catch (Exception e) { + log.error("[MemoryUpdater] 记忆更新线程出错: ", e); + } }); } @@ -143,17 +129,17 @@ public class MemoryUpdater extends PostRunningModule { log.debug("[MemoryUpdater] 记忆更新流程开始..."); tempMessage = new ArrayList<>(cognationCapability.getChatMessages()); HashMap singleMemorySummary = new HashMap<>(); - //更新单聊记忆,同时从chatMessages中去掉单聊记忆 + // 更新单聊记忆,同时从chatMessages中去掉单聊记忆 updateSingleChatSlices(singleMemorySummary); - //更新多人场景下的记忆及相关的确定性记忆 + // 更新多人场景下的记忆及相关的确定性记忆 updateMultiChatSlices(singleMemorySummary); sessionManager.resetLastUpdatedTime(); log.debug("[MemoryUpdater] 记忆更新流程结束..."); } private void updateMultiChatSlices(HashMap singleMemorySummary) { - //此时chatMessages中不再包含单聊记录,直接执行摘要以及切片插入 - //对剩下的多人聊天记录进行进行摘要 + // 此时chatMessages中不再包含单聊记录,直接执行摘要以及切片插入 + // 对剩下的多人聊天记录进行进行摘要 Callable task = () -> { log.debug("[MemoryUpdater] 多人聊天记忆更新流程开始..."); List chatMessages; @@ -163,17 +149,17 @@ public class MemoryUpdater extends PostRunningModule { cleanMessage(chatMessages); if (!chatMessages.isEmpty()) { log.debug("[MemoryUpdater] 存在多人聊天记录, 流程正常进行..."); - //以第一条user对应的id为发起用户 + // 以第一条user对应的id为发起用户 String userId = extractUserId(chatMessages.getFirst().getContent()); if (userId == null) { throw new RuntimeException("未匹配到 userId!"); } SummarizeInput summarizeInput = new SummarizeInput(chatMessages, memoryCapability.getTopicTree()); log.debug("[MemoryUpdater] 多人聊天记忆更新-总结流程-输入: {}", summarizeInput); - SummarizeResult summarizeResult = memorySummarizer.execute(summarizeInput); + SummarizeResult summarizeResult = summarize(summarizeInput); log.debug("[MemoryUpdater] 多人聊天记忆更新-总结流程-输出: {}", summarizeResult); MemorySlice memorySlice = getMemorySlice(userId, summarizeResult, chatMessages); - //设置involvedUserId + // 设置involvedUserId setInvolvedUserId(userId, memorySlice, chatMessages); memoryCapability.insertSlice(memorySlice, summarizeResult.getTopicPath()); @@ -181,7 +167,7 @@ public class MemoryUpdater extends PostRunningModule { } else { log.debug("[MemoryUpdater] 不存在多人聊天记录, 将以单聊总结为对话缓存的主要输入: {}", singleMemorySummary); - cacheCapability.updateDialogMap(LocalDateTime.now(), memorySummarizer.executeTotalSummary(singleMemorySummary)); + cacheCapability.updateDialogMap(LocalDateTime.now(), totalSummarizer.execute(singleMemorySummary)); } log.debug("[MemoryUpdater] 对话缓存更新完毕"); log.debug("[MemoryUpdater] 多人聊天记忆更新流程结束..."); @@ -192,7 +178,7 @@ public class MemoryUpdater extends PostRunningModule { } private void cleanMessage(List chatMessages) { - //清理时间标识 + // 清理时间标识 for (Message message : chatMessages) { if (message.getRole().equals(ChatConstant.Character.ASSISTANT)) { continue; @@ -203,9 +189,10 @@ public class MemoryUpdater extends PostRunningModule { } private void clearChatMessages() { - //不全部清空,保留一部分输入防止上下文割裂 + // 不全部清空,保留一部分输入防止上下文割裂 cognationCapability.getMessageLock().lock(); - List temp = new ArrayList<>(tempMessage.subList(tempMessage.size() - tempMessage.size() / 6, tempMessage.size())); + List temp = new ArrayList<>( + tempMessage.subList(tempMessage.size() - tempMessage.size() / 6, tempMessage.size())); cognationCapability.getChatMessages().removeAll(tempMessage); cognationCapability.getChatMessages().addAll(0, temp); cognationCapability.getMessageLock().unlock(); @@ -216,7 +203,7 @@ public class MemoryUpdater extends PostRunningModule { if (chatMessage.getRole().equals(ChatConstant.Character.ASSISTANT)) { continue; } - //匹配userId + // 匹配userId String userId = extractUserId(chatMessage.getContent()); if (userId == null) { continue; @@ -229,13 +216,12 @@ public class MemoryUpdater extends PostRunningModule { } } - private void updateSingleChatSlices(HashMap singleMemorySummary) { log.debug("[MemoryUpdater] 单聊记忆更新流程开始..."); - //更新单聊记忆,同时从chatMessages中去掉单聊记忆 + // 更新单聊记忆,同时从chatMessages中去掉单聊记忆 Set userIdSet = new HashSet<>(sessionManager.getSingleMetaMessageMap().keySet()); List> tasks = new ArrayList<>(); - //多人聊天? + // 多人聊天? AtomicInteger count = new AtomicInteger(0); for (String id : userIdSet) { List messages = sessionManager.unpackAndClear(id); @@ -243,17 +229,17 @@ public class MemoryUpdater extends PostRunningModule { int thisCount = count.incrementAndGet(); log.debug("[MemoryUpdater] 单聊记忆[{}]更新: {}", thisCount, id); try { - //单聊记忆更新 + // 单聊记忆更新 SummarizeInput summarizeInput = new SummarizeInput(messages, memoryCapability.getTopicTree()); log.debug("[MemoryUpdater] 单聊记忆[{}]更新-总结流程-输入: {}", thisCount, JSONObject.toJSONString(summarizeInput)); - SummarizeResult summarizeResult = memorySummarizer.execute(summarizeInput); + SummarizeResult summarizeResult = summarize(summarizeInput); log.debug("[MemoryUpdater] 单聊记忆[{}]更新-总结流程-输出: {}", thisCount, JSONObject.toJSONString(summarizeResult)); MemorySlice memorySlice = getMemorySlice(id, summarizeResult, messages); - //插入时userDialogMap已经进行更新 + // 插入时userDialogMap已经进行更新 memoryCapability.insertSlice(memorySlice, summarizeResult.getTopicPath()); - //从chatMessages中移除单聊记录 + // 从chatMessages中移除单聊记录 cognationCapability.cleanMessage(messages); - //添加至singleMemorySummary + // 添加至singleMemorySummary String key = perceiveCapability.getUser(id).getNickName() + "[" + id + "]"; singleMemorySummary.put(key, summarizeResult.getSummary()); log.debug("[MemoryUpdater] 单聊记忆[{}]更新成功: ", thisCount); @@ -268,13 +254,18 @@ public class MemoryUpdater extends PostRunningModule { log.debug("[MemoryUpdater] 单聊记忆更新结束..."); } + private SummarizeResult summarize(SummarizeInput summarizeInput) { + singleSummarizer.execute(summarizeInput.getChatMessages()); + return multiSummarizer.execute(summarizeInput); + } + private MemorySlice getMemorySlice(String userId, SummarizeResult summarizeResult, List chatMessages) { MemorySlice memorySlice = new MemorySlice(); - //设置 memoryId,timestamp + // 设置 memoryId,timestamp memorySlice.setMemoryId(sessionManager.getCurrentMemoryId()); memorySlice.setTimestamp(System.currentTimeMillis()); - //补充信息 + // 补充信息 memorySlice.setPrivate(summarizeResult.isPrivate()); memorySlice.setSummary(summarizeResult.getSummary()); memorySlice.setChatMessages(chatMessages); 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 deleted file mode 100644 index a443fe9a..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/MemorySummarizer.java +++ /dev/null @@ -1,52 +0,0 @@ -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.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; -import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeInput; -import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeResult; - -import java.util.HashMap; - -@EqualsAndHashCode(callSuper = true) -@Data -@Slf4j -public class MemorySummarizer extends AgentRunningSubModule { - - private static volatile MemorySummarizer memorySummarizer; - public static final String MODEL_KEY = "memory_summarizer"; - - private InteractionThreadPoolExecutor executor; - private SingleSummarizer singleSummarizer; - private MultiSummarizer multiSummarizer; - private TotalSummarizer totalSummarizer; - - public static MemorySummarizer getInstance() { - if (memorySummarizer == null) { - synchronized (MemorySummarizer.class) { - if (memorySummarizer == null) { - memorySummarizer = new MemorySummarizer(); - memorySummarizer.setExecutor(InteractionThreadPoolExecutor.getInstance()); - memorySummarizer.setSingleSummarizer(SingleSummarizer.getInstance()); - memorySummarizer.setMultiSummarizer(MultiSummarizer.getInstance()); - memorySummarizer.setTotalSummarizer(TotalSummarizer.getInstance()); - } - } - } - return memorySummarizer; - } - - @Override - public SummarizeResult execute(SummarizeInput input) { - //进行长文本批量摘要 - singleSummarizer.execute(input.getChatMessages()); - //进行整体摘要并返回结果 - return multiSummarizer.execute(input); - } - - public String executeTotalSummary(HashMap singleMemorySummary) { - return totalSummarizer.execute(singleMemorySummary); - } -} 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 46df6584..90509fdb 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,6 +5,8 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; +import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.api.chat.pojo.ChatResponse; @@ -20,24 +22,16 @@ import static work.slhaf.partner.common.util.ExtractUtil.fixTopicPath; @EqualsAndHashCode(callSuper = true) @Data @Slf4j +@AgentSubModule public class MultiSummarizer extends AgentRunningSubModule implements ActivateModel { - private static volatile MultiSummarizer multiSummarizer; - private MultiSummarizer() { modelSettings(); } - public static MultiSummarizer getInstance() { - if (multiSummarizer == null) { - synchronized (MultiSummarizer.class) { - if (multiSummarizer == null) { - multiSummarizer = new MultiSummarizer(); - multiSummarizer.updateChatClientSettings(); - } - } - } - return multiSummarizer; + @Init + public void init() { + updateChatClientSettings(); } @Override 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 688d9025..5eb860a6 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,6 +4,8 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; +import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.api.chat.constant.ChatConstant; @@ -20,26 +22,14 @@ import java.util.concurrent.atomic.AtomicInteger; @EqualsAndHashCode(callSuper = true) @Slf4j @Data +@AgentSubModule public class SingleSummarizer extends AgentRunningSubModule,Void> implements ActivateModel { - private static volatile SingleSummarizer singleSummarizer; - private InteractionThreadPoolExecutor executor; - - private SingleSummarizer() { - modelSettings(); - } - public static SingleSummarizer getInstance() { - if (singleSummarizer == null) { - synchronized (SingleSummarizer.class) { - if (singleSummarizer == null) { - singleSummarizer = new SingleSummarizer(); - singleSummarizer.setExecutor(InteractionThreadPoolExecutor.getInstance()); - } - } - } - return singleSummarizer; + @Init + public void init() { + this.executor = InteractionThreadPoolExecutor.getInstance(); } @Override 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 469ded60..649e0c45 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,6 +5,8 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; +import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.api.chat.pojo.ChatResponse; @@ -16,25 +18,12 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractJson; @EqualsAndHashCode(callSuper = true) @Data @Slf4j +@AgentSubModule public class TotalSummarizer extends AgentRunningSubModule, String> implements ActivateModel { - private static volatile TotalSummarizer totalSummarizer; - - - private TotalSummarizer() { - modelSettings(); - } - - public static TotalSummarizer getInstance() { - if (totalSummarizer == null) { - synchronized (TotalSummarizer.class) { - if (totalSummarizer == null) { - totalSummarizer = new TotalSummarizer(); - totalSummarizer.updateChatClientSettings(); - } - } - } - return totalSummarizer; + @Init + public void init() { + updateChatClientSettings(); } public String execute(HashMap singleMemorySummary){ 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 299403a8..92ba1028 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 @@ -3,41 +3,24 @@ package work.slhaf.partner.module.modules.perceive.selector; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.submodule.perceive.pojo.User; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.common.module.PreRunningModule; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import java.io.IOException; import java.util.HashMap; @Slf4j @Setter +@AgentModule(name = "perceive_selector",order = 2) public class PerceiveSelector extends PreRunningModule { - private static volatile PerceiveSelector perceiveSelector; - @InjectCapability private PerceiveCapability perceiveCapability; - public static PerceiveSelector getInstance() throws IOException, ClassNotFoundException { - if (perceiveSelector == null) { - synchronized (PerceiveSelector.class) { - if (perceiveSelector == null) { - perceiveSelector = new PerceiveSelector(); - } - } - } - return perceiveSelector; - } - @Override - public void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { - log.debug("[PerceiveSelector] 感知模块处理流程开始..."); - //处理思路: 根据用户id,查询用户相关身份感知数据,直接添加到appendPrompt中,这直接执行appendPrompt方法应该可以 - setAppendedPrompt(context); - setActiveModule(context); - log.debug("[PerceiveSelector] 感知模块处理流程结束..."); + public void doExecute(PartnerRunningFlowContext context) { } @Override 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 8d72b2cc..7e32bf45 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 @@ -1,16 +1,21 @@ package work.slhaf.partner.module.modules.perceive.updater; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; +import work.slhaf.partner.api.agent.factory.module.annotation.Init; +import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule; +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; import work.slhaf.partner.core.cognation.CognationCapability; import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.submodule.perceive.pojo.User; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.RelationExtractor; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult; import work.slhaf.partner.module.modules.perceive.updater.static_extractor.StaticMemoryExtractor; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import java.io.IOException; import java.util.ArrayList; @@ -22,9 +27,11 @@ import java.util.concurrent.locks.ReentrantLock; /** * 感知更新,异步 */ +@EqualsAndHashCode(callSuper = true) @Slf4j @Data -public class PerceiveUpdater { +@AgentModule(name = "perceive_updater", order = 8) +public class PerceiveUpdater extends AgentRunningModule { private static volatile PerceiveUpdater perceiveUpdater; @@ -32,23 +39,18 @@ public class PerceiveUpdater { private PerceiveCapability perceiveCapability; @InjectCapability private CognationCapability cognationCapability; - private InteractionThreadPoolExecutor executor; + + @InjectModule private RelationExtractor relationExtractor; + @InjectModule private StaticMemoryExtractor staticMemoryExtractor; + private InteractionThreadPoolExecutor executor; - public static PerceiveUpdater getInstance() throws IOException, ClassNotFoundException { - if (perceiveUpdater == null) { - synchronized (PerceiveUpdater.class) { - if (perceiveUpdater == null) { - perceiveUpdater = new PerceiveUpdater(); - perceiveUpdater.setExecutor(InteractionThreadPoolExecutor.getInstance()); - perceiveUpdater.setRelationExtractor(RelationExtractor.getInstance()); - perceiveUpdater.setStaticMemoryExtractor(StaticMemoryExtractor.getInstance()); - } - } - } - return perceiveUpdater; + + @Init + public void init() { + this.executor = InteractionThreadPoolExecutor.getInstance(); } public void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { 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 9fa4b41f..2cc4f187 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,6 +3,8 @@ 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.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.api.chat.pojo.ChatResponse; @@ -10,39 +12,26 @@ import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.core.cognation.CognationCapability; import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.submodule.perceive.pojo.User; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractInput; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @EqualsAndHashCode(callSuper = true) @Data +@AgentSubModule public class RelationExtractor extends AgentRunningSubModule implements ActivateModel { - private static volatile RelationExtractor relationExtractor; - + @InjectCapability private CognationCapability cognationCapability; + @InjectCapability private PerceiveCapability perceiveCapability; private List tempMessages; - private RelationExtractor(){ - modelSettings(); - } - public static RelationExtractor getInstance() throws IOException, ClassNotFoundException { - if (relationExtractor == null) { - synchronized (RelationExtractor.class) { - if (relationExtractor == null) { - relationExtractor = new RelationExtractor(); - } - } - } - return relationExtractor; - } @Override public RelationExtractResult execute(PartnerRunningFlowContext context){ 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 de7a605f..d0eaa684 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 @@ -5,19 +5,20 @@ import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.api.chat.pojo.ChatResponse; import work.slhaf.partner.core.cognation.CognationCapability; import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.modules.perceive.updater.static_extractor.data.StaticMemoryExtractInput; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import java.io.IOException; import java.util.HashMap; @EqualsAndHashCode(callSuper = true) @Data +@AgentSubModule public class StaticMemoryExtractor extends AgentRunningSubModule> implements ActivateModel { private static volatile StaticMemoryExtractor staticMemoryExtractor; @@ -27,21 +28,6 @@ public class StaticMemoryExtractor extends AgentRunningSubModule execute(PartnerRunningFlowContext context) { StaticMemoryExtractInput input = StaticMemoryExtractInput.builder() 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 c6601b75..f482d1cb 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 @@ -4,34 +4,24 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.common.module.PostRunningModule; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import java.io.IOException; @EqualsAndHashCode(callSuper = true) @Slf4j @Data +@AgentModule(name = "postprocess_executor", order = 6) public class PostprocessExecutor extends PostRunningModule { - private static volatile PostprocessExecutor postprocessExecutor; private static final int POST_PROCESS_TRIGGER_ROLL_LIMIT = 36; @InjectCapability private CognationCapability cognationCapability; - public static PostprocessExecutor getInstance() throws IOException, ClassNotFoundException { - if (postprocessExecutor == null) { - synchronized (PostprocessExecutor.class) { - if (postprocessExecutor == null) { - postprocessExecutor = new PostprocessExecutor(); - } - } - } - return postprocessExecutor; - } - @Override public void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { boolean trigger = cognationCapability.getChatMessages().size() >= POST_PROCESS_TRIGGER_ROLL_LIMIT; 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 8b870cc5..5f2bb368 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 @@ -4,15 +4,15 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityHolder; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.core.cognation.CognationCapability; import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; import work.slhaf.partner.core.submodule.perceive.pojo.User; -import work.slhaf.partner.runtime.interaction.data.PartnerInputData; +import work.slhaf.partner.module.common.module.PreRunningModule; import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.interaction.data.context.subcontext.CoreContext; import work.slhaf.partner.runtime.session.SessionManager; -import work.slhaf.partner.module.common.entity.AppendPromptData; -import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; @@ -20,7 +20,7 @@ import java.util.HashMap; @Data @Slf4j @CapabilityHolder -public class PreprocessExecutor { +public class PreprocessExecutor extends PreRunningModule { private static volatile PreprocessExecutor preprocessExecutor; @@ -30,24 +30,15 @@ public class PreprocessExecutor { private PerceiveCapability perceiveCapability; private SessionManager sessionManager; - private PreprocessExecutor() { + @Init + public void init() { + this.sessionManager = SessionManager.getInstance(); } - public static PreprocessExecutor getInstance() throws IOException, ClassNotFoundException { - if (preprocessExecutor == null) { - synchronized (PreprocessExecutor.class) { - if (preprocessExecutor == null) { - preprocessExecutor = new PreprocessExecutor(); - preprocessExecutor.setSessionManager(SessionManager.getInstance()); - } - } - } - return preprocessExecutor; - } - - public PartnerRunningFlowContext execute(PartnerInputData inputData) { + @Override + public void doExecute(PartnerRunningFlowContext context) { checkAndSetMemoryId(); - return getInteractionContext(inputData); + getInteractionContext(context); } private void checkAndSetMemoryId() { @@ -57,29 +48,25 @@ public class PreprocessExecutor { } } - private PartnerRunningFlowContext getInteractionContext(PartnerInputData inputData) { - log.debug("[PreprocessExecutor] 预处理原始输入: {}", inputData); - PartnerRunningFlowContext context = new PartnerRunningFlowContext(); - - User user = perceiveCapability.getUser(inputData.getUserInfo(), inputData.getPlatform()); + private void getInteractionContext(PartnerRunningFlowContext context) { + log.debug("[PreprocessExecutor] 预处理原始输入: {}", context); + User user = perceiveCapability.getUser(context.getUserInfo(), context.getPlatform()); if (user == null) { - user = perceiveCapability.addUser(inputData.getUserInfo(), inputData.getPlatform(), inputData.getUserNickName()); + user = perceiveCapability.addUser(context.getUserInfo(), context.getPlatform(), context.getUserNickname()); } String userId = user.getUuid(); context.setUserId(userId); - String userStr = "[" + inputData.getUserNickName() + "(" + userId + ")]"; - String input = userStr + " " + inputData.getContent(); + String userStr = "[" + context.getUserNickname() + "(" + userId + ")]"; + String input = userStr + " " + context.getInput(); context.setInput(input); - - setAppendedPrompt(context); - setCoreContext(inputData, context, input, userId); - + setCoreContext(context); log.debug("[PreprocessExecutor] 预处理结果: {}", context); - return context; } - private void setAppendedPrompt(PartnerRunningFlowContext context) { + + @Override + protected HashMap getPromptDataMap(String userId) { HashMap map = new HashMap<>(); map.put("text", "这部分才是真正的用户输入内容, 就像你之前收到过的输入一样。但...不会是'同一个人'。"); map.put("datetime", "本次用户输入对应的当前时间"); @@ -87,16 +74,19 @@ public class PreprocessExecutor { map.put("user_id", "用户id, 与user_nick区分, 这是用户的唯一标识"); map.put("active_modules", "已激活的模块, 为false时为激活但未活跃; 为true时为激活且活跃"); map.put("其他", "历史对话中将在用户消息的最后一行标注时间"); - AppendPromptData data = new AppendPromptData(); - data.setModuleName("[基础模块]"); - data.setAppendedPrompt(map); - context.setAppendedPrompt(data); + return map; } - private void setCoreContext(PartnerInputData inputData, PartnerRunningFlowContext context, String input, String userId) { - context.getCoreContext().setText(input); - context.getCoreContext().setDateTime(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - context.getCoreContext().setUserNick(inputData.getUserNickName()); - context.getCoreContext().setUserId(userId); + @Override + protected String moduleName() { + return "[基础模块]"; + } + + private void setCoreContext(PartnerRunningFlowContext context) { + CoreContext coreContext = context.getCoreContext(); + coreContext.setText(context.getInput()); + coreContext.setDateTime(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + coreContext.setUserNick(context.getUserNickname()); + coreContext.setUserId(context.getUserId()); } } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java index 04ae0c0d..c3c70166 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java @@ -2,12 +2,11 @@ package work.slhaf.partner.module.modules.task; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; @Data @Slf4j -public class TaskScheduler extends AgentRunningModule { +public class TaskScheduler { private static TaskScheduler taskScheduler; private TaskScheduler() { @@ -22,7 +21,6 @@ public class TaskScheduler extends AgentRunningModule { return taskScheduler; } - @Override public void execute(PartnerRunningFlowContext runningFlowContext) { } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java index a9525c4e..2a699c5e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java @@ -3,9 +3,6 @@ package work.slhaf.partner.runtime.exception.pojo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.core.cognation.CognationCore; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import work.slhaf.partner.runtime.session.SessionManager; @EqualsAndHashCode(callSuper = true) @Slf4j diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java index de0aaad7..2d6f28b0 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java @@ -23,6 +23,8 @@ public class PartnerInteractionAdapter extends AgentInteractionAdapter