上篇文章,主要是簡單講解了一下文本對話的功能。由于模型不具備上下文記憶功能,只能一問一答。因此我們需要實現記憶對話功能,這樣大模型回答信息才能夠更加準確。
1、pom依賴
項目構建就不詳細說了,大家可以參考上篇 文本對話 文章。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId></dependency>
2、修改ChatConfig類
@Component
public class ChatConfig {@Beanpublic ChatMemory chatMemory() {// 默認存儲最近的 10 條消息return MessageWindowChatMemory.builder().maxMessages(10).build();}@Beanpublic ChatClient init(OpenAiChatModel chatModel, ChatMemory chatMemory) {return ChatClient.builder(chatModel).defaultSystem("你是一個智能助手,請以友好的語氣回答問題。").defaultAdvisors(new SimpleLoggerAdvisor(),MessageChatMemoryAdvisor.builder(chatMemory).build()).build();}
}
這里我這邊采用了內存形式存儲消息。Spring AI 除此之外還提供了其他的消息存儲方式,詳細內容可以參考 https://docs.spring.io/spring-ai/reference/api/chat-memory.html
3、ChatController類
@RestController
@RequestMapping(value = "/api/chat")
public class ChatController {@Resourceprivate ChatClient chatClient;@GetMapping("/chat")public String chat(@RequestParam(value = "message") String message,@RequestParam(value = "chatId") String chatId) {return chatClient.prompt(message).advisors(a -> a.param(ChatMemory.CONVERSATION_ID, chatId)).call().content();}
}
參數中的chatId,可以根據自己的實際場景去設定,一般是一個會話頁面。
以上功能就可以實現會話記憶功能了。