refactor(action): remove the redundant fields in the prompt construction logic and data classes left in ActionEvaluator

This commit is contained in:
2026-03-24 14:24:31 +08:00
parent 50b07488a6
commit d11a431614
3 changed files with 32 additions and 46 deletions

View File

@@ -1,8 +1,9 @@
package work.slhaf.partner.module.modules.action.planner.evaluator; package work.slhaf.partner.module.modules.action.planner.evaluator;
import cn.hutool.core.bean.BeanUtil; import kotlin.Unit;
import com.alibaba.fastjson2.JSONArray; import org.jetbrains.annotations.NotNull;
import com.alibaba.fastjson2.JSONObject; 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.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;
@@ -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.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.BlockContent;
import work.slhaf.partner.core.cognition.CognitionCapability; import work.slhaf.partner.core.cognition.CognitionCapability;
import work.slhaf.partner.core.cognition.ContextBlock; import work.slhaf.partner.core.cognition.ContextBlock;
import work.slhaf.partner.core.memory.pojo.ActivatedMemorySlice; import work.slhaf.partner.core.cognition.ResolvedContext;
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;
import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorResult; import work.slhaf.partner.module.modules.action.planner.evaluator.entity.EvaluatorResult;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
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 {
@@ -45,58 +44,52 @@ 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<Callable<EvaluatorResult>> tasks = buildEvaluateTasks(data.getTendencies());
List<Callable<EvaluatorResult>> tasks = buildEvaluateTasks(batchInputs);
return executor.invokeAllAndReturn(tasks); return executor.invokeAllAndReturn(tasks);
} }
private List<Callable<EvaluatorResult>> buildEvaluateTasks(List<EvaluatorBatchInput> batchInputs) { private List<Callable<EvaluatorResult>> buildEvaluateTasks(List<String> tendencies) {
List<Callable<EvaluatorResult>> list = new ArrayList<>(); List<Callable<EvaluatorResult>> list = new ArrayList<>();
for (EvaluatorBatchInput batchInput : batchInputs) { for (String tendency : tendencies) {
list.add(() -> { list.add(() -> {
List<Message> messages = List.of( List<Message> messages = List.of(
cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.ACTION, ContextBlock.VisibleDomain.COGNITION, ContextBlock.VisibleDomain.MEMORY)).encodeToContextMessage(), 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( EvaluatorResult evaluatorResult = formattedChat(
messages, messages,
EvaluatorResult.class EvaluatorResult.class
); );
evaluatorResult.setTendency(batchInput.getTendency()); evaluatorResult.setTendency(tendency);
return evaluatorResult; return evaluatorResult;
}); });
} }
return list; return list;
} }
private List<EvaluatorBatchInput> buildEvaluatorBatchInput(EvaluatorInput data) { private Message availableMetaActionContext() {
List<EvaluatorBatchInput> list = new ArrayList<>(); // TODO select and filter available MetaActions by tags and embedding
for (String tendency : data.getTendencies()) { BlockContent content = new BlockContent("available_meta_actions", "action_planner") {
EvaluatorBatchInput temp = new EvaluatorBatchInput(); @Override
BeanUtil.copyProperties(data, temp); protected void fillXml(@NotNull Document document, @NotNull Element root) {
temp.setTendency(tendency); appendRepeatedElements(
Map<String, String> availableActions = new HashMap<>(); document,
actionCapability.listAvailableMetaActions().forEach((key, info) -> availableActions.put(key, info.getDescription())); root,
temp.setAvailableActions(availableActions); "available_meta_action",
list.add(temp); actionCapability.listAvailableMetaActions().entrySet(),
(block, value) -> {
appendTextElement(document, root, "action_key", value.getKey());
appendTextElement(document, root, "action_value", value.getValue().getDescription());
return Unit.INSTANCE;
} }
return list; );
} }
};
private String buildPrompt(EvaluatorBatchInput batchInput) { return new ResolvedContext(List.of(content)).encodeToContextMessage();
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();
} }
@NotNull
@Override @Override
public String modelKey() { public String modelKey() {
return "action_evaluator"; return "action_evaluator";

View File

@@ -1,16 +1,10 @@
package work.slhaf.partner.module.modules.action.planner.evaluator.entity; package work.slhaf.partner.module.modules.action.planner.evaluator.entity;
import lombok.Data; 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; import java.util.List;
@Data @Data
public class EvaluatorInput { public class EvaluatorInput {
private List<Message> recentMessages;
private User user;
private List<ActivatedMemorySlice> activatedSlices;
private List<String> tendencies; private List<String> tendencies;
} }

View File

@@ -28,7 +28,6 @@ public class ActionExtractor extends AbstractAgentModule.Sub<String, ExtractorRe
} }
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
try { try {
List<Message> messages = List.of( List<Message> messages = List.of(
cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.COGNITION)).encodeToContextMessage(), cognitionCapability.contextWorkspace().resolve(List.of(ContextBlock.VisibleDomain.COGNITION)).encodeToContextMessage(),
new Message(Message.Character.USER, input) new Message(Message.Character.USER, input)