Agent 开发学习站
Agent 开发›进阶›进阶

上下文工程进阶:压缩、分层与即时检索

进阶进阶

一句话定义

长任务上下文工程的核心拳法是三招:压缩(把旧历史蒸馏成摘要)、分层(按存活期把信息放进不同载体)、即时检索(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 小时"的改造清单(真实项目常见操作):

  1. 网页抓取结果:原文落盘 notes/{url-hash}.md,窗口只留"标题+三行摘要+路径"(原来单页 20K → 200 token)
  2. 每完成一个子题,把发现写入 findings.md(沉淀层),压缩时该文件成为摘要底稿
  3. 85% 阈值触发自动 compaction,保留最近 4 轮原文
  4. 大批量检索类子任务改走子 Agent(kp-019),主窗口零污染

结果:窗口峰值从必爆降到 60% 以下,任务完成率显著上升——上下文工程常常比换模型对成功率影响更大(且立即省钱,kp-027)。

常见误区

  • 误区一:"窗口 1M 就不需要压缩了"。成本线性、中段稀释、腐烂机制照旧;大窗口改变的是触发阈值,不是策略必要性。
  • 误区二:压缩摘要写成流水账。好的摘要是结构化的(目标/结论/指针/未决),不是"然后然后然后"。
  • 误区三:JIT 工具只给一个 read_file。没有 grep/目录,模型只能盲读,检索轮数暴涨——导航件(目录/索引/搜索)是 JIT 的必要配套。
  • 误区四:压缩后不做回归。压缩引入的信息损失可能引发行为漂移——重要任务应在压缩点检查关键约束仍在(测试见 kp-024)。

自测题

  1. 为什么压缩输出必须是"摘要 + 指针"而非纯摘要?
  2. JIT 模式生效的能力前提是什么?需要什么配套工具?
  3. 用"内存/磁盘/缺页"类比说明窗口、外部存储与工具的关系。

(参考答案: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)章节