← 懂一点

Agent 的记忆系统——短期、长期与 RAG

2026-07-21

本文是专栏《从零看懂 AI Agent》第 6 篇。回到目录与导读。上一篇:MCP 协议

从模型的"失忆症"说起

前面几篇反复提到一件事:大模型天生没有记忆。 每次调用都是独立的、失忆的——你不把上下文喂给它,它就什么都不知道,包括三秒钟前你俩聊过什么。

你可能会疑惑:那我用 ChatGPT 时,它明明记得我上一句说了什么啊?

秘密是:每次发消息,程序都偷偷把前面的对话一整段重新发给了模型。 模型"记得",是因为你每次都把整本"聊天记录"塞给了它看。它并没有真的记住,只是每次都重读了一遍。

这就带出了记忆系统的两层设计:短期记忆长期记忆

短期记忆:把对话历史一直带着

短期记忆就是当前这次任务的上下文——刚才调了什么工具、返回了什么、用户提了什么要求。实现方式很朴素:不断往对话历史里追加,每轮都整个带上。 这正是 ReAct 循环里"把 Observation 塞回历史"在做的事。

但它有个硬天花板:上下文窗口。模型一次能读的文字量是有限的(虽然逐年在变大)。对话或任务一长,历史就会装不下。这时怎么办?有几种常见招数:

长期记忆:存到外面,用时再查

长期记忆是跨任务、跨天、甚至跨月的知识:你的偏好、历史结论、一整套产品文档、一个知识库。这些东西量太大,根本不可能全塞进上下文。

解决思路很直接,和人用图书馆一样:

平时把知识存进"书库",需要时只借出相关的那几本,而不是把整个图书馆背进脑子。

这个"用时再查、只取相关部分喂给模型"的机制,就是大名鼎鼎的 RAG

RAG 到底是什么

RAG 全称 Retrieval-Augmented Generation(检索增强生成)。拆开看就三个字:查、加、答

回答之前,先去资料库检索相关内容,把检索到的塞进上下文,模型再基于这些真实资料生成答案。

举个例子。你问 Agent:"我们公司的报销上限是多少?"

好处很明显:模型能回答它本来不知道的、你私有的、或者最新的知识,而且答案有据可查,大大减少胡编。

RAG 怎么"查得准":向量检索

这里有个关键问题:库里资料那么多,怎么找到"最相关"的那几段?靠关键词匹配太笨——用户问"报销能报多少",制度里写的是"费用上限",字面对不上。

RAG 常用的办法是语义检索(向量检索),直觉上是这样的:

  1. 把每段资料变成一串能代表其含义的数字(叫"向量",可以理解为"语义坐标")。
  2. 用户的问题也变成同样的一串数字。
  3. 找出坐标离得最近的几段资料——含义相近的,坐标就近。

这样"报销能报多少"和"费用上限"虽然字面不同,但意思相近,坐标就接近,照样能被检索到。这些资料通常存在专门的向量数据库里。细节可以很复杂,但抓住直觉就够了:按"意思像不像"来找,而不是按"字一不一样"来找。

2026 年的进化:Agentic RAG(会"边查边想"的 RAG)

传统 RAG 是"一锤子买卖":查一次 → 生成答案,结束。但复杂问题往往一次查不全。于是有了 Agentic RAG——把第 3 篇 ReAct的思路用到检索上:

不再是"查一次就答",而是把检索当成一个可以反复调用的工具。查完发现不够,就换个角度再查;问题太大,就拆成小问题分别查;查到矛盾的,就再交叉验证一下。

打个比方:传统 RAG 像去图书馆借一次书就回家写作业;Agentic RAG 像一边写一边发现缺资料,就再跑一趟图书馆,来回好几趟直到写清楚。

但要注意代价:这种反复检索、反复反思的循环,消耗的算力往往是传统 RAG 的三到十倍。所以它不是万能药——只有当任务确实复杂、值得这个开销时才用。这又一次呼应了专栏反复出现的主题:灵活和成本要权衡。

短期、长期、RAG 的关系

最后把三者串起来,别再混淆:

概念 管什么 怎么实现 类比
短期记忆 当前任务的上下文 对话历史一直带着 手边的草稿纸
长期记忆 跨任务的持久知识 存外部库,用时检索 书房里的书柜
RAG 长期记忆的"检索"环节 语义检索 + 塞回上下文 去书柜里找对的那本书

一句话:RAG 是"长期记忆"的取用方式,而短期记忆管的是"眼前这摊事"。

小结

到这里,单个 Agent 的五大零件就都讲完了。下一篇我们上一个台阶:一个 Agent 不够用时,怎么让"一群 Agent"协作——以及一个反常识的忠告。

继续阅读:多智能体协作——什么时候需要"一群 Agent"