AI 快讯Agent记忆,正在变成架构问题
开发心得

Agent记忆,正在变成架构问题

2026-08-26T08:03:39.636Z
Agent记忆,正在变成架构问题

一篇最新论文提出,Agent 的瓶颈不只是模型推理能力,更在于如何管理不断膨胀的上下文、记忆与工具输出。上下文工程正在从提示词技巧升级为覆盖摄取、作用域、预判和压缩的生命周期架构。

Agent 记忆,正在变成架构问题

Agent 的下一个瓶颈,不是上下文窗口还不够长,而是系统不知道哪些信息该留下、何时调用、放在哪里,以及为此应该付出多少 token 成本。

8 月 26 日,论文《Agentic Context Management: Solving Agent Memory and Cost by Treating Them as Lifecycle and Architecture Problems 将这个问题单独提出来:**Agentic Context Management 是一种围绕上下文生命周期,主动控制信息摄取、作用域、预判、检索与压缩的工程方法。**论文的核心判断很直接——生产环境里的 Agent,失败往往不是因为模型不会推理,而是因为它被自己的历史记录、工具定义和工具输出淹没了。

这不是又一个“给 Agent 加向量数据库”的故事。真正的变化是,记忆和上下文开始从应用层的附属功能,变成需要单独设计的系统架构。

一张展示 Agent 上下文生命周期的架构图,包含事件摄取、短期上下文、检索、压缩、长期记忆和主动遗忘等模块

Agent 的问题,已经从“能不能记住”变成“该记住什么”

**上下文工程是对一次模型调用中实际可见信息进行选择、组织和放置的系统方法。**它处理的不只是聊天记录,还包括系统提示词、工具描述、工具返回结果、用户偏好、任务状态、历史决策和外部检索结果。

很多团队最初会把 Agent 记忆实现成一条简单流水线:把对话存进数据库,做 embedding,下一次对用户问题进行向量检索,再把命中的内容拼到 prompt 末尾。这个方案能快速做出 Demo,但在任务变长后很容易失控。

问题在于,检索只是“找到什么”,上下文管理还要回答三个问题:找到的内容是否适合当前步骤?应该放多少?放在 prompt 的哪个位置?

长上下文并不等于模型会平均使用所有信息。注意力在长 prompt 中并非均匀分布,埋在中间的关键信息可能比开头的任务约束或结尾的最新工具结果更容易被忽略。于是,一个检索系统即使召回率很高,也可能因为内容排序、位置和格式不对,导致 Agent 做出错误决策。

对开发者来说,这意味着“把更多内容塞给模型”通常不是可靠性优化,反而可能是故障放大器。上下文越长,输入 token 成本越高,模型需要区分的噪音越多,工具调用前后的状态也越难维护。

成本为什么会随着任务轮次加速上升

**上下文成本是指 Agent 为维持任务连续性,在每一轮重复发送历史信息、工具定义和中间结果所产生的输入与推理开销。**在一个拥有多轮工具调用的 Agent 中,成本增长往往不是线性的。

假设每轮新增 1,000 个 token,系统每次都把完整历史重新发送给模型。第 1 轮发送约 1,000 个历史 token,第 10 轮可能发送约 10,000 个,第 100 轮则可能发送约 100,000 个。若按每轮累积计算,100 轮的历史输入总量约为 5,050,000 个 token;这还没有算工具 schema、检索结果和模型输出。

这类增长不一定严格等于论文所说的“二次 token 成本”,因为实际费用还受缓存、上下文窗口、模型计费方式和服务端实现影响。但从系统行为看,**当每一轮都携带此前全部状态时,累计输入量会呈现近似二次增长趋势。**对于代码 Agent、浏览器 Agent 和数据分析 Agent,这种增长尤其明显:工具返回的日志、网页正文、文件 diff 和中间表格,往往比用户消息本身更快膨胀。

因此,优化重点不能只放在选择更便宜的模型。模型降价可以降低单次调用价格,却不能解决错误上下文导致的重复调用、无效检索和任务重试。一个每次都多消耗 30,000 token、还经常忘记约束条件的 Agent,使用便宜模型也未必划算。

四个动作:摄取、作用域、预判和验证式压缩

论文将 Agentic Context Management 描述为一套生命周期纪律,重点不是某个数据库或框架,而是信息在系统中的流动方式。

1. 摄取:不要把所有原始事件都送进推理上下文

**上下文摄取是把原始对话、工具事件和外部数据转化为可管理信息的过程。**摄取阶段应该先区分事件类型、来源、可信度、时间、用户与任务归属,再决定它是当前状态、候选记忆还是仅供审计的历史记录。

例如,浏览器 Agent 抓到一页 80,000 token 的网页,不应该直接把全文交给模型。系统可以先保留原文地址和哈希,将页面切分为标题、正文、表格与脚注,再生成一份 1,000 至 2,000 token 的任务相关摘要。只有当模型需要核对原句时,才回源读取具体片段。

这与传统日志系统的思路相反:日志倾向于“先完整保存,再事后分析”,而 Agent 上下文需要“先判断用途,再决定进入哪一层”。原始事件可以保存,但不应该默认进入每次推理。

