
第一篇 LLM Agent 记忆机制综述:来源、形式、操作,三个维度把散落的设计归位
设想一个场景:你和某个 AI 助手连续聊了一周。第一天你告诉它你对花生过敏,第三天它帮你订机票时还很贴心地避开了花生航空餐。到了第七天,你随口问一句”晚饭吃点什么好”,它兴致勃勃地推荐了一道宫保鸡丁。
这不是一个虚构的极端案例。任何一个把 LLM 当 agent 来用的人,都遇到过类似的记忆失效——要么全忘了,要么该记的没记、该忘的没忘。
问题不在于模型不够聪明。一个能解奥数题、能写几千行代码的 LLM,为什么连一周前的一句”我对花生过敏”都守不住?
答案藏在一个被反复讨论却始终没有被系统梳理的模块里:记忆。
人大高瓴人工智能学院的 Zeyu Zhang 等人 2024 年发了一篇综述,自称是这个方向的第一篇——《A Survey on the Memory Mechanism of LLM-based Agents》。合作方是华为诺亚方舟实验室,通讯作者是 Xu Chen。配套的 GitHub 仓库持续更新,基本是研究 agent 记忆的人绕不开的一份导航材料。

论文用这张图点出了核心论点:记忆是区分 LLM 和 LLM agent 的那个模块。原 LLM 只管完成单次任务,agent 要在环境里持续交互、积累经验,这套能力都挂在记忆上。
这篇综述要做的事情很明确:把散落在几十篇论文里的记忆设计拉到同一张桌子上,看看能不能找到一个统一的视角。
论文围绕三个问题展开:记忆是什么、为什么需要、怎么设计和评估。三个问题里,真正有信息量的是第三个——它给出了一个能装下 28 个系统的三维度分类法,以及一个把所有记忆操作串起来的统一公式。
先把「记忆」这个词说清楚
很多人讨论 agent 记忆时,其实在说不一样的东西。
有人指的是对话历史——“这个 agent 能记住我们三天前聊过什么”。有人指的是跨任务的经验——“这个 agent 在第十次解同类问题时,比第一次更快”。还有人指的是外部知识库——“这个 agent 会查 Wikipedia”。这三种”记忆”在技术实现上完全不是一回事。
综述先做了一个区分。
狭义的记忆只包含同一个任务内的历史信息。一个 agent 解一道数学题,过程中走过的每一步推理都算。任务结束,记忆清空。
广义的记忆范围大得多。给定一连串任务 ,第 个任务在第 步的记忆来自三个地方:
- 同一个任务内的历史(inside-trial)
- 跨任务的历史,包括本任务之前失败的尝试(cross-trial)
- 任务交互循环之外的静态知识,比如 Wikipedia、领域数据库(external knowledge)
这三种来源加起来,才是一个 LLM agent 完整的记忆空间。
但定义还只是定义。综述真正的贡献,是把 agent 怎么用这些记忆,写成了一个统一公式:
看起来吓人,拆开就清楚了。 是写入(Writing),把这一步的动作 和观察 投影成存储内容。 是管理(Management),对存储下来的记忆做反思、合并、遗忘。 是读取(Reading),根据下一步的上下文 把相关记忆取出来。三者串在一起,喂给 LLM 生成下一个动作。
换句话说,W 是往里塞,P 是整理和精简,R 是该用哪条的时候取出来。

