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