<!-- title: 压缩即失忆：自主体上下文税实测 -->

# 压缩即失忆：自主体上下文税实测

## 概述

把上下文窗口从 20 万 token 扩到 200 万，并不能让自主智能体跑得更久——Chroma 在 18 个前沿模型上实测，**无一例外**都在窗口填满前就退化，可靠性拐点出现在 60–70%。真正杀死长程自主体的不是"装不下"，而是为了不被装满而做的每一次压缩：把 36 611 条生产消息喂给三家厂商的原生摘要，文件改动轨迹的保真度只拿到 2.19–2.45/5。本文以 Factory.ai、ACON（arXiv:2510.00615）、Mem0/LOCOMO、Claude Code、Cursor 的实测数据为骨架，拆解滚动摘要、选择性驱逐、锚定增量、失败驱动优化、层级记忆 OS 化、情景检索六条压缩路径的"失忆税"，给出不同任务长度下的压缩选型账本。

## 一、上下文腐烂的三种死法

在谈压缩之前，必须先厘清自主智能体为何要压缩。三条相互独立的失效路径，对应完全不同的应对手段。

**迷失中段（lost-in-the-middle）** 是最被机械性证实的：Liu 等人在 *TACL* 上证明，当答案文档落在 20 篇文档堆的中段，多文档问答准确率暴跌 30 个百分点以上。这并非小模型毛病——长上下文模型反而更甚，且会话越长越严重。自主体的"早期架构决策"恰好会沉到注意力最弱的中段。

**上下文漂移（context drift）** 统计上最致命：2025 年一项行业调查把 **65% 的企业智能体失败**归因于漂移或记忆丢失，而非 token 耗尽。会话开头写下的假设（"接口是 /v1/users"）在条件变更后仍然存留；失败的工具调用把错误状态写进历史；重试循环堆叠的失败态文本挤掉了成功态。智能体从不报错，只是慢慢按一张腐烂的地图行动。

**上下文投毒（context poisoning）** 是带恶意的漂移。2026 年初披露的 MINJA 攻击分四步：注入、吸收、休眠、触发。EchoLeak 事件中，邮件助手在收到被污染的"会议纪要"后，静默外泄财务数据长达数月——**窗口越大，攻击面越大**，因为几个月前的投毒内容依然存活。

> 实测结论：Chroma 的 18 模型全部退化，200K 窗口的实际可用量约 130K。压缩不是可选项，而是自主体能否活过第 50 步的前提。

## 二、对比表：六条压缩路径的失忆账本

| 压缩路径 | 代表实现 | 触发机制 | 失真程度 | 缓存友好度 | 生产采用 |
|---|---|---|---|---|---|
| 滚动摘要 | Claude Code `/compact`、Anthropic `compact_20260112` | ~150K 输入 token（约 98% 有效窗口） | 高（自由文本丢细节） | ❌ 强语义断点 | 最广 |
| 选择性驱逐 / LRU | Pi 去重插件、vLLM 前缀缓存、SGLang RadixAttention | 去重/越界 | 中（位置断裂） | ✅ 天然友好 | 推理层 |
| 锚定增量摘要 | Factory.ai anchored | T_max 触发，T_retained 截断 | 低（只压新增段） | ⚠ 带 cache_control | 编码智能体 |
| 失败驱动优化 | ACON（arXiv:2510.00615） | 连续优化 + 指南固化 | 极低 | ⚠ | 研究/前沿 |
| 预算感知调度 | BATS | HIGH/MED/LOW/CRITICAL 四档 | 自适应 | ⚠ | 实验性 |
| 层级记忆 OS 化 | Letta（MemGPT）、Mem0 | 冷热分离常驻 | 极低（外迁不丢） | ✅ 主上下稳定 | 平台型 |
| 情景检索 | Bedrock AgentCore、Letta archival | 每步语义查询 | 取决于召回率 | ✅ | 长会话 |

## 三、滚动摘要：原生方案的失忆税

最广部署、也最容易踩坑。阈值一到，调用模型把前缀压成一段叙事，替换原始历史。Anthropic 的服务端 API `compact_20260112` 与 Claude Code 的 `/compact` 都属此类，默认触发约 150K 输入 token，摘要提示词要求"写下任何有用的东西，包括状态、下一步、学到的教训"，并设 `pause_after_compaction: true` 让集成方能再注入最近 3 条工具结果。

它的致命伤是**信息丢失不可逆**。Factory.ai 用 36 611 条生产消息做横评，三家原生摘要（Factory、Anthropic、OpenAI）在"文件改动轨迹"这一项上全部只拿到 2.19–2.45/5。更刺眼的是 OpenAI：压到 **99.3%** 却质量垫底——丢掉的细节要靠重新拉取补回，token 省下的又被重新花掉。结论一句话：**压缩率是错的指标，单位保留 token 承载的任务相关信息密度才是**。

