diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java index 6540f561..8c896dae 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/ActionEvaluator.java @@ -1,8 +1,9 @@ package work.slhaf.partner.module.modules.action.planner.evaluator; -import cn.hutool.core.bean.BeanUtil; -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; +import kotlin.Unit; +import org.jetbrains.annotations.NotNull; +import org.w3c.dom.Document; +import org.w3c.dom.Element; 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; @@ -10,17 +11,15 @@ 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.BlockContent; 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.core.cognition.ResolvedContext; import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorInput; import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorResult; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.Callable; public class ActionEvaluator extends AbstractAgentModule.Sub> implements ActivateModel { @@ -45,58 +44,52 @@ public class ActionEvaluator extends AbstractAgentModule.Sub execute(EvaluatorInput data) { - List batchInputs = buildEvaluatorBatchInput(data); - List> tasks = buildEvaluateTasks(batchInputs); + List> tasks = buildEvaluateTasks(data.getTendencies()); return executor.invokeAllAndReturn(tasks); } - private List> buildEvaluateTasks(List batchInputs) { + private List> buildEvaluateTasks(List tendencies) { List> list = new ArrayList<>(); - for (EvaluatorBatchInput batchInput : batchInputs) { + for (String tendency : tendencies) { list.add(() -> { List 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)) + availableMetaActionContext(), + new Message(Message.Character.USER, tendency) ); EvaluatorResult evaluatorResult = formattedChat( messages, EvaluatorResult.class ); - evaluatorResult.setTendency(batchInput.getTendency()); + evaluatorResult.setTendency(tendency); return evaluatorResult; }); } return list; } - private List buildEvaluatorBatchInput(EvaluatorInput data) { - List list = new ArrayList<>(); - for (String tendency : data.getTendencies()) { - EvaluatorBatchInput temp = new EvaluatorBatchInput(); - BeanUtil.copyProperties(data, temp); - temp.setTendency(tendency); - Map availableActions = new HashMap<>(); - actionCapability.listAvailableMetaActions().forEach((key, info) -> availableActions.put(key, info.getDescription())); - temp.setAvailableActions(availableActions); - list.add(temp); - } - return list; - } - - private String buildPrompt(EvaluatorBatchInput batchInput) { - JSONObject prompt = new JSONObject(); - prompt.put("[行动倾向]", batchInput.getTendency()); - JSONArray memoryData = prompt.putArray("[相关记忆切片]"); - for (ActivatedMemorySlice evaluatedSlice : batchInput.getActivatedSlices()) { - JSONObject memory = memoryData.addObject(); - memory.put("[日期]", evaluatedSlice.getDate()); - memory.put("[摘要]", evaluatedSlice.getSummary()); - } - JSONObject availableActionData = prompt.putObject("[可用行动单元]"); - availableActionData.putAll(batchInput.getAvailableActions()); - return prompt.toString(); + private Message availableMetaActionContext() { + // TODO select and filter available MetaActions by tags and embedding + BlockContent content = new BlockContent("available_meta_actions", "action_planner") { + @Override + protected void fillXml(@NotNull Document document, @NotNull Element root) { + appendRepeatedElements( + document, + root, + "available_meta_action", + actionCapability.listAvailableMetaActions().entrySet(), + (block, value) -> { + appendTextElement(document, root, "action_key", value.getKey()); + appendTextElement(document, root, "action_value", value.getValue().getDescription()); + return Unit.INSTANCE; + } + ); + } + }; + return new ResolvedContext(List.of(content)).encodeToContextMessage(); } + @NotNull @Override public String modelKey() { return "action_evaluator"; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java index e93cac3f..881d791b 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/evaluator/entity/EvaluatorInput.java @@ -1,16 +1,10 @@ package work.slhaf.partner.module.modules.action.planner.evaluator.entity; import lombok.Data; -import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.memory.pojo.ActivatedMemorySlice; -import work.slhaf.partner.core.perceive.pojo.User; import java.util.List; @Data public class EvaluatorInput { - private List recentMessages; - private User user; - private List activatedSlices; private List tendencies; } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java index fe801021..87a119af 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/action/planner/extractor/ActionExtractor.java @@ -28,7 +28,6 @@ public class ActionExtractor extends AbstractAgentModule.Sub messages = List.of( cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.COGNITION)).encodeToContextMessage(), new Message(Message.Character.USER, input)