2. 作用域:不同信息不应该对所有 Agent 和所有步骤可见

**上下文作用域是信息在用户、会话、任务、子任务和单次工具调用之间的可见边界。**没有作用域的记忆系统,越“聪明”越危险:一个项目中的临时决策可能污染另一个项目,一次对话中的敏感信息也可能被错误召回。

一个实用的分层方式可以是:

  • 请求级上下文:当前问题、当前工具结果和本轮约束,生命周期最短。
  • 任务级状态:目标、已完成步骤、失败原因、待办事项,服务于一个完整任务。
  • 会话级记忆:本次对话中确认过的事实和偏好。
  • 用户级长期记忆:稳定且经过验证的偏好,例如常用语言、代码风格和工作时区。
  • 组织级知识:团队规则、产品文档和权限策略,必须有版本与访问控制。

代码助手尤其需要这种隔离。用户在项目 A 中偏好 TypeScript,并不意味着项目 B 也必须使用 TypeScript;一次临时的“先绕过测试”决定,更不能被升级成长期编码规则。

3. 预判:在模型提出需求前,提前准备下一步上下文

**上下文预判是根据 Agent 当前状态和可能的下一步动作,提前准备低成本候选信息的机制。**它不是把所有相关资料提前塞进 prompt,而是在确定性较高的范围内进行异步预取。

比如,代码 Agent 已经定位到一个 API 路由,并准备检查数据库调用,那么系统可以预取该路由对应的 schema、最近一次相关测试结果和项目的错误处理约定。但如果 Agent 还没有决定是否修改数据库,就不应提前加载整个数据库文档。

预判的价值在于减少等待时间和重复检索,风险则是增加无效计算。因此它应该有置信度阈值和预算:只有当预取命中概率足够高时才执行,并且候选内容必须限制大小。

4. 验证式压缩:摘要不是越短越好

**验证式压缩是指在压缩上下文后,通过事实、约束和任务状态检查,确认摘要没有丢失会影响决策的信息。**这一步是普通摘要和生产级压缩的区别。

一个合格的压缩器不应只输出“用户希望重构登录模块”,还要保留“不能修改公开接口”“必须兼容 Python 3.10”“上一次方案因会话过期测试失败”等硬约束。压缩后的上下文如果看起来更简洁,却删掉了否定条件、版本号和失败记录,Agent 反而会重复踩坑。

可以把压缩结果拆成四类字段:目标、已确认事实、不可违反的约束、未解决问题。压缩完成后,再用规则校验或便宜模型进行一致性检查;对于金融、医疗和法律任务,还应该保留原始证据位置,确保摘要能够回溯。

记忆不是一个数据库,而是多层状态系统

**Agent 记忆是对跨步骤或跨会话信息进行保存、提炼、检索、更新和遗忘的系统。**它和上下文有关,但不等于上下文。上下文是模型此刻能看到的内容,记忆是未来可能被重新使用的信息。

这一区分很重要。把所有历史都叫“记忆”,会让团队忽略信息的生命周期;把所有检索都叫“上下文工程”,又会让长期事实和短期状态混在一起。

| 层级 | 典型内容 | 生命周期 | 适合的处理方式 | 主要风险 | |---|---|---|---|---| | 工作记忆 | 当前计划、最近工具结果、临时变量 | 单次任务或数分钟 | 直接放入上下文,持续更新 | 过载、状态漂移 | | 情景记忆 | 某次任务的过程、失败原因、用户反馈 | 天至月 | 按任务和时间检索 | 细节冗余、隐私泄露 | | 语义记忆 | 稳定事实、规则、项目知识 | 月至年 | 结构化存储并版本化 | 事实过时、来源不明 | | 用户偏好 | 语言、格式、工作习惯 | 长期 | 显式确认、可查看和撤销 | 错误泛化 | | 原始事件 | 完整对话、文件、工具输出 | 按合规策略保存 | 冷存储、审计和回溯 | 存储成本、敏感数据暴露 |

从实现上看,向量数据库适合语义相似检索,但不能独立解决时间、权限、版本和因果关系。图数据库可以表达“谁在什么时候因为什么修改了什么”,时序数据库和 TTL 可以处理过期状态,关系数据库则更适合保存可审计的结构化事实。实际系统通常需要组合,而不是迷信某一种存储。

主动遗忘,比无限记忆更难

**主动遗忘是 Agent 根据时间、使用频率、重要性、冲突和用户意图,主动降低或删除记忆价值的过程。**这是长期 Agent 能否稳定运行的关键,也是目前最容易被产品宣传掩盖的部分。

只增不删的记忆库会出现三种问题。第一,旧事实和新事实发生冲突,检索结果却把两者同时交给模型。第二,重复内容越来越多,召回结果被低价值片段占满。第三,用户无法判断系统到底保存了什么,更无法要求某条记忆被删除。

一个比“按最近访问排序”更可靠的策略,是为记忆建立可解释的生命周期状态:候选、已确认、稳定、过期、冲突、待删除。用户明确说“我不再使用这套技术栈”时,这条信息的删除优先级应该高于普通访问频率;一条涉及权限的规则,即使很久没有访问,也不应因为 TTL 自动消失。

