Spring AI 学习之路 对话记录(内存存储)
对话记录(内存存储)
在现代智能对话系统中,能够有效地记录和管理对话历史是至关重要的。它不仅帮助提升对话的上下文理解,还能优化用户体验,尤其是在需要跨多轮对话时。在 Spring AI 框架下,内存存储对话记录是一个简单但强大的方法,可以让我们更灵活地处理对话内容,进行状态跟踪和数据分析。今天,我们将探索如何利用 Spring AI 来实现内存存储的对话记录。
为什么需要对话记录?
在一个对话系统中,特别是多轮对话的场景下,每个对话回合都需要理解前文的内容以确保流畅的交互。如果没有对话记录,系统很难维持上下文,进而导致用户体验的下降。对话记录的作用体现在以下几个方面:
- 上下文保持:让系统能够记住并理解当前对话状态。
- 个性化推荐:根据用户历史记录,定制推荐内容和回应。
- 状态追踪:在多轮对话中维持用户的状态信息,避免重复询问。
- 错误分析:记录对话中出现的问题,便于后续的修复和优化。
内存存储与持久化存储的区别
在实现对话记录时,我们通常有两种选择:内存存储和持久化存储。
内存存储:对话历史保存在内存中,一旦应用停止或重启,所有数据都会丢失。适合用于临时、短期内的对话管理。
持久化存储:对话历史保存到数据库、文件或其他持久化介质中,能够在应用重启后恢复数据。适合用于长期的数据存储和分析。
在实际应用中,内存存储通常用于轻量级的对话系统,尤其是那些对持久化要求不高的场景。它的优势在于高效性和简易性。
使用 Spring AI 实现内存存储的对话记录
Spring AI 提供了一种高效的方法来实现这一点——通过 MessageChatMemoryAdvisor 来存储会话数据。
1. 添加 Spring AI 依赖
首先,确保你已经将 Spring AI 的相关依赖添加到你的 pom.xml 中,这里使用的是阿里的灵积AI服务。以下是一个常见的依赖配置:
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M5.1</version>
</dependency>
2. 创建 MessageChatMemoryAdvisor
MessageChatMemoryAdvisor 是 Spring AI 中用于处理会话历史记录的核心类。我们可以创建一个自定义的 MemoryAdvisor,并使用它来存储对话数据。
// ali
private final ChatModel chatModel;
// 模拟数据库存储会话和消息
private final ChatMemory chatMemory = new InMemoryChatMemory();
/**
* 根据会话id,从数据库中查找历史消息,并将消息作为上下文回答非流式相应。
*
* @param prompt 用户的提问
* @param sessionId 会话id
*/
@GetMapping(value = "chat/history")
public String chatWithHistory(@RequestParam String prompt,@RequestParam String sessionId) {
// 1. 如果需要存储会话和消息到数据库,自己可以实现ChatMemory接口,
// 这里使用InMemoryChatMemory,内存存储。
// 2. 传入会话id,MessageChatMemoryAdvisor会根据会话id去查找消息。
// 3. 只需要携带最近10条消息
var messageChatMemoryAdvisor = new MessageChatMemoryAdvisor(chatMemory, sessionId, 10);
return ChatClient.create(chatModel).prompt()
.user(prompt)
// MessageChatMemoryAdvisor会在消息发送给大模型之前,从ChatMemory中获取会话的历史消息,
// 然后一起发送给大模型。
.advisors(messageChatMemoryAdvisor)
.call()
.content();
}
历史消息的实现过程:
提供ChatMemory,通过sesssion id查找历史消息。MessageChatMemoryAdvisor会在运行时调用ChatMemory,通过会话id查找历史消息。然后把消息列表拼接到历史的消息中。
发送消息给大模型得到答案
提问演示
首先告诉大模型 "我是谁"如下所示
然后再向大模型提问该问题?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2017-02-28 git 学习之基础知识
2017-02-28 git 学习之什么是版本库
2017-02-28 orcale 之PL/SQL 控制语句