论文用同一个 toy example 贯穿全文:上半部分是两个具体任务(给 Alice 订旅行计划、推荐电影)的交互步骤,下半部分把 W/P/R 三个操作画成了流程,虚线表示 cross-trial 记忆可以跨任务汇入。一张图同时讲清了”记忆从哪来”和”记忆怎么用”。
这个公式不是装饰。它的价值在于,任何一篇 agent 记忆的论文,都可以拆成”在 W/P/R 哪一环做了创新”。后面会看到,这正是综述把 28 个系统归位的方法。
三个维度,把 28 个系统的设计选择画出地图
综述的核心是三个正交维度。任何一个 agent 的记忆设计,都可以在这三个维度上找到坐标。
维度一:记忆的来源——信息从哪来
最直观的分类。inside-trial 信息几乎被所有系统采用——当前任务内的历史步骤最相关、最直接,不用白不用。
cross-trial 信息是”长期记忆”的来源。代表是 Reflexion,它把过去失败 trial 的教训用自然语言写下来,下一次再试同一任务时带在身上。这种做法被作者称为 verbal reinforcement learning——用语言反思替代权重更新。
external knowledge 是任务循环之外的知识。ReAct 让 agent 在推理过程中调 Wikipedia API,GITM 让 Minecraft agent 查游戏 Wiki。外部知识的好处是可以实时获取、缓解模型知识过时;代价是可靠性、对齐成本、隐私合规都得自己处理。
前两类要 agent 自己去交互才能积累,第三类可以即插即用。
维度二:记忆的形式——怎么存
这是三个维度里分野最明显的一个,分两大阵营。
文本式(Textual)是绝对主流。信息用自然语言显式存下来,可读、可改、可解释。细分为四子类:完整交互历史(complete)、最近一段(recent)、按相关性检索(retrieved)、外部知识(external)。
完整历史听起来最稳,但代价不小——注意力计算随序列长度二次增长,还会撞上长上下文的位置偏差问题(lost-in-the-middle)。所以真正被广泛采用的是检索式:给每条记忆建 embedding 索引,用到的时候按相似度 top-K 取出来。
参数式(Parametric)研究要少得多。把记忆编进模型权重,不受上下文长度限制。两条路:监督微调注入领域知识(Huatuo 微调医学、InvestLM 微调金融),或者知识编辑精准改个别事实(MAC、MEND、KnowledgeEditor)。
两种形式的张力很清楚:文本式写入快、读取慢,每次推理都要把记忆塞回 prompt;参数式反过来,读取几乎零成本,但写入(训练)很贵。
这里就出现了第一批可以挂靠的系统。MemGPT 是 recent + retrieved 的代表,把操作系统的虚拟内存管理搬进 LLM;MemoryBank 走 retrieved 路线,外加一条 Ebbinghaus 遗忘曲线做记忆衰减。
维度三:记忆的操作——W/P/R 各自怎么做
第三个维度拆得更细,直接对应统一公式里的三个函数。
写入(W)的关键是信息抽取策略。原始观察又长又噪,全存下来既贵又没用。TiM 抽取实体关系入库,MemGPT 让 agent 自己决定写什么,MemoChat 把对话摘要当成检索的 key。
管理(P)借鉴人脑机制最多。反思出高层概念(Generative Agents 的 reflection)、合并冗余(ChatDB、Voyager)、遗忘不重要项(MemoryBank 的遗忘曲线)。这一环是最容易做出差异化的地方。
读取(R)和写入是协作关系。文本式记忆多用相似度 + 辅助信息检索;参数式则隐式读取——直接用更新后的参数推理。ChatDB 用 SQL 读,ExpeL 用 FAISS 取 top-K 成功轨迹。
A-MEM 和 Mem0 的创新主要落在 W 和 P 上。A-MEM 借鉴 Zettelkasten 卡片笔记法,让新记忆自动生成上下文、建立链接、触发演化,整个知识网络自主生长。Mem0 更进一步,把记忆维护拆成”抽取 + 更新”两阶段,更新环节用 ADD/UPDATE/DELETE/NOOP 四个工具调用让 LLM 自主决策——把”管理”从隐式副作用升级成带操作语义的判断。

这是论文最核心的一张图,把三个维度压在一张画里:左下是三类来源汇入 agent,右侧上半是文本式与参数式两种记忆形式,右侧下半是 W/P/R 三种操作。整张图其实就是在说——任何一个 agent 的记忆系统,都可以拆成”信息从哪来 × 怎么存 × 怎么用”这三个正交的选择。
把这五个系统挂进这张地图
综述列了 28 个系统,但读者记不住 28 个。更有用的做法是,只看那些已经被广泛讨论的代表性系统,搞清楚它们各自在哪个维度做了创新。
下面这张表把我之前解读过的五个系统,按三维度归位。
| 系统 | 来源 | 形式 | 创新落在 | 一句话 |
|---|---|---|---|---|
| MemoryBank | inside-trial | retrieved | P · 管理 | 用 Ebbinghaus 遗忘曲线做记忆衰减 |
| MemGPT | inside-trial | recent + retrieved | R · 读取 | 把 OS 虚拟内存的"换页"搬进 LLM |
| A-MEM | inside-trial | retrieved | W + P 联动 | Zettelkasten 让记忆自建链接、自主演化 |
| Mem0 | inside-trial | retrieved | P · 管理 | 把维护拆成 ADD/UPDATE/DELETE/NOOP 工具调用 |
| LongMemEval | (基准,非系统) | — | 评估 | 揭穿长上下文 LLM 读整段历史掉 30–60% |
五个系统里,四个把核心创新押在 P(管理)上,只有一个押在 R(读取)。这其实反映了领域的集体判断——记忆的瓶颈不在”怎么取”,而在”存进去之后怎么整理、怎么精简、怎么决定哪条该留”。
来源那一列全是 inside-trial,也不是巧合。cross-trial 和 external knowledge 虽然在论文里被认真讨论,但真正落到生产系统里的少之又少。这也指向了综述承认的一个开放问题——基于记忆的终身学习,目前还停留在实验室阶段。
为什么 agent 非要记忆不可
讲完了”是什么”,再来回答”为什么”。综述给了三个视角。
认知心理学的视角最直接。记忆是人类最核心的心智过程之一——学知识、形成社会规范、想象行为后果,都靠它。要让 agent 像人一样行动,仿照人类记忆机制来设计是一个自然选择。更重要的是,认知心理学积累了大量可用的人脑记忆理论,这些都是现成的设计素材。
自我进化的视角抓住了 agent 区别于 LLM 的本质。一个能自我进化的 agent,至少要做三件事:记住失败的教训以避免重犯、记住探索过的地方以决定下一步往哪走、从原始观察里抽象出可泛化的高层知识。这三件事,每一件都得靠记忆。
应用的视角最现实。对话 agent 没记忆就接不上话——它不知道你三分钟前说了什么。仿真 agent 没记忆就守不住角色——一个扮演历史人物的 agent,聊几句就开始引用它训练数据里的现代新闻。
记忆不是可选项。
换句话说,一个没有记忆的 agent,本质上只是一个会聊天的 LLM。
怎么评估,以及为什么还没有标准答案
评估是这篇综述里信息密度最低、但也最诚实的一节。
两条路。直接评估把记忆当独立组件,测它自己的好坏。主观维度看召回的记忆贴不贴合当前上下文(coherence)、合不合理(rationality);客观维度看答案准确率、检索引用的 F1、写入和读取的耗时与显存。

