上下文膨胀、工具结果撑爆窗口、Agent 决策质量随轮次下降时使用——上下文压缩的三个动机(长度成本、思考质量、上下文焦虑)、压缩即检索的机制、六种压缩策略实测数据、生产级五层分层压缩、四条设计原则,以及用子 Agent 隔离代替压缩。
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-context-compression-c5fbab7e0343 ,按照其中的说明把「context-compression」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
压缩解决的是相反方向的问题:如何为上下文做减法——什么时候压缩、怎么压缩、为什么即使上下文没满也应该压缩。核心认知:上下文学习本质上是检索而非推理,压缩就是把需要思考才能得到的结论,变成可以直接检索的知识。
任务:识别并追踪 OpenAI 联合创始人的职业状态;Kimi K3(原生约 1M 窗口,实验刻意限制在 128K 预算以触发压缩)。
| 策略 | 做法 | 迭代 | Token | 压缩率 | 问题 |
|---|---|---|---|---|---|
| 无压缩 | 完整保留原始结果 | 5 次即溢出失败 | ~165,000 | — | 7 次搜索累计约 367,000 字符(平均 52,000/次),数次搜索即耗尽 128K |
| 个体摘要 | 每个结果独立生成 2-3 段摘要 | 12 | 276,608 | 10.9% | 信息碎片化,多页重复描述同一事件 |
| 组合摘要 | 所有结果合并后一份综合摘要 | 10 | 93,449 | 4.3% | 输入超长必须截断,可能丢失末尾信息 |
| 上下文感知 | 压缩提示中带入查询意图与已积累信息 | 7 | 40,157 | ~3.0% | 最优平衡点 |
| 带引用的上下文感知 | 智能压缩 + 每条事实附带来源 URL | 7 | — | — | 内容有损、索引无损,可回溯原文 |
| 自适应窗口化 | 阈值触发 + 批量压缩 + 防重复 | — | 174,601 | — | 初期保留完整原始信息,灵活性最大 |
压缩率定义为「压缩后体积 / 原文体积」,数值越小表示压得越狠。上下文感知压缩将 token 使用量减少 75% 以上。
上下文感知的提示词写法:在压缩提示中指定 Given the search query: {query} 和 Current context: {context},引导模型生成针对性摘要。实测把约 150K 字符压到 2K 字符时,仍保留创始人姓名与职位变动等后续任务需要的关键信息。
[COMPRESSED] 标记,确保已压缩内容永不被重复处理。压缩不是在单次 API 调用中修改上下文,而是在两次 API 调用之间由框架预处理消息列表:
不同信息有不同保质期,压缩策略应与预期生命周期匹配,按代价从低到高排列:
Sutskever 于 2024 年 5 月离开 OpenAI 不能压成 Sutskever 离开——时间和公司名是不可丢失的关键信息。无论哪种策略,压缩时都要显式 preserve:decisions(决策)、constraints(约束)、failures(失败路径)、citations(来源引用)。
对比同一个任务「在代码库中找到处理支付回调的函数」:
src/payment/callbacks.py 的 handle_callback,另有两处调用点」);中间过程的数万 token 随子 Agent 上下文一起丢弃。代价是子 Agent 看不到主 Agent 完整上下文,任务描述必须自包含、目标明确。Claude Code 的 Task 工具、各类 Deep Research 的检索子 Agent 都是这一模式的生产实现。
chapter2/context-compression/ — 实验 2-10:实现并对比 6 种压缩策略(no_compression / individual / combined / context_aware / citations / windowed),输出成功率、耗时、token、压缩率、溢出次数对比表;用 python experiment.py -s context_aware 单跑,-m moonshot-v1-128k 配合 CONTEXT_WINDOW_SIZE=128K 复现溢出。book/chapter2.md「上下文压缩策略」