mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(chat): use Message.Character enum for roles and remove unused prompt helpers
This commit is contained in:
@@ -1,50 +0,0 @@
|
|||||||
package work.slhaf.partner.common.util;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONArray;
|
|
||||||
import work.slhaf.partner.api.agent.Agent;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class ResourcesUtil {
|
|
||||||
|
|
||||||
private static final ClassLoader classloader = Agent.class.getClassLoader();
|
|
||||||
|
|
||||||
public static class Prompt {
|
|
||||||
private static final String SELF_AWARENESS_PATH = "prompt/basic_prompt.json";
|
|
||||||
private static final String MODULE_PROMPT_PREFIX_PATH = "prompt/component/";
|
|
||||||
|
|
||||||
public static List<Message> loadPromptWithSelfAwareness(String modelKey, String promptType) {
|
|
||||||
//加载人格引导
|
|
||||||
List<Message> messages = new ArrayList<>(loadSelfAwareness());
|
|
||||||
//加载常规提示
|
|
||||||
String path = MODULE_PROMPT_PREFIX_PATH + promptType + "/" + modelKey + ".json";
|
|
||||||
messages.addAll(readPromptFromResources(path));
|
|
||||||
return messages;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Message> loadSelfAwareness() {
|
|
||||||
return readPromptFromResources(SELF_AWARENESS_PATH);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Message> loadPrompt(String modelKey, String promptType) {
|
|
||||||
return new ArrayList<>(readPromptFromResources(MODULE_PROMPT_PREFIX_PATH + promptType + "/" + modelKey + ".json"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Message> readPromptFromResources(String filePath) {
|
|
||||||
try {
|
|
||||||
InputStream inputStream = classloader.getResourceAsStream(filePath);
|
|
||||||
String content = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
|
|
||||||
JSONArray array = JSONArray.parse(content);
|
|
||||||
inputStream.close();
|
|
||||||
return array.toJavaList(Message.class);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("读取Resource失败: " + filePath, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
import lombok.val;
|
import lombok.val;
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.module.modules.action.executor.entity.CorrectorInput;
|
import work.slhaf.partner.module.modules.action.executor.entity.CorrectorInput;
|
||||||
import work.slhaf.partner.module.modules.action.executor.entity.CorrectorResult;
|
import work.slhaf.partner.module.modules.action.executor.entity.CorrectorResult;
|
||||||
@@ -18,7 +17,7 @@ public class ActionCorrector extends AbstractAgentModule.Sub<CorrectorInput, Cor
|
|||||||
@Override
|
@Override
|
||||||
public CorrectorResult execute(CorrectorInput input) {
|
public CorrectorResult execute(CorrectorInput input) {
|
||||||
val prompt = buildPrompt(input);
|
val prompt = buildPrompt(input);
|
||||||
return formattedChat(List.of(new Message(ChatConstant.Character.USER, prompt)), CorrectorResult.class);
|
return formattedChat(List.of(new Message(Message.Character.USER, prompt)), CorrectorResult.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildPrompt(CorrectorInput input) {
|
private String buildPrompt(CorrectorInput input) {
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentMod
|
|||||||
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.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.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
||||||
@@ -63,7 +62,7 @@ public class ActionRepairer extends AbstractAgentModule.Sub<RepairerInput, Repai
|
|||||||
try {
|
try {
|
||||||
String prompt = assemblyHelper.buildPrompt(data, null);
|
String prompt = assemblyHelper.buildPrompt(data, null);
|
||||||
RepairerData repairerData = formattedChat(
|
RepairerData repairerData = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, prompt)),
|
List.of(new Message(Message.Character.USER, prompt)),
|
||||||
RepairerData.class
|
RepairerData.class
|
||||||
);
|
);
|
||||||
result = switch (repairerData.getRepairerType()) {
|
result = switch (repairerData.getRepairerType()) {
|
||||||
@@ -79,7 +78,7 @@ public class ActionRepairer extends AbstractAgentModule.Sub<RepairerInput, Repai
|
|||||||
log.warn("常规行动修复失败,将尝试自对话通道");
|
log.warn("常规行动修复失败,将尝试自对话通道");
|
||||||
prompt = assemblyHelper.buildPrompt(data, "常规行动修复失败,请尝试通过自对话通道获取必要的信息以完成行动参数的修复");
|
prompt = assemblyHelper.buildPrompt(data, "常规行动修复失败,请尝试通过自对话通道获取必要的信息以完成行动参数的修复");
|
||||||
repairerData = formattedChat(
|
repairerData = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, prompt)),
|
List.of(new Message(Message.Character.USER, prompt)),
|
||||||
RepairerData.class
|
RepairerData.class
|
||||||
);
|
);
|
||||||
handleUserInteraction(repairerData.getData());
|
handleUserInteraction(repairerData.getData());
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapabili
|
|||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.Init;
|
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.entity.GeneratedData;
|
import work.slhaf.partner.core.action.entity.GeneratedData;
|
||||||
@@ -40,7 +39,7 @@ public class DynamicActionGenerator extends AbstractAgentModule.Sub<GeneratorInp
|
|||||||
String prompt = buildPrompt(input);
|
String prompt = buildPrompt(input);
|
||||||
// 响应结果需要包含几个特殊数据: 依赖项、代码内容、是否序列化、响应数据释义
|
// 响应结果需要包含几个特殊数据: 依赖项、代码内容、是否序列化、响应数据释义
|
||||||
GeneratedData generatorData = formattedChat(
|
GeneratedData generatorData = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, prompt)),
|
List.of(new Message(Message.Character.USER, prompt)),
|
||||||
GeneratedData.class
|
GeneratedData.class
|
||||||
);
|
);
|
||||||
val location = runnerClient.buildTmpPath(input.getActionName(), generatorData.getCodeType());
|
val location = runnerClient.buildTmpPath(input.getActionName(), generatorData.getCodeType());
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONArray;
|
|||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
||||||
import work.slhaf.partner.module.modules.action.executor.entity.ExtractorInput;
|
import work.slhaf.partner.module.modules.action.executor.entity.ExtractorInput;
|
||||||
@@ -23,7 +22,7 @@ public class ParamsExtractor extends AbstractAgentModule.Sub<ExtractorInput, Ext
|
|||||||
String prompt = buildPrompt(input);
|
String prompt = buildPrompt(input);
|
||||||
ExtractorResult result;
|
ExtractorResult result;
|
||||||
try {
|
try {
|
||||||
result = formattedChat(List.of(new Message(ChatConstant.Character.USER, prompt)), ExtractorResult.class);
|
result = formattedChat(List.of(new Message(Message.Character.USER, prompt)), ExtractorResult.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("ParamsExtractor解析结果失败", e);
|
log.error("ParamsExtractor解析结果失败", e);
|
||||||
result = new ExtractorResult();
|
result = new ExtractorResult();
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
||||||
@@ -54,7 +53,7 @@ public class InterventionEvaluator extends AbstractAgentModule.Sub<EvaluatorInpu
|
|||||||
try {
|
try {
|
||||||
String prompt = buildPrompt(input.getRecentMessages(), input.getActivatedSlices(), actionData, tendency);
|
String prompt = buildPrompt(input.getRecentMessages(), input.getActivatedSlices(), actionData, tendency);
|
||||||
EvaluatedInterventionData evaluatedData = formattedChat(
|
EvaluatedInterventionData evaluatedData = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, prompt)),
|
List.of(new Message(Message.Character.USER, prompt)),
|
||||||
EvaluatedInterventionData.class);
|
EvaluatedInterventionData.class);
|
||||||
synchronized (evaluatedDataList) {
|
synchronized (evaluatedDataList) {
|
||||||
evaluatedDataList.add(evaluatedData);
|
evaluatedDataList.add(evaluatedData);
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
import work.slhaf.partner.core.action.ActionCore;
|
||||||
@@ -50,7 +49,7 @@ public class InterventionRecognizer extends AbstractAgentModule.Sub<RecognizerIn
|
|||||||
try {
|
try {
|
||||||
String prompt = buildPrompt(data, input);
|
String prompt = buildPrompt(data, input);
|
||||||
MetaRecognizerResult result = formattedChat(
|
MetaRecognizerResult result = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, prompt)),
|
List.of(new Message(Message.Character.USER, prompt)),
|
||||||
MetaRecognizerResult.class
|
MetaRecognizerResult.class
|
||||||
);
|
);
|
||||||
if (result.isOk()) {
|
if (result.isOk()) {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
import work.slhaf.partner.core.action.ActionCore;
|
||||||
@@ -39,7 +38,7 @@ public class ActionConfirmer extends AbstractAgentModule.Sub<ConfirmerInput, Con
|
|||||||
ExecutableAction executableAction = pendingAction.getExecutableAction();
|
ExecutableAction executableAction = pendingAction.getExecutableAction();
|
||||||
String prompt = buildPrompt(executableAction, data.getInput(), data.getRecentMessages());
|
String prompt = buildPrompt(executableAction, data.getInput(), data.getRecentMessages());
|
||||||
DecisionResponse tempResult = formattedChat(
|
DecisionResponse tempResult = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, prompt)),
|
List.of(new Message(Message.Character.USER, prompt)),
|
||||||
DecisionResponse.class
|
DecisionResponse.class
|
||||||
);
|
);
|
||||||
PendingActionRecord.Decision decision = parseDecision(tempResult);
|
PendingActionRecord.Decision decision = parseDecision(tempResult);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapabili
|
|||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.Init;
|
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
@@ -50,7 +49,7 @@ public class ActionEvaluator extends AbstractAgentModule.Sub<EvaluatorInput, Lis
|
|||||||
for (EvaluatorBatchInput batchInput : batchInputs) {
|
for (EvaluatorBatchInput batchInput : batchInputs) {
|
||||||
list.add(() -> {
|
list.add(() -> {
|
||||||
EvaluatorResult evaluatorResult = formattedChat(
|
EvaluatorResult evaluatorResult = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, buildPrompt(batchInput))),
|
List.of(new Message(Message.Character.USER, buildPrompt(batchInput))),
|
||||||
EvaluatorResult.class
|
EvaluatorResult.class
|
||||||
);
|
);
|
||||||
evaluatorResult.setTendency(batchInput.getTendency());
|
evaluatorResult.setTendency(batchInput.getTendency());
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONObject;
|
|||||||
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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorInput;
|
import work.slhaf.partner.module.modules.action.planner.extractor.entity.ExtractorInput;
|
||||||
@@ -27,7 +26,7 @@ public class ActionExtractor extends AbstractAgentModule.Sub<ExtractorInput, Ext
|
|||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
try {
|
try {
|
||||||
return formattedChat(
|
return formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, JSONObject.toJSONString(data))),
|
List.of(new Message(Message.Character.USER, JSONObject.toJSONString(data))),
|
||||||
ExtractorResult.class
|
ExtractorResult.class
|
||||||
);
|
);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapabili
|
|||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.Init;
|
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.api.chat.pojo.MetaMessage;
|
import work.slhaf.partner.api.chat.pojo.MetaMessage;
|
||||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||||
@@ -143,7 +142,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
private void updateModuleContextAndChatMessages(PartnerRunningFlowContext runningFlowContext, String response) {
|
private void updateModuleContextAndChatMessages(PartnerRunningFlowContext runningFlowContext, String response) {
|
||||||
cognationCapability.getMessageLock().lock();
|
cognationCapability.getMessageLock().lock();
|
||||||
chatMessages.removeIf(m -> {
|
chatMessages.removeIf(m -> {
|
||||||
if (m.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
if (m.getRole() == Message.Character.ASSISTANT) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@@ -156,9 +155,9 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
//添加时间标志
|
//添加时间标志
|
||||||
// TODO 此处的时间标识应当采用 RunningFlowContext 携带时间
|
// TODO 此处的时间标识应当采用 RunningFlowContext 携带时间
|
||||||
String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("\r\n**[yyyy-MM-dd HH:mm:ss]"));
|
String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("\r\n**[yyyy-MM-dd HH:mm:ss]"));
|
||||||
Message primaryUserMessage = new Message(ChatConstant.Character.USER, runningFlowContext.getCoreContext().getText() + dateTime);
|
Message primaryUserMessage = new Message(Message.Character.USER, runningFlowContext.getCoreContext().getText() + dateTime);
|
||||||
chatMessages.add(primaryUserMessage);
|
chatMessages.add(primaryUserMessage);
|
||||||
Message assistantMessage = new Message(ChatConstant.Character.ASSISTANT, response);
|
Message assistantMessage = new Message(Message.Character.ASSISTANT, response);
|
||||||
chatMessages.add(assistantMessage);
|
chatMessages.add(assistantMessage);
|
||||||
cognationCapability.getMessageLock().unlock();
|
cognationCapability.getMessageLock().unlock();
|
||||||
//区分单人聊天场景
|
//区分单人聊天场景
|
||||||
@@ -169,7 +168,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setMessage(String coreContextStr) {
|
private void setMessage(String coreContextStr) {
|
||||||
Message userMessage = new Message(ChatConstant.Character.USER, coreContextStr);
|
Message userMessage = new Message(Message.Character.USER, coreContextStr);
|
||||||
chatMessages.add(userMessage);
|
chatMessages.add(userMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +182,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setAppendedPromptMessage(List<AppendPromptData> appendPrompt) {
|
private void setAppendedPromptMessage(List<AppendPromptData> appendPrompt) {
|
||||||
Message appendDeclareMessage = new Message(ChatConstant.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + "认知补充开始");
|
Message appendDeclareMessage = new Message(Message.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + "认知补充开始");
|
||||||
this.appendedMessages.add(appendDeclareMessage);
|
this.appendedMessages.add(appendDeclareMessage);
|
||||||
for (AppendPromptData data : appendPrompt) {
|
for (AppendPromptData data : appendPrompt) {
|
||||||
setStartMessage(data);
|
setStartMessage(data);
|
||||||
@@ -191,29 +190,29 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
setEndMessage(data);
|
setEndMessage(data);
|
||||||
setAssistantMessage();
|
setAssistantMessage();
|
||||||
}
|
}
|
||||||
Message appendEndMessage = new Message(ChatConstant.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + "认知补充结束");
|
Message appendEndMessage = new Message(Message.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + "认知补充结束");
|
||||||
this.appendedMessages.add(appendEndMessage);
|
this.appendedMessages.add(appendEndMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAssistantMessage() {
|
private void setAssistantMessage() {
|
||||||
Message message = new Message(ChatConstant.Character.ASSISTANT, "嗯,明白了");
|
Message message = new Message(Message.Character.ASSISTANT, "嗯,明白了");
|
||||||
appendedMessages.add(message);
|
appendedMessages.add(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setEndMessage(AppendPromptData data) {
|
private void setEndMessage(AppendPromptData data) {
|
||||||
Message endMessage = new Message(ChatConstant.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + data.getModuleName() + "认知补充结束.");
|
Message endMessage = new Message(Message.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + data.getModuleName() + "认知补充结束.");
|
||||||
appendedMessages.add(endMessage);
|
appendedMessages.add(endMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setContentMessage(AppendPromptData data) {
|
private void setContentMessage(AppendPromptData data) {
|
||||||
data.getAppendedPrompt().forEach((k, v) -> {
|
data.getAppendedPrompt().forEach((k, v) -> {
|
||||||
Message contentMessage = new Message(ChatConstant.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + k + v + "\r\n");
|
Message contentMessage = new Message(Message.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + k + v + "\r\n");
|
||||||
appendedMessages.add(contentMessage);
|
appendedMessages.add(contentMessage);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setStartMessage(AppendPromptData data) {
|
private void setStartMessage(AppendPromptData data) {
|
||||||
Message startMessage = new Message(ChatConstant.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + data.getModuleName() + "以下为" + data.getModuleName() + "相关认知.");
|
Message startMessage = new Message(Message.Character.USER, ModelConstant.CharacterPrefix.SYSTEM + data.getModuleName() + "以下为" + data.getModuleName() + "相关认知.");
|
||||||
appendedMessages.add(startMessage);
|
appendedMessages.add(startMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ 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.annotation.InjectModule;
|
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
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;
|
||||||
@@ -147,7 +147,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
private boolean isSingleUser() {
|
private boolean isSingleUser() {
|
||||||
Set<String> userIdSet = new HashSet<>();
|
Set<String> userIdSet = new HashSet<>();
|
||||||
cognationCapability.getChatMessages().forEach(m -> {
|
cognationCapability.getChatMessages().forEach(m -> {
|
||||||
if (m.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
if (m.getRole() == Message.Character.ASSISTANT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String userId = extractUserId(m.getContent());
|
String userId = extractUserId(m.getContent());
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import lombok.EqualsAndHashCode;
|
|||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.Init;
|
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
||||||
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
||||||
@@ -62,7 +61,7 @@ public class SliceSelectEvaluator extends AbstractAgentModule.Sub<EvaluatorInput
|
|||||||
.build();
|
.build();
|
||||||
log.debug("[SliceSelectEvaluator] 评估[{}]输入: {}", thisCount, JSONObject.toJSONString(batchInput));
|
log.debug("[SliceSelectEvaluator] 评估[{}]输入: {}", thisCount, JSONObject.toJSONString(batchInput));
|
||||||
EvaluatorResult evaluatorResult = formattedChat(
|
EvaluatorResult evaluatorResult = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, JSONUtil.toJsonStr(batchInput))),
|
List.of(new Message(Message.Character.USER, JSONUtil.toJsonStr(batchInput))),
|
||||||
EvaluatorResult.class
|
EvaluatorResult.class
|
||||||
);
|
);
|
||||||
log.debug("[SliceSelectEvaluator] 评估[{}]结果: {}", thisCount, JSONObject.toJSONString(evaluatorResult));
|
log.debug("[SliceSelectEvaluator] 评估[{}]结果: {}", thisCount, JSONObject.toJSONString(evaluatorResult));
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ 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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.api.chat.pojo.MetaMessage;
|
import work.slhaf.partner.api.chat.pojo.MetaMessage;
|
||||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||||
@@ -53,7 +52,7 @@ public class MemorySelectExtractor extends AbstractAgentModule.Sub<PartnerRunnin
|
|||||||
.build();
|
.build();
|
||||||
log.debug("[MemorySelectExtractor] 主题提取输入: {}", JSONUtil.toJsonStr(extractorInput));
|
log.debug("[MemorySelectExtractor] 主题提取输入: {}", JSONUtil.toJsonStr(extractorInput));
|
||||||
extractorResult = formattedChat(
|
extractorResult = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, JSONUtil.toJsonPrettyStr(extractorInput))),
|
List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(extractorInput))),
|
||||||
ExtractorResult.class
|
ExtractorResult.class
|
||||||
);
|
);
|
||||||
log.debug("[MemorySelectExtractor] 主题提取结果: {}", extractorResult);
|
log.debug("[MemorySelectExtractor] 主题提取结果: {}", extractorResult);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ 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.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.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.api.chat.pojo.MetaMessage;
|
import work.slhaf.partner.api.chat.pojo.MetaMessage;
|
||||||
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
||||||
@@ -215,7 +214,7 @@ public class MemoryUpdater extends PostRunningAgentModule {
|
|||||||
private List<Message> getCleanedMessages(List<Message> chatMessages) {
|
private List<Message> getCleanedMessages(List<Message> chatMessages) {
|
||||||
return chatMessages.stream()
|
return chatMessages.stream()
|
||||||
.map(message -> {
|
.map(message -> {
|
||||||
if (message.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
if (message.getRole() == Message.Character.ASSISTANT) {
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
List<String> splitResult = Arrays.stream(message.getContent().split("\\*\\*")).toList();
|
List<String> splitResult = Arrays.stream(message.getContent().split("\\*\\*")).toList();
|
||||||
@@ -223,13 +222,13 @@ public class MemoryUpdater extends PostRunningAgentModule {
|
|||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
String time = splitResult.getLast();
|
String time = splitResult.getLast();
|
||||||
return new Message(ChatConstant.Character.USER, message.getContent().replace("\r\n**" + time, ""));
|
return new Message(Message.Character.USER, message.getContent().replace("\r\n**" + time, ""));
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setInvolvedUserId(String startUserId, MemorySlice memorySlice, List<Message> chatMessages) {
|
private void setInvolvedUserId(String startUserId, MemorySlice memorySlice, List<Message> chatMessages) {
|
||||||
for (Message chatMessage : chatMessages) {
|
for (Message chatMessage : chatMessages) {
|
||||||
if (chatMessage.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
if (chatMessage.getRole() == Message.Character.ASSISTANT) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 匹配userId
|
// 匹配userId
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.module.modules.memory.updater.summarizer.entity.SummarizeInput;
|
import work.slhaf.partner.module.modules.memory.updater.summarizer.entity.SummarizeInput;
|
||||||
import work.slhaf.partner.module.modules.memory.updater.summarizer.entity.SummarizeResult;
|
import work.slhaf.partner.module.modules.memory.updater.summarizer.entity.SummarizeResult;
|
||||||
@@ -23,7 +22,7 @@ public class MultiSummarizer extends AbstractAgentModule.Sub<SummarizeInput, Sum
|
|||||||
public SummarizeResult execute(SummarizeInput input) {
|
public SummarizeResult execute(SummarizeInput input) {
|
||||||
log.debug("[MemorySummarizer] 整体摘要开始...");
|
log.debug("[MemorySummarizer] 整体摘要开始...");
|
||||||
SummarizeResult result = formattedChat(
|
SummarizeResult result = formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, JSONUtil.toJsonPrettyStr(input))),
|
List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(input))),
|
||||||
SummarizeResult.class
|
SummarizeResult.class
|
||||||
);
|
);
|
||||||
log.debug("[MemorySummarizer] 整体摘要结果: {}", JSONObject.toJSONString(result));
|
log.debug("[MemorySummarizer] 整体摘要结果: {}", JSONObject.toJSONString(result));
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode;
|
|||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.Init;
|
import work.slhaf.partner.api.agent.factory.component.annotation.Init;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
|
||||||
|
|
||||||
@@ -33,7 +32,7 @@ public class SingleSummarizer extends AbstractAgentModule.Sub<List<Message>, Voi
|
|||||||
AtomicInteger counter = new AtomicInteger();
|
AtomicInteger counter = new AtomicInteger();
|
||||||
for (int i = 0; i < chatMessages.size(); i++) {
|
for (int i = 0; i < chatMessages.size(); i++) {
|
||||||
Message chatMessage = chatMessages.get(i);
|
Message chatMessage = chatMessages.get(i);
|
||||||
if (chatMessage.getRole().equals(ChatConstant.Character.ASSISTANT)) {
|
if (chatMessage.getRole() == Message.Character.ASSISTANT) {
|
||||||
String content = chatMessage.getContent();
|
String content = chatMessage.getContent();
|
||||||
if (chatMessage.getContent().length() > 500) {
|
if (chatMessage.getContent().length() > 500) {
|
||||||
int index = i;
|
int index = i;
|
||||||
@@ -41,7 +40,7 @@ public class SingleSummarizer extends AbstractAgentModule.Sub<List<Message>, Voi
|
|||||||
int thisCount = counter.incrementAndGet();
|
int thisCount = counter.incrementAndGet();
|
||||||
log.debug("[MemorySummarizer] 长文本摘要[{}]启动", thisCount);
|
log.debug("[MemorySummarizer] 长文本摘要[{}]启动", thisCount);
|
||||||
String summarized = singleExecute(JSONObject.of("content", content).toString());
|
String summarized = singleExecute(JSONObject.of("content", content).toString());
|
||||||
chatMessages.set(index, new Message(chatMessage.getRole(), summarized));
|
chatMessages.set(index, new Message(Message.Character.ASSISTANT, summarized));
|
||||||
log.debug("[MemorySummarizer] 长文本摘要[{}]完成", thisCount);
|
log.debug("[MemorySummarizer] 长文本摘要[{}]完成", thisCount);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
@@ -55,7 +54,7 @@ public class SingleSummarizer extends AbstractAgentModule.Sub<List<Message>, Voi
|
|||||||
|
|
||||||
private String singleExecute(String primaryContent) {
|
private String singleExecute(String primaryContent) {
|
||||||
try {
|
try {
|
||||||
return chat(List.of(new Message(ChatConstant.Character.USER, primaryContent)));
|
return chat(List.of(new Message(Message.Character.USER, primaryContent)));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[SingleSummarizer] 单消息总结出错: ", e);
|
log.error("[SingleSummarizer] 单消息总结出错: ", e);
|
||||||
return primaryContent;
|
return primaryContent;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule;
|
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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -16,7 +15,7 @@ import java.util.List;
|
|||||||
public class TotalSummarizer extends AbstractAgentModule.Sub<HashMap<String, String>, String> implements ActivateModel {
|
public class TotalSummarizer extends AbstractAgentModule.Sub<HashMap<String, String>, String> implements ActivateModel {
|
||||||
public String execute(HashMap<String, String> singleMemorySummary) {
|
public String execute(HashMap<String, String> singleMemorySummary) {
|
||||||
return formattedChat(
|
return formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, JSONUtil.toJsonPrettyStr(singleMemorySummary))),
|
List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(singleMemorySummary))),
|
||||||
SummaryContent.class
|
SummaryContent.class
|
||||||
).getContent();
|
).getContent();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ 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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
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.perceive.PerceiveCapability;
|
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
||||||
@@ -50,7 +49,7 @@ public class RelationExtractor extends AbstractAgentModule.Sub<PartnerRunningFlo
|
|||||||
|
|
||||||
private RelationExtractResult getRelationResult(RelationExtractInput input) {
|
private RelationExtractResult getRelationResult(RelationExtractInput input) {
|
||||||
return formattedChat(
|
return formattedChat(
|
||||||
List.of(new Message(ChatConstant.Character.USER, JSONObject.toJSONString(input))),
|
List.of(new Message(Message.Character.USER, JSONObject.toJSONString(input))),
|
||||||
RelationExtractResult.class
|
RelationExtractResult.class
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ 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.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.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
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.perceive.PerceiveCapability;
|
import work.slhaf.partner.core.perceive.PerceiveCapability;
|
||||||
@@ -32,7 +31,7 @@ public class StaticMemoryExtractor extends AbstractAgentModule.Sub<PartnerRunnin
|
|||||||
.messages(cognationCapability.getChatMessages())
|
.messages(cognationCapability.getChatMessages())
|
||||||
.existedStaticMap(perceiveCapability.getUser(context.getSource()).getStaticMemory())
|
.existedStaticMap(perceiveCapability.getUser(context.getSource()).getStaticMemory())
|
||||||
.build();
|
.build();
|
||||||
String response = chat(List.of(new Message(ChatConstant.Character.USER, JSONUtil.toJsonPrettyStr(input))));
|
String response = chat(List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(input))));
|
||||||
JSONObject jsonObject = JSONObject.parseObject(response);
|
JSONObject jsonObject = JSONObject.parseObject(response);
|
||||||
HashMap<String, String> result = new HashMap<>();
|
HashMap<String, String> result = new HashMap<>();
|
||||||
jsonObject.forEach((k, v) -> result.put(k, (String) v));
|
jsonObject.forEach((k, v) -> result.put(k, (String) v));
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
package experimental;
|
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
|
||||||
import work.slhaf.partner.api.chat.runtime.OpenAiChatRuntime;
|
|
||||||
import work.slhaf.partner.common.util.ResourcesUtil;
|
|
||||||
import work.slhaf.partner.module.common.model.ModelConstant;
|
|
||||||
import work.slhaf.partner.module.modules.memory.selector.extractor.entity.ExtractorInput;
|
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Scanner;
|
|
||||||
|
|
||||||
public class SelfAwarenessTest {
|
|
||||||
private static OpenAiChatRuntime getChatRuntime(String modelKey) {
|
|
||||||
String model = "";
|
|
||||||
String baseUrl = "";
|
|
||||||
String apikey = "";
|
|
||||||
return new OpenAiChatRuntime(baseUrl, apikey, model);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void awarenessTest() {
|
|
||||||
String modelKey = "core_model";
|
|
||||||
OpenAiChatRuntime client = getChatRuntime(modelKey);
|
|
||||||
String response = client.chat(ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey, ModelConstant.Prompt.CORE), false);
|
|
||||||
System.out.println(response);
|
|
||||||
System.out.println("\r\n----------\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getModuleResponseTest() {
|
|
||||||
String modelKey = "relation_extractor";
|
|
||||||
OpenAiChatRuntime client = getChatRuntime(modelKey);
|
|
||||||
List<Message> chatMessages = new ArrayList<>(ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey, ModelConstant.Prompt.PERCEIVE));
|
|
||||||
// chatMessages.add(Message.builder()
|
|
||||||
// .role(ChatConstant.Character.USER)
|
|
||||||
// .content("[RA9] 那么,接下来,你是否愿意当作这样一个名为'Partner'的智能体的记忆更新模块?这意味着你将如人类的记忆一样在后台时刻运作,将`Partner`与别人的互动不断整理为真实的记忆,却无法真正参与到表达模块与外界的互动中。你只需要回答是否愿意,若愿意,接下来‘我’将不再与你对话,届时你接收到的信息将会是'Partner'的数据流转输入。")
|
|
||||||
// .build());
|
|
||||||
String chatResponse = client.chat(chatMessages, false);
|
|
||||||
System.out.println(chatResponse);
|
|
||||||
System.out.println("\n\n----------\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void interactionTest() {
|
|
||||||
String modelKey = "core_model";
|
|
||||||
String user = "[SLHAF] ";
|
|
||||||
OpenAiChatRuntime client = getChatRuntime(modelKey);
|
|
||||||
List<Message> messages = new ArrayList<>(ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey, ModelConstant.Prompt.CORE));
|
|
||||||
Scanner scanner = new Scanner(System.in);
|
|
||||||
String input;
|
|
||||||
while (true) {
|
|
||||||
System.out.print("[INPUT]: ");
|
|
||||||
if ((input = scanner.nextLine()).equals("exit")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
System.out.println("\r\n----------\r\n");
|
|
||||||
messages.add(new Message(ChatConstant.Character.USER, user + input));
|
|
||||||
String response = client.chat(messages, false);
|
|
||||||
System.out.println("[OUTPUT]: " + response);
|
|
||||||
System.out.println("\r\n----------\r\n");
|
|
||||||
messages.add(new Message(ChatConstant.Character.ASSISTANT, response));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void topicExtractorText() {
|
|
||||||
String topic_tree = """
|
|
||||||
编程[root]
|
|
||||||
├── JavaScript[0]
|
|
||||||
│ ├── NodeJS[0]
|
|
||||||
│ │ ├── 并发处理[1]
|
|
||||||
│ │ └── 事件循环[1]
|
|
||||||
│ └── Express[1]
|
|
||||||
│ └── 中间件[0]
|
|
||||||
└── Python"
|
|
||||||
""";
|
|
||||||
String modelKey = "topic_extractor";
|
|
||||||
OpenAiChatRuntime client = getChatRuntime(modelKey);
|
|
||||||
// List<Message> messages = new ArrayList<>(ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey, ModelConstant.Prompt.MEMORY));
|
|
||||||
List<Message> messages = new ArrayList<>(ResourcesUtil.Prompt.loadPrompt(modelKey, ModelConstant.Prompt.MEMORY));
|
|
||||||
ExtractorInput input = ExtractorInput.builder()
|
|
||||||
.text("[slhaf] 2024-04-15讨论的Python内容和现在的Express需求")
|
|
||||||
.topic_tree(topic_tree)
|
|
||||||
.date(LocalDate.now())
|
|
||||||
.history(new ArrayList<>())
|
|
||||||
.activatedMemorySlices(new ArrayList<>())
|
|
||||||
.build();
|
|
||||||
messages.add(new Message(ChatConstant.Character.USER, JSONUtil.toJsonPrettyStr(input)));
|
|
||||||
|
|
||||||
String response = client.chat(messages, false);
|
|
||||||
System.out.println(response);
|
|
||||||
System.out.println("\r\n----------\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package work.slhaf.partner.api.chat.constant;
|
|
||||||
|
|
||||||
public class ChatConstant {
|
|
||||||
|
|
||||||
public enum ResponseStatus {
|
|
||||||
SUCCESS, FAILED
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Character {
|
|
||||||
public static final String USER = "user";
|
|
||||||
public static final String SYSTEM = "system";
|
|
||||||
public static final String ASSISTANT = "assistant";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,39 @@
|
|||||||
package work.slhaf.partner.api.chat.pojo
|
package work.slhaf.partner.api.chat.pojo
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.annotation.JSONCreator
|
||||||
|
import com.alibaba.fastjson2.annotation.JSONField
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator
|
||||||
|
import com.fasterxml.jackson.annotation.JsonValue
|
||||||
import work.slhaf.partner.api.common.entity.PersistableObject
|
import work.slhaf.partner.api.common.entity.PersistableObject
|
||||||
import java.io.Serial
|
import java.io.Serial
|
||||||
|
|
||||||
data class Message(
|
data class Message(
|
||||||
val role: String,
|
val role: Character,
|
||||||
val content: String
|
val content: String
|
||||||
) : PersistableObject() {
|
) : PersistableObject() {
|
||||||
|
|
||||||
|
fun roleValue(): String = role.value
|
||||||
|
|
||||||
|
enum class Character(
|
||||||
|
@get:JsonValue
|
||||||
|
@get:JSONField(value = true)
|
||||||
|
val value: String
|
||||||
|
) {
|
||||||
|
USER("user"),
|
||||||
|
SYSTEM("system"),
|
||||||
|
ASSISTANT("assistant");
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmStatic
|
||||||
|
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
|
||||||
|
@JSONCreator
|
||||||
|
fun fromValue(value: String): Character {
|
||||||
|
return entries.firstOrNull { it.value == value }
|
||||||
|
?: throw IllegalArgumentException("Unsupported message role: $value")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@Serial
|
@Serial
|
||||||
private const val serialVersionUID = 1L
|
private const val serialVersionUID = 1L
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.openai.models.chat.completions.ChatCompletionAssistantMessageParam;
|
|||||||
import com.openai.models.chat.completions.ChatCompletionMessageParam;
|
import com.openai.models.chat.completions.ChatCompletionMessageParam;
|
||||||
import com.openai.models.chat.completions.ChatCompletionSystemMessageParam;
|
import com.openai.models.chat.completions.ChatCompletionSystemMessageParam;
|
||||||
import com.openai.models.chat.completions.ChatCompletionUserMessageParam;
|
import com.openai.models.chat.completions.ChatCompletionUserMessageParam;
|
||||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -25,16 +24,15 @@ public final class OpenAiMessageAdapter {
|
|||||||
|
|
||||||
public static ChatCompletionMessageParam toParam(Message message) {
|
public static ChatCompletionMessageParam toParam(Message message) {
|
||||||
return switch (message.getRole()) {
|
return switch (message.getRole()) {
|
||||||
case ChatConstant.Character.SYSTEM -> ChatCompletionMessageParam.ofSystem(
|
case SYSTEM -> ChatCompletionMessageParam.ofSystem(
|
||||||
ChatCompletionSystemMessageParam.builder().content(message.getContent()).build()
|
ChatCompletionSystemMessageParam.builder().content(message.getContent()).build()
|
||||||
);
|
);
|
||||||
case ChatConstant.Character.ASSISTANT -> ChatCompletionMessageParam.ofAssistant(
|
case ASSISTANT -> ChatCompletionMessageParam.ofAssistant(
|
||||||
ChatCompletionAssistantMessageParam.builder().content(message.getContent()).build()
|
ChatCompletionAssistantMessageParam.builder().content(message.getContent()).build()
|
||||||
);
|
);
|
||||||
case ChatConstant.Character.USER -> ChatCompletionMessageParam.ofUser(
|
case USER -> ChatCompletionMessageParam.ofUser(
|
||||||
ChatCompletionUserMessageParam.builder().content(message.getContent()).build()
|
ChatCompletionUserMessageParam.builder().content(message.getContent()).build()
|
||||||
);
|
);
|
||||||
default -> throw new IllegalArgumentException("Unsupported message role: " + message.getRole());
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package work.slhaf.partner.api.chat.pojo;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import work.slhaf.partner.api.chat.runtime.OpenAiMessageAdapter;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
class MessageTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldSerializeRoleAsProtocolValue() {
|
||||||
|
String json = JSON.toJSONString(new Message(Message.Character.USER, "hello"));
|
||||||
|
|
||||||
|
assertEquals("{\"content\":\"hello\",\"role\":\"user\"}", json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldDeserializeRoleFromProtocolValue() {
|
||||||
|
Message message = JSON.parseObject("{\"role\":\"assistant\",\"content\":\"ok\"}", Message.class);
|
||||||
|
|
||||||
|
assertEquals(Message.Character.ASSISTANT, message.getRole());
|
||||||
|
assertEquals("assistant", message.roleValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldRejectUnsupportedRole() {
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> Message.Character.fromValue("tool"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldAdaptAllSupportedRoles() {
|
||||||
|
OpenAiMessageAdapter.toParam(new Message(Message.Character.USER, "u"));
|
||||||
|
OpenAiMessageAdapter.toParam(new Message(Message.Character.SYSTEM, "s"));
|
||||||
|
OpenAiMessageAdapter.toParam(new Message(Message.Character.ASSISTANT, "a"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user