Ver Fonte

feat:实现使用默认的MessageChatMemoryAdvisor进行消息历史存储;使用MessageWindowChatMemory作为消息的存储对象;

yangyi há 7 meses atrás
pai
commit
22326af225

+ 37 - 0
src/main/java/space/anyi/springAiAlibabaLearn/controller/ChatMemoryController.java

@@ -0,0 +1,37 @@
+package space.anyi.springAiAlibabaLearn.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
+import org.springframework.ai.chat.memory.ChatMemory;
+import org.springframework.ai.chat.memory.MessageWindowChatMemory;
+import org.springframework.ai.chat.model.ChatModel;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/chatMemory")
+public class ChatMemoryController {
+    private final Logger log = LoggerFactory.getLogger(ChatMemoryController.class);
+    private final ChatClient chatClient;
+
+    public ChatMemoryController(ChatModel chatModel) {
+        //存储消息的对象
+        MessageWindowChatMemory messageWindowChatMemory = MessageWindowChatMemory.builder().build();
+        //使用默认的MessageChatMemoryAdvisor进行消息存储
+        MessageChatMemoryAdvisor messageChatMemoryAdvisor = MessageChatMemoryAdvisor.builder(messageWindowChatMemory).build();
+        this.chatClient = ChatClient.builder(chatModel).defaultAdvisors(messageChatMemoryAdvisor).build();
+    }
+    @GetMapping("/chat")
+    public String chat(@RequestParam("message") String message){
+        return chatClient
+                .prompt(message)
+                //配置对话上下文,配置对话的ID
+                .advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID,"yangyi"))
+                .call()
+                .content();
+    }
+}