diff --git a/pom.xml b/pom.xml index 32b2b406..568bfbcc 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,11 @@ fastjson 2.0.56 + + commons-io + commons-io + 2.18.0 + junit junit diff --git a/src/main/java/work/slhaf/chat/ChatClient.java b/src/main/java/work/slhaf/agent/core/chat/ChatClient.java similarity index 86% rename from src/main/java/work/slhaf/chat/ChatClient.java rename to src/main/java/work/slhaf/agent/core/chat/ChatClient.java index 7c52924a..cfff970e 100644 --- a/src/main/java/work/slhaf/chat/ChatClient.java +++ b/src/main/java/work/slhaf/agent/core/chat/ChatClient.java @@ -1,15 +1,15 @@ -package work.slhaf.chat; +package work.slhaf.agent.core.chat; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; import lombok.Data; import lombok.NoArgsConstructor; -import work.slhaf.chat.constant.Constant; -import work.slhaf.chat.pojo.ChatBody; -import work.slhaf.chat.pojo.ChatResponse; -import work.slhaf.chat.pojo.Message; -import work.slhaf.chat.pojo.PrimaryChatResponse; +import work.slhaf.agent.core.chat.constant.Constant; +import work.slhaf.agent.core.chat.pojo.ChatBody; +import work.slhaf.agent.core.chat.pojo.ChatResponse; +import work.slhaf.agent.core.chat.pojo.Message; +import work.slhaf.agent.core.chat.pojo.PrimaryChatResponse; import java.util.List; diff --git a/src/main/java/work/slhaf/chat/constant/Constant.java b/src/main/java/work/slhaf/agent/core/chat/constant/Constant.java similarity index 93% rename from src/main/java/work/slhaf/chat/constant/Constant.java rename to src/main/java/work/slhaf/agent/core/chat/constant/Constant.java index ee18e9fe..babe5f93 100644 --- a/src/main/java/work/slhaf/chat/constant/Constant.java +++ b/src/main/java/work/slhaf/agent/core/chat/constant/Constant.java @@ -1,4 +1,4 @@ -package work.slhaf.chat.constant; +package work.slhaf.agent.core.chat.constant; public class Constant { diff --git a/src/main/java/work/slhaf/chat/pojo/ChatBody.java b/src/main/java/work/slhaf/agent/core/chat/pojo/ChatBody.java similarity index 91% rename from src/main/java/work/slhaf/chat/pojo/ChatBody.java rename to src/main/java/work/slhaf/agent/core/chat/pojo/ChatBody.java index bab09a6f..03544b1f 100644 --- a/src/main/java/work/slhaf/chat/pojo/ChatBody.java +++ b/src/main/java/work/slhaf/agent/core/chat/pojo/ChatBody.java @@ -1,4 +1,4 @@ -package work.slhaf.chat.pojo; +package work.slhaf.agent.core.chat.pojo; import lombok.*; diff --git a/src/main/java/work/slhaf/chat/pojo/ChatResponse.java b/src/main/java/work/slhaf/agent/core/chat/pojo/ChatResponse.java similarity index 88% rename from src/main/java/work/slhaf/chat/pojo/ChatResponse.java rename to src/main/java/work/slhaf/agent/core/chat/pojo/ChatResponse.java index cbb7854a..01ebc699 100644 --- a/src/main/java/work/slhaf/chat/pojo/ChatResponse.java +++ b/src/main/java/work/slhaf/agent/core/chat/pojo/ChatResponse.java @@ -1,4 +1,4 @@ -package work.slhaf.chat.pojo; +package work.slhaf.agent.core.chat.pojo; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/work/slhaf/chat/pojo/Message.java b/src/main/java/work/slhaf/agent/core/chat/pojo/Message.java similarity index 81% rename from src/main/java/work/slhaf/chat/pojo/Message.java rename to src/main/java/work/slhaf/agent/core/chat/pojo/Message.java index dcc1008a..938a5204 100644 --- a/src/main/java/work/slhaf/chat/pojo/Message.java +++ b/src/main/java/work/slhaf/agent/core/chat/pojo/Message.java @@ -1,4 +1,4 @@ -package work.slhaf.chat.pojo; +package work.slhaf.agent.core.chat.pojo; import lombok.*; diff --git a/src/main/java/work/slhaf/chat/pojo/PrimaryChatResponse.java b/src/main/java/work/slhaf/agent/core/chat/pojo/PrimaryChatResponse.java similarity index 98% rename from src/main/java/work/slhaf/chat/pojo/PrimaryChatResponse.java rename to src/main/java/work/slhaf/agent/core/chat/pojo/PrimaryChatResponse.java index a28f1fc9..4ef35093 100644 --- a/src/main/java/work/slhaf/chat/pojo/PrimaryChatResponse.java +++ b/src/main/java/work/slhaf/agent/core/chat/pojo/PrimaryChatResponse.java @@ -1,4 +1,4 @@ -package work.slhaf.chat.pojo; +package work.slhaf.agent.core.chat.pojo; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/work/slhaf/agent/core/config/Config.java b/src/main/java/work/slhaf/agent/core/config/Config.java new file mode 100644 index 00000000..7caf4f2f --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/config/Config.java @@ -0,0 +1,92 @@ +package work.slhaf.agent.core.config; + +import cn.hutool.json.JSONUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import work.slhaf.agent.core.models.core.CoreModel; +import work.slhaf.agent.core.models.slice.SliceEvaluator; +import work.slhaf.agent.core.models.task.TaskTrigger; +import work.slhaf.agent.core.models.topic.TopicExtractor; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Scanner; + +@Data +@Slf4j +public class Config { + + private static final String CONFIG_FILE_PATH = "./data/config/config.json"; + private static Config config; + + private String agentId; + + private HashMap modelConfig; + + private WebSocketConfig webSocketConfig; + + public static Config load() throws IOException { + if (config == null) { + File file = new File(CONFIG_FILE_PATH); + if (file.exists()) { + config = JSONUtil.readJSONObject(file, StandardCharsets.UTF_8).toBean(Config.class); + } else { + Config tempConfig = new Config(); + Scanner scanner = new Scanner(System.in); + + System.out.print("输入智能体名称: "); + tempConfig.setAgentId(scanner.nextLine()); + + System.out.println("\r\n--------模型配置--------\r\n"); + HashMap modelConfig = new HashMap<>(); + for (int i = 0; i < 4; i++) { + String modelKey = switch (i) { + case 0 -> { + System.out.println("CoreModel:"); + yield CoreModel.MODEL_KEY; + } + case 1 -> { + System.out.println("SliceEvaluator:"); + yield SliceEvaluator.MODEL_KEY; + } + case 2 -> { + System.out.println("TaskTrigger:"); + yield TaskTrigger.MODEL_KEY; + } + case 3 -> { + System.out.println("TopicExtractor:"); + yield TopicExtractor.MODEL_KEY; + } + default -> throw new RuntimeException(); + }; + System.out.println(modelKey); + ModelConfig temp = new ModelConfig(); + System.out.print("apikey: "); + temp.setApikey(scanner.nextLine()); + System.out.print("baseUrl: "); + temp.setBaseUrl(scanner.nextLine()); + System.out.print("model: "); + temp.setModel(scanner.nextLine()); + + modelConfig.put(modelKey, temp); + } + tempConfig.setModelConfig(modelConfig); + + System.out.println("\r\n--------服务配置--------\r\n"); + System.out.print("WebSocket port: "); + WebSocketConfig wsConfig = new WebSocketConfig(); + wsConfig.setPort(scanner.nextInt()); + + //保存配置文件 + String str = JSONUtil.toJsonPrettyStr(tempConfig); + FileUtils.writeStringToFile(file,str,StandardCharsets.UTF_8); + log.info("配置已保存"); + config = tempConfig; + } + } + return config; + } +} diff --git a/src/main/java/work/slhaf/agent/core/config/ModelConfig.java b/src/main/java/work/slhaf/agent/core/config/ModelConfig.java new file mode 100644 index 00000000..3ae849e3 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/config/ModelConfig.java @@ -0,0 +1,10 @@ +package work.slhaf.agent.core.config; + +import lombok.Data; + +@Data +public class ModelConfig { + private String apikey; + private String baseUrl; + private String model; +} diff --git a/src/main/java/work/slhaf/agent/core/config/WebSocketConfig.java b/src/main/java/work/slhaf/agent/core/config/WebSocketConfig.java new file mode 100644 index 00000000..2414b941 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/config/WebSocketConfig.java @@ -0,0 +1,8 @@ +package work.slhaf.agent.core.config; + +import lombok.Data; + +@Data +public class WebSocketConfig { + private Integer port; +} diff --git a/src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java b/src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java index 7c321608..812fbd2a 100644 --- a/src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java +++ b/src/main/java/work/slhaf/agent/core/memory/MemoryGraph.java @@ -3,11 +3,12 @@ package work.slhaf.agent.core.memory; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.agent.core.memory.content.MemorySlice; +import work.slhaf.agent.core.chat.pojo.Message; 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; @@ -88,6 +89,16 @@ public class MemoryGraph extends PersistableObject { */ private LocalDate cacheDate; + /** + * 智能体涉及到的各个模块中模型的prompt + */ + private HashMap modelPrompt; + + /** + * 主模型的聊天记录 + */ + private List chatMessages; + public MemoryGraph(String id) { this.id = id; this.topicNodes = new HashMap<>(); @@ -96,6 +107,7 @@ public class MemoryGraph extends PersistableObject { this.staticMemory = new HashMap<>(); this.memoryNodeCacheCounter = new ConcurrentHashMap<>(); this.memorySliceCache = new ConcurrentHashMap<>(); + this.modelPrompt = new HashMap<>(); } public static MemoryGraph initialize(String id) { @@ -104,18 +116,20 @@ public class MemoryGraph extends PersistableObject { Path filePath = getFilePath(id); - if (Files.exists(filePath)) { + if (memoryGraph == null && Files.exists(filePath)) { try { // 从文件加载 - return deserialize(id); + memoryGraph = deserialize(id); } catch (Exception e) { - System.err.println("加载序列化文件失败,创建新实例: " + e.getMessage()); - return new MemoryGraph(id); + log.error("加载序列化文件失败,创建新实例"); + System.exit(1); } } else { // 创建新实例 - return new MemoryGraph(id); + memoryGraph = new MemoryGraph(id); } + + return memoryGraph; } public void serialize() { diff --git a/src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java b/src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java index 89c2d176..aaf3ab3c 100644 --- a/src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java +++ b/src/main/java/work/slhaf/agent/core/memory/node/MemoryNode.java @@ -3,8 +3,8 @@ package work.slhaf.agent.core.memory.node; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; -import work.slhaf.agent.core.memory.content.MemorySlice; 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.*; diff --git a/src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java b/src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java index a50337ed..86d713d6 100644 --- a/src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/MemoryResult.java @@ -1,7 +1,6 @@ package work.slhaf.agent.core.memory.pojo; import lombok.Data; -import work.slhaf.agent.core.memory.content.MemorySlice; import java.util.List; diff --git a/src/main/java/work/slhaf/agent/core/memory/content/MemorySlice.java b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySlice.java similarity index 91% rename from src/main/java/work/slhaf/agent/core/memory/content/MemorySlice.java rename to src/main/java/work/slhaf/agent/core/memory/pojo/MemorySlice.java index d5238f26..d497b524 100644 --- a/src/main/java/work/slhaf/agent/core/memory/content/MemorySlice.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySlice.java @@ -1,9 +1,8 @@ -package work.slhaf.agent.core.memory.content; +package work.slhaf.agent.core.memory.pojo; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.chat.pojo.Message; -import work.slhaf.agent.core.memory.pojo.PersistableObject; +import work.slhaf.agent.core.chat.pojo.Message; import java.io.Serial; import java.util.List; diff --git a/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java index 871c9c92..2adb91e3 100644 --- a/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java +++ b/src/main/java/work/slhaf/agent/core/memory/pojo/MemorySliceResult.java @@ -1,7 +1,6 @@ package work.slhaf.agent.core.memory.pojo; import lombok.Data; -import work.slhaf.agent.core.memory.content.MemorySlice; @Data public class MemorySliceResult { diff --git a/src/main/java/work/slhaf/agent/core/models/common/Model.java b/src/main/java/work/slhaf/agent/core/models/common/Model.java new file mode 100644 index 00000000..9b44c524 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/models/common/Model.java @@ -0,0 +1,39 @@ +package work.slhaf.agent.core.models.common; + +import lombok.Data; +import work.slhaf.agent.core.chat.ChatClient; +import work.slhaf.agent.core.chat.constant.Constant; +import work.slhaf.agent.core.chat.pojo.Message; +import work.slhaf.agent.core.config.Config; +import work.slhaf.agent.core.config.ModelConfig; +import work.slhaf.agent.core.memory.MemoryGraph; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class Model { + protected ChatClient chatClient; + protected String prompt; + protected List messages; + + protected static void setModel(Config config, Model model, String model_key, String prompt) { + MemoryGraph memoryGraph = MemoryGraph.initialize(config.getAgentId()); + ModelConfig modelConfig = config.getModelConfig().get(model_key); + if (memoryGraph.getModelPrompt().containsKey(model_key)) { + model.setPrompt(memoryGraph.getModelPrompt().get(model_key)); + } else { + model.setPrompt(prompt); + memoryGraph.getModelPrompt().put(model_key, prompt); + } + if (memoryGraph.getChatMessages() == null) { + List tempMessages = new ArrayList<>(); + tempMessages.add(new Message(Constant.Character.SYSTEM, model.getPrompt())); + model.setMessages(tempMessages); + memoryGraph.setChatMessages(tempMessages); + } else { + model.setMessages(memoryGraph.getChatMessages()); + } + model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel())); + } +} diff --git a/src/main/java/work/slhaf/agent/core/models/common/ModelConstant.java b/src/main/java/work/slhaf/agent/core/models/common/ModelConstant.java new file mode 100644 index 00000000..73ab37e6 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/models/common/ModelConstant.java @@ -0,0 +1,60 @@ +package work.slhaf.agent.core.models.common; + +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. **动态记忆更新**: + - 动态更新记忆时,要确保准确地记录用户的需求和变动。更新过程应具有透明性,并且在更新前可以询问用户确认。 + + 系统目标:始终提供最相关、最个性化的回复,并通过持续回顾与更新来提高系统的长期记忆能力。 + + """; +} diff --git a/src/main/java/work/slhaf/agent/core/models/core/CoreModel.java b/src/main/java/work/slhaf/agent/core/models/core/CoreModel.java new file mode 100644 index 00000000..50ee63f6 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/models/core/CoreModel.java @@ -0,0 +1,25 @@ +package work.slhaf.agent.core.models.core; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.agent.core.config.Config; +import work.slhaf.agent.core.models.common.Model; +import work.slhaf.agent.core.models.common.ModelConstant; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CoreModel extends Model { + + public static final String MODEL_KEY = "core_model"; + private static CoreModel coreModel; + + public static CoreModel initialize(Config config) { + if (coreModel == null) { + coreModel = new CoreModel(); + coreModel.setPrompt(ModelConstant.CORE_MODEL_PROMPT); + setModel(config, coreModel, MODEL_KEY, coreModel.getPrompt()); + } + return coreModel; + } + +} diff --git a/src/main/java/work/slhaf/agent/core/models/slice/SliceEvaluator.java b/src/main/java/work/slhaf/agent/core/models/slice/SliceEvaluator.java new file mode 100644 index 00000000..4ddfdc76 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/models/slice/SliceEvaluator.java @@ -0,0 +1,28 @@ +package work.slhaf.agent.core.models.slice; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.agent.core.config.Config; +import work.slhaf.agent.core.models.common.Model; +import work.slhaf.agent.core.models.common.ModelConstant; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SliceEvaluator extends Model { + public static final String MODEL_KEY = "slice_evaluator"; + + private static SliceEvaluator sliceEvaluator; + + public static SliceEvaluator initialize(Config config) { + + if (sliceEvaluator == null) { + sliceEvaluator = new SliceEvaluator(); + sliceEvaluator.setPrompt(ModelConstant.SLICE_EVALUATOR_PROMPT); + setModel(config,sliceEvaluator, MODEL_KEY, sliceEvaluator.getPrompt()); + } + + return sliceEvaluator; + } + + +} diff --git a/src/main/java/work/slhaf/agent/core/models/task/TaskTrigger.java b/src/main/java/work/slhaf/agent/core/models/task/TaskTrigger.java new file mode 100644 index 00000000..8820cc00 --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/models/task/TaskTrigger.java @@ -0,0 +1,25 @@ +package work.slhaf.agent.core.models.task; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.agent.core.config.Config; +import work.slhaf.agent.core.models.common.Model; +import work.slhaf.agent.core.models.common.ModelConstant; + +@EqualsAndHashCode(callSuper = true) +@Data +public class TaskTrigger extends Model { + public static final String MODEL_KEY = "task_trigger"; + private static TaskTrigger taskTrigger; + public static TaskTrigger initialize(Config config) { + + if (taskTrigger == null) { + taskTrigger = new TaskTrigger(); + taskTrigger.setPrompt(ModelConstant.SLICE_EVALUATOR_PROMPT); + setModel(config,taskTrigger, MODEL_KEY, taskTrigger.getPrompt()); + } + + return taskTrigger; + } + +} diff --git a/src/main/java/work/slhaf/agent/core/models/topic/TopicExtractor.java b/src/main/java/work/slhaf/agent/core/models/topic/TopicExtractor.java new file mode 100644 index 00000000..ec3a3e8a --- /dev/null +++ b/src/main/java/work/slhaf/agent/core/models/topic/TopicExtractor.java @@ -0,0 +1,26 @@ +package work.slhaf.agent.core.models.topic; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.agent.core.config.Config; +import work.slhaf.agent.core.models.common.Model; +import work.slhaf.agent.core.models.common.ModelConstant; + +@EqualsAndHashCode(callSuper = true) +@Data +public class TopicExtractor extends Model { + public static final String MODEL_KEY = "topic_extractor"; + private static TopicExtractor topicExtractor; + + public static TopicExtractor initialize(Config config) { + + if (topicExtractor == null) { + topicExtractor = new TopicExtractor(); + topicExtractor.setPrompt(ModelConstant.SLICE_EVALUATOR_PROMPT); + setModel(config,topicExtractor, MODEL_KEY, topicExtractor.getPrompt()); + } + + return topicExtractor; + } + +} diff --git a/src/test/java/memory/InsertTest.java b/src/test/java/memory/InsertTest.java index 970f777f..0c950cbf 100644 --- a/src/test/java/memory/InsertTest.java +++ b/src/test/java/memory/InsertTest.java @@ -3,7 +3,7 @@ package memory; import org.junit.Before; import org.junit.Test; import work.slhaf.agent.core.memory.MemoryGraph; -import work.slhaf.agent.core.memory.content.MemorySlice; +import work.slhaf.agent.core.memory.pojo.MemorySlice; import work.slhaf.agent.core.memory.node.MemoryNode; import work.slhaf.agent.core.memory.node.TopicNode; diff --git a/src/test/java/memory/SearchTest.java b/src/test/java/memory/SearchTest.java index f838d8f9..2b60d21e 100644 --- a/src/test/java/memory/SearchTest.java +++ b/src/test/java/memory/SearchTest.java @@ -3,7 +3,7 @@ package memory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import work.slhaf.agent.core.memory.MemoryGraph; -import work.slhaf.agent.core.memory.content.MemorySlice; +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;