RAG 实战:大模型的“会话记忆”到底是怎么实现的?
很多人第一次使用 ChatGPT 时,都会产生一种错觉:“AI 好像真的记得我之前说过的话。”
但当我真正开始做 RAG 项目后,我才发现:大模型其实根本“不记得”你。
所谓的“记忆”,本质上只是:应用层在每次请求时,把历史聊天记录重新发给模型。
而这也引出了 AI 应用开发里一个非常核心的问题:如何让模型“看起来有长期记忆”,同时又不让 Token 成本爆炸?
一、 大模型其实是“无状态”的
首先我们需要明确一个核心概念:大模型本身是无状态的(Stateless)。
每一次我们向大模型发起 API 请求,对它来说都是一次“初次见面”。模型并不会主动保存上一轮我们聊了什么。那么,为什么我们在 ChatGPT 或其他 AI 应用中能体验到连贯的对话呢?
这完全是应用层(代码侧)的功劳。所谓的“记忆”,本质上是开发者在每次发起请求时,将历史对话数据(Messages)重新封装,连同当前的问题一起打包发送给模型。模型通过“阅读”这些历史数据,才能接上之前的话题。因此,记忆的管理权完全掌握在我们的代码手中,而非模型侧。
二、为什么不能把全部聊天记录都发给模型?
既然记忆靠“堆砌”历史对话来实现,那是不是把每一次对话都完整保存下来发给模型就可以了呢?看似简单的方案,在实际工程中却会引发严重的Token 膨胀问题:
- 超出上下文窗口(Context Window Exceeded): 模型的输入长度是有上限的(如 4K、8K 或 128K)。如果无限制地累加历史对话,总 Token 数很快就会撑爆窗口,导致请求直接失败。
- 成本飙升(Skyrocketing Costs): 即使模型支持超长上下文,每次请求都携带大量重复的历史信息,也会造成极大的算力浪费和成本增加。
因此,记忆管理的核心挑战在于:如何在有限的 Token 预算内,智能筛选出高价值信息,而不是简单粗暴地堆砌。
三、 五种会话记忆方案
为了解决上述问题,业界演化出了多种记忆管理策略,它们各有优劣,适用于不同的场景:
- 完整历史策略: 保留所有对话历史。优点是信息最全,但 Token 消耗完全不可控,仅适用于极短的对话测试。
- 滑动窗口策略: 只保留最近 N 轮对话,更早的直接丢弃。实现简单且 Token 可控,但代价是模型会永久丢失早期的关键信息(比如用户一开始提到的名字)。
- Token 截断策略: 设定 Token 上限,从最新消息往前推算,超出部分直接砍掉。比滑动窗口控制得更精细,但同样面临丢失早期信息的风险。
- 摘要压缩策略: 利用大模型将早期的长篇对话压缩成简短摘要。这能在节省 Token 的同时保留核心信息,但实现复杂度较高,且摘要过程可能会丢失细节。
- 混合策略(推荐): 这是目前生产环境中最常用的方案。即“早期对话摘要 + 最近 N 轮完整对话”。通常将压缩后的摘要放在 System 消息里作为背景知识,同时保留最近几轮的原汁原味对话。这种方案完美兼顾了长期记忆(摘要)和短期精度(完整对话)。
四、 架构设计:如何在工程中优雅落地?
搞定了策略,接下来就是如何在代码架构中落地。这里梳理了一套比较成熟的 Token 预算分配与存储方案。
1. Token 预算分配优先级
构建 Prompt 就像整理行李箱,空间有限,必须按以下优先级“装东西”:
- 第一梯队(System Prompt): 定义角色与规则,这是模型的“人设”,不可省略。
- 第二梯队(预留生成空间): 必须给模型输出留出足够的 Token,防止回答到一半被截断。
- 第三梯队(最近 2~3 轮对话): 这是理解当前意图(比如用户说“它多少钱”里的“它”)的关键。
- 第四梯队(检索上下文): 如果是 RAG(检索增强生成)场景,这里放核心知识支撑。
- 第五梯队(更早的历史): 优先级最低,通过摘要压缩或者干脆丢弃处理。
2. 存储方案选型:Redis + MySQL 混合架构
为了兼顾读写速度和数据持久化,生产环境通常采用混合存储:
- Redis(热数据): 用来存储当前正在进行的会话消息列表。优势是读写极快,支持分布式,且自带 TTL(过期时间)机制,能自动清理过期会话。
- MySQL(冷数据): 异步归档历史对话。优势是持久化存储,方便后续做审计、数据分析或者用户回溯。
五、 生产环境的“避坑”注意事项
最后,在设计和实现记忆系统时,还有两个绝对不能忽视的细节:
- 会话超时与清理: 无论采用哪种存储方案,一定要设置会话过期时间。例如用户关掉页面或 30 分钟未操作,对话历史就应被清理以释放资源。Redis 的 TTL 或本地缓存(如 Caffeine)的过期机制都能很好地解决这个问题。
- 敏感信息处理: 对话中可能会包含用户的手机号、身份证号等隐私。存储时一定要考虑脱敏处理(如手机号掩码)或加密存储,并严格控制访问权限,记录访问日志,这是保障用户隐私的安全底线。
更多推荐


所有评论(0)