refactor(action): adjust ActionPlanner and related submodules to adapt to current Agent Context acquisition

This commit is contained in:
2026-03-24 11:49:29 +08:00
parent 313cea0d3b
commit 50b07488a6
4 changed files with 34 additions and 37 deletions

View File

@@ -6,7 +6,6 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapabili
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.common.vector.VectorClient;
import work.slhaf.partner.core.action.ActionCapability;
import work.slhaf.partner.core.action.ActionCore;
@@ -14,7 +13,6 @@ import work.slhaf.partner.core.action.entity.*;
import work.slhaf.partner.core.action.entity.cache.CacheAdjustData;
import work.slhaf.partner.core.action.entity.cache.CacheAdjustMetaData;
import work.slhaf.partner.core.cognition.CognitionCapability;
import work.slhaf.partner.core.memory.MemoryCapability;
import work.slhaf.partner.module.modules.action.executor.ActionExecutor;
import work.slhaf.partner.module.modules.action.planner.confirmer.ActionConfirmer;
import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerInput;
@@ -24,7 +22,6 @@ import work.slhaf.partner.module.modules.action.planner.evaluator.ActionEvaluato
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorInput;
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorResult;
import work.slhaf.partner.module.modules.action.planner.extractor.ActionExtractor;
import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorInput;
import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorResult;
import work.slhaf.partner.module.modules.action.scheduler.ActionScheduler;
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
@@ -52,8 +49,6 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
private CognitionCapability cognitionCapability;
@InjectCapability
private ActionCapability actionCapability;
@InjectCapability
private MemoryCapability memoryCapability;
@InjectModule
private ActionEvaluator actionEvaluator;
@@ -74,7 +69,7 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
}
@Override
public void execute(PartnerRunningFlowContext context) {
public void execute(@NotNull PartnerRunningFlowContext context) {
try {
List<Callable<Void>> tasks = new ArrayList<>();
addConfirmTask(tasks, context);
@@ -93,12 +88,11 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
*/
private void addNewActionTask(List<Callable<Void>> tasks, PartnerRunningFlowContext context) {
tasks.add(() -> {
ExtractorInput extractorInput = assemblyHelper.buildExtractorInput(context);
ExtractorResult extractorResult = actionExtractor.execute(extractorInput);
ExtractorResult extractorResult = actionExtractor.execute(context.getInput());
if (extractorResult.getTendencies().isEmpty()) {
return null;
}
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult, context.getSource());
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult);
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); // 并发操作均为访问
putActionData(evaluatorResults, context);
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
@@ -306,25 +300,9 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
private ActionAssemblyHelper() {
}
private ExtractorInput buildExtractorInput(PartnerRunningFlowContext context) {
ExtractorInput input = new ExtractorInput();
input.setInput(context.getInput());
List<Message> chatMessages = cognitionCapability.snapshotChatMessages();
List<Message> recentMessages = new ArrayList<>();
if (chatMessages.size() > 5) {
recentMessages.addAll(chatMessages.subList(chatMessages.size() - 5, chatMessages.size() - 1));
} else if (chatMessages.size() > 1) {
recentMessages.addAll(chatMessages.subList(0, chatMessages.size() - 1));
}
input.setRecentMessages(recentMessages);
return input;
}
private EvaluatorInput buildEvaluatorInput(ExtractorResult extractorResult, String userId) {
private EvaluatorInput buildEvaluatorInput(ExtractorResult extractorResult) {
EvaluatorInput input = new EvaluatorInput();
input.setTendencies(extractorResult.getTendencies());
input.setRecentMessages(cognitionCapability.snapshotChatMessages());
input.setActivatedSlices(memoryCapability.getActivatedSlices());
return input;
}

View File

@@ -10,6 +10,8 @@ import work.slhaf.partner.api.agent.factory.component.annotation.Init;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
import work.slhaf.partner.core.action.ActionCapability;
import work.slhaf.partner.core.cognition.CognitionCapability;
import work.slhaf.partner.core.cognition.ContextBlock;
import work.slhaf.partner.core.memory.pojo.ActivatedMemorySlice;
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorBatchInput;
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorInput;
@@ -22,8 +24,12 @@ import java.util.Map;
import java.util.concurrent.Callable;
public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, List<EvaluatorResult>> implements ActivateModel {
@InjectCapability
private ActionCapability actionCapability;
@InjectCapability
private CognitionCapability cognitionCapability;
private InteractionThreadPoolExecutor executor;
@Init
@@ -40,16 +46,20 @@ public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, Lis
@Override
public List<EvaluatorResult> execute(EvaluatorInput data) {
List<EvaluatorBatchInput> batchInputs = buildEvaluatorBatchInput(data);
List<Callable<EvaluatorResult>> tasks = getTasks(batchInputs);
List<Callable<EvaluatorResult>> tasks = buildEvaluateTasks(batchInputs);
return executor.invokeAllAndReturn(tasks);
}
private List<Callable<EvaluatorResult>> getTasks(List<EvaluatorBatchInput> batchInputs) {
private List<Callable<EvaluatorResult>> buildEvaluateTasks(List<EvaluatorBatchInput> batchInputs) {
List<Callable<EvaluatorResult>> list = new ArrayList<>();
for (EvaluatorBatchInput batchInput : batchInputs) {
list.add(() -> {
List<Message> messages = List.of(
cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.ACTION, ContextBlock.VisibleDomain.COGNITION, ContextBlock.VisibleDomain.MEMORY)).encodeToContextMessage(),
new Message(Message.Character.USER, buildPrompt(batchInput))
);
EvaluatorResult evaluatorResult = formattedChat(
List.of(new Message(Message.Character.USER, buildPrompt(batchInput))),
messages,
EvaluatorResult.class
);
evaluatorResult.setTendency(batchInput.getTendency());

View File

@@ -1,32 +1,40 @@
package work.slhaf.partner.module.modules.action.planner.extractor;
import com.alibaba.fastjson2.JSONObject;
import org.jetbrains.annotations.NotNull;
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
import work.slhaf.partner.api.agent.factory.component.abstracts.ActivateModel;
import work.slhaf.partner.api.chat.pojo.Message;
import work.slhaf.partner.core.action.ActionCapability;
import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorInput;
import work.slhaf.partner.core.cognition.CognitionCapability;
import work.slhaf.partner.core.cognition.ContextBlock;
import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorResult;
import java.util.List;
public class ActionExtractor extends AbstractAgentModule.Sub<ExtractorInput, ExtractorResult> implements ActivateModel {
public class ActionExtractor extends AbstractAgentModule.Sub<String, ExtractorResult> implements ActivateModel {
@InjectCapability
private ActionCapability actionCapability;
@InjectCapability
private CognitionCapability cognitionCapability;
@Override
public ExtractorResult execute(ExtractorInput data) {
ExtractorResult result = new ExtractorResult();
List<String> tendencyCache = actionCapability.selectTendencyCache(data.getInput());
public ExtractorResult execute(String input) {
List<String> tendencyCache = actionCapability.selectTendencyCache(input);
if (tendencyCache != null && !tendencyCache.isEmpty()) {
ExtractorResult result = new ExtractorResult();
result.setTendencies(tendencyCache);
return result;
}
for (int i = 0; i < 3; i++) {
try {
List<Message> messages = List.of(
cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.COGNITION)).encodeToContextMessage(),
new Message(Message.Character.USER, input)
);
return formattedChat(
List.of(new Message(Message.Character.USER, JSONObject.toJSONString(data))),
messages,
ExtractorResult.class
);
} catch (Exception e) {
@@ -36,6 +44,7 @@ public class ActionExtractor extends AbstractAgentModule.Sub<ExtractorInput, Ext
return new ExtractorResult();
}
@NotNull
@Override
public String modelKey() {
return "action_extractor";

View File

@@ -101,7 +101,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
@Override
protected void fillXml(@NotNull Document document, @NotNull Element root) {
List<Message> chatMessages = cognitionCapability.getChatMessages();
appendRepeatedElements(document, root, "chat_message", List.of(chatMessages.subList(chatMessages.size() - 5, chatMessages.size() - 1)));
appendRepeatedElements(document, root, "chat_message", List.of(chatMessages.subList(chatMessages.size() - 7, chatMessages.size() - 1)));
}
},
Set.of(ContextBlock.VisibleDomain.COGNITION),