Context Compaction 中文一般叫「上下文压缩」或「压紧」。它解决的是一个很具体的麻烦:会话跑久了,历史消息、工具输出、读进来的文件会不断累积,迟早把上下文窗口撑满,任务就跑不下去了。
压缩的做法是:在快满的时候停一下,让模型把前面发生的事总结成一份摘要,然后用这份摘要替换掉原来那一大堆消息,会话带着摘要继续。你在 AI 编程工具里看到的「正在压缩上下文」,就是这件事。
先用一句话抓住它
Context Compaction 是在会话快撑满时,用一份摘要换掉冗长的历史,让任务能接着跑。
生活里的类比是长会议的会议纪要。开了三小时,没人会把逐字记录带到下一场;秘书会整理出「已决事项、待办、责任人、下一步」,下一场会拿着这份纪要开。压缩做的是同一件事:留结论和状态,丢过程和原始材料。
为什么会出现这个词
Agent 类应用把这个问题放大了。普通聊天几十轮就结束了,但一个跑批量任务的 Agent 可能要连续处理几十个条目,每处理一个就产生若干次工具调用和大段返回值。输入 token 随轮次线性增长,很快就顶到上限。
Anthropic 的官方示例里有一组对比数据能说明规模:同一个处理五张客服工单的流程,不开压缩时总消耗约 20.9 万 token、上下文里堆了 73 条消息;开启压缩后总消耗约 8.6 万 token,降幅接近六成,期间触发了两次压缩,每次压缩后消息数会被收回到一条。
flowchart LR
Turn["持续对话<br/>历史不断累积"] --> Check{"token 是否<br/>超过阈值?"}
Check -->|否| Turn
Check -->|是| Sum["请模型总结进度"]
Sum --> Replace["用摘要替换历史"]
Replace --> Cont["带着摘要继续执行"]
Cont --> Turn它通常包含什么
以 Claude Agent SDK 的自动压缩为例,流程大致是:逐轮监控 token 用量;累计用量超过设定阈值时,插入一条要求总结进度的消息;模型生成一份用 <summary> 包裹的摘要;清空原有历史,只留这份摘要;然后带着压缩后的上下文继续处理。
摘要里通常保留:已完成条目及其结果、分类和优先级、进度(做了多少、还剩多少)、发现的关键规律、以及下一步要做什么。被丢掉的通常是:知识库检索的完整结果、工具的完整输出、分类时的详细推理过程、草稿全文,以及各种中间处理细节。
阈值是可调的。官方给的经验是:低阈值(几千到两万 token)适合逐条处理实体的流水线,压得频繁但积累少;中等(五万到十万)适合有明确阶段的流程;高阈值(十万以上)适合需要大量历史背景的任务。还可以自定义总结用的模型和总结提示词,指定哪些信息必须留下。
和上下文窗口、RAG 的区别
上下文窗口是容量上限,压缩是撞到上限时的应对手段,两者是问题和对策的关系。RAG 也在处理「信息装不下」,但方向相反:RAG 是从外部海量资料里挑需要的进来,压缩是把窗口里已经有的东西缩小。一个管进料,一个管清理。
在上下文工程的四类策略里,压缩属于「compress」这一类;RAG 属于「select」;把中间结论写到文件里属于「write」;拆给子智能体属于「isolate」。实际系统里这四类通常一起用。
和长会话体验的关系
用户能直接感受到压缩的存在:AI 编程工具跑久了会「忘记」前面提过的某个细节,原因往往就是那段内容在压缩时被判为不重要而丢掉了。摘要保留的是结论,不是原文,所以任何依赖原始细节的后续操作都可能落空。
这也是为什么很多工具允许你在压缩前手动介入——在一个干净的节点主动触发压缩,比等到窗口快爆时被动触发效果更好:前者是在信息还清晰的时候做取舍,后者是在最不合适的时刻要求模型把一个几乎满的窗口塞进一段话。
容易误解的地方
第一个误解是把压缩当成无损。它按定义就是有损的,官方文档里也明确列为局限。需要完整审计链路的场景(合规记录、事故复盘、需要逐步回溯的调试)不适合依赖压缩,应该把过程另外落盘。
第二个误解是「压缩了就等于省钱」。生成摘要本身也要花 token,压缩太频繁反而增加开销。省的是后续每一轮都要重复携带的那部分历史,所以只有在会话足够长时才划算。
第三个误解是以为压缩会保护所有东西。不同工具的实现不一样,有些只压对话历史,启动时从磁盘加载的规则文件会在压缩后重新注入,而会话中途读进来的文件则会消失,直到有人重新读一遍。用之前值得确认一下你用的工具具体保留了什么。
怎么判断它该不该用
看任务形态。逐条处理独立实体(工单、商品、文件、issue)、有明确阶段划分的多步流程、长时间的批量分析和分块数据处理,都很适合压缩——这些任务的共同点是「前面的细节做完就不再需要,只需要知道结论」。
反过来,需要完整留痕的任务、强依赖原始上下文逐字内容的任务,以及那些服务端自带采样循环、压缩机制配合不好的调用方式,就要谨慎。一个折中做法是:压缩照开,但把关键中间产物同时写到外部文件或看板上,让摘要负责「继续跑」,外部存储负责「查得回」。