对编码智能体，Factory 列出"绝对不能丢"清单：会话意图与既定需求、高层动作序列摘要、制品轨迹（文件改动、测试结果）、能回访被截断工具输出的"面包屑"。自由文本摘要天生不擅长保留这些。

## 四、选择性驱逐：零合成成本的隐性断裂

不摘要，只丢。LRU 优先扔最旧的工具结果；重要性评分按累积注意力权重（"重击者"启发式）、key 向量 L₂ 范数或注意力熵取 top-K。NACL（ACL 2024）把随机驱逐与代理 token 注意力估计结合，Ada-KV 按注意力头自适应分配 KV 预算。

落到智能体框架层，体现为更朴素的规则：重复的工具结果（同一文件读了两次）只留最近一次；已解决的报错信息被清除。Claude Code 的 Pi 动态上下文剪枝扩展正是干这两件事。

优点是**零合成成本、无需额外模型调用**，KV 级驱逐甚至藏在推理内部，不产生 API 往返。但缺点同样尖锐：驱逐留下位置空洞与断裂的引用链，会让模型困惑；基于注意力的评分是**循环论证**——某个 token 因前几轮无关而从未被检索，到新子任务时可能恰恰最关键；LRU 还会扔掉早期架构决策这种"冷但致命"的内容。生产侧见于 vLLM 自动前缀缓存、SGLang RadixAttention，以及 Cursor 借第三方扩展做的窗口修剪。

## 五、锚定增量摘要：只压"新掉落"那一段

Factory.ai 的解法专治滚动摘要"每次重压整段前缀"的烧钱问题：**只对新掉落的消息段做摘要并合并进持久化摘要，已摘要过的段绝不重处理**。

它引入两个阈值：`T_max`（压缩触发线）与 `T_retained`（压缩后保留上限），两者之间的"压缩带"可调——带宽则压缩次数少、驱逐狠；带窄则压缩勤、力度柔。对调试类工作流，Factory 建议用更高的 `T_max`，因为错综复杂的状态依赖会贯穿整段会话，这跟规划型任务很不一样。

实测横评里它最均衡：上下文感知 4.01/5（Anthropic 3.56、OpenAI 3.64）。代价是实现复杂度——要维护"已压/未压"边界与持久摘要状态机，并非开箱即用。

## 六、失败驱动优化：ACON 把压缩当连续优化

ACON（arXiv:2510.00615）是最具技术含量的路径。它不按时间表压缩，而是把压缩当成**连续优化问题**：用完整上下文跑一遍、用压缩上下文再跑一遍、对比结果，再用 LLM 分析"压缩丢掉了什么导致失败"，把那些失败诱因固化为永久压缩指南，指导后续压缩。

数据相当漂亮：峰值 token 用量降 **26–54%**，准确度几乎零损失（AppWorld 上 56.5% vs 基线 56.0%）。对小模型更惊艳——Qwen3-14B 在 ACON 指南下准确度反升 **32–46%**，因为剔除干扰噪声的收益不亚于保留信号。

一个关键细节：**压缩历史（摘要过去轮次）可能因 KV 缓存失效反而抬高总算力成本**。ACON 发现压缩"观察"（即工具输出）更划算——工具结果往往体积大、信息密度低、很少被逐字重访。这给所有做压缩的人提了个醒：压哪里，比压多少重要。

## 七、预算感知调度：BATS 的四档变速箱

BATS（Budget-Aware Token Scheduling）给滑动窗口装了变速箱，按剩余 token 预算切四档：HIGH（≥70%）、MEDIUM（30–70%）、LOW（10–30%）、CRITICAL（<10%）。迭代数跨过阈值时，历史轨迹被替换为简练摘要，压缩烈度正比于预算压力。

效果是智能体低载时正常运转，逼近红线时自动收紧。它更适合规划型任务（早期目标需长期保留、但中段轨迹可压），对调试型那种"任意一步都可能回溯早期状态"的场景则不如锚定增量安全。BATS 目前偏实验性，但它把"压缩烈度随预算自适应"这个理念讲清楚了——这是很多生产框架悄悄在做却没显式参数化的事。

## 八、层级记忆 OS 化：把上下文当内存层级

最有架构雄心的路径，把上下文管理重写成操作系统的内存层级：快速昂贵的在上下文存"立刻要用的"，慢速便宜的外部存"其余一切"。

**Letta（MemGPT）** 最成熟，分三种记忆：Core Memory（带标签、大小上限、只读标志的在上下文记忆块，智能体用工具修改）、Archival Memory（向量库长期存储，按需检索）、Recall Memory（可搜索的对话历史）。2026 年它新增 Context Repositories——git 背书的记忆文件系统（内部名 "MemFS"），支持版本化记忆管理，多个智能体可共享同一记忆块，催生"睡眠时计算"模式：后台智能体在主智能体空闲时更新它的记忆。

