前情提要
- 上下文工程有四种手段:写(重要的东西落到文件里)、选(只把这一步要用的拿进来)、压(把历史缩成摘要)、隔(换一张干净的台面,交给子代理)
- 「目标漂移」:转了二十轮之后,最初的目标被大量工具输出冲淡,Agent 开始跑偏
- 模型对上下文末尾的内容记得最牢
/compact可以手动压缩,后面还能跟要求,比如/compact 保留改过的文件和没做完的事- 第5节:缓存决定了上下文怎么排,会话中的变化只往末尾追加
第5节讲了上下文怎么「排」,这一节讲上下文怎么「管」:会话一长,工具输出越堆越多,Claude Code 怎么防止它跑偏、塞满、超限。
这是 Claude Code 最见功力的部分。你会看到很多常量,比如 167K、5 万字符、10 轮、3 次,它们背后都有线上数据。
一、四种手段,一张地图

先把四种手段在 Claude Code 里的位置对一下:
| 手段 | 意思 | Claude Code 里的实现 | 在哪讲 |
|---|---|---|---|
| 写 | 重要的东西落到纸上 | 待办清单和提醒;让模型自己记笔记;计划文件;MEMORY.md | 本节 |
| 选 | 只放这一步要用的 | Skill 目录 1% 预算;MCP 工具搜索;子目录规则按需加载;大结果落盘 | 第7、8、6节,本节 |
| 压 | 把历史缩成摘要 | 四道工序,从轻到重 | 本节 |
| 隔 | 换一张干净的台面 | 子代理新开一份消息列表 | 第12节 |
再加一条贯穿所有手段的:缓存(第5节)。决定上下文怎么管的,除了「模型需要什么」,还有「怎么做最省钱」。
二、写:待办清单和每 10 轮的提醒
模型有一个 TodoWrite 工具,用来维护待办清单。如果连续 10 轮都没更新它,系统就会追加一条提醒,把当前的清单重新贴出来:
TodoWrite 工具最近没用了。如果你在做的任务适合跟踪进度,考虑用它……这只是一个温和的提醒,不适用就忽略。绝对不要向用户提起这条提醒。
(后面附上当前的待办清单)
这条提醒对付的就是「目标漂移」。转了二十轮之后,最初的目标埋在一大堆工具输出前面,离模型越来越远。提醒做的事情,是把目标重新放到离模型最近的地方:模型对上下文末尾的内容记得最牢,提醒就追加在末尾。
注意它的写法:
- 「不适用就忽略」:给模型留了判断的余地,不是命令
- 「绝对不要向用户提起」:这是写给模型的私下提醒,用户不需要看到
把目标定期贴回末尾,对抗目标漂移。
三、写:让模型自己记笔记
系统提示词的动态区里有这样一句:
处理工具结果时,把之后可能用到的重要信息写进你的回复里,因为工具结果的原文之后可能会被清掉。
为什么?因为工具结果会被清掉(下面「压」的部分会看到),模型自己写的回复不会。所以重要的信息,要从工具结果里「抄」到自己的回复里。
连模型都被要求先落盘。
除此之外还有两种「写」:
- 计划文件:计划模式产出的计划写在一个文件里,压缩之后会重新注入
- 自动记忆:
MEMORY.md是自动记忆的索引,每次会话开始都会加载(第6节)
工具结果会被清掉,自己写下来的才留得住。
四、选:大结果落盘

前几节已经看到了大部分「选」:Skill 目录只占 1%(第7节)、MCP 工具用时再搜(第8节)、子目录规则碰到才加载(第6节)、Explore 子代理不带 CLAUDE.md(第6节)。
再补一个:大结果落盘。
src/constants/toolLimits.ts 规定了两条线:
| 限制 | 数值 | 超了怎么办 |
|---|---|---|
| 单个工具结果 | 50,000 字符 | 完整内容存到磁盘,模型只拿到前 2KB 预览和文件路径 |
| 一条消息里所有并行工具结果加起来 | 200,000 字符 | 把其中最大的几个存到磁盘,直到总量降下来 |
第二条的注释说得很直白:防止 10 个并行工具每个都差一点到上限,加起来一轮就塞进 40 万字符。
模型收到的大概是这样:
<persisted-output>
Output too large (30.5KB). Full output saved to: /Users/you/.claude/projects/.../tool-results/xxx.txt
Preview (first 2KB):
(前 2KB 的内容)
...
</persisted-output>
如果你让 Agent 一口气 cat 好几个大文件,大概率见过这个。完整内容没有丢,模型需要的时候可以再用 Read 去读那个文件的某一段。
这是七道关里的第 ⑦ 关(第3节):在工具结果进入历史之前就处理好。这一点很重要,下面会再提到。
不是不给,而是先给预览,要了再给。
五、压:四道工序,从轻到重

第2节的循环里,每次调模型之前都要过一遍「减肥」。按代价从小到大排: