AI Daily · 深度学习文档 · 2026-07-22

长时程 Agent 的上下文退化(Context Rot)与自压缩(Self-Compaction)

任务越长,Agent 的上下文越臃肿,表现反而越差——这不是玄学,是已被系统测量的现象。本文讲清它为什么发生、长什么样、有哪几类解法,以及 2026 年 6 月两篇新论文给出的最新答案:让模型自己决定什么时候「清理大脑」。

调研时间:2026-07-22 · 全部关键事实来自文末来源清单,论文数据以 arXiv 原文为准

30 秒速览

先给结论,细节后面慢慢讲:

长任务开始 上下文干净 几十~上百轮之后 废弃思路·过时搜索结果 失败的尝试 全部堆着 Context Rot 旧内容锚定后续生成 放弃 / 心虚作答 / 答错 上下文管理(本文主题) 压缩 · 裁剪 · 隔离 · 自压缩
上下文退化的发生路径,以及上下文管理介入的位置(据 SII-GAIR 与 SelfCompact 论文归纳)

背景:为什么这个问题「现在」变得要命

两年前,一次模型调用几千个 token,上下文管理基本等于「别超窗口」。今天完全不同了——Agent 的任务时长在指数级拉长,单次任务的上下文规模已经不是「窗口够不够放」的问题,而是「放进去之后模型还清不清醒」的问题。SelfCompact 论文开篇给了几个当前的量级:

8M
Qwen3-Coder-Next 在 SWE-rebench 上单题平均消耗 token 数
154 轮
同一场景下单题平均交互轮数
96k
Kimi-K2.5 单道竞赛数学题的思考 token 上限量级
数百次
深度搜索 Agent 单个查询的工具调用次数(BrowseComp 类任务)

以上数字均引自 SelfCompact 论文(arXiv:2606.23525)第 2 节,原始出处为各模型技术报告。

与此同时,工程侧的所有新基建都在鼓励「跑得更久」:Claude Code 的后台 Agent 可以自主完成整个 PR,MCP 2026-07-28 新规范把「长时任务(Tasks)」转正为核心特性,云端 Agent 运行时让任务脱离本机长期运行。任务越长,上下文退化的代价越大——这就是这个 2023 年就有苗头的问题(「lost in the middle」)在 2026 年夏天被两篇论文同时正面攻坚的原因。

🗂️ 一个类比
办公桌理论:项目刚开始时桌面干净,随手就能找到要用的文件。三周后,桌上堆满了废弃草稿、过期便签、走了弯路的计算纸。问题不是桌子不够大,而是每次找东西都会被旧纸误导——你甚至会顺着三天前已被否定的思路重新走一遍。「压缩」是把有效结论抄到一张新纸上然后清桌;「裁剪」是直接扔掉最旧的纸;「隔离」是让同事在他自己桌上算完、只递给你一行结果。

Context Rot 是什么:定义与机制

Context Rot(上下文退化)
大白话:塞给模型的内容越多,它的表现越差——哪怕远没塞满窗口。而且不是到某个点突然崩,而是持续、渐进地变差
正式表述:模型输出质量随输入上下文长度增加而出现的可测量退化。Chroma 2025 年的技术报告测试了 18 个主流模型(含 GPT-4.1、Claude 4、Gemini 2.5、Qwen3),全部随输入变长而性能下降;部分任务在远未到达标称窗口上限时,准确率就下跌 30–50%。

为什么会这样?综合 Chroma 报告与后续研究综述,主要有三个相互叠加的机制:

机制一:两头清楚,中间模糊(Lost in the Middle)

模型对上下文开头和结尾的内容注意力最好,中间部分最容易被忽略。这是 2023 年就被 Liu 等人量化过的经典现象,在部分测试中造成 30% 以上的准确率下降。对 Agent 来说尤其致命:长任务里最关键的中间结论恰恰位于「中间」

机制二:注意力被稀释

Transformer 的注意力要在所有 token 两两之间分配。上下文从 1 万 token 涨到 10 万,需要处理的成对关系涨了 100 倍——每个真正重要的信号分到的「注意力预算」被大幅摊薄。

机制三:干扰项主动误导(Distractor Interference)

比「没注意到」更糟的是「注意到了错的」:语义上相似但实际无关的内容会主动把模型带偏。Agent 场景里这类干扰项特别多——被否定的旧假设、已过时的搜索结果、失败的代码尝试,都和当前任务「长得很像」。SelfCompact 论文把这点说得很直白:旧内容不是躺在那不动,它会「锚定」(anchor)后续所有生成——同一个模型,从干净上下文出发能解出的题,把它自己之前的错误推理喂回去反而解不出来。

🔑 关键认知
Context Rot 不是「窗口不够大」的问题。SII-GAIR 论文在 20 万~25.6 万窗口的模型上实测:绝大多数任务在窗口内就能完成(No Answer 比例接近 0),但准确率仍随轨迹变长而大幅下滑。买更大的窗口治不了这个病——2M 窗口的模型同样退化,只是退化得更晚、成本更高。

退化的样子:不是答错,是「放弃」和「心虚」

过去研究 Context Rot 多用「大海捞针」这类单轮长输入测试,和真实 Agent 场景(多轮、多来源、逐步累积)差别很大。上海交大/复旦 SII-GAIR 团队 2026 年 6 月底的论文《Diagnosing and Mitigating Context Rot in Long-horizon Search》第一次在真实长时程搜索任务上系统解剖了这件事。

实验设置

四个旗舰开源模型(GLM-4.7、GLM-5.0、Qwen3.5-397B-A17B、MiniMax-2.5,窗口 200K–256K),三个基准(BrowseComp、BrowseComp-Plus、xbench-DeepSearch),ReAct 框架,最多 100 轮交互,每组实验重复五次。他们给 Agent 的「终局状态」建了一个四分类:

终局状态定义通俗说法
Confident Answer给出明确答案,推理显示模型认为已满足全部条件自信交卷(可能对可能错)
Uncertain Answer给出明确答案,但推理里明说还有没验证完的点心虚交卷
Give Up声明无法解决,不给明确答案(「Unable to determine」)直接放弃
No Answer撞到窗口或轮数上限,没来得及作答没答完

三个核心发现

  1. 窗口大小不是瓶颈:BrowseComp 与 xbench-DeepSearch 上 No Answer 比例为 0——所有题都能在窗口内答完,但答得越来越差。约束在于模型在窗口内的表现,而非窗口本身。
  2. 轨迹越长,「放弃」和「心虚作答」越多:早期错误以「自信答错」为主;随轨迹变长,Give Up 和 Uncertain Incorrect 迅速上升,成为后期主要错误类型。比如 GLM-4.7 在 BrowseComp 上有 38.6% 的题直接放弃。
  3. 祸根是「内容」而非单纯的长度:剪枝实验(pruning)显示,退化不只取决于轨迹长度或轮数,还取决于累积上下文里装了什么;把累积上下文整个删掉,退化现象几乎完全消失——但代价是大量任务半途而废。这说明「删」是有效的,难的是删得恰到好处。
轨迹长度(累积 token)→ 占比 正确率(下滑) 放弃 + 心虚作答(攀升) 自信答错(早期为主,占比渐平)
定性示意:随轨迹变长,错误构成从「自信答错」转向「放弃/心虚作答」(据 SII-GAIR 论文 Figure 2 的趋势归纳,非原始数据复刻)
💬 换个说法:这个发现为什么重要?
它改变了「治什么病」的判断。如果退化表现是「答错」,你会去优化检索质量、提示词;但实际表现是「不敢答/不想答了」——模型被自己一大堆失败尝试的历史压垮,产生了类似「习得性无助」的行为。对症的药就变成:及时清掉那些失败记录,让模型别一直盯着自己的挫折史。

缓解手段全景图:三类七种方法怎么选

SII-GAIR 论文最有工程价值的部分,是把散落各处的上下文管理方法收进一个框架里,统一评测了性能、成本、对退化的抑制效果三个维度。三大类如下:

臃肿的上下文 ① 压缩 Compaction 把历史改写成摘要 模型自己写 / 辅助模型写 保留信息多·有改写成本 风险:摘要时机不对会丢关键事实 ② 裁剪 Trimming 直接丢 token,不改写 丢旧工具返回 / 轻量模型去冗余 几乎零成本·实现简单 风险:丢掉的就真没了 ③ 隔离 Isolation 信息移到主窗口之外 子Agent只回传结论 / 写文件系统 主上下文最干净·上限最高 风险:强依赖模型编排能力
上下文管理的三大类方法(据 SII-GAIR 论文 §2 Related Work 的分类整理)

评测结论(可直接抄的选型指南)

SelfCompact:让模型自己决定何时「清理大脑」

上一节的方法有个共同盲区:触发时机全是「内容盲」的。现有系统要么等 token 逼近预算才被动压缩(Claude 的 auto-compact / 用户手动 /compact),要么每 k 轮/k token 固定周期压缩(Cursor 等),要么设个百分比阈值(如 MiniMax-M2.5 在「token 用量超过最大上下文 30%」时触发)。这些规则不知道模型此刻在干嘛——可能正好在推导到一半时把它的草稿纸抽走

JHU 与 Apple 的《Self-Compacting Language Model Agents》(arXiv:2606.23525,2026-06-22)用一个数据点量化了这个伤害:固定间隔压缩下,压缩前后答案发生变化的案例中,40.4% 是「由对变错」(1009 次对→错 vs 1486 次错→对)。压缩总体有净收益,但四成的翻车率说明时机选择有巨大提升空间。

机制:一个工具 + 一份评分规则

SelfCompact 的设计极简,全程不需要微调、不需要外部裁判模型:

压缩工具(compaction tool)
把「总结当前轨迹」做成一个模型可调用的内联工具。模型发出 <summarize>,脚手架就用同一个模型把已有轨迹压成摘要,然后从「原始问题 + 摘要」继续生成——相当于换了张干净草稿纸,有效结论都抄上去了。
评分规则(rubric)
每隔 N 个 token(数学)或 N 次工具调用(搜索),脚手架追加一段简短的 rubric 提示,让模型对照轨迹给出二元判断:COMPRESSCONTINUE。规则内容一句话概括:「一个子任务刚收尾、或轨迹正在收敛时→压;正在推导中途、或卡死时→不压」,且每个条件都要求从轨迹中引用原文作为证据。
KV 缓存复用
rubric 探针和压缩指令都是「追加」而非「替换」消息,已有轨迹的 KV 缓存全程复用——判断几乎免费,压缩才是唯一真实开销。论文给出盈亏平衡点:轨迹长度/摘要长度 > 10 倍时压缩就划算(搜索场景实测 20–80 倍)。
🔑 为什么两个组件缺一不可
消融实验发现:只给工具不给 rubric,七个开源模型的表现参差不齐——有的乱压(在不该压的时候反射性调用),有的从来不压。模型天生不能可靠察觉自己的上下文正在腐坏(论文称之为 meta-cognitive gap,元认知缺口),但一段轻量的 rubric 就能补上这个缺口。这个结论很有启发性:「何时压缩」可以作为一种推理时由脚手架供给的元认知能力,不必训练进权重里。

效果数字

+18.1
竞赛数学最大提升(Qwen3.5-9B,HMMT Feb 26,对比不压缩基线)
11/12
数学基准 12 个模型×任务组合中拿下最优的格数(同等 token 预算)
+5~9 分
Agentic 搜索(BrowseComp 等)提升幅度
-30~70%
搜索场景单题 token 成本相对不压缩基线的降幅

还有一个值得记住的分析:如果有一个「先知策略」(oracle),仅仅在当前答案已正确时跳过压缩、其余照旧,准确率能到 52.9%,比固定间隔再高 11.5 分——说明自适应压缩策略还有大量未兑现的上界,这个方向不会止步于 rubric。

正常生成 推理 + 工具调用 每 N 步 rubric 探针 子任务收尾/收敛?→ 压 推导中/卡死?→ 不压 COMPRESS CONTINUE 压缩并硬重置 轨迹 → 摘要 从「问题+摘要」继续 撤掉探针消息 轨迹原样继续
SelfCompact 的「生成—探针—压缩/继续」循环(据论文 Algorithm 1 绘制)
💬 换个说法:和 Claude Code 的 /compact 有什么本质区别?
Claude Code 的 /compact 把「什么时候该压缩」这个判断交给了用户,auto-compact 则交给了 token 阈值;Cursor 等交给固定周期。SelfCompact 交还给模型本人——因为只有它「知道」自己此刻是刚验证完一个事实(可以安全存档),还是推导进行到一半(存档就等于毁尸灭迹)。rubric 的作用是把这种时机感从「模型时灵时不灵的直觉」变成「可核对的检查清单」。

工程实践现状:各家都在怎么做

把研究放回产品语境,可以看到一条清晰的演化线——触发机制越来越「懂内容」:

系统/方案触发机制归类
Claude(Anthropic)用户手动 /compact;接近窗口时 auto-compact;近期更新中,压缩过程还会继承会话的 extended thinking 配置被动/阈值压缩
Cursor固定 token 间隔触发压缩周期压缩
MiniMax-M2.5token 用量超过最大上下文 30% 时触发阈值压缩
DeepSeek 等直接丢弃旧的工具返回内容裁剪
Claude 深度调研 / 各类 multi-agent 框架子 Agent 承接子任务,只回传摘要结论;或把大块观察结果卸载到文件系统隔离
Google ADK(2026-07 博文)分层存储 + 编译视图(compiled views)+ 严格作用域:上下文按层级管理,按需编译进窗口体系化隔离+压缩
SelfCompact(研究)模型经 rubric 自判时机,自调用压缩工具自适应压缩

各家机制均引自对应论文/官方博客/文档,见文末来源清单;产品行为迭代快,以官方最新文档为准。

另一个值得注意的合流:MCP 2026-07-28 新规范把 Tasks(长时任务)转正——服务器可返回任务句柄、客户端轮询驱动。这意味着「跑几小时的 Agent」正在成为协议层的一等公民,上下文退化管理会从「高级技巧」变成「基础必修」。

怎么用到自己的 Agent 上:实操建议

综合两篇论文的结论,如果你在搭建长时程 Agent,可以按这个顺序落地:

先测量,别猜
给你的 Agent 加终局状态打点:区分「自信答对/自信答错/心虚作答/放弃/没答完」。如果「放弃+心虚」随任务时长明显上升,你就有了 Context Rot 的确诊证据(SII-GAIR 的分类法可直接抄,其代码在 GitHub: GAIR-NLP/ContextRot)。
默认组合:裁剪 + 压缩
先做便宜的:旧工具返回(尤其是大段网页/日志)在用过之后裁掉或截断;再叠加周期性压缩。这是评测中性价比最高的组合。
把压缩时机从「阈值」升级为「rubric 自判」
参考 SelfCompact:暴露一个总结工具 + 每 N 步用一段 rubric 提示让模型自己判断 COMPRESS/CONTINUE(子任务收尾才压、推导中途不压、要求引用轨迹原文作证据)。不需要微调,任何支持工具调用的模型都能上。
强模型才上子 Agent 隔离
如果底座模型较强,把搜索、浏览这类「上下文污染大户」交给子 Agent,只回传结论;弱模型则慎用,评测显示可能负收益。
摘要要「保事实」,不要「保气氛」
固定间隔压缩四成翻车的教训:摘要必须显式保留已验证的事实、当前假设、下一步计划,而不是一段模糊的意图复述。在压缩提示里明确列出这三项。
高价值任务再加一层拒绝采样
并行采样多条轨迹,丢弃出现「放弃/心虚」特征的,再做聚合——与上下文管理正交,可叠加。

常见坑与限制

⚠️ 这些坑都有实验数据背书
  • 「窗口更大就没事了」——错。退化在远未满窗时就发生,且是渐进的;大窗口只是把退化摊到更贵的账单上。
  • 压缩不是免费午餐:固定间隔压缩的答案变化中 40.4% 是负向的。压缩时机不对 = 主动删除模型正在用的工作记忆。
  • 「让模型自己决定就好」也不成立:没有 rubric 约束时,开源模型要么乱压要么不压——工具必须配规则。
  • 子 Agent 不是万能药:隔离效果强依赖底座能力,弱模型上可能不如简单裁剪。
  • 全清上下文最抑制退化,但会造成大量任务半途而废——「删多少」是精细活,不是越狠越好。

研究本身的限制(诚实说明):两篇论文的结论主要建立在开源模型上(闭源模型因加密推理轨迹无法做同类分析);SelfCompact 的 rubric 是任务定制的(数学与搜索用词不同),迁移到新任务需要自己写 rubric;两篇均为 2026 年 6 月的预印本,尚在评审中,数字有待同行复核。此外,「自压缩」在生产系统的大规模验证案例目前公开资料还很少。

学习资源清单