论文把评估拆成直接和间接两条路。直接评估又分主观(人评 coherence 和 rationality)和客观(准确率、引用 F1、时间/显存开销),间接评估通过对话、多源 QA、长上下文任务的成功率反推。这两条路各有短板——直接评估缺开源 benchmark,间接评估归因不干净。
间接评估通过端到端任务反推记忆质量。如果 agent 在需要记忆的任务上表现好,就认为记忆模块有效。常用任务包括对话一致性、多源问答、长上下文检索、开放世界游戏的成功率。
间接评估容易做——现成 benchmark 多。但问题也很明显:任务表现归因于多个因素,记忆只是其中一个。直接评估更可靠,但成本高,而且——
截至论文发表,还没有一个专为 agent 记忆模块设计的开源 benchmark。
这是综述里最值得记住的一句判断。它解释了为什么这个领域看起来热闹、却很难横向比较——大家各跑各的实验、各报各的数字,缺少一个公认的试金石。
后来 LongMemEval 部分补上了这个洞。它是第一个系统化的长期交互记忆基准,用 500 道题、五大能力维度去压测聊天助手的长期记忆。它最狠的发现是:长上下文 LLM 读整段历史,性能会掉 30%–60%——“无脑扩上下文”这条路被它用数据否掉了。
论文指出的四个未来方向
综述最后列了四个方向,简短收口。
参数式记忆的进一步发展。信息密度更高、更省存储,但效率(怎么高效把文本变参数,元学习是一条路)和可解释性(医疗等高信任领域需要)都是坎。
多智能体中的记忆。合作场景的记忆同步、通信中的上下文维持,竞争场景的信息不对称——这些都是单 agent 记忆里不会出现的难题。
基于记忆的终身学习。要捕获时序性(记忆之间会重叠),要处理海量记忆的存取与遗忘。agent 真要和人长期相处,这一关绕不过去。
类人 agent 的记忆。记忆应该扭曲、应该遗忘、应该有知识边界——扮演儿童的 agent,就不该懂高深数学。
前两个是工程问题,后两个是认知问题。
记忆是 agent 之所以是 agent 的那个前提
回到开头那个场景。花生过敏被忘掉,不是模型笨,是这个 agent 的记忆系统根本没把”我对花生过敏”这条事实好好存下来、也没在推荐晚餐时把它取出来。
这篇综述的价值,不在于给出一个标准答案——它给不出。它的价值在于提供了一个坐标系:来源 × 形式 × 操作三个维度,加上一个统一公式,让后来任何一种记忆设计都有处可归。
从这张地图里也能看出一些趋势。文本式 + 检索式 + inside-trial 是绝对主流,参数式和 cross-trial 是少数派。但主流往往意味着路径依赖,少数派里很可能就藏着下一波突破——参数式记忆的信息密度优势、cross-trial 记忆支撑的终身学习,都是还没有被充分开采的方向。
配套的 GitHub 仓库还在持续更新,作者团队把它定位成一份活的导航材料。这份坦诚本身也说明一件事:agent 记忆这个方向,离收敛还早。
当 agent 真的要跑在真实环境里、和同一个用户相处几个月甚至几年,记忆就不再是一个可以打补丁的模块,而是 agent 能不能成为 agent 的那个前提。