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.abstracts.AbstractAgentModule;
|
||||||
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
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.agent.factory.component.annotation.InjectModule;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
|
||||||
import work.slhaf.partner.common.vector.VectorClient;
|
import work.slhaf.partner.common.vector.VectorClient;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
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.CacheAdjustData;
|
||||||
import work.slhaf.partner.core.action.entity.cache.CacheAdjustMetaData;
|
import work.slhaf.partner.core.action.entity.cache.CacheAdjustMetaData;
|
||||||
import work.slhaf.partner.core.cognition.CognitionCapability;
|
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.executor.ActionExecutor;
|
||||||
import work.slhaf.partner.module.modules.action.planner.confirmer.ActionConfirmer;
|
import work.slhaf.partner.module.modules.action.planner.confirmer.ActionConfirmer;
|
||||||
import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerInput;
|
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.EvaluatorInput;
|
||||||
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorResult;
|
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.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.planner.extractor.entity.ExtractorResult;
|
||||||
import work.slhaf.partner.module.modules.action.scheduler.ActionScheduler;
|
import work.slhaf.partner.module.modules.action.scheduler.ActionScheduler;
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
||||||
@@ -52,8 +49,6 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
|
|||||||
private CognitionCapability cognitionCapability;
|
private CognitionCapability cognitionCapability;
|
||||||
@InjectCapability
|
@InjectCapability
|
||||||
private ActionCapability actionCapability;
|
private ActionCapability actionCapability;
|
||||||
@InjectCapability
|
|
||||||
private MemoryCapability memoryCapability;
|
|
||||||
|
|
||||||
@InjectModule
|
@InjectModule
|
||||||
private ActionEvaluator actionEvaluator;
|
private ActionEvaluator actionEvaluator;
|
||||||
@@ -74,7 +69,7 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(PartnerRunningFlowContext context) {
|
public void execute(@NotNull PartnerRunningFlowContext context) {
|
||||||
try {
|
try {
|
||||||
List<Callable<Void>> tasks = new ArrayList<>();
|
List<Callable<Void>> tasks = new ArrayList<>();
|
||||||
addConfirmTask(tasks, context);
|
addConfirmTask(tasks, context);
|
||||||
@@ -93,12 +88,11 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
|
|||||||
*/
|
*/
|
||||||
private void addNewActionTask(List<Callable<Void>> tasks, PartnerRunningFlowContext context) {
|
private void addNewActionTask(List<Callable<Void>> tasks, PartnerRunningFlowContext context) {
|
||||||
tasks.add(() -> {
|
tasks.add(() -> {
|
||||||
ExtractorInput extractorInput = assemblyHelper.buildExtractorInput(context);
|
ExtractorResult extractorResult = actionExtractor.execute(context.getInput());
|
||||||
ExtractorResult extractorResult = actionExtractor.execute(extractorInput);
|
|
||||||
if (extractorResult.getTendencies().isEmpty()) {
|
if (extractorResult.getTendencies().isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult, context.getSource());
|
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult);
|
||||||
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); // 并发操作均为访问
|
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); // 并发操作均为访问
|
||||||
putActionData(evaluatorResults, context);
|
putActionData(evaluatorResults, context);
|
||||||
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
|
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
|
||||||
@@ -306,25 +300,9 @@ public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlo
|
|||||||
private ActionAssemblyHelper() {
|
private ActionAssemblyHelper() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ExtractorInput buildExtractorInput(PartnerRunningFlowContext context) {
|
private EvaluatorInput buildEvaluatorInput(ExtractorResult extractorResult) {
|
||||||
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) {
|
|
||||||
EvaluatorInput input = new EvaluatorInput();
|
EvaluatorInput input = new EvaluatorInput();
|
||||||
input.setTendencies(extractorResult.getTendencies());
|
input.setTendencies(extractorResult.getTendencies());
|
||||||
input.setRecentMessages(cognitionCapability.snapshotChatMessages());
|
|
||||||
input.setActivatedSlices(memoryCapability.getActivatedSlices());
|
|
||||||
return input;
|
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.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
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.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.EvaluatorBatchInput;
|
||||||
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorInput;
|
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorInput;
|
||||||
@@ -22,8 +24,12 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, List<EvaluatorResult>> implements ActivateModel {
|
public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, List<EvaluatorResult>> implements ActivateModel {
|
||||||
|
|
||||||
@InjectCapability
|
@InjectCapability
|
||||||
private ActionCapability actionCapability;
|
private ActionCapability actionCapability;
|
||||||
|
@InjectCapability
|
||||||
|
private CognitionCapability cognitionCapability;
|
||||||
|
|
||||||
private InteractionThreadPoolExecutor executor;
|
private InteractionThreadPoolExecutor executor;
|
||||||
|
|
||||||
@Init
|
@Init
|
||||||
@@ -40,16 +46,20 @@ public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, Lis
|
|||||||
@Override
|
@Override
|
||||||
public List<EvaluatorResult> execute(EvaluatorInput data) {
|
public List<EvaluatorResult> execute(EvaluatorInput data) {
|
||||||
List<EvaluatorBatchInput> batchInputs = buildEvaluatorBatchInput(data);
|
List<EvaluatorBatchInput> batchInputs = buildEvaluatorBatchInput(data);
|
||||||
List<Callable<EvaluatorResult>> tasks = getTasks(batchInputs);
|
List<Callable<EvaluatorResult>> tasks = buildEvaluateTasks(batchInputs);
|
||||||
return executor.invokeAllAndReturn(tasks);
|
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<>();
|
List<Callable<EvaluatorResult>> list = new ArrayList<>();
|
||||||
for (EvaluatorBatchInput batchInput : batchInputs) {
|
for (EvaluatorBatchInput batchInput : batchInputs) {
|
||||||
list.add(() -> {
|
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(
|
EvaluatorResult evaluatorResult = formattedChat(
|
||||||
List.of(new Message(Message.Character.USER, buildPrompt(batchInput))),
|
messages,
|
||||||
EvaluatorResult.class
|
EvaluatorResult.class
|
||||||
);
|
);
|
||||||
evaluatorResult.setTendency(batchInput.getTendency());
|
evaluatorResult.setTendency(batchInput.getTendency());
|
||||||
|
|||||||
@@ -1,32 +1,40 @@
|
|||||||
package work.slhaf.partner.module.modules.action.planner.extractor;
|
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.capability.annotation.InjectCapability;
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.agent.factory.component.abstracts.ActivateModel;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
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 work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorResult;
|
||||||
|
|
||||||
import java.util.List;
|
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
|
@InjectCapability
|
||||||
private ActionCapability actionCapability;
|
private ActionCapability actionCapability;
|
||||||
|
@InjectCapability
|
||||||
|
private CognitionCapability cognitionCapability;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExtractorResult execute(ExtractorInput data) {
|
public ExtractorResult execute(String input) {
|
||||||
ExtractorResult result = new ExtractorResult();
|
List<String> tendencyCache = actionCapability.selectTendencyCache(input);
|
||||||
List<String> tendencyCache = actionCapability.selectTendencyCache(data.getInput());
|
|
||||||
if (tendencyCache != null && !tendencyCache.isEmpty()) {
|
if (tendencyCache != null && !tendencyCache.isEmpty()) {
|
||||||
|
ExtractorResult result = new ExtractorResult();
|
||||||
result.setTendencies(tendencyCache);
|
result.setTendencies(tendencyCache);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
List<Message> messages = List.of(
|
||||||
|
cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.COGNITION)).encodeToContextMessage(),
|
||||||
|
new Message(Message.Character.USER, input)
|
||||||
|
);
|
||||||
return formattedChat(
|
return formattedChat(
|
||||||
List.of(new Message(Message.Character.USER, JSONObject.toJSONString(data))),
|
messages,
|
||||||
ExtractorResult.class
|
ExtractorResult.class
|
||||||
);
|
);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -36,6 +44,7 @@ public class ActionExtractor extends AbstractAgentModule.Sub<ExtractorInput, Ext
|
|||||||
return new ExtractorResult();
|
return new ExtractorResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String modelKey() {
|
public String modelKey() {
|
||||||
return "action_extractor";
|
return "action_extractor";
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
@Override
|
@Override
|
||||||
protected void fillXml(@NotNull Document document, @NotNull Element root) {
|
protected void fillXml(@NotNull Document document, @NotNull Element root) {
|
||||||
List<Message> chatMessages = cognitionCapability.getChatMessages();
|
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),
|
Set.of(ContextBlock.VisibleDomain.COGNITION),
|
||||||
|
|||||||
Reference in New Issue
Block a user