Appearance
4.9 上下文工程(Context Engineering)
上一节讲了 Harness 的零件,其中最核心、最值钱的一块,单独拎出来讲:上下文工程——精心经营"到底往模型的上下文窗口里塞什么"。一句话,Harness 的高手,八成功夫在这里。
回到那张"办公桌"
还记得 0.2 节的比喻吗?模型的上下文窗口就像一张办公桌桌面:面积固定,桌上摆的东西就是它当下能"看见"的全部。
🪑 核心比喻:模型是个能力超强、但只能看桌面、而且记性只到桌面的专家。桌子就这么大。你往桌上摆什么、怎么摆、什么时候清理,直接决定他干得好不好。这就是上下文工程。
桌子有两个残酷的事实(前面章节都提过,这里串起来):
所以上下文工程的目标不是"把桌子塞满",而是:在每一步,桌上只放此刻最该看的东西。 下面是三个核心手法。
手法一:On-demand Injection(按需注入)
人话:不要一开始就把所有指令、所有工具说明、所有可能用到的资料一股脑塞满上下文;而是按当前这一步真正需要什么,临时把对应的东西放上桌,用完撤走。
🪑 比喻:你不会把整个档案室搬上办公桌。你是"现在要处理 A 案子,就把 A 的卷宗拿上来;处理完收走,再拿 B 的"。
具体怎么按需注入:
- 工具:不是把 50 个工具的说明全程挂着,而是当前任务相关的工具才注入(呼应 4.2 MCP 的按需工具发现)
- 指令:行为规则在相关事件发生时才注入。比如"用户要删数据了",这时才把"删除操作的安全规则"塞进去,而不是从头到尾一直占着桌面
- 资料/记忆:用 RAG 在需要时检索相关片段塞进去(2.1),而不是把整个知识库怼进上下文
好处:省 token(=省钱省延迟),更重要的是减少干扰——桌面越干净,模型对当前任务越专注。
💡 你在 Claude Code 里看到的
system-reminder之类"适时冒出来的提示",就是按需注入:在合适的时机,把当下该遵守的规则推到模型眼前。
手法二:Compaction / Compression(压缩)
人话:桌面快满时,把旧的、啰嗦的内容摘要成一小张便签,原件收走,腾出空间继续干。
🪑 比喻:桌上堆了一上午的草稿和往来记录,桌子要满了。你把它们归纳成一页纪要——"上午确定了 X、否决了 Y、待办 Z",然后把那堆草稿收进抽屉。桌面清爽了,关键信息还在。
这就是 1.1 节的 Context Compression / Compaction。代价是细节会丢——压缩时被归纳掉的内容,模型就"看不见"了,这也是长对话里 Agent 开始忘事的根源(2.4 上下文污染)。
用好压缩的要点:
- 真正重要、不能丢的信息,别只靠对话历史 → 放进 System Prompt 或写进文件/计划清单(它们不容易被压掉)
- 压缩摘要要保留"决策和结论",可以丢过程细节
- 与其等一个超长对话被反复压缩,不如把大任务拆成多个干净的小对话
手法三:Isolation(隔离)
人话:不同的子任务,用各自独立的上下文去做,互不污染;做完只把"结论"带回主线程,而不是把一路的草稿都倒进主桌面。
🪑 比喻:一个大项目,你不会把五件事的资料全堆在同一张桌子上同时做(必乱)。你给每件事一张独立的桌子(或交给不同的人),各干各的;最后每张桌子只交回一份结论,主桌面始终清爽。
体现在哪:
- Subagent(子代理):主 Agent 把子任务派给子代理,子代理在自己独立的上下文里折腾(哪怕它内部翻了 50 轮、读了一堆文件),最后只把精炼结果回传主 Agent——主 Agent 的桌面不会被子任务的过程垃圾淹没(4.6)
- Worktree:让 Agent 在隔离的 Git 工作目录里改代码,不污染你的主工作区(4.4)
💡 隔离的精髓:把"过程的混乱"关在小黑屋里,只让"干净的结果"出来。 这是长时间、多步骤 Agent 能保持清醒不跑偏的关键招。
串起来:上下文工程就是"经营桌面"
按需注入:只把此刻要用的东西放上桌,用完撤走 → 桌面别一开始就堆满
压缩 :旧内容摘成便签,原件收走 → 桌面满了及时清
隔离 :子任务在别的桌子干,只回传结论 → 别把过程垃圾倒进主桌
↓
让模型在每一步,都只盯着"此刻最该看的东西"理解了这个,你就理解了为什么"上下文窗口很大"不等于"可以乱塞"——桌子大,也要会收拾。 会收拾桌面的 Harness,才能驾驭长任务。
🛠️ 实战练习:观察一次"桌面经营"
在 Claude Code 里跑一个较长的多步任务(比如让它重构一个小模块、跑测试、修复),观察:
- 长对话进行中,它有没有在某个点自动压缩早期内容?压缩后它对早期细节是不是变模糊了?
- 它派 Subagent 时,主线程拿回的是"一份结论"还是"一大堆过程"?
- 任务里它是不是没有把所有工具/资料全程挂着,而是用到才取?
期望结果:你会直观感受到"上下文是稀缺资源、要主动经营",并学会一个实操习惯——重要信息别埋在长对话里,及时落到文件/计划清单,以免被压缩掉。
进阶思考:回看你自己用 AI 跑长任务时遇到的"它怎么把前面说的忘了",对照这三个手法,判断是该用按需注入、压缩策略,还是拆任务+隔离来解决。
📌 关键结论
- 上下文窗口 = 模型的办公桌桌面,固定且宝贵;上下文工程就是"经营这张桌面"
- 目标不是塞满,而是每一步只放此刻最该看的东西(大桌子也要会收拾)
- 三大手法:按需注入(用时才放)、压缩(旧内容摘成便签)、隔离(子任务另开桌,只回传结论)
- 重要信息别只靠对话历史,放进 System Prompt / 文件 / 计划清单,避免被压缩丢掉
- 这是 Harness 里最值钱的功夫,也是长任务 Agent 不跑偏的关键
第 4 章完成。下一步:跟上 AI 前沿