Previous
Day 07 · Structured Prompt Design
Next
Day 09 · Agent Skills and Reusable Context
上下文工程
Day 0860 minutesAI Agent 动手实践

Day 08 - Context Compression and Summarization

今日目标

能设计摘要、裁剪与分层记忆策略,控制长任务上下文膨胀。

学习安排

时间模块做什么
0-10 分钟核心概念通读当天术语表,圈出 3 个你最想在工作里用上的概念。
10-25 分钟阅读输入精读当天章节重点,只抓问题、思路、结论。
25-45 分钟实践任务动手完成输出模板,必须产出一份可复用产物。
45-55 分钟追问与反思回答追问练习,标记卡住的概念。
55-60 分钟复盘与作业整理自检清单,定下明天要复习的一点。

核心概念

术语中文解释应用场景
context inflation上下文膨胀:长对话与长任务中历史信息不断累积,上下文越来越大,成本上升、噪声增加。50 轮排查对话后,历史记录比任务本身还长。
summarization摘要:用模型把历史内容压缩为更短的摘要,保留关键信息、丢弃细节。把两小时排查记录压缩成 10 行要点。
truncation裁剪:直接丢弃最旧或最不相关的历史片段,简单但可能丢关键信息。只保留最近 20 轮对话,更早的整段丢弃。
hierarchical memory分层记忆:维护多层摘要(完整摘要、关键摘要、当前结论),按需取用对应层级。第一层留全量要点,最后一层只有一句话结论。
rolling window滚动窗口:固定保留最近 N 轮完整对话,更早内容用摘要替代,是裁剪与摘要的组合。每 10 轮对话压一次摘要,窗口内永远只放最近 10 轮。
KV cacheKV 缓存:模型已计算过的键值缓存,长上下文复用可减少重复计算,但缓存占用随上下文变长而增加。长任务的成本主要来自 KV cache 占用,不只是 token 费用。
sub-agent isolation子 Agent 隔离:子任务在独立上下文中执行,只把结论回传主 Agent,避免上下文互相污染。让子 Agent 单独查日志,只把结果摘要拿回主流程。
compression risk压缩风险:摘要可能丢失关键数字、引入错误信息,压缩本身也可能产生幻觉。摘要里 P95 从 900ms 变成 90ms,结论就完全错了。
critical information关键信息:绝不能丢的信息,如用户指令、数字结论、待办事项、待验证假设。压测结论 3 项、待验证假设 2 条,摘要里必须原样保留。

阅读重点

  • 对应章节:第 2 章中上下文压缩、KV Cache、分层压缩与子 Agent 隔离等内容。
  • 关注点:
  • 为什么上下文不是越长越好:成本、噪声、注意力稀释三个代价。
  • 摘要、裁剪、滚动窗口三种策略各自的代价与适用场景。
  • KV cache 如何影响长上下文任务的成本与延迟。
  • 子 Agent 隔离解决什么问题:上下文污染与互相干扰。
  • 补充材料:
  • Anthropic 的 context engineering 文档中关于长上下文任务与压缩的部分。
  • 模型 API 文档中 prompt caching 的说明,理解 KV cache 在成本上的作用。

理解检查

  • 为什么上下文不是越长越好?长上下文会带来哪些具体代价?
  • 摘要会带来什么风险?举一个压缩后信息变错的例子。
  • 哪些内容绝不能被压缩掉?
  • 子 Agent 上下文隔离解决什么问题?它和主 Agent 的上下文是什么关系?

实践任务

背景:上个月一次 Nginx CPU 升高排查持续了两个小时,日志、操作记录和中间结论混在一起有 35 行。直接把整段文字塞给模型,它总是抓不住重点。今天把这段记录压缩成三层摘要。

