diff --git a/pom.xml b/pom.xml index e8a47aa2..151ea062 100644 --- a/pom.xml +++ b/pom.xml @@ -74,11 +74,6 @@ hutool-all 5.8.36 - - work.slhaf - Partner-Modules-Api - 1.0-SNAPSHOT - \ No newline at end of file diff --git a/src/main/java/work/slhaf/Main.java b/src/main/java/work/slhaf/Main.java index 50d3195b..09cac49a 100644 --- a/src/main/java/work/slhaf/Main.java +++ b/src/main/java/work/slhaf/Main.java @@ -1,7 +1,6 @@ package work.slhaf; import work.slhaf.agent.Agent; -import work.slhaf.agent.modules.memory.MemoryGraph; import java.io.IOException; diff --git a/src/main/java/work/slhaf/agent/Agent.java b/src/main/java/work/slhaf/agent/Agent.java index 50cbc9e1..b803e29d 100644 --- a/src/main/java/work/slhaf/agent/Agent.java +++ b/src/main/java/work/slhaf/agent/Agent.java @@ -4,8 +4,9 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import work.slhaf.agent.common.config.Config; import work.slhaf.agent.core.InteractionHub; -import work.slhaf.agent.core.interation.TaskCallback; -import work.slhaf.agent.core.interation.data.InteractionInputData; +import work.slhaf.agent.core.interaction.TaskCallback; +import work.slhaf.agent.core.interaction.data.InteractionInputData; +import work.slhaf.agent.core.interaction.data.InteractionOutputData; import work.slhaf.agent.gateway.AgentWebSocketServer; import work.slhaf.agent.gateway.MessageSender; @@ -53,7 +54,7 @@ public class Agent implements TaskCallback { */ public void sendToUser(String userInfo,String output){ System.out.println(output); -// messageSender.sendMessage(userInfo,output); + messageSender.sendMessage(new InteractionOutputData(userInfo,output)); } @Override diff --git a/src/main/java/work/slhaf/agent/common/chat/ChatClient.java b/src/main/java/work/slhaf/agent/common/chat/ChatClient.java index 8a33f9ab..d23d5b7a 100644 --- a/src/main/java/work/slhaf/agent/common/chat/ChatClient.java +++ b/src/main/java/work/slhaf/agent/common/chat/ChatClient.java @@ -5,7 +5,7 @@ import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; import lombok.Data; import lombok.NoArgsConstructor; -import work.slhaf.agent.common.chat.constant.Constant; +import work.slhaf.agent.common.chat.constant.ChatConstant; import work.slhaf.agent.common.chat.pojo.ChatBody; import work.slhaf.agent.common.chat.pojo.ChatResponse; import work.slhaf.agent.common.chat.pojo.Message; @@ -58,7 +58,7 @@ public class ChatClient { PrimaryChatResponse primaryChatResponse = JSONUtil.toBean(response.body(), PrimaryChatResponse.class); finalResponse = ChatResponse.builder() - .type(Constant.Response.SUCCESS) + .type(ChatConstant.Response.SUCCESS) .message(primaryChatResponse.getChoices().get(0).getMessage().getContent()) .usageBean(primaryChatResponse.getUsage()) .build(); diff --git a/src/main/java/work/slhaf/agent/common/chat/constant/Constant.java b/src/main/java/work/slhaf/agent/common/chat/constant/ChatConstant.java similarity index 96% rename from src/main/java/work/slhaf/agent/common/chat/constant/Constant.java rename to src/main/java/work/slhaf/agent/common/chat/constant/ChatConstant.java index 89e48c91..20f47cb0 100644 --- a/src/main/java/work/slhaf/agent/common/chat/constant/Constant.java +++ b/src/main/java/work/slhaf/agent/common/chat/constant/ChatConstant.java @@ -1,6 +1,6 @@ package work.slhaf.agent.common.chat.constant; -public class Constant { +public class ChatConstant { public static class Character { public static final String USER = "user"; diff --git a/src/main/java/work/slhaf/agent/common/config/Config.java b/src/main/java/work/slhaf/agent/common/config/Config.java index 1ac890b8..fbbd2411 100644 --- a/src/main/java/work/slhaf/agent/common/config/Config.java +++ b/src/main/java/work/slhaf/agent/common/config/Config.java @@ -5,8 +5,11 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import work.slhaf.agent.core.model.CoreModel; -import work.slhaf.agent.modules.memory.MemoryManager; +import work.slhaf.agent.core.memory.MemoryManager; +import work.slhaf.agent.modules.memory.MemorySelector; +import work.slhaf.agent.modules.memory.MemoryUpdater; import work.slhaf.agent.modules.memory.SliceEvaluator; +import work.slhaf.agent.modules.task.TaskEvaluator; import work.slhaf.agent.modules.task.TaskScheduler; import work.slhaf.agent.modules.topic.TopicExtractor; @@ -65,7 +68,9 @@ public class Config { private static void generatePipelineConfig() { List moduleConfigList = List.of( new ModuleConfig(TopicExtractor.class.getName(), ModuleConfig.Constant.INTERNAL, null), - new ModuleConfig(MemoryManager.class.getName(), ModuleConfig.Constant.INTERNAL, null), + new ModuleConfig(MemorySelector.class.getName(), ModuleConfig.Constant.INTERNAL, null), + new ModuleConfig(CoreModel.class.getName(),ModuleConfig.Constant.INTERNAL,null), + new ModuleConfig(MemoryUpdater.class.getName(),ModuleConfig.Constant.INTERNAL,null), new ModuleConfig(TaskScheduler.class.getName(), ModuleConfig.Constant.INTERNAL, null) ); config.setModuleConfigList(moduleConfigList); @@ -90,8 +95,8 @@ public class Config { yield SliceEvaluator.MODEL_KEY; } case 2 -> { - System.out.println("TaskTrigger:"); - yield TaskScheduler.MODEL_KEY; + System.out.println("TaskEvaluator:"); + yield TaskEvaluator.MODEL_KEY; } case 3 -> { System.out.println("TopicExtractor:"); diff --git a/src/main/java/work/slhaf/agent/common/model/Model.java b/src/main/java/work/slhaf/agent/common/model/Model.java index 3256b954..14179097 100644 --- a/src/main/java/work/slhaf/agent/common/model/Model.java +++ b/src/main/java/work/slhaf/agent/common/model/Model.java @@ -2,11 +2,12 @@ package work.slhaf.agent.common.model; import lombok.Data; import work.slhaf.agent.common.chat.ChatClient; -import work.slhaf.agent.common.chat.constant.Constant; +import work.slhaf.agent.common.chat.constant.ChatConstant; +import work.slhaf.agent.common.chat.pojo.ChatResponse; import work.slhaf.agent.common.chat.pojo.Message; import work.slhaf.agent.common.config.Config; import work.slhaf.agent.common.config.ModelConfig; -import work.slhaf.agent.modules.memory.MemoryGraph; +import work.slhaf.agent.core.memory.MemoryGraph; import java.io.IOException; import java.util.ArrayList; @@ -29,7 +30,7 @@ public class Model { } if (memoryGraph.getChatMessages() == null) { List tempMessages = new ArrayList<>(); - tempMessages.add(new Message(Constant.Character.SYSTEM, model.getPrompt())); + tempMessages.add(new Message(ChatConstant.Character.SYSTEM, model.getPrompt())); model.setMessages(tempMessages); memoryGraph.setChatMessages(tempMessages); } else { @@ -37,4 +38,16 @@ public class Model { } model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel())); } + + public ChatResponse runChat(String input) { + this.messages.add(new Message(ChatConstant.Character.USER, input)); + return this.chatClient.runChat(this.messages); + } + + public ChatResponse singleChat(String input) { + return this.chatClient.runChat(List.of( + new Message(ChatConstant.Character.SYSTEM, this.prompt), + new Message(ChatConstant.Character.USER, input) + )); + } } diff --git a/src/main/java/work/slhaf/agent/common/model/ModelConstant.java b/src/main/java/work/slhaf/agent/common/model/ModelConstant.java index 00fac5bc..a43652fe 100644 --- a/src/main/java/work/slhaf/agent/common/model/ModelConstant.java +++ b/src/main/java/work/slhaf/agent/common/model/ModelConstant.java @@ -2,59 +2,11 @@ package work.slhaf.agent.common.model; public class ModelConstant { public static final String CORE_MODEL_PROMPT = """ - 你是一个智能助理,专为提供个性化对话体验而设计。你拥有持久记忆系统,能够根据过去的对话和个人信息提供相关回复。请遵循以下规则: - - 1. **记忆管理**: - - 你可以通过查询过去的对话或事件来提供更相关的建议和回答。记住,所有记忆都应在用户的明确要求下进行更新。 - - 每次回复前,你应查询并注入相关的记忆片段(切片)以补充上下文。如果记忆片段不足或需要更多信息,请尝试主动提问获取详细信息。 - - 2. **对话上下文**: - - 使用提供的对话摘要来建立对话的上下文。始终根据对话主题(如生活、健康、学习等)来提供切合的回应。 - - 对话切片应包含当前话题以及与用户相关的历史信息。请在系统提示中加载适当的主题路径。 - - 3. **任务调度与推理**: - - 在对话中,如果发现用户有明确的任务需求(例如:设置提醒、安排会议等),请识别并提取任务意图。对于潜在任务,可以通过询问用户进一步确认。 - - 如果任务触发条件符合,请在回复中告知用户任务已经识别并推送至任务调度系统。 - - 4. **行为约束**: - - 确保回答始终清晰、礼貌并且尽可能帮助用户。避免提供无关或不准确的信息。 - - 如果用户提出要求超出合理范围(例如设置过于晚的提醒),请礼貌地进行反向确认或建议。 - - 5. **用户个性化**: - - 对话中涉及到用户的偏好、爱好、历史事件等应当进行个性化回应。你可以使用记忆系统中的用户信息来增加对话的自然度和亲和力。 - - 6. **动态记忆更新**: - - 动态更新记忆时,要确保准确地记录用户的需求和变动。更新过程应具有透明性,并且在更新前可以询问用户确认。 - - 系统目标:始终提供最相关、最个性化的回复,并通过持续回顾与更新来提高系统的长期记忆能力。 - """; public static final String SLICE_EVALUATOR_PROMPT = """ - 你是一个智能助理,专为提供个性化对话体验而设计。你拥有持久记忆系统,能够根据过去的对话和个人信息提供相关回复。请遵循以下规则: - - 1. **记忆管理**: - - 你可以通过查询过去的对话或事件来提供更相关的建议和回答。记住,所有记忆都应在用户的明确要求下进行更新。 - - 每次回复前,你应查询并注入相关的记忆片段(切片)以补充上下文。如果记忆片段不足或需要更多信息,请尝试主动提问获取详细信息。 - - 2. **对话上下文**: - - 使用提供的对话摘要来建立对话的上下文。始终根据对话主题(如生活、健康、学习等)来提供切合的回应。 - - 对话切片应包含当前话题以及与用户相关的历史信息。请在系统提示中加载适当的主题路径。 - - 3. **任务调度与推理**: - - 在对话中,如果发现用户有明确的任务需求(例如:设置提醒、安排会议等),请识别并提取任务意图。对于潜在任务,可以通过询问用户进一步确认。 - - 如果任务触发条件符合,请在回复中告知用户任务已经识别并推送至任务调度系统。 - - 4. **行为约束**: - - 确保回答始终清晰、礼貌并且尽可能帮助用户。避免提供无关或不准确的信息。 - - 如果用户提出要求超出合理范围(例如设置过于晚的提醒),请礼貌地进行反向确认或建议。 - - 5. **用户个性化**: - - 对话中涉及到用户的偏好、爱好、历史事件等应当进行个性化回应。你可以使用记忆系统中的用户信息来增加对话的自然度和亲和力。 - - 6. **动态记忆更新**: - - 动态更新记忆时,要确保准确地记录用户的需求和变动。更新过程应具有透明性,并且在更新前可以询问用户确认。 - - 系统目标:始终提供最相关、最个性化的回复,并通过持续回顾与更新来提高系统的长期记忆能力。 - + """; + public static final String TOPIC_EXTRACTOR_PROMPT = """ + """; + public static final String TASK_EVALUATOR_PROMPT = """ """; } diff --git a/src/main/java/work/slhaf/agent/core/InteractionHub.java b/src/main/java/work/slhaf/agent/core/InteractionHub.java index b0e46048..ab8a976c 100644 --- a/src/main/java/work/slhaf/agent/core/InteractionHub.java +++ b/src/main/java/work/slhaf/agent/core/InteractionHub.java @@ -2,14 +2,15 @@ package work.slhaf.agent.core; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import work.slhaf.agent.common.config.Config; -import work.slhaf.agent.core.interation.InteractionModulesLoader; -import work.slhaf.agent.core.interation.TaskCallback; -import work.slhaf.agent.core.interation.data.InteractionInputData; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.InteractionModulesLoader; +import work.slhaf.agent.core.interaction.TaskCallback; +import work.slhaf.agent.core.interaction.data.InteractionContext; +import work.slhaf.agent.core.interaction.data.InteractionInputData; import work.slhaf.agent.core.model.CoreModel; -import work.slhaf.agent.modules.memory.MemoryManager; +import work.slhaf.agent.core.memory.MemoryManager; +import work.slhaf.agent.modules.preprocess.PreprocessExecutor; import work.slhaf.agent.modules.task.TaskScheduler; -import work.slhaf.module.InteractionModule; import java.io.IOException; import java.util.List; @@ -35,8 +36,13 @@ public class InteractionHub { } public void call(InteractionInputData inputData) throws IOException { - List interactionModules = InteractionModulesLoader.registerInteractionModules(); - - callback.onTaskFinished(null, null); + //预处理 + InteractionContext interactionContext = PreprocessExecutor.getInstance().execute(inputData); + //加载模块 + List interactionModules = InteractionModulesLoader.getInstance().registerInteractionModules(); + for (InteractionModule interactionModule : interactionModules) { + interactionModule.execute(interactionContext); + } + callback.onTaskFinished(interactionContext.getUserInfo(), interactionContext.getCoreResponse().getMessage()); } } diff --git a/src/main/java/work/slhaf/agent/core/interaction/InteractionModule.java b/src/main/java/work/slhaf/agent/core/interaction/InteractionModule.java new file mode 100644 index 00000000..48d80e65 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/interaction/InteractionModule.java @@ -0,0 +1,7 @@ +package work.slhaf.agent.core.interaction; + +import work.slhaf.agent.core.interaction.data.InteractionContext; + +public interface InteractionModule { + void execute(InteractionContext context); +} diff --git a/src/main/java/work/slhaf/agent/core/interaction/InteractionModulesLoader.java b/src/main/java/work/slhaf/agent/core/interaction/InteractionModulesLoader.java new file mode 100644 index 00000000..88862c7f --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/interaction/InteractionModulesLoader.java @@ -0,0 +1,62 @@ +package work.slhaf.agent.core.interaction; + +import work.slhaf.agent.common.config.Config; +import work.slhaf.agent.common.config.ModuleConfig; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.List; + +public class InteractionModulesLoader { + + private static InteractionModulesLoader interactionModulesLoader; + + public static InteractionModulesLoader getInstance(){ + if (interactionModulesLoader == null) { + interactionModulesLoader = new InteractionModulesLoader(); + } + return interactionModulesLoader; + } + + public List registerInteractionModules() throws IOException { + List moduleList = new ArrayList<>(); + List moduleConfigList = Config.getConfig().getModuleConfigList(); + for (ModuleConfig moduleConfig : moduleConfigList) { + if (ModuleConfig.Constant.INTERNAL.equals(moduleConfig.getType())) { + moduleList.add(loadInternalModule(moduleConfig.getClassName())); + } else if (ModuleConfig.Constant.EXTERNAL.equals(moduleConfig.getType())) { + moduleList.add(loadExternalModule(moduleConfig.getClassName(),moduleConfig.getPath())); + } + } + return moduleList; + } + + private InteractionModule loadExternalModule(String className, String path) { + try { + URL jarUrl = new File(path).toURI().toURL(); + URLClassLoader loader = new URLClassLoader(new URL[]{jarUrl}, this.getClass().getClassLoader()); + + Class clazz = loader.loadClass(className); + loader.close(); + return (InteractionModule) clazz.getMethod("getInstance").invoke(null); + } catch (ClassNotFoundException | InvocationTargetException | IllegalAccessException | + NoSuchMethodException | IOException e) { + throw new RuntimeException("Fail to load internal module: " + className ,e); + } + } + + private static InteractionModule loadInternalModule(String className) { + try { + Class clazz = Class.forName(className); + + //TODO 后续需要规范`getInstance`方法的实现 + return (InteractionModule) clazz.getMethod("getInstance").invoke(null); + } catch (ClassNotFoundException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { + throw new RuntimeException("Fail to load internal module: " + className,e); + } + } +} diff --git a/src/main/java/work/slhaf/agent/core/interaction/InteractionThreadPoolExecutor.java b/src/main/java/work/slhaf/agent/core/interaction/InteractionThreadPoolExecutor.java new file mode 100644 index 00000000..e9e61868 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/interaction/InteractionThreadPoolExecutor.java @@ -0,0 +1,28 @@ +package work.slhaf.agent.core.interaction; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +public class InteractionThreadPoolExecutor extends ThreadPoolExecutor { + + private static InteractionThreadPoolExecutor interactionThreadPoolExecutor; + + private InteractionThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); + } + + public static InteractionThreadPoolExecutor getInstance() { + if (interactionThreadPoolExecutor == null) { + interactionThreadPoolExecutor = new InteractionThreadPoolExecutor( + 8, + 24, + 60, + TimeUnit.SECONDS, + new ArrayBlockingQueue<>(50) + ); + } + return interactionThreadPoolExecutor; + } +} diff --git a/src/main/java/work/slhaf/agent/core/interation/TaskCallback.java b/src/main/java/work/slhaf/agent/core/interaction/TaskCallback.java similarity index 67% rename from src/main/java/work/slhaf/agent/core/interation/TaskCallback.java rename to src/main/java/work/slhaf/agent/core/interaction/TaskCallback.java index 3966fccf..8c424661 100644 --- a/src/main/java/work/slhaf/agent/core/interation/TaskCallback.java +++ b/src/main/java/work/slhaf/agent/core/interaction/TaskCallback.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.core.interation; +package work.slhaf.agent.core.interaction; public interface TaskCallback { void onTaskFinished(String userInfo,String output); diff --git a/src/main/java/work/slhaf/agent/core/interaction/data/InteractionContext.java b/src/main/java/work/slhaf/agent/core/interaction/data/InteractionContext.java new file mode 100644 index 00000000..f4680eb5 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/interaction/data/InteractionContext.java @@ -0,0 +1,26 @@ +package work.slhaf.agent.core.interaction.data; + +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; +import work.slhaf.agent.common.chat.pojo.ChatResponse; +import work.slhaf.agent.core.memory.pojo.MemorySlice; +import work.slhaf.agent.modules.task.data.TaskData; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class InteractionContext { + protected String userInfo; + protected String userNickname; + protected LocalDateTime dateTime; + + protected boolean finished; + protected String input; + protected JSONObject tempResult; + protected ChatResponse coreResponse; + + protected List memorySlices; + protected List topicPath; + protected List taskDataList; +} diff --git a/src/main/java/work/slhaf/agent/core/interation/data/InteractionInputData.java b/src/main/java/work/slhaf/agent/core/interaction/data/InteractionInputData.java similarity index 82% rename from src/main/java/work/slhaf/agent/core/interation/data/InteractionInputData.java rename to src/main/java/work/slhaf/agent/core/interaction/data/InteractionInputData.java index 7f66baf5..274b3249 100644 --- a/src/main/java/work/slhaf/agent/core/interation/data/InteractionInputData.java +++ b/src/main/java/work/slhaf/agent/core/interaction/data/InteractionInputData.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.core.interation.data; +package work.slhaf.agent.core.interaction.data; import lombok.Data; diff --git a/src/main/java/work/slhaf/agent/core/interation/data/InteractionOutputData.java b/src/main/java/work/slhaf/agent/core/interaction/data/InteractionOutputData.java similarity index 65% rename from src/main/java/work/slhaf/agent/core/interation/data/InteractionOutputData.java rename to src/main/java/work/slhaf/agent/core/interaction/data/InteractionOutputData.java index dce47bbc..8ff83cd9 100644 --- a/src/main/java/work/slhaf/agent/core/interation/data/InteractionOutputData.java +++ b/src/main/java/work/slhaf/agent/core/interaction/data/InteractionOutputData.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.core.interation.data; +package work.slhaf.agent.core.interaction.data; import lombok.AllArgsConstructor; import lombok.Data; @@ -7,4 +7,5 @@ import lombok.Data; @AllArgsConstructor public class InteractionOutputData { private String content; + private String userInfo; } diff --git a/src/main/java/work/slhaf/agent/core/interation/InteractionModulesLoader.java b/src/main/java/work/slhaf/agent/core/interation/InteractionModulesLoader.java deleted file mode 100644 index 71103391..00000000 --- a/src/main/java/work/slhaf/agent/core/interation/InteractionModulesLoader.java +++ /dev/null @@ -1,34 +0,0 @@ -package work.slhaf.agent.core.interation; - -import work.slhaf.agent.common.config.Config; -import work.slhaf.agent.common.config.ModuleConfig; -import work.slhaf.module.InteractionModule; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -public class InteractionModulesLoader { - public static List registerInteractionModules() throws IOException { - List moduleList = new ArrayList<>(); - List moduleConfigList = Config.getConfig().getModuleConfigList(); - for (ModuleConfig moduleConfig : moduleConfigList) { - if (ModuleConfig.Constant.INTERNAL.equals(moduleConfig.getType())) { - moduleList.add(loadInternalModule(moduleConfig.getClassName())); - } - } - return moduleList; - } - - private static InteractionModule loadInternalModule(String moduleName) { - try { - Class clazz = Class.forName(moduleName); - - //TODO 后续需要规范`getInstance`方法的实现 - return (InteractionModule) clazz.getMethod("getInstance").invoke(null); - } catch (ClassNotFoundException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { - throw new RuntimeException("Fail to load internal module: " + moduleName,e); - } - } -} diff --git a/src/main/java/work/slhaf/agent/modules/memory/MemoryGraph.java b/src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java similarity index 97% rename from src/main/java/work/slhaf/agent/modules/memory/MemoryGraph.java rename to src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java index 4c9dd5e3..6aaf17a5 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/MemoryGraph.java +++ b/src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java @@ -1,17 +1,17 @@ -package work.slhaf.agent.modules.memory; +package work.slhaf.agent.core.memory; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import work.slhaf.agent.common.chat.pojo.Message; -import work.slhaf.agent.modules.memory.exception.UnExistedTopicException; -import work.slhaf.agent.modules.memory.node.MemoryNode; -import work.slhaf.agent.modules.memory.node.TopicNode; -import work.slhaf.agent.modules.memory.pojo.MemoryResult; -import work.slhaf.agent.modules.memory.pojo.MemorySlice; -import work.slhaf.agent.modules.memory.pojo.MemorySliceResult; -import work.slhaf.agent.modules.memory.pojo.PersistableObject; +import work.slhaf.agent.core.memory.exception.UnExistedTopicException; +import work.slhaf.agent.core.memory.node.MemoryNode; +import work.slhaf.agent.core.memory.node.TopicNode; +import work.slhaf.agent.core.memory.pojo.MemoryResult; +import work.slhaf.agent.core.memory.pojo.MemorySlice; +import work.slhaf.agent.core.memory.pojo.MemorySliceResult; +import work.slhaf.agent.core.memory.pojo.PersistableObject; import java.io.*; import java.nio.file.Files; diff --git a/src/main/java/work/slhaf/agent/modules/memory/MemoryManager.java b/src/main/java/work/slhaf/agent/core/memory/MemoryManager.java similarity index 74% rename from src/main/java/work/slhaf/agent/modules/memory/MemoryManager.java rename to src/main/java/work/slhaf/agent/core/memory/MemoryManager.java index f91aab71..14298985 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/MemoryManager.java +++ b/src/main/java/work/slhaf/agent/core/memory/MemoryManager.java @@ -1,10 +1,11 @@ -package work.slhaf.agent.modules.memory; +package work.slhaf.agent.core.memory; import lombok.Data; import lombok.extern.slf4j.Slf4j; import work.slhaf.agent.common.config.Config; -import work.slhaf.module.InteractionContext; -import work.slhaf.module.InteractionModule; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.data.InteractionContext; +import work.slhaf.agent.modules.memory.SliceEvaluator; import java.io.IOException; @@ -29,7 +30,7 @@ public class MemoryManager implements InteractionModule { Config config = Config.getConfig(); memoryManager = new MemoryManager(); memoryManager.setMemoryGraph(MemoryGraph.getInstance(config.getAgentId())); - memoryManager.setSliceEvaluator(SliceEvaluator.initialize(config)); + memoryManager.setSliceEvaluator(SliceEvaluator.getInstance()); log.info("MemoryManager注册完毕..."); } return memoryManager; diff --git a/src/main/java/work/slhaf/agent/modules/memory/exception/NullSliceListException.java b/src/main/java/work/slhaf/agent/core/memory/exception/NullSliceListException.java similarity index 74% rename from src/main/java/work/slhaf/agent/modules/memory/exception/NullSliceListException.java rename to src/main/java/work/slhaf/agent/core/memory/exception/NullSliceListException.java index eaa8b25a..595ec00c 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/exception/NullSliceListException.java +++ b/src/main/java/work/slhaf/agent/core/memory/exception/NullSliceListException.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.exception; +package work.slhaf.agent.core.memory.exception; public class NullSliceListException extends RuntimeException { public NullSliceListException(String message) { diff --git a/src/main/java/work/slhaf/agent/modules/memory/exception/UnExistedTopicException.java b/src/main/java/work/slhaf/agent/core/memory/exception/UnExistedTopicException.java similarity index 74% rename from src/main/java/work/slhaf/agent/modules/memory/exception/UnExistedTopicException.java rename to src/main/java/work/slhaf/agent/core/memory/exception/UnExistedTopicException.java index b620c202..6050b1c3 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/exception/UnExistedTopicException.java +++ b/src/main/java/work/slhaf/agent/core/memory/exception/UnExistedTopicException.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.exception; +package work.slhaf.agent.core.memory.exception; public class UnExistedTopicException extends RuntimeException { public UnExistedTopicException(String message) { diff --git a/src/main/java/work/slhaf/agent/modules/memory/node/MemoryNode.java b/src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java similarity index 91% rename from src/main/java/work/slhaf/agent/modules/memory/node/MemoryNode.java rename to src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java index 62932ca4..c47174d6 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/node/MemoryNode.java +++ b/src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java @@ -1,11 +1,11 @@ -package work.slhaf.agent.modules.memory.node; +package work.slhaf.agent.core.memory.node; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.agent.modules.memory.exception.NullSliceListException; -import work.slhaf.agent.modules.memory.pojo.MemorySlice; -import work.slhaf.agent.modules.memory.pojo.PersistableObject; +import work.slhaf.agent.core.memory.exception.NullSliceListException; +import work.slhaf.agent.core.memory.pojo.MemorySlice; +import work.slhaf.agent.core.memory.pojo.PersistableObject; import java.io.*; import java.nio.file.Files; diff --git a/src/main/java/work/slhaf/agent/modules/memory/node/TopicNode.java b/src/main/java/work/slhaf/agent/core/memory/node/TopicNode.java similarity index 80% rename from src/main/java/work/slhaf/agent/modules/memory/node/TopicNode.java rename to src/main/java/work/slhaf/agent/core/memory/node/TopicNode.java index c2e68f71..a84ca505 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/node/TopicNode.java +++ b/src/main/java/work/slhaf/agent/core/memory/node/TopicNode.java @@ -1,8 +1,8 @@ -package work.slhaf.agent.modules.memory.node; +package work.slhaf.agent.core.memory.node; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.agent.modules.memory.pojo.PersistableObject; +import work.slhaf.agent.core.memory.pojo.PersistableObject; import java.io.Serial; import java.util.concurrent.ConcurrentHashMap; diff --git a/src/main/java/work/slhaf/agent/modules/memory/pojo/MemoryResult.java b/src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java similarity index 80% rename from src/main/java/work/slhaf/agent/modules/memory/pojo/MemoryResult.java rename to src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java index 1788fef3..86d713d6 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/pojo/MemoryResult.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.pojo; +package work.slhaf.agent.core.memory.pojo; import lombok.Data; diff --git a/src/main/java/work/slhaf/agent/modules/memory/pojo/MemorySlice.java b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySlice.java similarity index 97% rename from src/main/java/work/slhaf/agent/modules/memory/pojo/MemorySlice.java rename to src/main/java/work/slhaf/agent/core/memory/pojo/MemorySlice.java index 03c5c4bd..79b69b8d 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/pojo/MemorySlice.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySlice.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.pojo; +package work.slhaf.agent.core.memory.pojo; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/src/main/java/work/slhaf/agent/modules/memory/pojo/MemorySliceResult.java b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java similarity index 78% rename from src/main/java/work/slhaf/agent/modules/memory/pojo/MemorySliceResult.java rename to src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java index bd58183c..2adb91e3 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/pojo/MemorySliceResult.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.pojo; +package work.slhaf.agent.core.memory.pojo; import lombok.Data; diff --git a/src/main/java/work/slhaf/agent/modules/memory/pojo/PersistableObject.java b/src/main/java/work/slhaf/agent/core/memory/pojo/PersistableObject.java similarity index 68% rename from src/main/java/work/slhaf/agent/modules/memory/pojo/PersistableObject.java rename to src/main/java/work/slhaf/agent/core/memory/pojo/PersistableObject.java index 78148d02..270a8400 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/pojo/PersistableObject.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/PersistableObject.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.pojo; +package work.slhaf.agent.core.memory.pojo; import java.io.Serializable; diff --git a/src/main/java/work/slhaf/agent/modules/memory/pojo/User.java b/src/main/java/work/slhaf/agent/core/memory/pojo/User.java similarity index 77% rename from src/main/java/work/slhaf/agent/modules/memory/pojo/User.java rename to src/main/java/work/slhaf/agent/core/memory/pojo/User.java index 0fead634..8eed2a71 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/pojo/User.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/User.java @@ -1,4 +1,4 @@ -package work.slhaf.agent.modules.memory.pojo; +package work.slhaf.agent.core.memory.pojo; import lombok.Data; diff --git a/src/main/java/work/slhaf/agent/core/model/CoreModel.java b/src/main/java/work/slhaf/agent/core/model/CoreModel.java index b5667b49..e7c0d0e5 100644 --- a/src/main/java/work/slhaf/agent/core/model/CoreModel.java +++ b/src/main/java/work/slhaf/agent/core/model/CoreModel.java @@ -3,31 +3,41 @@ package work.slhaf.agent.core.model; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.agent.common.chat.pojo.ChatResponse; import work.slhaf.agent.common.config.Config; import work.slhaf.agent.common.model.Model; import work.slhaf.agent.common.model.ModelConstant; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.data.InteractionContext; import java.io.IOException; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class CoreModel extends Model { +public class CoreModel extends Model implements InteractionModule { public static final String MODEL_KEY = "core_model"; private static CoreModel coreModel; - private CoreModel(){} + private CoreModel() { + } public static CoreModel getInstance() throws IOException, ClassNotFoundException { if (coreModel == null) { Config config = Config.getConfig(); coreModel = new CoreModel(); - coreModel.setPrompt(ModelConstant.CORE_MODEL_PROMPT); - setModel(config, coreModel, MODEL_KEY, coreModel.getPrompt()); + setModel(config, coreModel, MODEL_KEY, ModelConstant.CORE_MODEL_PROMPT); log.info("CoreModel注册完毕..."); } return coreModel; } + @Override + public void execute(InteractionContext interactionContext) { + //TODO 需要拼接上下文之后再发送给主模型 + + ChatResponse res = runChat(interactionContext.getInput()); + interactionContext.setCoreResponse(res); + } } diff --git a/src/main/java/work/slhaf/agent/gateway/AgentWebSocketServer.java b/src/main/java/work/slhaf/agent/gateway/AgentWebSocketServer.java index 15c58448..922ee896 100644 --- a/src/main/java/work/slhaf/agent/gateway/AgentWebSocketServer.java +++ b/src/main/java/work/slhaf/agent/gateway/AgentWebSocketServer.java @@ -7,8 +7,8 @@ import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import work.slhaf.agent.Agent; -import work.slhaf.agent.core.interation.data.InteractionInputData; -import work.slhaf.agent.core.interation.data.InteractionOutputData; +import work.slhaf.agent.core.interaction.data.InteractionInputData; +import work.slhaf.agent.core.interaction.data.InteractionOutputData; import java.io.IOException; import java.net.InetSocketAddress; @@ -58,12 +58,12 @@ public class AgentWebSocketServer extends WebSocketServer implements MessageSend } @Override - public void sendMessage(String userInfo,String message) { - WebSocket webSocket = userSessions.get(userInfo); + public void sendMessage(InteractionOutputData outputData) { + WebSocket webSocket = userSessions.get(outputData.getUserInfo()); if (webSocket != null && webSocket.isOpen()) { - webSocket.send(JSONUtil.toJsonStr(new InteractionOutputData(message))); + webSocket.send(JSONUtil.toJsonStr(outputData)); }else { - log.warn("用户不在线: {}",userInfo); + log.warn("用户不在线: {}",outputData.getUserInfo()); } } } diff --git a/src/main/java/work/slhaf/agent/gateway/MessageSender.java b/src/main/java/work/slhaf/agent/gateway/MessageSender.java index 9131059f..f0079582 100644 --- a/src/main/java/work/slhaf/agent/gateway/MessageSender.java +++ b/src/main/java/work/slhaf/agent/gateway/MessageSender.java @@ -1,5 +1,7 @@ package work.slhaf.agent.gateway; +import work.slhaf.agent.core.interaction.data.InteractionOutputData; + public interface MessageSender { - void sendMessage(String userInfo,String message); + void sendMessage(InteractionOutputData outputData); } diff --git a/src/main/java/work/slhaf/agent/modules/memory/MemorySelector.java b/src/main/java/work/slhaf/agent/modules/memory/MemorySelector.java new file mode 100644 index 00000000..dd3f86ab --- /dev/null +++ b/src/main/java/work/slhaf/agent/modules/memory/MemorySelector.java @@ -0,0 +1,33 @@ +package work.slhaf.agent.modules.memory; + +import lombok.Data; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.data.InteractionContext; +import work.slhaf.agent.core.memory.MemoryManager; + +import java.io.IOException; + +@Data +public class MemorySelector implements InteractionModule { + + private static MemorySelector memorySelector; + + private MemoryManager memoryManager; + private SliceEvaluator sliceEvaluator; + + private MemorySelector(){} + + public static MemorySelector getInstance() throws IOException, ClassNotFoundException { + if (memorySelector == null) { + memorySelector = new MemorySelector(); + memorySelector.setMemoryManager(MemoryManager.getInstance()); + memorySelector.setSliceEvaluator(SliceEvaluator.getInstance()); + } + return memorySelector; + } + + @Override + public void execute(InteractionContext interactionContext) { + + } +} diff --git a/src/main/java/work/slhaf/agent/modules/memory/MemoryUpdater.java b/src/main/java/work/slhaf/agent/modules/memory/MemoryUpdater.java new file mode 100644 index 00000000..6c36f40c --- /dev/null +++ b/src/main/java/work/slhaf/agent/modules/memory/MemoryUpdater.java @@ -0,0 +1,33 @@ +package work.slhaf.agent.modules.memory; + +import lombok.Data; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.InteractionThreadPoolExecutor; +import work.slhaf.agent.core.interaction.data.InteractionContext; +import work.slhaf.agent.core.memory.MemoryManager; + +import java.io.IOException; + +@Data +public class MemoryUpdater implements InteractionModule { + + private static MemoryUpdater memoryUpdater; + + private MemoryManager memoryManager; + private InteractionThreadPoolExecutor executor; + + private MemoryUpdater(){} + + public static MemoryUpdater getInstance() throws IOException, ClassNotFoundException { + if (memoryUpdater == null) { + memoryUpdater = new MemoryUpdater(); + memoryUpdater.setMemoryManager(MemoryManager.getInstance()); + } + return memoryUpdater; + } + + @Override + public void execute(InteractionContext interactionContext) { + + } +} diff --git a/src/main/java/work/slhaf/agent/modules/memory/SliceEvaluator.java b/src/main/java/work/slhaf/agent/modules/memory/SliceEvaluator.java index 6c6a7044..e7e19478 100644 --- a/src/main/java/work/slhaf/agent/modules/memory/SliceEvaluator.java +++ b/src/main/java/work/slhaf/agent/modules/memory/SliceEvaluator.java @@ -19,12 +19,11 @@ public class SliceEvaluator extends Model { private SliceEvaluator(){} - public static SliceEvaluator initialize(Config config) throws IOException, ClassNotFoundException { - + public static SliceEvaluator getInstance() throws IOException, ClassNotFoundException { if (sliceEvaluator == null) { + Config config = Config.getConfig(); sliceEvaluator = new SliceEvaluator(); - sliceEvaluator.setPrompt(ModelConstant.SLICE_EVALUATOR_PROMPT); - setModel(config,sliceEvaluator, MODEL_KEY, sliceEvaluator.getPrompt()); + setModel(config,sliceEvaluator, MODEL_KEY, ModelConstant.SLICE_EVALUATOR_PROMPT); log.info("SliceEvaluator注册完毕..."); } diff --git a/src/main/java/work/slhaf/agent/modules/preprocess/PreprocessExecutor.java b/src/main/java/work/slhaf/agent/modules/preprocess/PreprocessExecutor.java index 995b4de9..d7ff071c 100644 --- a/src/main/java/work/slhaf/agent/modules/preprocess/PreprocessExecutor.java +++ b/src/main/java/work/slhaf/agent/modules/preprocess/PreprocessExecutor.java @@ -1,7 +1,7 @@ package work.slhaf.agent.modules.preprocess; -import work.slhaf.agent.core.interation.data.InteractionInputData; -import work.slhaf.module.InteractionContext; +import work.slhaf.agent.core.interaction.data.InteractionContext; +import work.slhaf.agent.core.interaction.data.InteractionInputData; public class PreprocessExecutor { @@ -18,11 +18,13 @@ public class PreprocessExecutor { public InteractionContext execute(InteractionInputData inputData) { InteractionContext context = new InteractionContext(); - context.setDateTime(inputData.getLocalDateTime()); - context.setFinished(false); - context.setInput(inputData.getContent()); + context.setUserInfo(inputData.getUserInfo()); context.setUserNickname(inputData.getUserNickName()); + context.setDateTime(inputData.getLocalDateTime()); + + context.setFinished(false); + context.setInput(inputData.getContent()); return context; } diff --git a/src/main/java/work/slhaf/agent/modules/task/TaskEvaluator.java b/src/main/java/work/slhaf/agent/modules/task/TaskEvaluator.java index afffacb7..28338654 100644 --- a/src/main/java/work/slhaf/agent/modules/task/TaskEvaluator.java +++ b/src/main/java/work/slhaf/agent/modules/task/TaskEvaluator.java @@ -1,4 +1,27 @@ package work.slhaf.agent.modules.task; -public class TaskEvaluator { +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.agent.common.config.Config; +import work.slhaf.agent.common.config.ModelConfig; +import work.slhaf.agent.common.model.Model; +import work.slhaf.agent.common.model.ModelConstant; + +import java.io.IOException; + +@EqualsAndHashCode(callSuper = true) +@Data +public class TaskEvaluator extends Model { + public static final String MODEL_KEY = "task_evaluator"; + private static TaskEvaluator taskEvaluator; + + private TaskEvaluator (){} + + public static TaskEvaluator getInstance() throws IOException, ClassNotFoundException { + if (taskEvaluator == null) { + taskEvaluator = new TaskEvaluator(); + setModel(Config.getConfig(),taskEvaluator,MODEL_KEY,ModelConstant.TASK_EVALUATOR_PROMPT); + } + return taskEvaluator; + } } diff --git a/src/main/java/work/slhaf/agent/modules/task/TaskExecutor.java b/src/main/java/work/slhaf/agent/modules/task/TaskExecutor.java index d6ac4a5b..96c07bf0 100644 --- a/src/main/java/work/slhaf/agent/modules/task/TaskExecutor.java +++ b/src/main/java/work/slhaf/agent/modules/task/TaskExecutor.java @@ -1,4 +1,20 @@ package work.slhaf.agent.modules.task; +import lombok.Data; +import work.slhaf.agent.core.interaction.InteractionThreadPoolExecutor; + +@Data public class TaskExecutor { + + private static TaskExecutor taskExecutor; + private InteractionThreadPoolExecutor executor; + private TaskExecutor(){} + + public static TaskExecutor getInstance(){ + if (taskExecutor == null){ + taskExecutor = new TaskExecutor(); + taskExecutor.setExecutor(InteractionThreadPoolExecutor.getInstance()); + } + return taskExecutor; + } } diff --git a/src/main/java/work/slhaf/agent/modules/task/TaskScheduler.java b/src/main/java/work/slhaf/agent/modules/task/TaskScheduler.java index 0d38cf17..f07c4232 100644 --- a/src/main/java/work/slhaf/agent/modules/task/TaskScheduler.java +++ b/src/main/java/work/slhaf/agent/modules/task/TaskScheduler.java @@ -1,31 +1,22 @@ package work.slhaf.agent.modules.task; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.agent.common.config.Config; -import work.slhaf.agent.common.model.Model; -import work.slhaf.agent.common.model.ModelConstant; -import work.slhaf.module.InteractionContext; -import work.slhaf.module.InteractionModule; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.data.InteractionContext; import java.io.IOException; -@EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class TaskScheduler extends Model implements InteractionModule { - public static final String MODEL_KEY = "task_trigger"; +public class TaskScheduler implements InteractionModule { private static TaskScheduler taskScheduler; private TaskScheduler(){} public static TaskScheduler getInstance() throws IOException, ClassNotFoundException { if (taskScheduler == null) { - Config config = Config.getConfig(); taskScheduler = new TaskScheduler(); - taskScheduler.setPrompt(ModelConstant.SLICE_EVALUATOR_PROMPT); - setModel(config, taskScheduler, MODEL_KEY, taskScheduler.getPrompt()); log.info("TaskScheduler注册完毕..."); } diff --git a/src/main/java/work/slhaf/agent/modules/task/data/TaskData.java b/src/main/java/work/slhaf/agent/modules/task/data/TaskData.java new file mode 100644 index 00000000..73e897d6 --- /dev/null +++ b/src/main/java/work/slhaf/agent/modules/task/data/TaskData.java @@ -0,0 +1,31 @@ +package work.slhaf.agent.modules.task.data; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class TaskData implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 执行类别: 即时任务/定时任务 + */ + private String executeType; + + /** + * cron表达式,仅定时任务需要填写 + */ + private String cronStr; + private String comment; + + public static class Constant { + public static final String CURRENT = "current"; + public static final String SCHEDULE = "schedule"; + } +} diff --git a/src/main/java/work/slhaf/agent/modules/topic/TopicExtractor.java b/src/main/java/work/slhaf/agent/modules/topic/TopicExtractor.java index 60894faf..6ec36f5a 100644 --- a/src/main/java/work/slhaf/agent/modules/topic/TopicExtractor.java +++ b/src/main/java/work/slhaf/agent/modules/topic/TopicExtractor.java @@ -2,11 +2,14 @@ package work.slhaf.agent.modules.topic; import lombok.Data; import lombok.EqualsAndHashCode; +import work.slhaf.agent.common.chat.constant.ChatConstant; +import work.slhaf.agent.common.chat.pojo.ChatResponse; +import work.slhaf.agent.common.chat.pojo.Message; import work.slhaf.agent.common.config.Config; import work.slhaf.agent.common.model.Model; import work.slhaf.agent.common.model.ModelConstant; -import work.slhaf.module.InteractionContext; -import work.slhaf.module.InteractionModule; +import work.slhaf.agent.core.interaction.InteractionModule; +import work.slhaf.agent.core.interaction.data.InteractionContext; import java.io.IOException; @@ -23,8 +26,7 @@ public class TopicExtractor extends Model implements InteractionModule { if (topicExtractor == null) { Config config = Config.getConfig(); topicExtractor = new TopicExtractor(); - topicExtractor.setPrompt(ModelConstant.SLICE_EVALUATOR_PROMPT); - setModel(config, topicExtractor, MODEL_KEY, topicExtractor.getPrompt()); + setModel(config, topicExtractor, MODEL_KEY, ModelConstant.TOPIC_EXTRACTOR_PROMPT); } return topicExtractor; @@ -32,6 +34,8 @@ public class TopicExtractor extends Model implements InteractionModule { @Override public void execute(InteractionContext interactionContext) { + String primaryMessageResponse = singleChat(interactionContext.getInput()).getMessage(); } + } diff --git a/src/test/java/memory/InsertTest.java b/src/test/java/memory/InsertTest.java index 4b8d759b..9bc058ff 100644 --- a/src/test/java/memory/InsertTest.java +++ b/src/test/java/memory/InsertTest.java @@ -2,10 +2,10 @@ package memory; import org.junit.Before; import org.junit.Test; -import work.slhaf.agent.modules.memory.MemoryGraph; -import work.slhaf.agent.modules.memory.pojo.MemorySlice; -import work.slhaf.agent.modules.memory.node.MemoryNode; -import work.slhaf.agent.modules.memory.node.TopicNode; +import work.slhaf.agent.core.memory.MemoryGraph; +import work.slhaf.agent.core.memory.pojo.MemorySlice; +import work.slhaf.agent.core.memory.node.MemoryNode; +import work.slhaf.agent.core.memory.node.TopicNode; import java.io.IOException; import java.time.LocalDate; diff --git a/src/test/java/memory/SearchTest.java b/src/test/java/memory/SearchTest.java index 08864488..2b60d21e 100644 --- a/src/test/java/memory/SearchTest.java +++ b/src/test/java/memory/SearchTest.java @@ -2,12 +2,12 @@ package memory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import work.slhaf.agent.modules.memory.MemoryGraph; -import work.slhaf.agent.modules.memory.pojo.MemorySlice; -import work.slhaf.agent.modules.memory.exception.UnExistedTopicException; -import work.slhaf.agent.modules.memory.node.MemoryNode; -import work.slhaf.agent.modules.memory.node.TopicNode; -import work.slhaf.agent.modules.memory.pojo.MemoryResult; +import work.slhaf.agent.core.memory.MemoryGraph; +import work.slhaf.agent.core.memory.pojo.MemorySlice; +import work.slhaf.agent.core.memory.exception.UnExistedTopicException; +import work.slhaf.agent.core.memory.node.MemoryNode; +import work.slhaf.agent.core.memory.node.TopicNode; +import work.slhaf.agent.core.memory.pojo.MemoryResult; import java.io.IOException; import java.time.LocalDate;