diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java b/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java index 1533c2f7..3c1afd2b 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/action/planner/ActionPlanner.java @@ -10,7 +10,6 @@ import work.slhaf.partner.core.action.ActionCore; import work.slhaf.partner.core.action.entity.*; import work.slhaf.partner.core.cognition.BlockContent; import work.slhaf.partner.core.cognition.CognitionCapability; -import work.slhaf.partner.core.cognition.CommunicationBlockContent; import work.slhaf.partner.core.cognition.ContextBlock; import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; import work.slhaf.partner.framework.agent.exception.ExceptionReporterHandler; @@ -43,7 +42,6 @@ import java.util.concurrent.atomic.AtomicBoolean; public class ActionPlanner extends AbstractAgentModule.Running { private static final String IMMEDIATE_WATCHER_CRON = "0/5 * * * * ?"; - private static final String BLOCK_SOURCE = "action_planner_pending"; private static final String TENDENCIES_EVALUATING_BLOCK_NAME = "action_tendencies_under_evaluation"; private final ActionAssemblyHelper assemblyHelper = new ActionAssemblyHelper(); @@ -84,7 +82,7 @@ public class ActionPlanner extends AbstractAgentModule.Running tendencies) { @@ -98,7 +96,7 @@ public class ActionPlanner extends AbstractAgentModule.Running { EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult); List evaluatorResults = actionEvaluator.execute(evaluatorInput); // 并发操作均为访问 - handleEvaluatorResults(evaluatorResults, source, input); + handleEvaluatorResults(evaluatorResults, source); cognitionCapability.contextWorkspace().expire(TENDENCIES_EVALUATING_BLOCK_NAME, getModuleName()); }); } - private void handleEvaluatorResults(List evaluatorResults, String source, String input) { - List passedActions = new ArrayList<>(); - int approvedExecutableCount = 0; - int pendingConfirmCount = 0; + private void handleEvaluatorResults(List evaluatorResults, String source) { + boolean hasPassedAction = false; + boolean hasPendingConfirmation = false; + List refusedTendencies = new ArrayList<>(); for (EvaluatorResult evaluatorResult : evaluatorResults) { expireResolvedPending(evaluatorResult); if (!evaluatorResult.isOk()) { + refusedTendencies.add(evaluatorResult.getTendency()); continue; } ExecutableAction executableAction = assemblyHelper.buildActionData(evaluatorResult, source); if (executableAction == null) { continue; } - passedActions.add(executableAction); + hasPassedAction = true; if (evaluatorResult.isNeedConfirm()) { - registerPendingContextBlock(executableAction, evaluatorResult, input); - pendingConfirmCount++; + hasPendingConfirmation = true; + registerPendingContextBlock(executableAction, evaluatorResult); continue; } executeOrSchedule(executableAction); - approvedExecutableCount++; } - if (passedActions.isEmpty()) { - return; + if (hasPassedAction && !refusedTendencies.isEmpty()) { + cognitionCapability.initiateTurn("Some candidate action tendencies were refused during evaluation. If any of them were promised to the user, acknowledge that they will not be executed and explain why.", source, getModuleName()); + } + if (hasPendingConfirmation) { + cognitionCapability.initiateTurn("Some actions are pending user confirmation. Ask the user to confirm before executing them.", source, getModuleName()); } - createTurn(approvedExecutableCount, pendingConfirmCount, source, input); - } - - private void createTurn(int approvedExecutableCount, int pendingConfirmCount, String source, String input) { - String turnInput = approvedExecutableCount + " actions are approved for execution, " + - pendingConfirmCount + " actions are waiting for confirmation, " + - "according to input: " + trimInput(input) + ". For more information, please refer to the context content or other tags in this input block."; - cognitionCapability.initiateTurn(turnInput, source, getModuleName()); } private void expireResolvedPending(EvaluatorResult evaluatorResult) { @@ -190,47 +183,30 @@ public class ActionPlanner extends AbstractAgentModule.Running> primaryActionChain = evaluatorResult.getPrimaryActionChainAsMap(); if (primaryActionChain == null || primaryActionChain.isEmpty()) { return; } Element chainRoot = document.createElement("primary_action_chain"); - root.appendChild(chainRoot); + stateElement.appendChild(chainRoot); List orders = new ArrayList<>(primaryActionChain.keySet()); orders.sort(Integer::compareTo); for (Integer order : orders) { @@ -245,33 +221,7 @@ public class ActionPlanner extends AbstractAgentModule.Running