mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(module): remove legacy prompt scaffolding
This commit is contained in:
@@ -1,19 +0,0 @@
|
|||||||
package work.slhaf.partner.module.common.entity;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import work.slhaf.partner.api.common.entity.PersistableObject;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@Data
|
|
||||||
public class AppendPromptData extends PersistableObject {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
private String moduleName;
|
|
||||||
private Map<String, String> appendedPrompt;
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package work.slhaf.partner.module.common.module;
|
|
||||||
|
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
|
||||||
import work.slhaf.partner.module.common.entity.AppendPromptData;
|
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 前置模块抽象类
|
|
||||||
*/
|
|
||||||
public abstract class PreRunningAbstractAgentModuleAbstract extends AbstractAgentModule.Running<PartnerRunningFlowContext> {
|
|
||||||
private synchronized void setAppendedPrompt(PartnerRunningFlowContext context) {
|
|
||||||
AppendPromptData data = new AppendPromptData();
|
|
||||||
data.setModuleName(moduleName());
|
|
||||||
Map<String, String> map = getPromptDataMap(context);
|
|
||||||
data.setAppendedPrompt(map);
|
|
||||||
context.appendPrompt(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
private synchronized void setActiveModule(PartnerRunningFlowContext context) {
|
|
||||||
context.getCoreContext().addActiveModule(moduleName());
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract Map<String, String> getPromptDataMap(PartnerRunningFlowContext context);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用于在CoreModule接收到的模块Prompt中标识模块名称
|
|
||||||
*/
|
|
||||||
protected abstract String moduleName();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void execute(PartnerRunningFlowContext context) {
|
|
||||||
doExecute(context); // 子类实现差异化逻辑
|
|
||||||
setAppendedPrompt(context); // 通用逻辑
|
|
||||||
setActiveModule(context); // 通用逻辑
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract void doExecute(PartnerRunningFlowContext context);
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONArray;
|
|||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
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.component.abstracts.AbstractAgentModule;
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.ActivateModel;
|
import work.slhaf.partner.api.agent.factory.component.abstracts.ActivateModel;
|
||||||
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
@@ -12,7 +13,6 @@ import work.slhaf.partner.core.action.entity.ExecutableAction;
|
|||||||
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||||
import work.slhaf.partner.core.memory.MemoryCapability;
|
import work.slhaf.partner.core.memory.MemoryCapability;
|
||||||
import work.slhaf.partner.module.common.module.PreRunningAbstractAgentModuleAbstract;
|
|
||||||
import work.slhaf.partner.module.modules.action.interventor.entity.InterventionType;
|
import work.slhaf.partner.module.modules.action.interventor.entity.InterventionType;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.entity.MetaIntervention;
|
import work.slhaf.partner.module.modules.action.interventor.entity.MetaIntervention;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.evaluator.InterventionEvaluator;
|
import work.slhaf.partner.module.modules.action.interventor.evaluator.InterventionEvaluator;
|
||||||
@@ -33,7 +33,7 @@ import java.util.stream.Stream;
|
|||||||
/**
|
/**
|
||||||
* 负责识别潜在的行动干预信息,作用于正在进行或已存在的行动池中内容
|
* 负责识别潜在的行动干预信息,作用于正在进行或已存在的行动池中内容
|
||||||
*/
|
*/
|
||||||
public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract implements ActivateModel {
|
public class ActionInterventor extends AbstractAgentModule.Running<PartnerRunningFlowContext> implements ActivateModel {
|
||||||
private final AssemblyHelper assemblyHelper = new AssemblyHelper();
|
private final AssemblyHelper assemblyHelper = new AssemblyHelper();
|
||||||
private final PromptHelper promptHelper = new PromptHelper();
|
private final PromptHelper promptHelper = new PromptHelper();
|
||||||
/**
|
/**
|
||||||
@@ -53,7 +53,7 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp
|
|||||||
private MemoryCapability memoryCapability;
|
private MemoryCapability memoryCapability;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doExecute(PartnerRunningFlowContext context) {
|
public void execute(PartnerRunningFlowContext context) {
|
||||||
// 综合当前正在进行的行动链信息、用户交互历史、激活的记忆切片,尝试识别出是否存在行动干预意图
|
// 综合当前正在进行的行动链信息、用户交互历史、激活的记忆切片,尝试识别出是否存在行动干预意图
|
||||||
// 首先通过recognizer进行快速意图识别,识别成功则步入评估阶段,评估成功则直接作用于目标行动链
|
// 首先通过recognizer进行快速意图识别,识别成功则步入评估阶段,评估成功则直接作用于目标行动链
|
||||||
// 进行快速意图识别时必须结合近期对话与进行中行动链情况
|
// 进行快速意图识别时必须结合近期对话与进行中行动链情况
|
||||||
@@ -134,16 +134,6 @@ public class ActionInterventor extends PreRunningAbstractAgentModuleAbstract imp
|
|||||||
return "action_identifier";
|
return "action_identifier";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
|
||||||
return interventionPrompt.remove(context.getInfo().getUuid());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String moduleName() {
|
|
||||||
return "[行动干预识别模块]";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int order() {
|
public int order() {
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package work.slhaf.partner.module.modules.action.planner;
|
package work.slhaf.partner.module.modules.action.planner;
|
||||||
|
|
||||||
import kotlin.Unit;
|
import kotlin.Unit;
|
||||||
import lombok.val;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
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.component.abstracts.AbstractAgentModule;
|
||||||
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
||||||
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
@@ -16,7 +16,6 @@ import work.slhaf.partner.core.action.entity.cache.CacheAdjustMetaData;
|
|||||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||||
import work.slhaf.partner.core.memory.MemoryCapability;
|
import work.slhaf.partner.core.memory.MemoryCapability;
|
||||||
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
||||||
import work.slhaf.partner.module.common.module.PreRunningAbstractAgentModuleAbstract;
|
|
||||||
import work.slhaf.partner.module.modules.action.executor.ActionExecutor;
|
import work.slhaf.partner.module.modules.action.executor.ActionExecutor;
|
||||||
import work.slhaf.partner.module.modules.action.planner.confirmer.ActionConfirmer;
|
import work.slhaf.partner.module.modules.action.planner.confirmer.ActionConfirmer;
|
||||||
import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerInput;
|
import work.slhaf.partner.module.modules.action.planner.confirmer.entity.ConfirmerInput;
|
||||||
@@ -42,7 +41,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
/**
|
/**
|
||||||
* 负责针对本次输入生成基础的行动计划
|
* 负责针对本次输入生成基础的行动计划
|
||||||
*/
|
*/
|
||||||
public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
public class ActionPlanner extends AbstractAgentModule.Running<PartnerRunningFlowContext> {
|
||||||
|
|
||||||
private static final long PENDING_TTL_MILLIS = 30 * 60 * 1000L;
|
private static final long PENDING_TTL_MILLIS = 30 * 60 * 1000L;
|
||||||
private static final long PENDING_REMINDER_ADVANCE_MILLIS = 5 * 60 * 1000L;
|
private static final long PENDING_REMINDER_ADVANCE_MILLIS = 5 * 60 * 1000L;
|
||||||
@@ -78,7 +77,7 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doExecute(PartnerRunningFlowContext context) {
|
public void execute(PartnerRunningFlowContext context) {
|
||||||
try {
|
try {
|
||||||
List<Callable<Void>> tasks = new ArrayList<>();
|
List<Callable<Void>> tasks = new ArrayList<>();
|
||||||
addConfirmTask(tasks, context);
|
addConfirmTask(tasks, context);
|
||||||
@@ -301,51 +300,6 @@ public class ActionPlanner extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
|
||||||
HashMap<String, String> map = new HashMap<>();
|
|
||||||
String userId = context.getSource();
|
|
||||||
setupPendingActions(map, userId);
|
|
||||||
setupPreparedActions(map, userId);
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupPendingActions(HashMap<String, String> map, String userId) {
|
|
||||||
List<PendingActionRecord> pendingActions = actionCapability.listActivePendingActions(userId);
|
|
||||||
if (pendingActions.isEmpty()) {
|
|
||||||
map.put("[待确认行动] <等待用户确认的行动信息>", "无待确认行动");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < pendingActions.size(); i++) {
|
|
||||||
map.put(
|
|
||||||
"[待确认行动 " + (i + 1) + " ] <等待用户确认的行动信息>",
|
|
||||||
generateActionStr(pendingActions.get(i).getExecutableAction())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupPreparedActions(HashMap<String, String> map, String userId) {
|
|
||||||
val preparedActions = actionCapability.listActions(ExecutableAction.Status.PREPARE, userId).stream().toList();
|
|
||||||
if (preparedActions.isEmpty()) {
|
|
||||||
map.put("[预备行动] <预备执行或放入计划池的行动信息>", "无预备行动");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < preparedActions.size(); i++) {
|
|
||||||
map.put("[预备行动 " + (i + 1) + " ] <预备执行或放入计划池的行动信息>", generateActionStr(preparedActions.get(i)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String generateActionStr(ExecutableAction executableAction) {
|
|
||||||
return "<行动倾向>" + " : " + executableAction.getTendency() +
|
|
||||||
"<行动原因>" + " : " + executableAction.getReason() +
|
|
||||||
"<工具描述>" + " : " + executableAction.getDescription();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String moduleName() {
|
|
||||||
return "[行动模块]";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int order() {
|
public int order() {
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
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.component.abstracts.AbstractAgentModule;
|
||||||
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
|
||||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||||
import work.slhaf.partner.core.memory.MemoryCapability;
|
import work.slhaf.partner.core.memory.MemoryCapability;
|
||||||
import work.slhaf.partner.core.memory.exception.UnExistedDateIndexException;
|
import work.slhaf.partner.core.memory.exception.UnExistedDateIndexException;
|
||||||
@@ -13,7 +13,6 @@ import work.slhaf.partner.core.memory.exception.UnExistedTopicException;
|
|||||||
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
||||||
import work.slhaf.partner.core.memory.pojo.MemoryResult;
|
import work.slhaf.partner.core.memory.pojo.MemoryResult;
|
||||||
import work.slhaf.partner.core.memory.pojo.MemorySlice;
|
import work.slhaf.partner.core.memory.pojo.MemorySlice;
|
||||||
import work.slhaf.partner.module.common.module.PreRunningAbstractAgentModuleAbstract;
|
|
||||||
import work.slhaf.partner.module.modules.memory.selector.evaluator.SliceSelectEvaluator;
|
import work.slhaf.partner.module.modules.memory.selector.evaluator.SliceSelectEvaluator;
|
||||||
import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.EvaluatorInput;
|
import work.slhaf.partner.module.modules.memory.selector.evaluator.entity.EvaluatorInput;
|
||||||
import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor;
|
import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor;
|
||||||
@@ -22,13 +21,13 @@ import work.slhaf.partner.module.modules.memory.selector.extractor.entity.Extrac
|
|||||||
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import static work.slhaf.partner.common.util.ExtractUtil.extractUserId;
|
import java.util.List;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
public class MemorySelector extends AbstractAgentModule.Running<PartnerRunningFlowContext> {
|
||||||
@InjectCapability
|
@InjectCapability
|
||||||
private MemoryCapability memoryCapability;
|
private MemoryCapability memoryCapability;
|
||||||
@InjectCapability
|
@InjectCapability
|
||||||
@@ -39,7 +38,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
private MemorySelectExtractor memorySelectExtractor;
|
private MemorySelectExtractor memorySelectExtractor;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doExecute(PartnerRunningFlowContext runningFlowContext) {
|
public void execute(PartnerRunningFlowContext runningFlowContext) {
|
||||||
String userId = runningFlowContext.getSource();
|
String userId = runningFlowContext.getSource();
|
||||||
//获取主题路径
|
//获取主题路径
|
||||||
ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext);
|
ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext);
|
||||||
@@ -119,46 +118,6 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String moduleName() {
|
|
||||||
return "[记忆模块]";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
|
||||||
HashMap<String, String> map = new HashMap<>();
|
|
||||||
String userId = context.getSource();
|
|
||||||
String dialogMapStr = memoryCapability.getDialogMapStr();
|
|
||||||
if (!dialogMapStr.isEmpty()) {
|
|
||||||
map.put("[记忆缓存] <你最近两日和所有聊天者的对话记忆印象>", dialogMapStr);
|
|
||||||
}
|
|
||||||
String userDialogMapStr = memoryCapability.getUserDialogMapStr(userId);
|
|
||||||
if (userDialogMapStr != null && !userDialogMapStr.isEmpty() && !isSingleUser()) {
|
|
||||||
map.put("[用户记忆缓存] <与最新一条消息的发送者的近两天对话记忆印象, 可能与[记忆缓存]稍有重复>", userDialogMapStr);
|
|
||||||
}
|
|
||||||
String sliceStr = memoryCapability.getActivatedSlicesStr(userId);
|
|
||||||
if (sliceStr != null && !sliceStr.isEmpty()) {
|
|
||||||
map.put("[记忆切片] <你与最新一条消息的发送者的相关回忆, 不会与[记忆缓存]重复, 如果有重复你也可以指出来>", sliceStr);
|
|
||||||
}
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO 本次重构暂时仅以 chatMessages 用作判定基准,原实现额外结合了近两日的对话缓存(但缓存结构的引用确实存在问题)
|
|
||||||
private boolean isSingleUser() {
|
|
||||||
Set<String> userIdSet = new HashSet<>();
|
|
||||||
cognationCapability.getChatMessages().forEach(m -> {
|
|
||||||
if (m.getRole() == Message.Character.ASSISTANT) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String userId = extractUserId(m.getContent());
|
|
||||||
if (userId == null || userId.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
userIdSet.add(userId);
|
|
||||||
});
|
|
||||||
return userIdSet.size() <= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int order() {
|
public int order() {
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
@@ -2,37 +2,17 @@ package work.slhaf.partner.module.modules.perceive.selector;
|
|||||||
|
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
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.component.abstracts.AbstractAgentModule;
|
||||||
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
||||||
import work.slhaf.partner.core.perceive.pojo.User;
|
|
||||||
import work.slhaf.partner.module.common.module.PreRunningAbstractAgentModuleAbstract;
|
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
public class PerceiveSelector extends PreRunningAbstractAgentModuleAbstract {
|
public class PerceiveSelector extends AbstractAgentModule.Running<PartnerRunningFlowContext> {
|
||||||
@InjectCapability
|
@InjectCapability
|
||||||
private PerceiveCapability perceiveCapability;
|
private PerceiveCapability perceiveCapability;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doExecute(PartnerRunningFlowContext context) {
|
public void execute(PartnerRunningFlowContext context) {
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
|
||||||
HashMap<String, String> map = new HashMap<>();
|
|
||||||
User user = perceiveCapability.getUser(context.getSource());
|
|
||||||
map.put("[关系] <你与最新聊天用户的关系>", user.getRelation());
|
|
||||||
map.put("[态度] <你对于最新聊天用户的态度>", user.getAttitude().toString());
|
|
||||||
map.put("[印象] <你对于最新聊天用户的印象>", user.getImpressions().toString());
|
|
||||||
map.put("[静态记忆] <你关于最新聊天用户的静态记忆>", user.getStaticMemory().toString());
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String moduleName() {
|
|
||||||
return "[感知模块]";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,21 +3,15 @@ package work.slhaf.partner.module.modules.process;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
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.component.abstracts.AbstractAgentModule;
|
||||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||||
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
||||||
import work.slhaf.partner.core.perceive.pojo.User;
|
import work.slhaf.partner.core.perceive.pojo.User;
|
||||||
import work.slhaf.partner.module.common.module.PreRunningAbstractAgentModuleAbstract;
|
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext;
|
||||||
import work.slhaf.partner.runtime.interaction.data.context.subcontext.CoreContext;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract {
|
public class PreprocessExecutor extends AbstractAgentModule.Running<PartnerRunningFlowContext> {
|
||||||
private static final String INFO_PLATFORM = "platform";
|
private static final String INFO_PLATFORM = "platform";
|
||||||
private static final String INFO_NICKNAME = "nickname";
|
private static final String INFO_NICKNAME = "nickname";
|
||||||
|
|
||||||
@@ -27,7 +21,7 @@ public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
private PerceiveCapability perceiveCapability;
|
private PerceiveCapability perceiveCapability;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doExecute(PartnerRunningFlowContext context) {
|
public void execute(PartnerRunningFlowContext context) {
|
||||||
checkAndSetMemoryId();
|
checkAndSetMemoryId();
|
||||||
getInteractionContext(context);
|
getInteractionContext(context);
|
||||||
}
|
}
|
||||||
@@ -50,8 +44,7 @@ public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
}
|
}
|
||||||
String userId = user.getUuid();
|
String userId = user.getUuid();
|
||||||
String userStr = "[" + nickName + "(" + userId + ")]";
|
String userStr = "[" + nickName + "(" + userId + ")]";
|
||||||
String input = userStr + " " + context.getInput();
|
log.debug("[PreprocessExecutor] 已识别用户: {} {}", userStr, context.getSource());
|
||||||
setCoreContext(context, input, nickName, userId);
|
|
||||||
log.debug("[PreprocessExecutor] 预处理结果: {}", context);
|
log.debug("[PreprocessExecutor] 预处理结果: {}", context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,31 +56,6 @@ public class PreprocessExecutor extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
return source.substring(split + 1).trim();
|
return source.substring(split + 1).trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Map<String, String> getPromptDataMap(PartnerRunningFlowContext context) {
|
|
||||||
HashMap<String, String> map = new HashMap<>();
|
|
||||||
map.put("text", "这部分才是真正的用户输入内容, 就像你之前收到过的输入一样。但...不会是'同一个人'。");
|
|
||||||
map.put("datetime", "本次用户输入对应的当前时间");
|
|
||||||
map.put("user_nick", "用户昵称");
|
|
||||||
map.put("user_id", "用户id, 与user_nick区分, 这是用户的唯一标识");
|
|
||||||
map.put("active_modules", "已激活的模块, 为false时为激活但未活跃; 为true时为激活且活跃");
|
|
||||||
map.put("其他", "历史对话中将在用户消息的最后一行标注时间");
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String moduleName() {
|
|
||||||
return "[基础模块]";
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setCoreContext(PartnerRunningFlowContext context, String input, String nickName, String userId) {
|
|
||||||
CoreContext coreContext = context.getCoreContext();
|
|
||||||
coreContext.setText(input);
|
|
||||||
coreContext.setDateTime(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
|
|
||||||
coreContext.setUserNick(nickName);
|
|
||||||
coreContext.setUserId(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int order() {
|
public int order() {
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package work.slhaf.partner.runtime.interaction.data.context
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject
|
import com.alibaba.fastjson2.JSONObject
|
||||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.RunningFlowContext
|
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 work.slhaf.partner.runtime.interaction.data.context.subcontext.ModuleContext
|
||||||
|
|
||||||
class PartnerRunningFlowContext private constructor(
|
class PartnerRunningFlowContext private constructor(
|
||||||
@@ -48,9 +46,6 @@ class PartnerRunningFlowContext private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val moduleContext = ModuleContext()
|
val moduleContext = ModuleContext()
|
||||||
val coreContext = CoreContext()
|
|
||||||
val coreResponse = JSONObject()
|
val coreResponse = JSONObject()
|
||||||
|
|
||||||
fun appendPrompt(appendPromptData: AppendPromptData) = moduleContext.appendPromptData(appendPromptData)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
package work.slhaf.partner.runtime.interaction.data.context.subcontext;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import work.slhaf.partner.api.common.entity.PersistableObject;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@Data
|
|
||||||
public class CoreContext extends PersistableObject {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
private String text;
|
|
||||||
private String dateTime;
|
|
||||||
private String userNick;
|
|
||||||
private String userId;
|
|
||||||
private HashMap<String, Boolean> activeModules = new HashMap<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return JSONObject.toJSONString(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addActiveModule(String moduleName) {
|
|
||||||
activeModules.put(moduleName, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void activateModule(String moduleName) {
|
|
||||||
activeModules.put(moduleName, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,11 +4,8 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import work.slhaf.partner.api.common.entity.PersistableObject;
|
import work.slhaf.partner.api.common.entity.PersistableObject;
|
||||||
import work.slhaf.partner.module.common.entity.AppendPromptData;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@@ -17,10 +14,5 @@ public class ModuleContext extends PersistableObject {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private List<AppendPromptData> appendedPrompt = new ArrayList<>();
|
|
||||||
private JSONObject extraContext = new JSONObject();
|
private JSONObject extraContext = new JSONObject();
|
||||||
|
|
||||||
public void appendPromptData(AppendPromptData appendPromptData) {
|
|
||||||
this.appendedPrompt.addFirst(appendPromptData);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user