1 上下文压缩策略
1.1 为什么需要压缩:不只是长度问题
前文提示工程、Skills、Agent状态栏都是向上下文新增信息;上下文压缩是对上下文做减法,解决多轮交互上下文膨胀问题,即使窗口未满也需要压缩。 压缩存在两类核心动机:
- 资源约束:上下文token窗口存在上限,工具返回结果体量巨大,容易撑满窗口造成任务中断;token数量直接决定API成本与推理延迟。
- 提升模型推理质量:大量原始信息混杂在上下文,模型检索关键信息困难。通过LLM做结构化总结,产出精炼知识,模型后续决策可直接使用,无需反复从海量原文提取信息。
底层基础:上下文学习的内在机制更偏向检索而非推理。
1.2 上下文学习的内部机制:检索而非推理
- 概念释义:注意力机制擅长查找上下文片段,但单次前向传播中难以自动归纳统计。模型可依靠思维链完成统计,但每次查询都需要重复遍历原文,产生大量思考token。
- Agent状态栏:新增经代码确定性计算得到的结论;
- 上下文压缩:替换臃肿原始记录为蒸馏后的结论; 二者属于同一思路,补齐检索引擎缺失的提炼能力,区别在于维护主体(代码/LLM)。
- 上下文腐化(Context Rot):上下文并未溢出,但大量无关内容稀释注意力权重,模型找不到关键信息,决策质量静默下降。和上下文溢出不同:溢出=装不下;腐化=装得下但是找不到,也就是“大海捞针”现象。
- 设计思路:不要等待模型自主从长文本提炼,主动显式完成知识蒸馏。上下文学习属于临时快速适配,不会修改模型参数,会话结束适配效果消失,和参数训练存在本质差异。
1.3 压缩与KV Cache:看似矛盾,实则互补
KV Cache要求上下文前缀尽量固定,压缩修改历史消息,存在明确工程边界:
- 执行时机:两轮API调用之间做预处理,不能在单次API调用中途修改上下文。
- 静态内容保护:System Prompt、工具定义保持不变,作为静态前缀持续缓存。
- 压缩对象:仅替换历史tool results。替换点之后KV缓存失效,替换点之前缓存保留。
- 取舍策略:频繁压缩会反复重建缓存,推荐临近token阈值时批量压缩,不建议每轮压缩。
1.4 六种上下文压缩策略对比
实验任务:追踪OpenAI联合创始人职业状态,限定128K上下文窗口
- 无压缩:全部原始工具结果保留。几轮迭代就超出token上限,任务失败。
- 非任务感知压缩
- 独立个体摘要:每条搜索单独生成摘要,信息碎片化,重复内容浪费token;
- 组合合并摘要:全部结果合并后统一摘要,超长输入会截断,丢失尾部信息; 共性缺陷:缺少语义理解,无法识别信息相关性。
- 上下文感知压缩:结合当前查询意图、已有信息定向提炼摘要;跟随任务阶段(信息收集→事实核验→整合)动态调整摘要侧重点,大幅降低token消耗。
- 带引用的上下文感知压缩:摘要附带来源URL。正文语义有损压缩,保留溯源索引,支持回溯原文;代价是token开销上升。
- 自适应窗口化
- 阈值触发:token超过窗口80%启动压缩;
- 批量压缩:触发后一次性压缩全部未处理工具结果;
- 防重复标记:添加
[COMPRESSED]标记,避免重复压缩; 优势:前期完整保留原始信息,保障信息采集阶段的完整性。
1.5 生产级分层压缩机制
生产环境采用分层组合策略,信息的压缩方案匹配信息生命周期;优先级:低成本在前,作为首选;高成本在后,作为兜底。
- 工具结果预算控制:大容量工具输出落盘存储,上下文仅放摘要预览;内容冻结,保障缓存一致性。
- 噪声直接删除:无价值冗余内容直接删除,不为噪声生成摘要,节约算力。
- API层微压缩:服务端删除指定历史工具消息;会触发一次缓存重建,适合临近溢出时一次性执行。
- 归档式摘要:逐轮结构化摘要,保留每一轮独立记录,维持任务完整逻辑链路。
- 全量LLM压缩(兜底手段):分会话记忆压缩、全量压缩两个阶段;配置熔断机制,防止会话陷入无限压缩循环,持续消耗资源。
1.6 压缩策略四条设计原则
- 信息价值非均匀分布:关键决策信息 > 佐证证据 > 噪声(网页导航、广告等)。
- 语义完整性:压缩不可丢失主体、时间、事件属性等关键限定信息。
- 任务相关性:同一段文本,面向不同任务目标,压缩结果不同。
- 压缩即理解:压缩模块需要深层语义理解;压缩产物结构化,支持人工复核。
1.6.1 压缩信息保留优先级
- 最高优先级(原样保留,禁止摘要):架构决策与关键约束;文件变更清单;验证结果(pass/fail);未解决TODO、回滚笔记;UUID、hash、URL、文件名、端口等标识符。
- 可压缩内容:工具原始输出,仅保留结论。
1.7 隔离优于压缩:子Agent上下文隔离
压缩属于事后补救,信息已经进入主上下文再精简;更优方案是事前隔离。 主Agent将大文件读取、大范围检索这类会产生海量中间文本的任务委派给独立子Agent。子Agent拥有独立上下文,自主完成探索,仅将简短结论传回主Agent;海量中间数据不进入主上下文,完全不破坏主Agent的KV缓存。
- 优点:源头避免主上下文膨胀,减少压缩操作;
- 局限:子Agent无法看到完整主会话上下文,下发任务描述必须自包含、目标清晰;
- 落地案例:Claude Code Task工具、Deep Research检索子Agent。
核心观点:上下文信息的组织方式,对Agent最终效果的影响,往往超过模型本身能力。 整套上下文工程体系:
- KV Cache:定义上下文修改底层约束;
- 提示工程、Agent Skills:静态指令、按需加载领域能力;
- Agent状态栏:隐式任务状态转为显式元信息;
- 上下文压缩:解决上下文持续膨胀,把原始数据提炼为高密度结构化知识;
- 子Agent隔离:源头阻断海量冗余信息进入主上下文。
统一思想:采用显式、工程化的知识管理,主动提炼结构化知识,而不是让模型被动在海量文本检索。契合《苦涩的教训》理念:高效利用算力的通用工程方法具备长期优势。 整套技术属于Harness框架【上下文与工具】模块实现,服务于上下文五组件基础框架。