一句话定义
长任务上下文工程的核心拳法是三招:压缩(把旧历史蒸馏成摘要)、分层(按存活期把信息放进不同载体)、即时检索(just-in-time:内容存外部,用时才取)——目标只有一个:让窗口里永远只留"此刻决策需要的信息"。
为什么重要
kp-003 讲了问题(腐烂、超限、稀释),本篇给解法。它是区分"demo 能跑"与"长任务能活"的分水岭:一次 3 小时的编程会话可能产生数百万 token 的工具输出,不经处理任何窗口都会爆。Claude Code 能在数千轮交互中保持"记得自己是谁"(kp-028),靠的正是这套机制的组合,而非更大的窗口。
前置知识
kp-003(增删压隔离四操作)、kp-015(记忆分层)。
核心概念
招式一:压缩(Compaction)
触发时机通常是"窗口用量到阈值"(如 80%)。流程:
当前历史(50K token)
→ 单独一次"压缩调用":小模型/快模型把历史蒸馏为
【任务目标|已完成与结论|关键文件路径|未决问题|用户偏好】
→ 新上下文 = 系统提示 + 压缩摘要 + 最近 N 轮原文
设计要点:保留最近几轮原文(短期细节最相关);摘要带文件路径等指针(细节不在摘要里,但知道去哪找);压缩是有损操作,关键事实(用户明确的要求)应重复注入(系统提示层)。
Claude Code 的 compaction 就是这个模式:接近上限时自动把对话压缩为摘要续跑,用户也可手动触发 /compact。
招式二:分层(信息的存活期决定载体)
| 层 | 载体 | 存活期 | 例子 |
|---|---|---|---|
| 常驻层 | 系统提示 | 整个会话 | 身份、目标、安全守则 |
| 工作层 | 消息历史 | 当前任务 | 最近推理与工具结果 |
| 沉淀层 | 文件/记忆(kp-015) | 跨任务跨会话 | CLAUDE.md、摘要文件 |
| 归档层 | 外部存储 + 检索(kp-016) | 永久 | 向量库、日志库 |
原则:信息只在需要它的层停留。中间结果写到文件(沉淀层),窗口里只留路径——这是 kp-013 计划的 deliverable 为什么建议是文件的原因。
招式三:即时检索(Just-in-Time)
反模式是把"可能有用"的内容预取进上下文(just-in-case,以防万一)。JIT 模式:
所有原文(网页/代码库/历史)→ 留在外部
窗口里只放:目录、索引、文件树、摘要
Agent 需要细节时 → 用工具按需取(read_file / grep / 检索)
Claude Code 操作代码库就是 JIT:不把整个 repo 塞进窗口,给的是目录树与搜索工具,模型自己决定看哪个文件。工具(grep/read)在这里充当了"上下文的分页器"。
组合拳:一个长任务的上下文策略
系统提示(0.5K):目标 + 守则 + 当前进度指针
计划文件(todo,每步重写):我在哪、下一步
工作区文件:所有中间产物(数据、草稿、代码)
窗口消息:最近 3-5 个工具结果 + 当前推理
>80% 窗口 → compaction;子任务(脏活)→ 子 Agent 隔离(kp-019)
原理与机制
为什么压缩必须"摘要 + 指针"而不能只靠摘要?因为摘要是有损的:丢掉的细节里总有一些后面要用。指针(文件路径、URL、ID)是无损的间接层——细节没有消失,只是移出了窗口,需要时 O(1) 取回。这是计算机科学的经典招数(虚拟内存的页表、数据库的索引)在上下文上的重演:窗口 = RAM,外部存储 = 磁盘,工具 = 缺页处理器。
JIT 的有效性依赖一个能力前提:模型要会"知道自己缺什么信息"——目录与摘要提供了足够的信息让它形成"去哪找什么"的判断。目录树看似占几百 token,但它换取的是对数级的检索导航能力,杠杆极高。
直观类比
压缩 = 项目周会前把三周的聊天记录整理成一页纪要(旧细节收进文件夹,纪要里留着"详见 docs/xxx"的引用);分层 = 公司的文件管理制度(桌面放本周要用的、档案柜放沉淀的、仓库放归档的);JIT = 亚马逊的按需调货——门店只摆样品与目录(索引),客户要了才从仓里调(工具读取),而不是把仓库搬进门店。
实例与案例
研究 Agent 从"必爆窗"到"稳定 3 小时"的改造清单(真实项目常见操作):
- 网页抓取结果:原文落盘
notes/{url-hash}.md,窗口只留"标题+三行摘要+路径"(原来单页 20K → 200 token) - 每完成一个子题,把发现写入
findings.md(沉淀层),压缩时该文件成为摘要底稿 - 85% 阈值触发自动 compaction,保留最近 4 轮原文
- 大批量检索类子任务改走子 Agent(kp-019),主窗口零污染
结果:窗口峰值从必爆降到 60% 以下,任务完成率显著上升——上下文工程常常比换模型对成功率影响更大(且立即省钱,kp-027)。
常见误区
- 误区一:"窗口 1M 就不需要压缩了"。成本线性、中段稀释、腐烂机制照旧;大窗口改变的是触发阈值,不是策略必要性。
- 误区二:压缩摘要写成流水账。好的摘要是结构化的(目标/结论/指针/未决),不是"然后然后然后"。
- 误区三:JIT 工具只给一个 read_file。没有 grep/目录,模型只能盲读,检索轮数暴涨——导航件(目录/索引/搜索)是 JIT 的必要配套。
- 误区四:压缩后不做回归。压缩引入的信息损失可能引发行为漂移——重要任务应在压缩点检查关键约束仍在(测试见 kp-024)。
自测题
- 为什么压缩输出必须是"摘要 + 指针"而非纯摘要?
- JIT 模式生效的能力前提是什么?需要什么配套工具?
- 用"内存/磁盘/缺页"类比说明窗口、外部存储与工具的关系。
(参考答案:1. 摘要有损,指针提供无损间接层,细节可 O(1) 取回;2. 模型能从目录/摘要判断"缺什么、去哪找";配套导航件(目录树、grep、索引);3. 窗口=RAM(快而小)、外部=磁盘(大而慢)、工具=按需加载的缺页机制。)
与其他知识点的关系
- 基础概念 → kp-003;记忆载体 → kp-015;检索 → kp-016
- 子 Agent 隔离 → kp-019;成本收益 → kp-027;Claude Code 实战 → kp-028
延伸阅读
- Anthropic, Effective context engineering for AI agents(2025)——本篇框架的直接来源
- Claude Code 文档:compaction 与 /compact、memory(CLAUDE.md)章节