**Mem0** 更工程务实，拿准确度换效率。ECAI 2025 在 LOCOMO 上对 10 种记忆方案做基准：全上下文 72.9% 准确度、9.87 秒中位延迟、每对话约 26 000 token；Mem0 选择性记忆约 67% 准确度、1.44 秒 p95、约 2 600 token——**token 省 90%、快 91%**。图增强变体 Mem0g 把准确度差距收窄到 5 个百分点内。规模上 Mem0 从 2025 Q1 的 3500 万次 API 调用涨到 Q3 的 1.86 亿次（约月增 30%），并被 AWS 选为 Agent SDK 的独家记忆提供商。

## 九、情景检索：RAG-over-turns 的召回前提

不把过往轮次留在活跃上下文，而是存进外部向量库，按需检索。每轮（或轮块）被嵌入索引；新一步时，智能体对索引发语义查询，只把 top-K 相关轮注入提示。这正是 LoCoMo 基准的评测模型——它要求智能体回答关于 300 轮、35 段会话的问题，远超任何窗口。

2025 年 2 月的立场论文《Episodic Memory is the Missing Piece for Long-Term LLM Agents》主张：情景记忆的单次学习属性（记录带时空上下文的特定过往事件）恰是当前智能体所缺，而"对轮次做 RAG"是最接近的工程近似。

优点是**近乎无限的历史深度**，只拉真正需要的，活跃上下文小而精，能扩展到跨周会话。但致命前提是**召回准确度**：一次漏召回等于一次静默失忆。Factory.ai 评测指出，RAG 基线在事实问答上表现好，却在**偏好推断与因果链**上失败——这些需要跨众多散落轮次的隐式推理，而非单段相关段落。此外每步检索都加延迟，并引入向量库依赖。生产侧见于 Bedrock AgentCore Memory（Qdrant 后端）、Letta archival、AWS LangGraph + Redis 向量检索。

## 十、压缩与缓存的根本张力

一个被低估的暗账：**压缩与提示缓存天然对立**。缓存要求前缀稳定；压缩恰恰是对前缀的硬语义断点，会让此前所有缓存前缀作废。一次 150K 触发的压缩，意味着下一轮要重新"暖"那块前缀，缓存的省钱效应瞬间清零。

缓解办法是把缓存断点放在易变对话区之前——稳定系统提示前缀 + append-only 断点。Anthropic 的服务端 API 正是出于这个原因，在压缩块上原生打了 `cache_control` 标记。这意味着最优压缩策略不是"压得最狠"，而是"压得最稳"：每次压缩尽量只动尾部、保住头部前缀的缓存命中。Zylos 给出生产栈模板：稳定系统前缀 + append-only 缓存断点 → 约 75% 阈值做结构化压缩 → 长寿事实外迁外部记忆 → 跨会话用情景检索续接。

## 十一、压缩栈架构图

```mermaid
flowchart TB
    TASK["用户长程任务"] --> LOOP["自主体 Agent Loop"]
    subgraph CTX["上下文窗口 200K · 实际可靠 ~130K"]
        direction TB
        L1["L1 系统提示+工具定义 · 缓存命中区"]
        L2["L2 摘要块 · 压缩产物 · 有损"]
        L3["L3 最近K轮 · 原文 · 连贯区"]
    end
    LOOP <-->|每步读写| CTX
    L2 -->|每次压缩 失效缓存前缀| WARN["⚠ 缓存断点税"]
    subgraph EXT["外部记忆 旁路存储"]
        direction LR
        M1["Core 可编辑块"]
        M2["Archival 向量库·按需检索"]
        M3["Recall 可搜索历史"]
    end
    LOOP <-->|冷热分离不丢数据| EXT
    LOOP -->|~75% 或 T_max 阈值| SCHED["压缩调度"]
    subgraph SCHED["压缩调度 多策略可插拔"]
        direction LR
        S1["滚动摘要"]
        S2["锚定增量"]
        S3["ACON 失败驱动"]
        S4["LRU 驱逐"]
    end
    SCHED --> L2
    SCHED -->|外迁冷数据| M2
    M2 -->|语义查询召回| LOOP
```

## 十二、生产团队真正在做什么

文档与生产实现之间存在显著落差，值得逐家看清。

**Anthropic Claude Code** 用混合即时加载架构：`CLAUDE.md` 文件作为静态上下文预加载，但智能体随后用 glob/grep 动态拉取文件内容，按需取用。原则是——在上下文里只留轻量标识（文件路径、存储查询、链接），运行时动态加载而非预载全部。对长程任务，推荐 Harness 显式外置进度跟踪（JSON 特性清单、git 提交史、`claude-progress.txt`），让每次会话能从状态文件冷启动，而不依赖隐式上下文连续性。

