mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(action): adjust ActionPlanner and related submodules to adapt to current Agent Context acquisition
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user