“AI 记住了东西”可能对应两种完全不同的机制:
- RAG 更像查资料。
- Memory 更像记经历。
理解这两个概念,是理解长期运行 Agent 的关键。
RAG:不是背下来,而是需要时现查
RAG 是 Retrieval-Augmented Generation,即检索增强生成。它的基本思路是:模型回答问题前,先去外部知识库查找相关内容,再把结果放入 Context。
例如用户询问“去年第四季度日本市场的收入是多少”,系统可以从财报、周报、产品文档或数据库中检索相关资料,然后让模型基于这些资料回答。
1 | 用户问题 |
典型 RAG 流程包括文档切分、Embedding、索引、向量检索、关键词检索、Rerank 和上下文拼装。实际系统也可能使用 BM25、Query Rewrite 或多路召回。
RAG 面向的是 Agent 外部已经存在的知识:公司文档、产品资料、论文、网页、数据库和代码仓库。
所以 RAG 的核心不是“模型把资料记住了”,而是“模型需要时可以把资料找回来”。它像开卷考试,模型不用背整本书,回答时查找相关页即可。
Memory:把重要经历保存下来
Memory 面向的是 Agent 与用户或任务共同经历过的内容。
例如:
- 用户喜欢简洁表达,汇报时先讲结论;
- 项目目标是把识别错误率降低到某个范围;
- 方案 A 因延迟太高而失败;
- 当前已经完成 API 设计,下一步处理 Webhook。
这些信息并不是外部知识库里的通用资料,而是过去交互和任务执行产生的经验。
当 Context 快要装满时,Agent 可以把重要状态写入一份结构化笔记:
1 | 当前目标:完成支付模块 |
之后即使 Context 被压缩或清空,Agent 也能重新读取这份笔记继续工作。
Memory 可以分为两类:
- 用户 Memory:偏好、习惯、身份和表达方式;
- 任务 Memory:目标、决策、失败原因、已完成步骤和下一步计划。
RAG 与 Memory 的边界
假设一个工作助手准备产品 Review:
- 最新 DAU、最近 Bug、最新需求文档,需要从外部系统现查,属于 RAG;
- 上次负责人最关注的问题、之前决定的方向、用户的汇报习惯,需要从过去经历中取回,属于 Memory。
可以把两者比作:
- RAG 是图书馆,遇到问题去查书;
- Memory 是笔记本,把重要经历记下来。
工程实现上,两者的边界会逐渐靠近。Memory 数量变多后,同样需要检索:当前任务 → 搜索相关 Memory → 取最相关的几条 → 放回 Context。
区别在于检索对象的语义来源:
- RAG 问的是:哪些外部资料与当前问题相关?
- Memory 问的是:过去哪些经历与当前任务相关?
Memory 不是越多越好
如果 Agent 把所有事情都记录下来:今天喝了什么、刚刚说了什么、几个月前打开过什么网页,Memory 最终会变成垃圾场。
真正重要的问题不是“AI 能不能记住”,而是:
什么值得写入,什么时候取回,哪些内容应该被遗忘?
好的 Memory 系统通常包含两个关键动作:
1 | Write Memory:判断什么值得保存 |
RAG、Memory 最终都会回到 Context Engineering:在正确的时间,把正确的信息交给模型。
总结
- RAG:需要什么,就去外部知识库里查;
- Memory:发生过什么,把值得保留的经历记下来;
- Context Engineering:决定这一刻应该把哪些知识和记忆放回 Context。
Agent 的“记忆”不是模型突然拥有了无限大脑,而是把无法一直留在 Context 里的信息保存到外部,需要时再取回来。