mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
完善了 ActionConfirmer 的遗漏逻辑
This commit is contained in:
@@ -2,7 +2,6 @@ package work.slhaf.partner.module.modules.action.planner;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
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.module.annotation.AfterExecute;
|
|
||||||
import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
|
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.Init;
|
||||||
import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
|
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());
|
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult, context.getUserId());
|
||||||
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); //并发操作均为访问
|
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); //并发操作均为访问
|
||||||
setupActionInfo(evaluatorResults, context);
|
setupActionInfo(evaluatorResults, context);
|
||||||
|
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterExecute
|
|
||||||
private void updateTendencyCache(List<EvaluatorResult> evaluatorResults, String input, ExtractorResult extractorResult) {
|
private void updateTendencyCache(List<EvaluatorResult> evaluatorResults, String input, ExtractorResult extractorResult) {
|
||||||
if (!VectorClient.status) {
|
if (!VectorClient.status) {
|
||||||
return;
|
return;
|
||||||
@@ -132,12 +131,12 @@ public class ActionPlanner extends PreRunningModule {
|
|||||||
tasks.add(() -> {
|
tasks.add(() -> {
|
||||||
ConfirmerInput confirmerInput = assemblyHelper.buildConfirmerInput(context);
|
ConfirmerInput confirmerInput = assemblyHelper.buildConfirmerInput(context);
|
||||||
ConfirmerResult result = actionConfirmer.execute(confirmerInput);
|
ConfirmerResult result = actionConfirmer.execute(confirmerInput);
|
||||||
setupPendingActionInfo(context, result);
|
setupConfirmedActionInfo(context, result);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupPendingActionInfo(PartnerRunningFlowContext context, ConfirmerResult result) {
|
private void setupConfirmedActionInfo(PartnerRunningFlowContext context, ConfirmerResult result) {
|
||||||
//TODO 需考虑未确认任务的失效或者拒绝时机,在action core中实现
|
//TODO 需考虑未确认任务的失效或者拒绝时机,在action core中实现
|
||||||
List<String> uuids = result.getUuids();
|
List<String> uuids = result.getUuids();
|
||||||
if (uuids == null) {
|
if (uuids == null) {
|
||||||
|
|||||||
@@ -1,19 +1,83 @@
|
|||||||
package work.slhaf.partner.module.modules.action.planner.confirmer;
|
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.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.ActivateModel;
|
||||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
|
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.ConfirmerInput;
|
||||||
import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerResult;
|
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
|
@AgentSubModule
|
||||||
public class ActionConfirmer extends AgentRunningSubModule<ConfirmerInput, ConfirmerResult> implements ActivateModel {
|
public class ActionConfirmer extends AgentRunningSubModule<ConfirmerInput, ConfirmerResult> implements ActivateModel {
|
||||||
|
|
||||||
|
@InjectCapability
|
||||||
|
private ActionCapability actionCapability;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConfirmerResult execute(ConfirmerInput data) {
|
public ConfirmerResult execute(ConfirmerInput data) {
|
||||||
//TODO 完善确认逻辑
|
List<ActionData> actionDataList = data.getActionData();
|
||||||
|
ExecutorService executor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL);
|
||||||
|
CountDownLatch latch = new CountDownLatch(actionDataList.size());
|
||||||
|
|
||||||
|
ConfirmerResult result = new ConfirmerResult();
|
||||||
|
List<String> 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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildPrompt(ActionData data, String input, List<Message> 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
|
@Override
|
||||||
public String modelKey() {
|
public String modelKey() {
|
||||||
return "action-confirmer";
|
return "action-confirmer";
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package work.slhaf.partner.module.modules.action.planner.confirmer.entity;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ConfirmerResult {
|
public class ConfirmerResult {
|
||||||
private List<String> uuids;
|
private List<String> uuids = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user