Spring AI 聊天记忆(Chat Memory)技术详解与最佳实践
Chat Memory(聊天记忆)是指在与大语言模型(LLM)交互时,系统为每个会话维护的上下文信息,用以提升模型对多轮对话的理解能力。相比于 Chat History(聊天历史,完整记录所有消息),Chat Memory 关注于「对当前上下文有用的消息集合」,可根据策略裁剪、持久化或分布式存储。Spring AI 的 Chat Memory 机制为 LLM 应用开发提供了高效、可扩展、易用的上下
Spring AI 聊天记忆(Chat Memory)技术详解与最佳实践
本文围绕 Spring AI 的 Chat Memory 机制,结合名词解释、发展历史、架构原理、实战应用与 mermaid 流程图、状态图、时序图等可视化方式,系统性梳理 LLM 聊天记忆的原理与最佳落地方式。适合 AI 应用开发者、架构师、产品经理等技术人员速读速记。
一、概述
1.1 什么是 Chat Memory?
Chat Memory(聊天记忆)是指在与大语言模型(LLM)交互时,系统为每个会话维护的上下文信息,用以提升模型对多轮对话的理解能力。相比于 Chat History(聊天历史,完整记录所有消息),Chat Memory 关注于「对当前上下文有用的消息集合」,可根据策略裁剪、持久化或分布式存储。
1.2 为什么需要 Chat Memory?
大语言模型本身是无状态的(stateless),每次调用都无法自动记住历史对话内容。这导致:
- 用户多轮提问时,模型无法回忆先前已知信息。
- 复杂任务(如工具调用、流程管理)需要跨轮记忆。
- 长对话可能超出模型输入长度(token limit),需要智能裁剪。
因此,Chat Memory 是 AI 应用开发的基础设施。
二、名词解释与架构原理
| 名词 | 解释 |
|---|---|
| Chat Memory | 用于维护 LLM 交互上下文的消息集合,支持裁剪、存储、检索等策略。 |
| Chat History | 完整的会话消息记录,通常用于审计、分析、回溯等场景。 |
| ChatMemory | Spring AI 的聊天记忆抽象接口,负责管理消息窗口与记忆操作。 |
| ChatMemoryRepository | 聊天记忆存储层抽象,支持多种后端(内存、JDBC、Mongo、Cassandra、Neo4j、CosmosDB等)。 |
| MessageWindowChatMemory | 基于消息窗口的记忆策略,只保留最近 N 条消息。 |
| Advisor | Spring AI 的记忆增强器,用于自动将记忆内容拼接到 Prompt 或消息流。 |
| PromptTemplate | 系统消息渲染模板,可自定义记忆内容与系统指令的拼接方式。 |
三、发展历史与项目背景
3.1 发展历程
- 早期 LLM 无状态问题:GPT-3、ChatGPT 等模型无原生记忆,每次调用需传入完整上下文。
- AI 应用开发痛点:多轮对话、工具调用、流程管理等场景需要记忆机制。
- Spring AI 记忆系统:Spring AI 结合 Spring 生态,抽象出 ChatMemory 和 ChatMemoryRepository,实现灵活可插拔的记忆存储层。
3.2 相关权威资料
四、Chat Memory 结构与流程图解
4.1 架构总览(Flowchart)
flowchart TD
subgraph 用户
U1[用户输入]
end
subgraph 应用层
A1[ChatClient/ChatModel]
A2[Advisor(记忆增强器)]
end
subgraph 记忆层
M1[ChatMemory]
M2[ChatMemoryRepository]
end
subgraph 存储后端
S1[InMemory]
S2[JDBC]
S3[MongoDB]
S4[Cassandra]
S5[Neo4j]
S6[CosmosDB]
end
U1-->A1
A1-->A2
A2-->M1
M1-->M2
M2-->|自动装配|S1
M2-->|可配置|S2
M2-->|可配置|S3
M2-->|可配置|S4
M2-->|可配置|S5
M2-->|可配置|S6
M1-->|上下文|A1
A1-->|Prompt|LLM[大语言模型]
LLM-->A1
A1-->U1
说明:用户输入经过应用层(ChatClient/ChatModel),由 Advisor 自动注入记忆内容,ChatMemory 管理消息窗口,ChatMemoryRepository 提供多后端存储,最终生成 Prompt 发给 LLM。
4.2 消息窗口记忆状态转移(StateDiagram)
说明:记忆窗口随消息增加而扩展,超出最大消息数时自动裁剪,支持会话关闭或消息过期(TTL),保证资源可控。
4.3 多轮对话时序(SequenceDiagram)
sequenceDiagram
participant User as 用户
participant Client as ChatClient
participant Advisor as MessageChatMemoryAdvisor
participant Memory as ChatMemory
participant Repo as ChatMemoryRepository
participant LLM as 大语言模型
User->>Client: 输入消息1
Client->>Advisor: 请求记忆增强
Advisor->>Memory: 获取会话记忆
Memory->>Repo: 拉取消息窗口
Repo-->>Memory: 返回消息列表
Memory-->>Advisor: 提供消息窗口
Advisor->>Client: 拼接上下文
Client->>LLM: 发送消息+记忆
LLM-->>Client: 回复
Client->>Memory: 追加新回复
Memory->>Repo: 持久化消息
User->>Client: 输入消息2
...(重复流程)
说明:每次用户输入,ChatClient 调用 Advisor 拼接记忆窗口,Memory 负责拉取和追加消息,Repo 负责存储,LLM 获得完整上下文。
五、实践应用代码速记
5.1 自动装配与自定义
自动装配(默认内存存储)
@Autowired
ChatMemory chatMemory;
@Autowired
ChatMemoryRepository chatMemoryRepository;
自定义 JDBC 存储
@Autowired
JdbcChatMemoryRepository chatMemoryRepository;
ChatMemory chatMemory = MessageWindowChatMemory.builder()
.chatMemoryRepository(chatMemoryRepository)
.maxMessages(10)
.build();
自定义 MongoDB 存储
@Autowired
MongoChatMemoryRepository chatMemoryRepository;
ChatMemory chatMemory = MessageWindowChatMemory.builder()
.chatMemoryRepository(chatMemoryRepository)
.maxMessages(10)
.build();
5.2 ChatClient 结合记忆
ChatMemory chatMemory = MessageWindowChatMemory.builder().build();
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
.build();
String conversationId = "007";
chatClient.prompt()
.user("Do I have license to code?")
.advisors(a -> a.param(ChatMemory.CONVERSATION_ID, conversationId))
.call()
.content();
六、系统性认知速记口
- Chat Memory 不是 Chat History,只保留对当前上下文有用的消息。
- Spring AI 提供 ChatMemory 抽象,支持多种存储后端,易于扩展与持久化。
- Advisor 自动拼接记忆窗口到模型输入,无需手动管理上下文。
- 记忆窗口可按消息数、时间、token 数量裁剪,灵活适配不同场景。
- 可自定义 PromptTemplate 合并系统消息与记忆内容,提升对话质量。
- 持久化后端支持分布式、审计、规模化应用需要(如 MongoDB、Cassandra)。
- 记忆机制是多轮对话、工具调用、上下文感知 AI 应用的核心基础设施。
七、参考资料
八、总结与展望
Spring AI 的 Chat Memory 机制为 LLM 应用开发提供了高效、可扩展、易用的上下文管理能力。通过灵活配置存储后端、自动拼接记忆窗口、可插拔增强器(Advisor),开发者可轻松实现多轮对话、工具调用、流程管理等高级 AI 场景。未来,随着 LLM 生态发展,记忆机制将进一步支持更智能的裁剪、分布式协作与隐私保护,成为 AI 应用的基础设施之一。
本文如需转载,请注明出处。欢迎关注、交流 AI 应用开发相关问题!
更多推荐



所有评论(0)