mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(context): migrate running flow context to source/status/info model, and update related modules
This commit is contained in:
@@ -15,7 +15,7 @@ public abstract class PreRunningAbstractAgentModuleAbstract extends AbstractAgen
|
|||||||
data.setModuleName(moduleName());
|
data.setModuleName(moduleName());
|
||||||
Map<String, String> map = getPromptDataMap(context);
|
Map<String, String> map = getPromptDataMap(context);
|
||||||
data.setAppendedPrompt(map);
|
data.setAppendedPrompt(map);
|
||||||
context.setAppendedPrompt(data);
|
context.appendPrompt(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void setActiveModule(PartnerRunningFlowContext context) {
|
private synchronized void setActiveModule(PartnerRunningFlowContext context) {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class ActionDispatcher extends PostRunningAbstractAgentModuleAbstract {
|
|||||||
// 对于将触发的PLANNING
|
// 对于将触发的PLANNING
|
||||||
// action,理想做法是将执行工具做成执行链的形式,模型的自对话流程、是否通知用户都做成与普通工具同等的通用可选能力,避免绑定固定流程
|
// action,理想做法是将执行工具做成执行链的形式,模型的自对话流程、是否通知用户都做成与普通工具同等的通用可选能力,避免绑定固定流程
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
String userId = context.getUserId();
|
String userId = context.getSource();
|
||||||
val preparedActions = actionCapability.listActions(ExecutableAction.Status.PREPARE, userId);
|
val preparedActions = actionCapability.listActions(ExecutableAction.Status.PREPARE, userId);
|
||||||
// 分类成PLANNING和IMMEDIATE两类
|
// 分类成PLANNING和IMMEDIATE两类
|
||||||
Set<SchedulableExecutableAction> scheduledActions = new HashSet<>();
|
Set<SchedulableExecutableAction> scheduledActions = new HashSet<>();
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp
|
|||||||
// 首先通过recognizer进行快速意图识别,识别成功则步入评估阶段,评估成功则直接作用于目标行动链
|
// 首先通过recognizer进行快速意图识别,识别成功则步入评估阶段,评估成功则直接作用于目标行动链
|
||||||
// 进行快速意图识别时必须结合近期对话与进行中行动链情况
|
// 进行快速意图识别时必须结合近期对话与进行中行动链情况
|
||||||
// 干预意图识别
|
// 干预意图识别
|
||||||
String uuid = context.getUuid();
|
String uuid = context.getInfo().getUuid();
|
||||||
String userId = context.getUserId();
|
String userId = context.getSource();
|
||||||
RecognizerResult recognizerResult = interventionRecognizer
|
RecognizerResult recognizerResult = interventionRecognizer
|
||||||
.execute(assemblyHelper.buildRecognizerInput(userId, context.getInput())); // 此处的输入内容携带了所有 PhaserRecord
|
.execute(assemblyHelper.buildRecognizerInput(userId, context.getInput())); // 此处的输入内容携带了所有 PhaserRecord
|
||||||
if (!recognizerResult.isOk()) {
|
if (!recognizerResult.isOk()) {
|
||||||
@@ -141,7 +141,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
||||||
return interventionPrompt.remove(context.getUuid());
|
return interventionPrompt.remove(context.getInfo().getUuid());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
if (extractorResult.getTendencies().isEmpty()) {
|
if (extractorResult.getTendencies().isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult, context.getUserId());
|
EvaluatorInput evaluatorInput = assemblyHelper.buildEvaluatorInput(extractorResult, context.getSource());
|
||||||
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); // 并发操作均为访问
|
List<EvaluatorResult> evaluatorResults = actionEvaluator.execute(evaluatorInput); // 并发操作均为访问
|
||||||
putActionData(evaluatorResults, context);
|
putActionData(evaluatorResults, context);
|
||||||
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
|
updateTendencyCache(evaluatorResults, context.getInput(), extractorResult);
|
||||||
@@ -134,7 +134,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
if (uuids == null) {
|
if (uuids == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<ExecutableAction> pendingActions = actionCapability.popPendingAction(context.getUserId());
|
List<ExecutableAction> pendingActions = actionCapability.popPendingAction(context.getSource());
|
||||||
for (ExecutableAction executableAction : pendingActions) {
|
for (ExecutableAction executableAction : pendingActions) {
|
||||||
if (uuids.contains(executableAction.getUuid())) {
|
if (uuids.contains(executableAction.getUuid())) {
|
||||||
actionCapability.putAction(executableAction);
|
actionCapability.putAction(executableAction);
|
||||||
@@ -144,9 +144,9 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
|
|
||||||
private void putActionData(List<EvaluatorResult> evaluatorResults, PartnerRunningFlowContext context) {
|
private void putActionData(List<EvaluatorResult> evaluatorResults, PartnerRunningFlowContext context) {
|
||||||
for (EvaluatorResult evaluatorResult : evaluatorResults) {
|
for (EvaluatorResult evaluatorResult : evaluatorResults) {
|
||||||
ExecutableAction executableAction = assemblyHelper.buildActionData(evaluatorResult, context.getUserId());
|
ExecutableAction executableAction = assemblyHelper.buildActionData(evaluatorResult, context.getSource());
|
||||||
if (evaluatorResult.isNeedConfirm()) {
|
if (evaluatorResult.isNeedConfirm()) {
|
||||||
actionCapability.putPendingActions(context.getUserId(), executableAction);
|
actionCapability.putPendingActions(context.getSource(), executableAction);
|
||||||
} else {
|
} else {
|
||||||
actionCapability.putAction(executableAction);
|
actionCapability.putAction(executableAction);
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
@Override
|
@Override
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
||||||
HashMap<String, String> map = new HashMap<>();
|
HashMap<String, String> map = new HashMap<>();
|
||||||
String userId = context.getUserId();
|
String userId = context.getSource();
|
||||||
setupPendingActions(map, userId);
|
setupPendingActions(map, userId);
|
||||||
setupPreparedActions(map, userId);
|
setupPreparedActions(map, userId);
|
||||||
return map;
|
return map;
|
||||||
@@ -327,7 +327,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
private ConfirmerInput buildConfirmerInput(PartnerRunningFlowContext context) {
|
private ConfirmerInput buildConfirmerInput(PartnerRunningFlowContext context) {
|
||||||
ConfirmerInput confirmerInput = new ConfirmerInput();
|
ConfirmerInput confirmerInput = new ConfirmerInput();
|
||||||
confirmerInput.setInput(context.getInput());
|
confirmerInput.setInput(context.getInput());
|
||||||
List<ExecutableAction> pendingActions = actionCapability.listPendingAction(context.getUserId());
|
List<ExecutableAction> pendingActions = actionCapability.listPendingAction(context.getSource());
|
||||||
confirmerInput.setExecutableActionData(pendingActions);
|
confirmerInput.setExecutableActionData(pendingActions);
|
||||||
return confirmerInput;
|
return confirmerInput;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class CoreModel extends AbstractAgentModule.Running<PartnerRunningFlowCon
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(PartnerRunningFlowContext runningFlowContext) {
|
public void execute(PartnerRunningFlowContext runningFlowContext) {
|
||||||
String userId = runningFlowContext.getUserId();
|
String userId = runningFlowContext.getSource();
|
||||||
log.debug("[CoreModel] 主对话流程开始: {}", userId);
|
log.debug("[CoreModel] 主对话流程开始: {}", userId);
|
||||||
beforeChat(runningFlowContext);
|
beforeChat(runningFlowContext);
|
||||||
executeChat(runningFlowContext);
|
executeChat(runningFlowContext);
|
||||||
@@ -144,8 +144,8 @@ public class CoreModel extends AbstractAgentModule.Running<PartnerRunningFlowCon
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull ChatResponse chat() {
|
public @NotNull ChatResponse chat() {
|
||||||
List<@NotNull Message> baseMessages = getModel().getBaseMessages();
|
List<Message> baseMessages = getModel().getBaseMessages();
|
||||||
List<@NotNull Message> chatMessages = getModel().getChatMessages();
|
List<Message> chatMessages = getModel().getChatMessages();
|
||||||
List<Message> temp = new ArrayList<>(baseMessages.subList(0, baseMessages.size() - 2));
|
List<Message> temp = new ArrayList<>(baseMessages.subList(0, baseMessages.size() - 2));
|
||||||
temp.addAll(appendedMessages);
|
temp.addAll(appendedMessages);
|
||||||
temp.addAll(baseMessages.subList(baseMessages.size() - 2, baseMessages.size()));
|
temp.addAll(baseMessages.subList(baseMessages.size() - 2, baseMessages.size()));
|
||||||
@@ -155,7 +155,7 @@ public class CoreModel extends AbstractAgentModule.Running<PartnerRunningFlowCon
|
|||||||
|
|
||||||
private void updateModuleContextAndChatMessages(PartnerRunningFlowContext runningFlowContext, String response, ChatResponse chatResponse) {
|
private void updateModuleContextAndChatMessages(PartnerRunningFlowContext runningFlowContext, String response, ChatResponse chatResponse) {
|
||||||
cognationCapability.getMessageLock().lock();
|
cognationCapability.getMessageLock().lock();
|
||||||
List<@NotNull Message> chatMessages = getModel().getChatMessages();
|
List<Message> chatMessages = getModel().getChatMessages();
|
||||||
chatMessages.removeIf(m -> {
|
chatMessages.removeIf(m -> {
|
||||||
if (m.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
if (m.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -178,10 +178,10 @@ public class CoreModel extends AbstractAgentModule.Running<PartnerRunningFlowCon
|
|||||||
//设置上下文
|
//设置上下文
|
||||||
runningFlowContext.getModuleContext().getExtraContext().put("total_token", chatResponse.getUsageBean().getTotal_tokens());
|
runningFlowContext.getModuleContext().getExtraContext().put("total_token", chatResponse.getUsageBean().getTotal_tokens());
|
||||||
//区分单人聊天场景
|
//区分单人聊天场景
|
||||||
if (runningFlowContext.isSingle()) {
|
// if (runningFlowContext.isSingle()) {
|
||||||
MetaMessage metaMessage = new MetaMessage(primaryUserMessage, assistantMessage);
|
MetaMessage metaMessage = new MetaMessage(primaryUserMessage, assistantMessage);
|
||||||
cognationCapability.addMetaMessage(runningFlowContext.getUserId(), metaMessage);
|
cognationCapability.addMetaMessage(runningFlowContext.getSource(), metaMessage);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setMessage(String coreContextStr) {
|
private void setMessage(String coreContextStr) {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doExecute(PartnerRunningFlowContext runningFlowContext) {
|
public void doExecute(PartnerRunningFlowContext runningFlowContext) {
|
||||||
String userId = runningFlowContext.getUserId();
|
String userId = runningFlowContext.getSource();
|
||||||
//获取主题路径
|
//获取主题路径
|
||||||
ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext);
|
ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext);
|
||||||
if (extractorResult.isRecall() || !extractorResult.getMatches().isEmpty()) {
|
if (extractorResult.isRecall() || !extractorResult.getMatches().isEmpty()) {
|
||||||
@@ -54,7 +54,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
private List<EvaluatedSlice> selectAndEvaluateMemory(PartnerRunningFlowContext runningFlowContext, ExtractorResult extractorResult) {
|
private List<EvaluatedSlice> selectAndEvaluateMemory(PartnerRunningFlowContext runningFlowContext, ExtractorResult extractorResult) {
|
||||||
log.debug("[MemorySelector] 触发记忆回溯...");
|
log.debug("[MemorySelector] 触发记忆回溯...");
|
||||||
//查找切片
|
//查找切片
|
||||||
String userId = runningFlowContext.getUserId();
|
String userId = runningFlowContext.getSource();
|
||||||
List<MemoryResult> memoryResultList = new ArrayList<>();
|
List<MemoryResult> memoryResultList = new ArrayList<>();
|
||||||
setMemoryResultList(memoryResultList, extractorResult.getMatches(), userId);
|
setMemoryResultList(memoryResultList, extractorResult.getMatches(), userId);
|
||||||
//评估切片
|
//评估切片
|
||||||
@@ -70,7 +70,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setModuleContextRecall(PartnerRunningFlowContext runningFlowContext) {
|
private void setModuleContextRecall(PartnerRunningFlowContext runningFlowContext) {
|
||||||
String userId = runningFlowContext.getUserId();
|
String userId = runningFlowContext.getSource();
|
||||||
boolean recall = memoryCapability.hasActivatedSlices(userId);
|
boolean recall = memoryCapability.hasActivatedSlices(userId);
|
||||||
runningFlowContext.getModuleContext().getExtraContext().put("recall", recall);
|
runningFlowContext.getModuleContext().getExtraContext().put("recall", recall);
|
||||||
if (recall) {
|
if (recall) {
|
||||||
@@ -127,7 +127,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
@Override
|
@Override
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
||||||
HashMap<String, String> map = new HashMap<>();
|
HashMap<String, String> map = new HashMap<>();
|
||||||
String userId = context.getUserId();
|
String userId = context.getSource();
|
||||||
String dialogMapStr = memoryCapability.getDialogMapStr();
|
String dialogMapStr = memoryCapability.getDialogMapStr();
|
||||||
if (!dialogMapStr.isEmpty()) {
|
if (!dialogMapStr.isEmpty()) {
|
||||||
map.put("[记忆缓存] <你最近两日和所有聊天者的对话记忆印象>", dialogMapStr);
|
map.put("[记忆缓存] <你最近两日和所有聊天者的对话记忆印象>", dialogMapStr);
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ public class MemorySelectExtractor extends AbstractAgentModule.Sub<PartnerRunnin
|
|||||||
log.debug("[MemorySelectExtractor] 主题提取模块开始...");
|
log.debug("[MemorySelectExtractor] 主题提取模块开始...");
|
||||||
// 结构化为指定格式
|
// 结构化为指定格式
|
||||||
List<Message> chatMessages = new ArrayList<>();
|
List<Message> chatMessages = new ArrayList<>();
|
||||||
List<MetaMessage> metaMessages = cognationCapability.getSingleMetaMessageMap().get(context.getUserId());
|
List<MetaMessage> metaMessages = cognationCapability.getSingleMetaMessageMap().get(context.getSource());
|
||||||
if (metaMessages == null) {
|
if (metaMessages == null) {
|
||||||
cognationCapability.getSingleMetaMessageMap().put(context.getUserId(), new ArrayList<>());
|
cognationCapability.getSingleMetaMessageMap().put(context.getSource(), new ArrayList<>());
|
||||||
} else {
|
} else {
|
||||||
for (MetaMessage metaMessage : metaMessages) {
|
for (MetaMessage metaMessage : metaMessages) {
|
||||||
chatMessages.add(metaMessage.getUserMessage());
|
chatMessages.add(metaMessage.getUserMessage());
|
||||||
@@ -48,10 +48,10 @@ public class MemorySelectExtractor extends AbstractAgentModule.Sub<PartnerRunnin
|
|||||||
}
|
}
|
||||||
ExtractorResult extractorResult;
|
ExtractorResult extractorResult;
|
||||||
try {
|
try {
|
||||||
List<EvaluatedSlice> activatedMemorySlices = memoryCapability.getActivatedSlices(context.getUserId());
|
List<EvaluatedSlice> activatedMemorySlices = memoryCapability.getActivatedSlices(context.getSource());
|
||||||
ExtractorInput extractorInput = ExtractorInput.builder()
|
ExtractorInput extractorInput = ExtractorInput.builder()
|
||||||
.text(context.getInput())
|
.text(context.getInput())
|
||||||
.date(context.getDateTime().toLocalDate())
|
.date(context.getInfo().getDateTime().toLocalDate())
|
||||||
.history(chatMessages)
|
.history(chatMessages)
|
||||||
.topic_tree(memoryCapability.getTopicTree())
|
.topic_tree(memoryCapability.getTopicTree())
|
||||||
.activatedMemorySlices(activatedMemorySlices)
|
.activatedMemorySlices(activatedMemorySlices)
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class MemoryUpdater extends PostRunningAbstractAgentModuleAbstract {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doExecute(PartnerRunningFlowContext context) {
|
public void doExecute(PartnerRunningFlowContext context) {
|
||||||
if (context.isFinished()) {
|
if (context.getFinished()) {
|
||||||
log.warn("[MemoryUpdater] 流程强制结束, 不触发记忆被动更新机制");
|
log.warn("[MemoryUpdater] 流程强制结束, 不触发记忆被动更新机制");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class PerceiveSelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
@Override
|
@Override
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
||||||
HashMap<String, String> map = new HashMap<>();
|
HashMap<String, String> map = new HashMap<>();
|
||||||
User user = perceiveCapability.getUser(context.getUserId());
|
User user = perceiveCapability.getUser(context.getSource());
|
||||||
map.put("[关系] <你与最新聊天用户的关系>", user.getRelation());
|
map.put("[关系] <你与最新聊天用户的关系>", user.getRelation());
|
||||||
map.put("[态度] <你对于最新聊天用户的态度>", user.getAttitude().toString());
|
map.put("[态度] <你对于最新聊天用户的态度>", user.getAttitude().toString());
|
||||||
map.put("[印象] <你对于最新聊天用户的印象>", user.getImpressions().toString());
|
map.put("[印象] <你对于最新聊天用户的印象>", user.getImpressions().toString());
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class PerceiveUpdater extends PostRunningAbstractAgentModuleAbstract {
|
|||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
ReentrantLock userLock = new ReentrantLock();
|
ReentrantLock userLock = new ReentrantLock();
|
||||||
User user = new User();
|
User user = new User();
|
||||||
user.setUuid(context.getUserId());
|
user.setUuid(context.getSource());
|
||||||
List<Callable<Void>> tasks = new ArrayList<>();
|
List<Callable<Void>> tasks = new ArrayList<>();
|
||||||
tasks.add(() -> {
|
tasks.add(() -> {
|
||||||
runStaticExtractorAction(context, userLock, user);
|
runStaticExtractorAction(context, userLock, user);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class RelationExtractor extends AbstractAgentModule.Sub<PartnerRunningFlo
|
|||||||
@Override
|
@Override
|
||||||
public RelationExtractResult execute(PartnerRunningFlowContext context) {
|
public RelationExtractResult execute(PartnerRunningFlowContext context) {
|
||||||
tempMessages = new ArrayList<>(cognationCapability.getChatMessages());
|
tempMessages = new ArrayList<>(cognationCapability.getChatMessages());
|
||||||
String userId = context.getUserId();
|
String userId = context.getSource();
|
||||||
RelationExtractInput input = getRelationInput(userId);
|
RelationExtractInput input = getRelationInput(userId);
|
||||||
RelationExtractResult relationExtractResult = getRelationResult(input);
|
RelationExtractResult relationExtractResult = getRelationResult(input);
|
||||||
User user = getTempUser(context, relationExtractResult);
|
User user = getTempUser(context, relationExtractResult);
|
||||||
@@ -41,7 +41,7 @@ public class RelationExtractor extends AbstractAgentModule.Sub<PartnerRunningFlo
|
|||||||
|
|
||||||
private User getTempUser(PartnerRunningFlowContext context, RelationExtractResult relationExtractResult) {
|
private User getTempUser(PartnerRunningFlowContext context, RelationExtractResult relationExtractResult) {
|
||||||
User user = new User();
|
User user = new User();
|
||||||
user.setUuid(context.getUserId());
|
user.setUuid(context.getSource());
|
||||||
user.setRelation(relationExtractResult.getRelation());
|
user.setRelation(relationExtractResult.getRelation());
|
||||||
user.setImpressions(relationExtractResult.getImpressions());
|
user.setImpressions(relationExtractResult.getImpressions());
|
||||||
user.setAttitude(relationExtractResult.getAttitude());
|
user.setAttitude(relationExtractResult.getAttitude());
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ public class StaticMemoryExtractor extends AbstractAgentModule.Sub<PartnerRunnin
|
|||||||
@Override
|
@Override
|
||||||
public HashMap<String, String> execute(PartnerRunningFlowContext context) {
|
public HashMap<String, String> execute(PartnerRunningFlowContext context) {
|
||||||
StaticMemoryExtractInput input = StaticMemoryExtractInput.builder()
|
StaticMemoryExtractInput input = StaticMemoryExtractInput.builder()
|
||||||
.userId(context.getUserId())
|
.userId(context.getSource())
|
||||||
.messages(cognationCapability.getChatMessages())
|
.messages(cognationCapability.getChatMessages())
|
||||||
.existedStaticMap(perceiveCapability.getUser(context.getUserId()).getStaticMemory())
|
.existedStaticMap(perceiveCapability.getUser(context.getSource()).getStaticMemory())
|
||||||
.build();
|
.build();
|
||||||
ChatResponse response = singleChat(JSONUtil.toJsonPrettyStr(input));
|
ChatResponse response = singleChat(JSONUtil.toJsonPrettyStr(input));
|
||||||
JSONObject jsonObject = JSONObject.parseObject(response.getMessage());
|
JSONObject jsonObject = JSONObject.parseObject(response.getMessage());
|
||||||
|
|||||||
@@ -1,38 +1,42 @@
|
|||||||
package work.slhaf.partner.runtime.interaction;
|
package work.slhaf.partner.runtime.interaction;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter;
|
import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter;
|
||||||
import work.slhaf.partner.runtime.interaction.data.PartnerInputData;
|
import work.slhaf.partner.runtime.interaction.data.PartnerInputData;
|
||||||
import work.slhaf.partner.runtime.interaction.data.PartnerOutputData;
|
import work.slhaf.partner.runtime.interaction.data.PartnerOutputData;
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
public class PartnerInteractionAdapter extends AgentInteractionAdapter<PartnerInputData, PartnerOutputData, PartnerRunningFlowContext> {
|
public class PartnerInteractionAdapter extends AgentInteractionAdapter<PartnerInputData, PartnerOutputData, PartnerRunningFlowContext> {
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected PartnerOutputData parseOutputData(PartnerRunningFlowContext outputContext) {
|
protected PartnerOutputData parseOutputData(PartnerRunningFlowContext outputContext) {
|
||||||
PartnerOutputData outputData = new PartnerOutputData();
|
PartnerOutputData outputData = new PartnerOutputData();
|
||||||
outputData.setCode(outputContext.getOk());
|
outputData.setCode(outputContext.getStatus().getOk() ? 1 : 0);
|
||||||
outputData.setContent(getContent(outputContext));
|
outputData.setContent(getContent(outputContext));
|
||||||
outputData.setUserInfo(outputContext.getUserInfo());
|
outputData.setUserInfo(outputContext.getTarget());
|
||||||
outputData.setDateTime(outputContext.getDateTime());
|
outputData.setDateTime(ZonedDateTime.now().toLocalDateTime());
|
||||||
return outputData;
|
return outputData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getContent(PartnerRunningFlowContext outputContext) {
|
private String getContent(PartnerRunningFlowContext outputContext) {
|
||||||
StringBuilder str = new StringBuilder();
|
StringBuilder str = new StringBuilder();
|
||||||
str.append(outputContext.getCoreResponse().getString("text")).append("\r\n")
|
str.append(outputContext.getCoreResponse().getString("text"));
|
||||||
.append("\r\n错误信息:\r\n")
|
if (!outputContext.getStatus().getOk()) {
|
||||||
.append(outputContext.getErrMsg().toString());
|
str.append("\r\n").append("\r\n错误信息:\r\n").append(outputContext.getStatus().getErrors());
|
||||||
|
}
|
||||||
return str.toString();
|
return str.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected PartnerRunningFlowContext parseInputData(PartnerInputData inputData) {
|
protected PartnerRunningFlowContext parseInputData(PartnerInputData inputData) {
|
||||||
PartnerRunningFlowContext context = new PartnerRunningFlowContext();
|
return new PartnerRunningFlowContext(
|
||||||
context.setUserNickname(inputData.getUserNickName());
|
inputData.getUserInfo(),
|
||||||
context.setUserInfo(inputData.getUserInfo());
|
inputData.getContent(),
|
||||||
context.setDateTime(inputData.getDateTime());
|
inputData.getPlatform(),
|
||||||
context.setSingle(inputData.isSingle());
|
inputData.getUserNickName()
|
||||||
context.setPlatform(inputData.getPlatform());
|
);
|
||||||
context.setInput(inputData.getContent());
|
|
||||||
return context;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,51 +1,33 @@
|
|||||||
package work.slhaf.partner.runtime.interaction.data.context;
|
package work.slhaf.partner.runtime.interaction.data.context
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject
|
||||||
import lombok.Data;
|
import work.slhaf.partner.api.agent.runtime.interaction.flow.RunningFlowContext
|
||||||
import lombok.EqualsAndHashCode;
|
import work.slhaf.partner.module.common.entity.AppendPromptData
|
||||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.RunningFlowContext;
|
import work.slhaf.partner.runtime.interaction.data.context.subcontext.CoreContext
|
||||||
import work.slhaf.partner.module.common.entity.AppendPromptData;
|
import work.slhaf.partner.runtime.interaction.data.context.subcontext.ModuleContext
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.subcontext.CoreContext;
|
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.subcontext.ModuleContext;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
class PartnerRunningFlowContext(
|
||||||
import java.time.LocalDateTime;
|
override val source: String,
|
||||||
import java.util.List;
|
override val input: String,
|
||||||
import java.util.UUID;
|
platform: String,
|
||||||
|
nickName: String
|
||||||
|
) : RunningFlowContext() {
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
init {
|
||||||
@Data
|
putUserInfo("platform", platform)
|
||||||
public class PartnerRunningFlowContext extends RunningFlowContext {
|
putUserInfo("nickname", nickName)
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
protected String userId;
|
|
||||||
protected String userNickname;
|
|
||||||
protected String userInfo;
|
|
||||||
protected String platform;
|
|
||||||
protected LocalDateTime dateTime;
|
|
||||||
protected boolean single;
|
|
||||||
|
|
||||||
protected String input;
|
|
||||||
|
|
||||||
protected CoreContext coreContext = new CoreContext();
|
|
||||||
protected ModuleContext moduleContext = new ModuleContext();
|
|
||||||
protected JSONObject coreResponse = new JSONObject();
|
|
||||||
|
|
||||||
protected String uuid = UUID.randomUUID().toString();
|
|
||||||
|
|
||||||
public boolean isFinished() {
|
|
||||||
return moduleContext.isFinished();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFinished(boolean finished) {
|
val moduleContext = ModuleContext()
|
||||||
moduleContext.setFinished(finished);
|
val coreContext = CoreContext()
|
||||||
|
val coreResponse = JSONObject()
|
||||||
|
|
||||||
|
var finished: Boolean
|
||||||
|
get() = moduleContext.isFinished
|
||||||
|
set(value) {
|
||||||
|
moduleContext.isFinished = value
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAppendedPrompt(AppendPromptData appendedPrompt) {
|
fun appendPrompt(appendPromptData: AppendPromptData) = moduleContext.appendPromptData(appendPromptData)
|
||||||
List<AppendPromptData> appendPromptList = moduleContext.getAppendedPrompt();
|
|
||||||
appendPromptList.addFirst(appendedPrompt);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,8 @@ public class ModuleContext extends PersistableObject {
|
|||||||
private List<AppendPromptData> appendedPrompt = new ArrayList<>();
|
private List<AppendPromptData> appendedPrompt = new ArrayList<>();
|
||||||
private JSONObject extraContext = new JSONObject();
|
private JSONObject extraContext = new JSONObject();
|
||||||
private boolean finished = false;
|
private boolean finished = false;
|
||||||
|
|
||||||
|
public void appendPromptData(AppendPromptData appendPromptData) {
|
||||||
|
this.appendedPrompt.addFirst(appendPromptData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,10 +51,9 @@ object AgentRuntime {
|
|||||||
for (modules in runningModules.values) {
|
for (modules in runningModules.values) {
|
||||||
executeOrder(modules, runningFlowContext)
|
executeOrder(modules, runningFlowContext)
|
||||||
}
|
}
|
||||||
runningFlowContext.ok = 1
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
runningFlowContext.ok = 0
|
runningFlowContext.status.ok = false
|
||||||
runningFlowContext.errMsg.add(e.localizedMessage)
|
runningFlowContext.status.errMsg.add(e.localizedMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
return runningFlowContext
|
return runningFlowContext
|
||||||
|
|||||||
@@ -1,18 +1,63 @@
|
|||||||
package work.slhaf.partner.api.agent.runtime.interaction.flow;
|
package work.slhaf.partner.api.agent.runtime.interaction.flow
|
||||||
|
|
||||||
import lombok.Data;
|
import com.alibaba.fastjson2.JSONObject
|
||||||
import lombok.EqualsAndHashCode;
|
import java.time.LocalDateTime
|
||||||
import work.slhaf.partner.api.common.entity.PersistableObject;
|
import java.time.ZonedDateTime
|
||||||
|
import java.util.*
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程上下文
|
* 流程上下文
|
||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
abstract class RunningFlowContext {
|
||||||
@Data
|
/**
|
||||||
public abstract class RunningFlowContext extends PersistableObject {
|
* 消息来源: 由谁发出
|
||||||
protected int ok;
|
*/
|
||||||
protected List<String> errMsg = new ArrayList<>();
|
abstract val source: String
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息内容
|
||||||
|
*/
|
||||||
|
abstract val input: String
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息回应对象,默认与 source 一致
|
||||||
|
*/
|
||||||
|
var target = source
|
||||||
|
|
||||||
|
private val _additionalUserInfo = mutableMapOf<String, String>()
|
||||||
|
val additionalUserInfo: Map<String, String>
|
||||||
|
get() = _additionalUserInfo
|
||||||
|
|
||||||
|
val status = Status()
|
||||||
|
val info = Info()
|
||||||
|
|
||||||
|
fun putUserInfo(key: String, value: String) {
|
||||||
|
_additionalUserInfo[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
fun putUserInfo(key: String, value: Any) {
|
||||||
|
_additionalUserInfo[key] = try {
|
||||||
|
JSONObject.toJSONString(value)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
value.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Info {
|
||||||
|
val uuid = UUID.randomUUID().toString()
|
||||||
|
val dateTime: LocalDateTime = ZonedDateTime.now().toLocalDateTime()
|
||||||
|
}
|
||||||
|
|
||||||
|
class Status {
|
||||||
|
/**
|
||||||
|
* 本次 runningFlow 是否正常执行
|
||||||
|
*/
|
||||||
|
val ok: Boolean
|
||||||
|
get() = errors.isEmpty()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本次执行时收集到的异常信息
|
||||||
|
*/
|
||||||
|
var errors = mutableListOf<String>()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user