解析 Agent 长时运行中上下文窗口耗尽的三种后果,介绍 MemGPT、Voyager、Reflexion 的分层记忆架构和外部持久化方案。
长期运行的 Agent 循环中的记忆问题
长期运行的 Agent 循环——即 AI Agent 自主运行数小时甚至数天,持续做决策、调用工具、累积状态的自主工作流——会遇到短时交互不会遇到的瓶颈:上下文窗口会填满。一旦填满,三种情况必会发生其一:Agent 丢弃早期上下文,忘记它所做的决策(上下文漂移);Agent 因为丢失了"已经做过"的记忆而重新做已完成的工作(冗余工作);或者当上下文窗口溢出时 Agent 直接报错。解决方案是外部记忆:一种持久化存储,Agent 在整个循环过程中持续从中读取和写入,这样累积的知识不会因为上下文窗口的驱逐而丢失。MemGPT(分层记忆管理,arXiv:2310.08560)、Voyager(通过技能库实现终身学习,arXiv:2305.16291)和 Reflexion(通过情景记忆实现语言强化,arXiv:2303.11366)的研究 converge on the same architecture:Agent 需要的是受管理的外部记忆——而不是更大的上下文窗口——才能在长时间跨度内一致地运作。
痛点:Agent 运行太久时什么会出问题
Agent 启动一个长期运行的任务:重构代码库、研究市场、处理数据集,或管理多步部署。它做决策、调用工具、读取结果、生成下一步。每个交互都会向上下文窗口添加 token。经过足够多的轮次后,上下文窗口就满了——此时 Agent 的行为会以三种方式降级。
上下文漂移。随着上下文窗口填满,早期的上下文被驱逐(或被压缩,或 simply lost in attention)。Agent 忘记了它在第 3 步所做的决策——"我们选择了 PostgreSQL"——而可能在第 40 步与之产生矛盾。Packer 等人(arXiv:2310.08560)将此确定为 LLM 在 extended interactions 中的核心限制:"有限的上下文窗口,阻碍了它们在长对话和文档分析等任务中的实用性。"他们提出的解决方案——MemGPT 的虚拟上下文管理——本质上是一种外部记忆层,由 Agent 自行管理,根据需要在线(快速,上下文内)和离线(慢速,外部)记忆之间移动信息。
冗余工作。没有持久化记忆,Agent 无法回忆起它已经尝试过某种方法且失败了。它会重新尝试相同的 API 调用、重新读取相同的文件、重新运行相同的分析。Shinn 等人(arXiv:2303.11366)在 Reflexion 中通过实验证明了这一点:维护了过去尝试的"情景记忆缓冲区"——什么有效、什么失败、为什么失败——的 Agent,在后续试验中能做出更好的决策。记忆缓冲区不是上下文窗口;它是一个独立的、持久化的存储,存放着 Agent 在行动前读取的 distilled lessons。
决策失忆。在长循环中,Agent 做出一系列决策:采用哪种方法、编辑哪个文件、调用哪个 API。没有记忆,它无法重建为什么 earlier decision——它只能看到当前的上下文窗口。这导致不一致的行为:Agent 可能撤销自己 earlier 的工作,或者采取一种与 ten steps ago 建立的约束相矛盾的方法。Wang 等人(arXiv:2305.16291)表明,Voyager——一个终身学习 Agent——通过"不断增长的技能库"解决了这个问题——这是一种持久化的可执行技能存储,Agent 在时间推移中逐步构建。技能是"时间上 extended、interpretable 和 compositional 的",这"使 Agent 的能力快速复合并减轻了灾难性遗忘。"技能库是外部记忆;模型的权重从不改变。
架构:记忆作为独立模块
关于 Agent 记忆的研究文献 converge on a single architectural principle:记忆应该是独立于模型的模块,而不是塞进上下文窗口。
Zhang 等人(arXiv:2404.13501)将这个领域组织为将记忆作为"支持 Agent-环境交互的关键组件"——"自我进化能力"的基础。他们的 survey 识别了多种记忆类型(短期、长期、情景、语义)和多种操作(读取、写入、反思、遗忘),全部在模型外部的存储上运作。
Sumers 等人(arXiv:2309.02427)提出了 CoALA(语言 Agent 的认知架构),一个用"模块化记忆组件、结构化行动空间来与内部记忆和外部环境交互、以及通用化决策过程"来描述 Agent 的框架。记忆是模块化的——它有自己的结构、自己的操作、自己的生命周期——独立于模型的参数或上下文窗口。
Park 等人(arXiv:2304.03442)用生成式 Agent 演示了这一点,这些 Agent"使用自然语言存储 Agent 体验的完整记录,随着时间将这些记忆综合成更高层次的反思,并动态检索它们来规划行为。"该架构有三层:观察(发生了什么)、反思(这意味着什么)和检索(此刻什么是相关的)。记忆不仅仅是存储——它是一个积极的巩固和回忆过程,使 Agent 随着时间更加一致。
长期循环中记忆的实践方法
1. 分层记忆(MemGPT 模式)
Agent 以分层方式管理记忆:上下文窗口中较小的"核心记忆"(当前任务、关键事实),和上下文窗口外部较大的"归档记忆"(历史上下文、过去的决策、学到的教训)。Agent 根据需要在线层和归档层之间移动信息——当相关归档记忆变得 pertinent 时,将其晋升为核心;当陈旧的核心记忆不再是 active 时,将其降级为归档。
这就是 Packer 等人(arXiv:2310.08560)在 MemGPT 中演示的方法。Agent"智能地管理不同的记忆层,以便在 LLM 有限的上下文窗口内有效地提供扩展上下文。"OS 隐喻是恰当的:正如操作系统在 RAM 和磁盘之间分页数据一样,Agent 在上下文和外部存储之间分页知识。
2. 带反思的情景记忆(Reflexion 模式)
Agent 维护一个情景记忆缓冲区——过去尝试、结果和语言反思的日志。在每次新尝试之前,Agent 读取相关反思以避免重复错误并在过去成功的基础上继续。
Shinn 等人(arXiv:2303.11366)表明,这种"语言强化学习"——通过存储在记忆中的语言反馈强化 Agent,而不是通过权重更新——在编码、决策和推理任务中产生了显著改进。关键洞察:Agent 从自己的经验中学习,无需重新训练。
3. 技能库(Voyager 模式)
Agent 在工作时构建一个可重用技能库——可执行代码、流程或策略。每个技能都外部存储并建立索引以供检索。当 Agent 遇到类似任务时,它检索并组合现有技能,而不是从头开始。
Wang 等人(arXiv:2305.16291)演示了这种方法如何实现"终身学习"——Agent"不断探索世界、获取多样化技能、在没有人类干预的情况下做出新发现。"技能库"使 Agent 的能力快速复合并减轻了灾难性遗忘",因为技能是外部存储的,而不是存储在权重中的。
4. 通过 MCP 的外部记忆(开放标准模式)
模型上下文协议(MCP,规范 2025-11-25,modelcontextprotocol.io)是一个开放协议——基于 JSON-RPC 2.0,灵感来自语言服务器协议——标准化了 LLM 应用如何连接外部数据源和工具。MCP 兼容的记忆服务器为任何 MCP 兼容的 Agent 运行时提供对持久化记忆存储的访问。
Agent 在其正常循环中调用记忆工具(recall、learn、forget、feedback)。记忆不会被塞进上下文窗口——而是通过按需检索,像数据库查询一样。记忆存储跨会话、跨 Agent 重启、跨模型切换持久化。开放的 engram 实现(如 PLUR)通过 MCP 暴露记忆,因此任何 Agent 运行时——Claude Code、Hermes、OpenClaw、Cursor——都可以从相同记忆存储中读取和写入。
长期循环记忆应该存储什么
并非所有内容都适合放在记忆存储中。信噪比很重要——充满无关观察的记忆与没有记忆一样无用。研究表明应该存储:
决策和理由——Agent 决定了什么,以及为什么。这防止了矛盾,并使 Agent 能够 later 重建其推理过程。
失败的尝试——尝试了什么、哪里出了问题、学到了什么。Reflexion(arXiv:2303.11366)表明这是迭代改进中最高价值的记忆类型。
技能和流程——可重用的代码、经过验证的工作流程、成功的策略。Voyager(arXiv:2305.16291)表明这使 Agent 能力随时间复合。
关键事实——项目上下文、用户偏好、Agent 需要反复引用但不适合放在上下文窗口中的环境状态。
反思——从观察中综合出来的高层次抽象。Park 等人(arXiv:2304.03442)表明,反思——"随着时间将记忆综合成更高层次的反思"——是赋予 Agent 连续性和个性的关键。
无限增长的记忆本身就是一个问题。累积了 10,000 条记忆条目的 Agent 会在检索时同时获取噪声和信号。研究指出了几种遗忘策略:
时间衰减——最近未被访问的记忆失去激活。这反映了生物记忆巩固:频繁回忆的记忆被强化;未使用的则消退。
反馈驱动的相关性——有用的记忆(Agent 据此行动且结果积极)被晋升;无用的记忆被降级。
整合——多个相关观察被综合成单个更高层次的反思,原始观察被丢弃。Park 等人(arXiv:2304.03442)演示了这一点:观察积累,然后综合反思,然后 Agent 检索反思(而非原始观察)来规划。
这些遗忘策略不是可选的——它们是保持记忆存储在长时间跨度内有用的关键。没有遗忘的记忆系统只是日志文件,而不是记忆。
**如何在长期运行的 Agent 循环中使用记忆?**使用一个外部记忆存储,Agent 在整个循环过程中持续从中读取和写入。Agent 应该存储决策和理由、失败的尝试、可重用的技能、关键事实和综合反思。在每个步骤之前,Agent 检索相关记忆以避免重复错误、矛盾 earlier 的决策或重新做已完成的工作。记忆存储跨上下文窗口驱逐和跨会话持久化。来自 MemGPT(分层记忆,arXiv:2310.08560)、Reflexion(情景记忆,arXiv:2303.11366)和 Voyager(技能库,arXiv:2305.16291)的研究 converge on 受管理的外部记忆——而不是更大的上下文窗口——作为解决方案。
**AI Agent 中的上下文漂移是什么?**上下文漂移发生在 Agent 的上下文窗口填满、早期上下文被驱逐或压缩时,导致 Agent 忘记它在任务 earlier 建立的决策、约束或事实。这导致不一致的行为、 Earlier 决策的矛盾和冗余工作。外部记忆通过将关键信息持久化在上下文窗口外部并按需检索来防止上下文漂移。
**MemGPT 如何管理记忆?**MemGPT(arXiv:2310.08560)使用受操作系统启发的分层记忆架构:上下文窗口中用于 active 信息的较小"核心记忆",和上下文窗口外部用于历史上下文的较大"归档记忆"。Agent 在层之间分页信息——根据需要将相关归档记忆晋升为核心,将陈旧的核心记忆降级为归档。这提供了扩展有效上下文窗口的"虚拟上下文管理"。
**AI Agent 能在长期任务中从错误中学习吗?**可以——如果有记忆的话。Reflexion(arXiv:2303.11366)演示了维护过去尝试的情景记忆缓冲区(尝试了什么、什么失败了、为什么)的 Agent,在每次新尝试之前读取它,比没有记忆的 Agent 产生明显更好的结果。Agent"对任务反馈信号进行语言反思"并将反思存储在记忆中——通过经验学习,无需权重更新。
**AI Agent 中的终身学习是什么?**终身学习是 Agent 在不遗忘已学内容的情况下随时间持续获取新技能和知识的能力。Voyager(arXiv:2305.16291)用"不断增长的技能库"演示了这一点——一种持久化的可执行技能存储,能够"使 Agent 的能力快速复合并减轻灾难性遗忘"。关键:技能是外部存储的,而不是存储在模型权重中的,因此新学习不会降解现有能力。
**MCP 如何帮助 Agent 记忆?**模型上下文协议(MCP,modelcontextprotocol.io)是一个开放协议,标准化了 Agent 如何连接外部工具和数据源——包括记忆服务器。MCP 兼容的记忆服务器为任何 Agent 运行时提供通过标准协议访问持久化记忆(recall、learn、forget、feedback)的能力。记忆存储跨会话、Agent 重启和模型切换持久化。这意味着记忆不与任何一个 Agent 框架绑定——它跟随 Agent 跨工具移动。