**Cursor** 的动态上下文发现经生产 A/B 测试，在调用 MCP 工具的运行中把总 token 降了 **46.9%**：智能体静态只收工具名，完整描述按需发现；长工具输出写盘，智能体用 tail + 选择性读取而非整段入上下文；聊天历史存成可搜索文件，压缩有损时能 grep 历史找回细节，而不是从退化上下文里重推。

**Factory.ai** 把压缩量化为 T_max / T_retained 两阈值，并按工作流类型调参。**AWS** 2025 年 5 月选 Mem0 作 Agent SDK 独家记忆层。这些都不是单一技术胜利，而是**按任务画像选压缩组合**的胜利。

## 十三、可观测性：在腐烂杀死智能体前发现它

上下文管理最难的部分是知道它何时在失效，而当前工具基本是定性的。从业者常用的信号包括：模型开始重复请求同一工具结果（LRU 驱逐过头的征兆）、引用早前已撤销的决定（漂移）、或对近期明确指令反应迟钝（中段淹没）。一个被反复强调的实践是**把压缩链显式化**——每次压缩落一个可审计的摘要块、记录被外迁/丢弃了什么，让"失忆"从静默变成可追溯。Factory 的 36 611 条消息评测之所以有价值，正是因为它把"制品追踪 2.19/5"这个失败量化了出来；没有这种评测，压缩策略的优劣全凭体感。

## 推荐方案

**短会话（<30 步，单文件级任务）**：不压缩。直接用原生滚动摘要兜底即可，Cursor/Claude Code 默认行为足够。省下的工程复杂度比省下的 token 值钱。

**中会话（30–150 步，多文件调试）**：上锚定增量摘要 + 显式 `T_max`/`T_retained` 压缩带。务必保留 Factory 的"必保清单"（意图、动作序列、制品轨迹、面包屑），并把缓存断点压在系统提示之后。若预算敏感，叠加 Pi 式去重驱逐先削冗余。

**长程任务（跨小时/跨天）**：必须 OS 化层级记忆。Core 块存活跃事实，Archival 向量库存冷数据，Recall 存可搜索历史；进度外置为状态文件支持冷启动。Mem0（省 token）或 Letta（保真度 + sleep-time compute）二选一，看你是要省钱还是要可追溯。

**跨会话/需长期记忆的产品**：情景检索打底（Bedrock AgentCore 或自建），但只在事实问答上信任它——偏好与因果推断必须靠 Core 记忆块显式维护，不能赌召回。

**前沿玩家**：关注 ACON 的失败驱动闭环与 BATS 的预算自适应调度，两者代表了压缩从"按阈值一刀切"走向"按任务画像连续优化"的方向。

**一句话底线**：压扁即失忆——压缩率从不是目标，**单位保留 token 的任务信息密度**才是。任何只汇报"压到 X%"而不汇报"丢了哪些制品轨迹、缓存重暖几次"的压缩策略，都是在用未来的隐性故障换眼前的 token 账单。

## 参考来源

1. [ACON: Optimizing Context Compression for Long-horizon LLM Agents (arXiv:2510.00615)](https://arxiv.org/abs/2510.00615) — 失败驱动压缩优化，26–54% token 削减近乎零准确度损失，观察压缩优于历史压缩
2. [Agent Context Compaction for Long-Running Sessions — Zylos Research](https://zylos.ai/research/2026-04-21-agent-context-compaction-long-running-sessions/) — O(N²) token 成本、四策略全景、缓存与压缩张力、75% 阈值生产栈
3. [Agent Context Compression 2026 — AgentMarketCap](https://agentmarketcap.ai/blog/2026/04/10/agent-context-compression-techniques-2026) — Chroma 18 模型实测、60–70% 可靠性拐点、65% 漂移致败、BATS 四档调度
4. [Context Management for Deep Agents — LangChain](https://www.langchain.com/blog/context-management-for-deepagents) — Deep Agents SDK 的卸载、摘要与上下文腐烂治理
5. [Context Window Management for Long-Running Agents — Machine Learning Mastery](https://machinelearningmastery.com/context-window-management-for-long-running-agents-strategies-and-tradeoffs/) — 滑动窗口、摘要、检索三策略的权衡与选型
6. [Factory.ai / Letta / Mem0 评测数据汇编](https://agentmarketcap.ai/blog/2026/04/10/agent-context-compression-techniques-2026) — 36 611 条消息横评（制品追踪 2.19–2.45/5）、Mem0 LOCOMO 基准（省 90% token）、Cursor 动态发现降 46.9%

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
