适配框架时发现工厂注册链上存在一些执行顺序上的错误,于是尝试修复问题,为Agent启动链添加了完整的注释,并做出了必要的修复与调整

This commit is contained in:
2025-09-13 23:37:35 +08:00
parent c1018d6b54
commit 7f9d007f07
17 changed files with 315 additions and 179 deletions

View File

@@ -1,7 +1,7 @@
package work.slhaf.partner.common.util;
import com.alibaba.fastjson2.JSONArray;
import work.slhaf.partner.Agent;
import work.slhaf.partner.api.agent.Agent;
import work.slhaf.partner.api.chat.pojo.Message;
import java.io.InputStream;

View File

@@ -6,6 +6,7 @@ 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.InjectModule;
import work.slhaf.partner.core.cognation.CognationCapability;
import work.slhaf.partner.core.common.pojo.MemoryResult;
import work.slhaf.partner.core.submodule.cache.CacheCapability;
@@ -36,8 +37,6 @@ import java.util.List;
@AgentModule(name="memory_selector",order=1)
public class MemorySelector extends PreRunningModule {
private static volatile MemorySelector memorySelector;
@InjectCapability
private CacheCapability cacheCapability;
@InjectCapability
@@ -45,26 +44,10 @@ public class MemorySelector extends PreRunningModule {
@InjectCapability
private CognationCapability cognationCapability;
@InjectModule
private SliceSelectEvaluator sliceSelectEvaluator;
@InjectModule
private MemorySelectExtractor memorySelectExtractor;
private SessionManager sessionManager;
private MemorySelector() {
}
public static MemorySelector getInstance() throws IOException, ClassNotFoundException {
if (memorySelector == null) {
synchronized (MemorySelector.class) {
if (memorySelector == null) {
memorySelector = new MemorySelector();
memorySelector.setSliceSelectEvaluator(SliceSelectEvaluator.getInstance());
memorySelector.setMemorySelectExtractor(MemorySelectExtractor.getInstance());
memorySelector.setSessionManager(SessionManager.getInstance());
}
}
}
return memorySelector;
}
@Override
public void execute(PartnerRunningFlowContext runningFlowContext) throws IOException, ClassNotFoundException {

View File

@@ -6,6 +6,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.common.thread.InteractionThreadPoolExecutor;
@@ -30,21 +32,14 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractJson;
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
@AgentSubModule
public class SliceSelectEvaluator extends AgentRunningSubModule<EvaluatorInput, List<EvaluatedSlice>> implements ActivateModel {
private static volatile SliceSelectEvaluator sliceSelectEvaluator;
private InteractionThreadPoolExecutor executor;
public static SliceSelectEvaluator getInstance() throws IOException, ClassNotFoundException {
if (sliceSelectEvaluator == null) {
synchronized (SliceSelectEvaluator.class) {
if (sliceSelectEvaluator == null) {
sliceSelectEvaluator = new SliceSelectEvaluator();
sliceSelectEvaluator.setExecutor(InteractionThreadPoolExecutor.getInstance());
log.info("SliceEvaluator注册完毕...");
}
}
}
return sliceSelectEvaluator;
@Init
public void init() {
executor = InteractionThreadPoolExecutor.getInstance();
}
@Override

View File

@@ -6,6 +6,7 @@ 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.Init;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
import work.slhaf.partner.api.chat.pojo.Message;
@@ -21,7 +22,6 @@ import work.slhaf.partner.module.modules.memory.selector.extractor.data.Extracto
import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorMatchData;
import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorResult;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -31,36 +31,25 @@ import static work.slhaf.partner.common.util.ExtractUtil.fixTopicPath;
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
public class MemorySelectExtractor extends AgentRunningSubModule<PartnerRunningFlowContext, ExtractorResult> implements ActivateModel {
private static volatile MemorySelectExtractor memorySelectExtractor;
public class MemorySelectExtractor extends AgentRunningSubModule<PartnerRunningFlowContext, ExtractorResult>
implements ActivateModel {
@InjectCapability
private MemoryCapability memoryCapability;
@InjectCapability
private CognationCapability cognationCapability;
private SessionManager sessionManager;
private MemorySelectExtractor() {
modelSettings();
}
public static MemorySelectExtractor getInstance() throws IOException, ClassNotFoundException {
if (memorySelectExtractor == null) {
synchronized (MemorySelectExtractor.class) {
if (memorySelectExtractor == null) {
memorySelectExtractor = new MemorySelectExtractor();
memorySelectExtractor.setSessionManager(SessionManager.getInstance());
}
}
}
return memorySelectExtractor;
@Init
public void init() {
sessionManager = SessionManager.getInstance();
}
@Override
public ExtractorResult execute(PartnerRunningFlowContext context) {
log.debug("[MemorySelectExtractor] 主题提取模块开始...");
//结构化为指定格式
// 结构化为指定格式
List<Message> chatMessages = new ArrayList<>();
List<MetaMessage> metaMessages = sessionManager.getSingleMetaMessageMap().get(context.getUserId());
if (metaMessages == null) {

View File

@@ -5,6 +5,9 @@ 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.chat.constant.ChatConstant;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
@@ -32,6 +35,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractUserId;
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
@AgentModule(name="memory_updater",order=6)
public class MemoryUpdater extends PostRunningModule {
private static volatile MemoryUpdater memoryUpdater;
@@ -47,25 +51,24 @@ public class MemoryUpdater extends PostRunningModule {
private CacheCapability cacheCapability;
@InjectCapability
private PerceiveCapability perceiveCapability;
private InteractionThreadPoolExecutor executor;
@InjectModule
private MemorySelectExtractor memorySelectExtractor;
@InjectModule
private MemorySummarizer memorySummarizer;
private SessionManager sessionManager;
private InteractionThreadPoolExecutor executor;
/**
* 用于临时存储完整对话记录在MemoryManager的分离后
*/
private List<Message> tempMessage;
private MemoryUpdater() {
}
public static MemoryUpdater getInstance() throws IOException, ClassNotFoundException {
if (memoryUpdater == null) {
synchronized (MemoryUpdater.class) {
if (memoryUpdater == null) {
memoryUpdater = new MemoryUpdater();
memoryUpdater.setMemorySelectExtractor(MemorySelectExtractor.getInstance());
memoryUpdater.setMemorySummarizer(MemorySummarizer.getInstance());
memoryUpdater.setSessionManager(SessionManager.getInstance());
memoryUpdater.setExecutor(InteractionThreadPoolExecutor.getInstance());
memoryUpdater.setScheduledUpdater();
@@ -75,6 +78,13 @@ public class MemoryUpdater extends PostRunningModule {
return memoryUpdater;
}
@Init
public void init() {
executor = InteractionThreadPoolExecutor.getInstance();
sessionManager = SessionManager.getInstance();
setScheduledUpdater();
}
private void setScheduledUpdater() {
executor.execute(() -> {
log.info("[MemoryUpdater] 记忆自动更新线程启动");

View File

@@ -2,27 +2,28 @@ 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;
import work.slhaf.partner.runtime.interaction.module.InteractionFlow;
@Data
@Slf4j
public class TaskScheduler implements InteractionFlow {
private static TaskScheduler taskScheduler;
public class TaskScheduler extends AgentRunningModule {
private static TaskScheduler taskScheduler;
private TaskScheduler(){}
private TaskScheduler() {
}
public static TaskScheduler getInstance() {
if (taskScheduler == null) {
taskScheduler = new TaskScheduler();
log.info("TaskScheduler注册完毕...");
}
return taskScheduler;
public static TaskScheduler getInstance() {
if (taskScheduler == null) {
taskScheduler = new TaskScheduler();
log.info("TaskScheduler注册完毕...");
}
@Override
public void execute(PartnerRunningFlowContext runningFlowContext) {
return taskScheduler;
}
}
@Override
public void execute(PartnerRunningFlowContext runningFlowContext) {
}
}