多轮对话为什么会失忆?记忆设计
作者:程序员马丁
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
到这里,RAG 系列的核心链路已经全部打通了:数据分块 → 元数据管理 → 向量化 → 向量数据库 → 检索策略 → 生成策略 → Function Call → MCP 协议。从数据准备到检索生成,再到工具调用,一条完整的链路。
但你把这套系统上线之后,用户很快就会给你提一个 bug:你们这个 AI 是不是没有记忆?
场景是这样的:用户问“iPhone 16 Pro 的退货政策是什么”,系统检索知识库,找到退货政策的 chunk,回答得很好。用户满意了,紧接着追问“那它的保修期呢”。
然后系统的回答画风突变:
请问您想了解哪款产品的保修期呢?请提供具体的产品名称,我帮您查询。
用户心想:我刚才不是说了 iPhone 16 Pro 吗?你怎么就忘了?
这不是 bug,这是你的 RAG 系统“失忆”了。每次用户提问,系统都是从零开始——不知道之前聊了什么,不知道“它”指的是什么。对用户来说,这种体验就像跟一个每隔 30 秒就失忆的人聊天,每句话都要把前因后果重新说一遍。

这一篇咱们就来聊聊怎么给 RAG 系统装上记忆——会话记忆(Conversation Memory)。
大模型的记忆真相:每次请求都是失忆的
1. 一个常见的误解
很多人用过 ChatGPT、Kimi 这些产品,觉得大模型天生就能记住对话内容。你跟它聊了十几轮,它还记得第一轮你说了什么,感觉像是在跟一个有记忆的智能体对话。
但实际上,大模型 API 的每次请求都是完全独立的。模型不会保存任何对话状态——它没有上一轮对话的概念,没有这个用户之前问过什么的记忆,甚至不知道你是谁。
打个比方:大模型就像一个极其聪明但患有严重失忆症的专家。每次你找他,他都不记得你之前来过。你得把之前聊过的内容全部重新说一遍,他才能接着聊。
那 ChatGPT 网页上的记忆是怎么实现的?答案很简单——把你之前所有的对话历史全部塞进了 messages 数组,每次请求都重新发给 API。模型看到了完整的对话历史,所以显得有记忆,实际上每次都是从头看一遍。
2. messages 数组就是记忆的全部
回顾一下之前模型调用 API 那篇讲过的 messages 数组结构。