记忆巩固也不应等于简单摘要。它更像一次离线复盘:把多次相似经历聚类,提取经过验证的通用规则,同时保留原始事件的证据链。例如,代码助手连续三次发现用户拒绝自动引入某个库,才可以把它提升为候选偏好;单次聊天中的随口表达,最多只能作为低置信度记忆。

这对 Agent 架构意味着什么

**Agent 的上下文管理应该成为独立的控制平面,而不是散落在 prompt 拼接代码里的几个工具函数。**一个可维护的系统至少需要记录以下指标:

  1. 每轮输入 token、输出 token 和工具返回 token。
  2. 上下文中各类信息的占比,以及压缩前后的长度。
  3. 检索命中率、实际采用率和无效召回率。
  4. 记忆导致的错误率,包括过时事实、跨任务污染和错误偏好。
  5. 压缩后任务成功率与重试次数。
  6. 每条长期记忆的来源、置信度、最后验证时间和删除状态。

这些指标可以把“Agent 好像变聪明了”变成可比较的工程结果。比如,在保持任务成功率不变的前提下,将平均输入从 40,000 token 降到 12,000 token,才是真正的上下文优化;单纯把 prompt 从 50,000 token 压到 10,000 token,却让任务成功率从 85% 降到 70%,不能算成功。

在具体落地上,团队可以从一个轻量版本开始:原始事件进入对象存储,任务状态进入关系数据库,稳定记忆使用带元数据的向量检索,所有召回结果先经过作用域过滤,再由一个上下文编排器决定排序、压缩和放置位置。不要一开始就构建复杂知识图谱,也不要把模型生成的每句话自动写入长期记忆。

和 Mem0、MemGPT 等方案相比,差别在哪里

现有记忆框架已经覆盖了不少基础能力,但它们解决的问题层级并不完全相同。

| 方案 | 主要定位 | 强项 | 更适合的场景 | 需要补足的部分 | |---|---|---|---|---| | Mem0 | Agent 长期记忆框架 | 记忆提取、更新、向量与图记忆组合 | 个性化助手、代码助手 | 复杂任务状态与企业级治理需要自行设计 | | MemGPT/Letta | 分层记忆与上下文自管理 | 模拟主存与外部存储之间的切换 | 长对话、可持续任务 | 生产环境的权限、成本和观测体系 | | LangMem | LangChain 生态中的记忆能力 | 与现有工作流和 Agent 集成 | 已使用 LangChain 的团队 | 跨框架生命周期标准仍需明确 | | AgentCore Memory | 托管式持久记忆服务 | 短期记忆、长期记忆和异步提炼 | 云上企业应用 | 云平台绑定、成本模型和迁移策略需评估 |

这篇论文的价值不在于替代这些工具,而在于提醒开发者:记忆框架只是组件,不能代替完整的上下文生命周期设计。你仍然需要决定哪些数据进入记忆、谁可以读取、什么时候更新、冲突如何处理,以及压缩失败后如何回滚。

现在最值得做的,不是给 Agent 加“更长记忆”

**对大多数开发团队而言,第一阶段最划算的优化是减少无效上下文,而不是增加存储容量。**可以按以下顺序推进:

  • 先给每种上下文设定 token 预算,并记录超预算原因。
  • 将工具输出分为摘要、关键字段和原文引用,避免全文回灌。
  • 为记忆增加用户、项目、任务和时间等作用域字段。
  • 把事实、偏好、任务状态和原始事件分开存储。
  • 对摘要保留来源和约束,允许回溯原文。
  • 设计冲突检测与过期策略,而不是默认永久保存。
  • 建立“记忆命中但导致错误”的评测集。

短期看,这些工作可能没有换一个更大的模型显眼;长期看,它们决定了 Agent 能否从 Demo 进入生产。因为当任务从 5 轮扩展到 50 轮、从一个用户扩展到一万个用户时,真正先崩的往往不是模型,而是状态管理。

结语:Agent 的“智能上限”,取决于上下文治理能力

**Agent 的记忆架构,本质上是在定义它能从过去学到什么、忘掉什么,以及哪些信息会影响下一次决策。**这已经不是简单的 RAG 优化,也不是给聊天机器人增加一个历史列表,而是一个包含数据治理、成本控制、可靠性和安全边界的架构问题。

未来的 Agent 不会只比拼谁能容纳更多 token,还会比拼谁能用更少的上下文完成更稳定的任务。能够准确摄取信息、严格控制作用域、提前准备必要状态、验证压缩结果,并在合适的时候主动遗忘的系统,才有机会成为真正可持续的智能体。

对开发者来说,最应该避免的误区是把“记住更多”当成“变得更聪明”。在生产环境里,好的记忆不是一座越来越大的档案馆,而是一位知道何时提醒、何时沉默、何时纠正自己、何时删除旧信息的上下文管家。

参考来源

(注:本文根据公开论文与补充资料整理,具体框架能力、计费方式和服务可用性请以官方最新文档为准。)

相关推荐

查看全部