Spring AI 1.0版本 + 千问大模型之 文本记忆对话
上篇文章,主要是简单讲解了一下文本对话的功能。由于模型不具备上下文记忆功能,只能一问一答。因此我们需要实现记忆对话功能,这样大模型回答信息才能够更加准确。
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,可以根据自己的实际场景去设定,一般是一个会话页面。
以上功能就可以实现会话记忆功能了。