第一篇 LLM Agent 记忆机制综述:来源、形式、操作,三个维度把散落的设计归位


设想一个场景:你和某个 AI 助手连续聊了一周。第一天你告诉它你对花生过敏,第三天它帮你订机票时还很贴心地避开了花生航空餐。到了第七天,你随口问一句”晚饭吃点什么好”,它兴致勃勃地推荐了一道宫保鸡丁。

这不是一个虚构的极端案例。任何一个把 LLM 当 agent 来用的人,都遇到过类似的记忆失效——要么全忘了,要么该记的没记、该忘的没忘。

问题不在于模型不够聪明。一个能解奥数题、能写几千行代码的 LLM,为什么连一周前的一句”我对花生过敏”都守不住?

答案藏在一个被反复讨论却始终没有被系统梳理的模块里:记忆

人大高瓴人工智能学院的 Zeyu Zhang 等人 2024 年发了一篇综述,自称是这个方向的第一篇——《A Survey on the Memory Mechanism of LLM-based Agents》。合作方是华为诺亚方舟实验室,通讯作者是 Xu Chen。配套的 GitHub 仓库持续更新,基本是研究 agent 记忆的人绕不开的一份导航材料。

记忆模块在 LLM agent 中的位置

论文用这张图点出了核心论点:记忆是区分 LLM 和 LLM agent 的那个模块。原 LLM 只管完成单次任务,agent 要在环境里持续交互、积累经验,这套能力都挂在记忆上。

这篇综述要做的事情很明确:把散落在几十篇论文里的记忆设计拉到同一张桌子上,看看能不能找到一个统一的视角。

论文围绕三个问题展开:记忆是什么、为什么需要、怎么设计和评估。三个问题里,真正有信息量的是第三个——它给出了一个能装下 28 个系统的三维度分类法,以及一个把所有记忆操作串起来的统一公式。

先把「记忆」这个词说清楚

很多人讨论 agent 记忆时,其实在说不一样的东西。

有人指的是对话历史——“这个 agent 能记住我们三天前聊过什么”。有人指的是跨任务的经验——“这个 agent 在第十次解同类问题时,比第一次更快”。还有人指的是外部知识库——“这个 agent 会查 Wikipedia”。这三种”记忆”在技术实现上完全不是一回事。

综述先做了一个区分。

狭义的记忆只包含同一个任务内的历史信息。一个 agent 解一道数学题,过程中走过的每一步推理都算。任务结束,记忆清空。

广义的记忆范围大得多。给定一连串任务 T1,T2,,TK\mathcal{T}_1, \mathcal{T}_2, \dots, \mathcal{T}_K,第 kk 个任务在第 tt 步的记忆来自三个地方:

  1. 同一个任务内的历史(inside-trial)
  2. 跨任务的历史,包括本任务之前失败的尝试(cross-trial)
  3. 任务交互循环之外的静态知识,比如 Wikipedia、领域数据库(external knowledge)

这三种来源加起来,才是一个 LLM agent 完整的记忆空间。

但定义还只是定义。综述真正的贡献,是把 agent 怎么用这些记忆,写成了一个统一公式:

at+1k=LLM{R(P(Mt1k,W({atk,otk})),ct+1k)}a_{t+1}^k = \text{LLM}\{R(P(M_{t-1}^k, W(\{a_t^k, o_t^k\})), c_{t+1}^k)\}

看起来吓人,拆开就清楚了。WW 是写入(Writing),把这一步的动作 ata_t 和观察 oto_t 投影成存储内容。PP 是管理(Management),对存储下来的记忆做反思、合并、遗忘。RR 是读取(Reading),根据下一步的上下文 ct+1c_{t+1} 把相关记忆取出来。三者串在一起,喂给 LLM 生成下一个动作。

换句话说,W 是往里塞,P 是整理和精简,R 是该用哪条的时候取出来。

agent 与环境交互的记忆读写管理流程

论文用同一个 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 的那个前提。