步骤:

  • 准备原始记录:时间线、操作、观测数据、中间结论,30 行以上。
  • 第一层:写 10 行完整摘要,保留时间线、关键数字、做过哪些操作。
  • 第二层:写 3 行关键摘要,只保留当前状态、关键证据、待验证假设。
  • 第三层:写 1 行当前结论,供下一次对话直接使用。
  • 三层之间做一致性检查:第二、三层的数字必须与第一层一致。
  • 保存为 three-layer-summary-nginx-cpu.md。

产出:一份三层摘要,以及一份一致性检查记录。

输出模板

原始记录长度:[行数/字数],记录时间范围:[起止时间]。

第一层:完整摘要(约 10 行)
- 时间线:[按时间列出关键事件]。
- 关键操作:[执行过的排查动作]。
- 观测数据:[CPU、TPS、错误率等关键数字]。
- 中间结论:[每个阶段得出的结论与修正]。

第二层:关键摘要(约 3 行)
- 当前状态:[现在已知什么]。
- 关键证据:[支撑当前判断的数据]。
- 待验证假设:[下一步要确认什么]。

第三层:当前结论(1 行)
[一句话结论 + 下一步动作]。

示范输出

原始记录长度:35 行,记录时间范围:2026-08-12 10:00 至 12:30。

第一层:完整摘要(约 10 行)
- 10:00 开启 WAF 后 Nginx CPU 从 30% 升到 85%,持续 30 分钟。
- 10:20 检查 access log,发现 /api/pay 请求量增加 3 倍。
- 10:40 查询 upstream 响应时间,P95 从 200ms 升到 900ms。
- 11:00 对比 WAF 开关,关闭 WAF 后 CPU 回落到 35%。
- 11:10 复测三组请求:开启 WAF 时 CPU 高、关闭时正常,结论可复现。
- 11:30 查看 WAF 规则,怀疑正则匹配在长 URL 上开销大。
- 11:50 用 10 万次长 URL 请求复现,确认 CPU 与 URL 长度正相关。
- 12:10 结论:WAF 正则匹配长 URL 是 CPU 升高的主要原因。
- 12:20 待验证:修改正则或加长度限制后,峰值是否消失。
- 12:30 已同步开发,等待修复后回归验证。

第二层:关键摘要(约 3 行)
- 当前状态:已定位为 WAF 正则匹配长 URL 导致 CPU 升高。
- 关键证据:开关 WAF 前后 CPU 从 85% 回到 35%,长 URL 复现实验确认相关。
- 待验证假设:调整正则或限制 URL 长度后峰值消失。

第三层:当前结论(1 行)
WAF 正则匹配长 URL 是 CPU 升高的主因,等开发修复后做回归验证。

追问练习

  • 上下文压缩和 RAG 有什么区别?什么情况下该用哪一个?
  • 如果第二层摘要和原始记录冲突了,你会信谁?怎么避免这种冲突发生?
  • 子 Agent 隔离后,主 Agent 如何判断该把哪些内容保留在主上下文里?
  • 一个 50 轮的长任务,你会在第几轮触发第一次压缩?依据是什么?

常见误区

  • 上下文不是越多越好:堆历史等于堆噪声和成本,也更容易让模型引用过期信息。
  • 摘要只做一次就够:长任务需要递归压缩,旧摘要也会随任务推进而过时。
  • 压缩时只留「看起来重要」的段落:关键数字丢了就无法挽回。
  • 认为裁剪永远是最差策略:对最旧且无关的内容,裁剪比摘要更省、更可靠。

进阶扩展

  • KV cache 与 prompt caching:长任务成本不只是 token 费用,缓存命中与失效策略同样影响延迟与账单。
  • 动态上下文注入:不把全部历史注入,而是按当前步骤检索需要的部分。
  • 压缩质量评估:定期把摘要与原记录对比,统计丢失或改动的关键信息。

今日作业

  • 完成三层摘要,保存为可复用文件。
  • 对三层做一致性检查,记录发现的任何矛盾。
  • 挑一条你工作里的长排查记录,用模板再压缩一遍。

自检清单

Previous
Day 07 · Structured Prompt Design
Next
Day 09 · Agent Skills and Reusable Context