From b3098310b461b4536ba257f70bafe6462f152c32 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Sun, 30 Nov 2025 15:16:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=20ActionConfirmer?= =?UTF-8?q?=20=E7=9A=84=E9=81=97=E6=BC=8F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/action/planner/ActionPlanner.java | 7 +- .../planner/confirmer/ActionConfirmer.java | 66 ++++++++++++++++++- .../confirmer/entity/ConfirmerResult.java | 3 +- 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java index babf2848..60b390a2 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/ActionPlanner.java @@ -2,7 +2,6 @@ package work.slhaf.partner.module.modules.action.planner; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.api.agent.factory.module.annotation.AfterExecute; import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule; @@ -95,11 +94,11 @@ public class ActionPlanner extends PreRunningModule { EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult, context.getUserId()); List evaluatorResults = actionEvaluator.execute(evaluatorInput); //并发操作均为访问 setupActionInfo(evaluatorResults, context); + updateTendencyCache(evaluatorResults, context.getInput(), extractorResult); return null; }); } - @AfterExecute private void updateTendencyCache(List evaluatorResults, String input, ExtractorResult extractorResult) { if (!VectorClient.status) { return; @@ -132,12 +131,12 @@ public class ActionPlanner extends PreRunningModule { tasks.add(() -> { ConfirmerInput confirmerInput = assemblyHelper.buildConfirmerInput(context); ConfirmerResult result = actionConfirmer.execute(confirmerInput); - setupPendingActionInfo(context, result); + setupConfirmedActionInfo(context, result); return null; }); } - private void setupPendingActionInfo(PartnerRunningFlowContext context, ConfirmerResult result) { + private void setupConfirmedActionInfo(PartnerRunningFlowContext context, ConfirmerResult result) { //TODO 需考虑未确认任务的失效或者拒绝时机,在action core中实现 List uuids = result.getUuids(); if (uuids == null) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java index 30df6471..85484b95 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/ActionConfirmer.java @@ -1,19 +1,83 @@ package work.slhaf.partner.module.modules.action.planner.confirmer; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; +import work.slhaf.partner.api.chat.pojo.ChatResponse; +import work.slhaf.partner.api.chat.pojo.Message; +import work.slhaf.partner.core.action.ActionCapability; +import work.slhaf.partner.core.action.ActionCore; +import work.slhaf.partner.core.action.entity.ActionData; import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerInput; import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerResult; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; + +import static work.slhaf.partner.common.util.ExtractUtil.extractJson; + +@Slf4j @AgentSubModule public class ActionConfirmer extends AgentRunningSubModule implements ActivateModel { + + @InjectCapability + private ActionCapability actionCapability; + @Override public ConfirmerResult execute(ConfirmerInput data) { - //TODO 完善确认逻辑 + List actionDataList = data.getActionData(); + ExecutorService executor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL); + CountDownLatch latch = new CountDownLatch(actionDataList.size()); + + ConfirmerResult result = new ConfirmerResult(); + List uuids = result.getUuids(); + + for (ActionData actionData : actionDataList) { + executor.execute(() -> { + try { + String prompt = buildPrompt(actionData, data.getInput(), data.getRecentMessages()); + ChatResponse response = this.singleChat(prompt); + JSONObject tempResult = JSONObject.parseObject(extractJson(response.getMessage())); + if (tempResult.getBoolean("confirmed")) { + actionData.setStatus(ActionData.ActionStatus.PREPARE); + synchronized (uuids) { + uuids.add(actionData.getUuid()); + } + } + } finally { + latch.countDown(); + } + }); + } + try { + latch.await(); + } catch (InterruptedException e) { + log.warn("CountDownLatch阻塞已中断"); + } return null; } + private String buildPrompt(ActionData data, String input, List recentMessages) { + JSONObject prompt = new JSONObject(); + prompt.put("[用户输入]", input); + + JSONObject actionData = prompt.putObject("[行动数据]"); + actionData.put("[行动倾向]", data.getTendency()); + actionData.put("[行动原因]", data.getReason()); + actionData.put("[行动来源]", data.getSource()); + actionData.put("[行动描述]", data.getDescription()); + + JSONArray messageData = prompt.putArray("[近期对话]"); + messageData.addAll(recentMessages); + + return prompt.toString(); + } + @Override public String modelKey() { return "action-confirmer"; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/entity/ConfirmerResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/entity/ConfirmerResult.java index d1d73f0b..cf61639d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/entity/ConfirmerResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/planner/confirmer/entity/ConfirmerResult.java @@ -2,9 +2,10 @@ package work.slhaf.partner.module.modules.action.planner.confirmer.entity; import lombok.Data; +import java.util.ArrayList; import java.util.List; @Data public class ConfirmerResult { - private List uuids; + private List uuids = new ArrayList<>(); }