前面章节解决往上下文增加内容(提示工程、Skills、Agent状态栏);本节解决从上下文删减内容。即使窗口没有占满,也需要做压缩优化。

2.7.1 压缩的两大动机

  1. 硬件与成本约束
    上下文窗口容量有限;工具返回结果经常产生海量token。token越多,API开销越高、推理延迟越高,最终触发窗口溢出,任务直接中断。

  2. 提升模型思考质量(容易被忽略)
    即使窗口充足,大量原始杂乱信息堆积,会分散注意力。

模型需要反复从数万token原始记录检索提取信息;提前做结构化摘要,把思考得到的结论直接放入上下文,后续可以直接检索使用,减少反复推理开销。

关键概念:上下文腐化 Context Rot

  • 上下文溢出:token总数超过窗口上限,装不下。
  • 上下文腐化装得下,但是找不到。上下文变长,注意力被大量无关内容稀释;关键信息权重降低,模型遗漏信息、重复处理已经解决的问题,决策质量悄悄下滑。

“大海捞针”现象:关键信息埋藏在长文本中部,模型检索失败。

底层认知:上下文学习本质更偏向检索而非推理。注意力擅长查找片段,不擅长单次前向传播做统计归纳;思维链可以完成归纳,但每次查询都要重新计算,消耗大量思考token。

  • Agent状态栏:代码确定性预计算结论写入上下文
  • 上下文压缩:调用LLM,把大段原始记录蒸馏成摘要
    二者是同一思想的正反两面,为“半残检索引擎”补上提炼能力。

2.7.2 压缩与KV Cache的权衡

KV Cache要求上下文前缀尽量不变,而压缩会替换中间消息,看起来互相矛盾。

压缩发生在两次API调用之间,框架预处理消息列表,不在单次推理过程中修改上下文:

  1. system提示词、工具定义完全不动,静态前缀保留,持续命中缓存。
  2. 只替换/压缩tool_result工具返回内容;替换点之后的缓存失效,替换点之前依然有效
  3. 取舍:不压缩会直接任务失败;压缩会损失一部分缓存,但换取可控长度与更高信息密度。

不要每一轮都压缩;建议接近阈值时批量压缩,减少缓存重建次数。

实验2‑9:六种上下文压缩策略对比

实验条件:128K上下文窗口,多轮搜索聚合任务。

策略 核心做法 特点
无压缩 完整保留全部原始工具输出 token快速溢出,任务失败
个体摘要 每个工具结果独立生成摘要 信息碎片化,存在大量重复
组合摘要 全部结果合并后统一摘要 超长输入容易截断丢失信息
上下文感知压缩 结合当前查询意图+已有上下文做定向摘要 效果最优,压缩率0.9%;过滤无关重复内容,适配任务不同阶段信息需求
感知+引用 上下文感知压缩 + 保留URL溯源标记 有损压缩,无损索引;可回溯原始来源,token开销上升
自适应窗口 达到窗口80%阈值才批量压缩;未触发时完整保留原文 最大化保留原始信息,适合前期需要大量信息收集场景

最优实践:上下文感知压缩,压缩同时参考当前任务目标,不是简单粗暴文本概括。

2.7.3 生产级分层压缩机制(Claude Code参考)

多层策略,优先低成本低扰动方案,高开销策略作为兜底

  1. 工具结果预算控制:大体积输出落磁盘,上下文只放摘要预览;冻结替换决策保证缓存一致性。
  2. 噪声直接删除:完全无价值噪声直接删掉,不为噪声生成摘要(摘要本身消耗token)。
  3. API层微压缩:服务端直接删除指定消息;本地消息不变。会触发一次缓存重建,适合临近溢出时使用。
  4. 归档式摘要:逐轮结构化归档,保留每一轮独立记录,维持对话脉络。
  5. 全量LLM压缩(兜底):分两级,优先压缩会话记忆,失败再全量压缩;配置熔断器,防止陷入反复压缩失败循环。

2.7.4 四条压缩设计原则

  1. 信息价值非均匀分布:关键决策 > 支撑证据 > 噪声(广告、导航栏)。
  2. 语义完整性:压缩不能丢失关键实体(时间、主体、人名)。
  3. 任务相关性:同一份原文,不同任务目标,压缩结果应当不同。
  4. 压缩即理解:压缩模块本身需要强语义理解;压缩输出必须可审查。

⚠️ 压缩保留优先级清单(生产必须遵守)

  1. 架构决策、关键约束:禁止摘要,完整保留
  2. 文件变更列表、关键修改记录:完整保留
  3. 验证状态 pass/fail:必须保留
  4. 未解决TODO、回滚笔记:必须保留
  5. 普通工具输出:可删除,仅保留结论
  6. UUID、hash、URL、文件名等标识符:原样保留,不可改写

风险:LLM倾向丢弃“可以重新获取”的信息,容易丢掉早期约束、失败路径、决策理由。

2.7.5 隔离优于压缩:子Agent上下文隔离

压缩:信息已经进入主上下文,事后做有损减法。
子Agent隔离:海量中间信息根本不进入主上下文,釜底抽薪。

工作流程:

  1. 主Agent把高输出体量子任务(大规模代码检索、大批量文档读取)委派给独立子Agent。
  2. 子Agent拥有独立上下文窗口,完整执行探索过程。
  3. 仅把几百token的最终摘要返回主Agent;子Agent内部全部中间过程直接丢弃。

收益:

  • 主Agent的KV Cache完全不受中间噪声污染。
  • 从源头避免上下文腐化。

代价:

  • 子Agent看不到主Agent完整会话;下发任务描述必须自包含,信息完备。

生产落地:Claude Code Task工具、Deep Research深度研究系统。

本章小节(2.4‑2.7 提示工程与上下文管理核心脉络)

  1. 静态系统提示词会随业务膨胀,带来token浪费、注意力稀释,演进为动态提示词。
  2. Agent Skills:三层渐进披露架构,元数据常驻,完整流程按需加载;保护KV Cache,实现模块化能力包。
  3. Agent状态栏:框架注入结构化元信息到上下文末尾;把隐式状态转为显式可读知识;解决计数遗忘、约束失效;需要配套操作策略,不能只裸放读数。
  4. 上下文压缩:对抗窗口溢出与上下文腐化;优先上下文感知压缩、分层压缩;更高阶方案:子Agent上下文隔离。

底层统一认知:大模型上下文擅长检索,不擅长自动归纳统计;主动做提炼、结构化,而不是指望模型自己从海量原始文本挖掘关键信息

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