mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +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 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<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); //并发操作均为访问
|
||||
setupActionInfo(evaluatorResults, context);
|
||||
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
@AfterExecute
|
||||
private void updateTendencyCache(List<EvaluatorResult> 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<String> uuids = result.getUuids();
|
||||
if (uuids == null) {
|
||||
|
||||
@@ -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<ConfirmerInput, ConfirmerResult> implements ActivateModel {
|
||||
|
||||
@InjectCapability
|
||||
private ActionCapability actionCapability;
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
public String modelKey() {
|
||||
return "action-confirmer";
|
||||
|
||||
@@ -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<String> uuids;
|
||||
private List<String> uuids = new ArrayList<>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user