为什么你的 Claude Code 特别费 Token · 6 个高效对话技巧
源视频:
260824-1-为什么你的ClaudeCode特别费Token?6个高效对话技巧.mp4(19 分 14 秒,1280×720,画面水印「AI随风随风 / bilibili」) 整理方式:whisper large-v3-turbo 全片转录 + 145 张定点抽帧(每 8 秒)+ 66 张补抽(漏采段 30 + 按需 36)+ 逐点放大核对 本文所有(mm:ss):口播用转录串匹配定位,画面用ffmpeg -ss定点取帧(文件名即秒数),无一处凭印象
写作日期:2026-08-24|复核:2026-09-07
📌 2026-09-07 复核(Claude Code
2.1.258):本文推荐的斜杠命令里,10 个仍在、1 个查不到。
命令 复核 /compact/clear/context/model/effort/mcp/rename/doctor/autocompact/loop✅ 全部仍在 /rewind🚨 当前版本的斜杠命令清单和 claude --help里都查不到🚨
/rewind这条要当心:正文第二节和第五节都把它当作「走偏了别急着 compact, 先试/rewind」的推荐做法。实测在 2.1.258 上敲不出这个命令。 ⚠️ 但分不清是后来被移除还是本来就不存在 —— 它是整理时补充的 (正文自己写着「这条口播完全没提」),来源无从追溯。 ⇒ 照做前先跑下面的判据确认;查不到就退回/compact,别在那儿反复试。📌 正文第五节
/context输出里那行Skills · /skills不是本文的推荐, 是视频画面的原样转录(而且那台机器的后端是 GLM-5.3,见该节的 🚩)。 当前版本同样没有/skills这个斜杠命令 —— 但它本来就不是让你敲的。🔔 要重验就跑这一条(零成本,不产生模型调用):
node experiments/agent-recheck/check-slash-commands.mjs \ compact clear context model effort rewind mcp rename doctor autocompact loop它读 headless 会话
init事件里的slash_commands清单,读到就杀进程。 ⚠️ 脚本内置了双向校准:正例(/clear)必须命中、负例(编造的命令名)必须不中, 任一不满足就拒绝给结论 —— 只做负例校准挡不住「判据恒假」那种瞎法。
〇、先给结论:只想拿走能用的部分,看这 8 行
| 该改的习惯 | 怎么做 | 为什么 |
|---|---|---|
| 别让 Claude 自己找文件 | 用 @文件名 而不是描述文件 |
文件内容直接进第一条消息,省掉整条探索链,而探索链会被之后每一轮重发 |
| 开工前就把模型和 effort 定好 | /model、/effort 都在会话第一句之前设 |
这两个都是缓存 key 的一部分,中途改会让整个会话按全价重新 prefill。官方 TL;DR 第 2 条专门点明 before you start,而图解页把这个要点拆散了(见第八节) |
| 一个任务一个会话 | 做完就 /clear;想留着就先 /rename |
长会话每一轮都在为全部历史买单 |
| 走偏了别急着 compact | 先试 /rewind |
只剪掉尾部几轮,前面的缓存照常命中,比 /compact 便宜 |
| 离开键盘前 compact 一次 | /compact 想保留的说明 |
订阅模式缓存约 1 小时过期,趁热做摘要比过期后全价重来便宜 |
| 给吵闹的命令加安静参数 | npm run -s test、git log --oneline、pytest -q;把常用命令连参数写进 CLAUDE.md |
400 行「测试全绿」里有用的只有最后一行,但它们会留在上下文里被每轮重发 |
| 定期查谁在占上下文 | /context、/mcp |
MCP / skills / agents 都是常驻开销,作者自己那台机器上光 skills + agents 就 17.2k tokens |
| 脏活外包,但别滥用 | 日志分析、全量测试用子代理;小任务别用 | 每个子代理各付一份「系统提示 + 工具 + CLAUDE.md」,小活外包是净亏 |
⏱ 想更快的话:官方原文标注的阅读时间是 5 分钟(视频开头 00:02 的页面上就印着
Reading time 5 min)。这期视频用 19 分钟讲它,图解页又在原文之上加了不少内容 —— 如果你只要结论,直接读原文比看视频快。本文的价值在于第八节的核查和标注了「哪些是原文没有的」。
一、这期视频到底是什么
不是作者的原创方法论,而是逐段讲解 Anthropic 官方博客的一个自制图解页。
三层来源要分清(这一点视频里没有明说,但决定了你该怎么信这些内容):
| 层 | 是什么 | 可信度 |
|---|---|---|
| 底层 | Anthropic 官方博客 Maximizing the value of your Claude Code sessions,作者 Lydia Hallie,2026-08-14 发布 | 一手 |
| 中层 | 作者用 Claude Code 生成的本地图解页 claude-code-sessions-course/index.html,页脚自称「改编自官方博客,按原文顺序逐点图解」 |
二手改编,加了原文没有的数字(见第八节核查) |
| 上层 | 作者对着这个页面口播讲解 | 三手,口播多处比页面粗糙 |
页面自己的标题是「降低 AI 编程成本:6 个必须掌握的上下文管理技巧」,副标题「原文逐点拆解 · 6 张流程图 · 新手向」,正文导语:
同样一个任务,换一种问法、换一种会话习惯,烧掉的 token 可能差出好几倍。先从一道选择题开始,再跟着原文的思路一层层抽丝剥茧,把每个 token 都花在刀刃上。
页面顶部常驻一条锚点导航(最左的「··· 省钱图解」是页头标识,其右 6 项是章节,也是全片骨架):
··· 省钱图解 | 开篇一问 · 成本组成 · ① 单价 · ② 数量 · ③ 排查 · 总结
二、开篇一问:三种问法,哪种最烧 token(00:20 – 02:00)
开场 20 秒他先开的是官方原文页(画面 00:02):标题 Maximizing the value of your Claude Code sessions,副标题 How to run efficient sessions that get the most value from every token.,右栏三项元信息 —— August 14, 2026 / Reading time 5 min / Author(s) Lydia Hallie;页面上挂着划词翻译插件,每段英文下方浮着中文气泡(「最大化你的 Claude Code 会话价值」「如何运行高效会话,让每一个 token 都发挥最大价值。」)。看完这一屏他就切到自己的图解页,全片没有再回到原文。
同一个任务 —— 修复 utils.test.ts 里失败的测试,交给 Claude Code 做。页面让你先猜(每张卡下方有「揭晓答案」按钮,卡组右下角还有「↻ 重置(再猜一次)」),再逐张揭晓(画面 02:02 三卡全展开):
| 「测试挂了,帮我看看」 | 「请修复 utils.test.ts」 | 「@utils.test.ts 修一下这个」 | |
|---|---|---|---|
| 副标题 | Claude 只能自己找 | Claude 直奔目标 | 文件直接搭在你的消息上 |
| 过程 | 🔍 grep(按关键词搜代码)找测试文件 📄 打开 a.test.ts —— 不是它 📄 打开 b.test.ts —— 也不是 📄 读取 utils.ts —— 找到了! |
📄 Read utils.test.ts 📄 顺带读被测文件 utils.ts ⚒ 修复 + 跑测试 |
🔗 首条消息已包含文件全文 ⚒ 直接修复 + 跑测试 ✅ 完成,零探索 |
| 代价 | ≈ 4 次探索全部留在上下文里,之后每一轮都要把它们重发一遍 —— 账单越滚越大 | 说清了文件名,1~2 次读取直达目标,探索的痕迹少了很多 | 0 次额外读取 —— 文件内容在第一条请求里就到位了 |
| 结论 | 🐢 最贵 | 😐 适中 | 💰 最省 |
口播补充(00:55 提出问题,00:59 起逐个揭晓):第一种「相当于模型要在你的仓库里自己去找一遍这个文件,那在寻找的过程中是需要消耗 token 的」。
页面在此处埋了全篇路线图:
只是换了个问法,成本就差出一截 —— 为什么?先看一次对话的成本怎么组成,再跟着原文逐个拆开:一个 token 的价格由什么决定(核心点①)→ 一个会话会发出多少 token(核心点②)→ 感觉太贵先查哪里(核心点③)。
三、先看全局:一次对话的成本由什么组成(02:03 – 02:30)
Claude Code 按 token(模型处理文本的计费单位,约等于大半个英文单词)计费。原文把「一次会话要花多少钱」拆成两个可以分别下手的量 —— 单价(每个 token 卖多少钱)和数量(一个会话一共发出多少 token)。想省钱,要么把单价打下来,要么把数量压下去,整篇文章的所有技巧都落在这两条线上。
成本地图(画面 02:26):
一次会话的成本 = 单价 × 数量
┌──────────┴──────────┐
单价:每个 token 多贵 数量:一共发了多少
(核心点①) (核心点②)
│ │
🧠 用了哪个模型 📦 上下文里有什么
大模型更贵 —— 所有成本都会被 启动就带上:工具定义 + 系统提示 + CLAUDE.md;
模型单价相乘。难题用大模型, 会话中累积:读过的文件、命令输出。
日常任务用小模型(/model)
│ │
▭ 输出 ≈ 输入的 5 倍价格 🔁 每轮重发 × 轮数
思考(thinking)也算输出。用 API 不记得上一轮 —— 每次请求都重发全部历史。
/effort 控制思考量,日常小改动 同样的三个任务,一个长会话 = 短会话的 1.9 倍 token。
几乎不需要「深思熟虑」
⚠️ 这张图还有第五行(卡片上边缘在画面底部可见,左右两列各一格,按上下文应是「缓存」与「外包」)。全片没有一帧把它滚进视野——我在 02:10 / 02:18 / 02:26 / 02:28 / 02:32 以及结尾快速回滚的 19:08–19:13 各取帧确认过,第五行始终在画面之下。这是「客观未呈现」,不是我没找到。
图下方的术语约定:
接下来就按这个框架,把左右两半逐个拆开讲。(图里先出现的术语:CLAUDE.md = 项目里每轮自动附给 Claude 的说明文件,详见核心点②的背景二;Prompt 缓存详见 1.3;子代理详见 2.4)
四、核心点①:一个 token 的价格由什么决定(02:32 – 09:24)
三个因素决定单价 —— 模型、输入还是输出、有没有命中缓存。前两个好理解,第三个是大多数新手完全不知道的「隐藏开关」。
1.1 模型:一切的「乘数」(02:32)
同样的 token 数量,大模型的单价更高,所有成本都会乘上模型价格。所以第一问永远是:这个任务配得上大模型吗?
- 值得上大模型:陌生代码库的排查、复杂的跨文件重构。
- 小模型就够:格式调整、写简单测试、日常小修小补。
/model # 随时切换模型
口播原话(02:32 起):「模型是你的这个 token 的价格的一个底座」「所以在不同的任务里面要选择不同的这个模型」。
🚩 口播这里有个转录陷阱,值得单独说:转录文本是「你使用 Facebook 5 这样的模型」和「如果你使用 solid 模型,或者用 deep-seek flash 模型」。回到画面核对 —— 作者自己压的硬字幕写的是 fable-5。所以他说的是 Fable 5(大模型)对比更便宜的档位,不是 Facebook。这类音节失真如果不核画面,脑补出的词往往读起来毫无违和感。(「solid」大概是 Sonnet,「deep-seek flash」我在画面上找不到对应,不硬猜。)
1.2 输入 vs 输出:输出贵得多(03:29)
模型「读」你的上下文叫 prefill(输入),便宜;模型「写」答案叫 decode(输出),大约是输入的 5 倍价格。特别提醒:Claude 的「思考过程」(thinking tokens)也算输出 —— 思考得越久,花得越多。
- Claude Code 提供
effort 档位:effort 越高,思考越多、越贵。- 日常小任务调低 effort:
/effort- 想彻底关掉思考:
MAX_THINKING_TOKENS=0(环境变量,写在 settings.json 的 env 里,或在 shell 中导出)📌 记住这个量级:输出 ≈ 5 × 输入。在 1.3 的「请求动画」里,红色专指「贵 5 倍的输出」;后面其他图中的红/橙/绿,统一表示「更贵/适中/更省」的相对档位。
页面此处嵌了官方原图(画面 04:50):
- Prefill(input tokens):
tool defs→system prompt→CLAUDE.md→msg→files Claude read→command output,图注 one run over the whole request, in the order shown - Decode(output tokens):
run 1 …request Read→run 2 …request Read (→run 3 …request Read ( utils,图注 each run appends one token and runs again — a 200-token response is 200 runs
口播在讲输入构成时把这一条讲得比页面细(03:29–04:46,收在「那这个整个包括的东西就叫输入」):工具定义要告诉大模型「你提供什么样的工具方法,比如读取、编辑文件、删除文件」;系统提示词「每一个 agent 的工具都会有自己的系统提示词」;CLAUDE.md「每一次对话都会把它加载到上下文里」;再加你自己的话、读取的文件内容、命令输出 —— 这一整包才叫输入。
effort 档位的真实样子(画面 05:10 / 05:18,逐格放大读过):
Faster ←────────────────────────────────→ Smarter
low medium high xhigh max │ ultracode
│ xhigh + workflows
May use excessive tokens resulting in ⟨…⟩ overthinking. Use sparingly for the ha⟨…⟩
那行说明文字的中段和末尾分别被硬字幕和画面右边缘截掉,
⟨…⟩是我的省略标记,不是原文有省略号;档位名和xhigh + workflows是逐格放大到能逐字读之后抄的。
📌 口播说「有低中高极高和最高,还有一个最大的」,画面上的实际档位是
low / medium / high / xhigh / max,共 5 档;再往右分隔线之外的ultracode是紫色的、标注xhigh + workflows,它不是第 6 个 effort 档,而是「xhigh + 工作流编排」的组合开关。口播那句「还有一个最大的」对应的就是它,容易听成第六档。作者当时选中的是max。
1.3 Prompt 缓存:最容易被忽略的省钱开关(05:43 – 09:24)
模型服务商会缓存你对话的「前缀」:如果新一轮请求的开头和上一轮一模一样,缓存命中的部分就按 0.1 倍计价(原价的十分之一);写一次缓存最多收 2 倍,但只付一次。这就是为什么长对话没有想象中那么贵 —— 历史部分都在打折。
动画:一句 prompt,五次请求 —— 看缓存如何一步步「长大」
页面做了一个可交互动画,控件是 ▶ 自动播放 | ↺ 重置 | 1 | 2 | 3 | 4 | 5 | End(8 个控件逐一点名数过:2 个操作键 + 5 个步骤键 + End;作者点到了 End 的最终态,画面 07:54)。图例:🟢 缓存命中 ×0.1 / 🟠 新增输入 ×1 / 🔴 输出 ×5。
左栏「对话上下文(越攒越厚)」从上往下堆叠:
🔒 系统提示 + 工具定义 + CLAUDE.md
💬 你的消息「修复 utils.test.ts」
📄 Read 调用 + utils.test.ts 文件内容
📄 Read 调用 + utils.ts 文件内容
⚒ Edit 调用 + 修改 diff
✏ npm test 测试输出
📝 一段简短总结(纯输出,未被重发)
↑ 每一次请求,这一整摞都会全部重发
右栏「每一轮:发送了什么 ↔ 模型回应了什么」:
| 轮 | 标题 | 输入侧 | 输出侧(×5) |
|---|---|---|---|
| 1 | 全部全价 + 写一次缓存 | 🟠 组装的上下文 ×1(写入缓存) | 想了一会儿 → Read:读取 utils.test.ts |
| 2 | 旧内容走缓存,只有新文件全价 | 🟢 缓存 0.1× ✓ + 🟠 新文件 ×1 | Read:读取被测文件 utils.ts |
| 3 | 前两轮走缓存,第二个文件全价 | 🟢 缓存 0.1× ✓(更长)+ 🟠 新文件 ×1 | Edit:修改代码 |
| 4 | 之前的内容走缓存,Edit / diff 正价 | 🟢 缓存 0.1× ✓ + 🟠 diff ×1 | 工具调用:运行 npm test |
| 5 | 只有测试输出全价 | 🟢 缓存 0.1× ✓(越长越便宜)+ 🟠 测试 ×1 | 一段简短总结(没有工具调用)→ 无新内容,结束 |
动画结尾的两段结论(这两行在正常播放时始终被硬字幕压住,我靠 19:11 的回滚帧才读全):
第 5 步 · 结束:测试通过,模型生成一段简短总结。这次没有新的工具调用,也就没有新的工具结果需要追加 —— 所以不会再产生第 6 次请求,任务到这里就结束了。一句看起来简单的 prompt,背后实际发出了 5 次模型请求,每一次都带上到当前为止的完整对话;每一轮极其不对称:输入可能几万个 token,输出只有几百个。
每一轮请求都极其不对称:
输入 · 可能有几万个 tokenvs输出 · 几百个—— 输出虽小,单价却约是输入的 5 倍 —— 所以「过度思考」也在悄悄烧钱。
图注:左边是对话上下文的真实构成,右边是每一轮请求的缓存与计价情况。可以自动播放,也可以点数字逐轮讲解 —— 结尾揭示两件事:一句 prompt 背后是 5 次请求;每一轮「输入几万 → 输出几百」,极度不对称。
⚠️ 什么会「打断」缓存
缓存按前缀匹配:一旦开头有任何变化,变化点之后的所有内容都要按全价重新处理一遍。
🍰 前缀断裂示意:断在哪里,哪里之后全价重算 ✅ 理想:在结尾追加新消息 —— 前缀原样命中 (断点之后的整段对话都要按全新价格重新 prefill —— 对话越长,这一下越贵) 断点在哪里,哪里之后的内容就要全价重算 —— 而下面这 6 个操作,每一个都能制造这样的断点。
⚠️ 这张「前缀断裂示意」图的色块主体我没读到。它被夹在 08:26 和 08:34 两个采样点之间,作者一次滚动就翻过去了;我在 08:29 / 08:30.5 / 08:31 / 08:32 / 08:33 / 19:11.2 / 19:11.5 / 19:11.8 共 8 个时刻取帧,只拿到上面这几行文字和「✅ 理想」那一行的开头,色块细节始终没进画面。
真正容易让缓存失效的,是下面这 6 个操作(画面 08:50 / 09:06)
| # | 动作 | 说明 |
|---|---|---|
| 1 | /model 中途换模型 |
每个模型都有它自己的缓存。在长对话中途换模型,下一轮可能需要按正常价格重新 prefill 整个会话。 |
| 2 | /effort 中途调 effort |
effort level 也是缓存 key 的一部分。中途修改 effort,效果和切换模型类似。 |
| 3 | ⚡ 中途开启 Fast mode | 是否开启 Fast mode(少思考的快速档位开关)同样属于缓存匹配条件。中途开启后旧缓存无法继续匹配,整个会话会按 Fast mode 的价格重新 prefill —— 要用就尽量从 Session 一开始用。 |
| 4 | /compact 压缩上下文 |
压缩后只有开头的 system prompt 能继续保留,其余上下文都被压缩。不过只要旧对话还在缓存里,压缩的开销并不大 —— 所以准备离开很久时,最好先 compact 再离开。 |
| 5 | ⏱ Time:缓存超时 | 每一轮都会重新计算缓存时间:订阅模式下通常 1 小时过期;API key 默认 5 分钟(设置 ENABLE_PROMPT_CACHING_1H=1 可延长到 1 小时)。超过这个时间,下一轮往往需要重新 prefill 整个对话。 |
| 6 | 📁 恢复旧 Session | 缓存大概率已经过期,而且 system prompt 在启动时也会被重新构建 —— 通常同样需要全价重新 prefill。 |
页面还给了「什么时候做这些昂贵动作」的判断:
✅ 便宜的时刻:会话刚开头、刚
/clear之后 —— 反正没什么可失去,「切模型 / 调 effort」这些动作放在这里最划算。 ⚠️ 贵的时刻:长对话进行到一半才去切模型。最近几轮走偏想回退?用/rewind回到走偏前的轮次 —— 只从尾部剪掉几轮,前面的缓存照常命中,比/compact便宜得多。
📌
/rewind这条口播完全没提。它是「走偏了想回退」场景下比/compact更省的选择,实用性不低。 📌 口播讲缓存超时只说了「一个小时之后你又继续对话了,那么它的缓存也是失效的」,漏掉了 API key 默认只有 5 分钟这个更容易踩的档 —— 用 API key 接第三方网关的人受影响最大。
口播在这里给的应对办法(08:51 起):一系列连续对话里被迫改配置是没办法的事;但任务做完就 /clear 掉重开一个对话,「他就不会去读取这样已有的上下文,不会去触发这样的缓存失效,因为他是从新的开始,就第一句话开始,就不会造成很多累赘了」。
五、核心点②:一个会话会发出多少 token(09:24 – 11:05)
先记住这条铁律:任何东西一旦进入会话,之后每一轮都会重新发送一次。缓存让重发变便宜,但不是免费,而且它一直占着上下文的「座位」。这一部分分两块:先弄懂两个背景(每轮重发、上下文构成),再看四个典型问题与对应的优化技巧。
背景一:每一轮都在重发(画面 09:54)
API 是无状态的:模型不记得上一轮说过什么,所以每轮请求都要把完整历史再发一遍。下面这条传送带会一直向左滚动 —— 想象它就是你的上下文,每一轮都在循环:
传送带色块(从左往右):提示|工具定义|CLAUDE.md|文件内容 ✓已缓存|对话轮1 ✓|对话轮2 ✓|测试输出 ✓|对话轮3 ✓|← 新增内容|系统提示|工具定义|CLAUDE.md|文件内容 ✓已缓存
↑ 滚动方向 = 请求方向。想减少总量,就是下面四个技巧要做的事:提问更明确(2.1)、输出更安静(2.2)、会话更短(2.3)、脏活外移(2.4)。
背景二:上下文里有什么(画面 10:02)
- 还没说话就有的:工具定义(告诉 Claude 有哪些工具可用的清单)、系统提示(Claude 每次自带的行为说明)、CLAUDE.md(放在项目里、每轮自动附给 Claude 的说明文件)—— 这是「底座」,每轮都在。
- 聊着聊着进来的:Claude 读过的每一个文件、每一条命令的输出。
🔍 随手用
/context看一眼当前上下文的构成 —— 这是发现「谁在偷吃 token」的第一步。
- CLAUDE.md 要精简:不要塞满整个项目的说明,只留 Claude 干活真正需要的。
- 定义清楚的工作流 → 用 Skills(放在
.claude/skills/的按需加载技能包):只在需要时才载入,比常驻 CLAUDE.md 划算得多。- MCP 服务器(给 Claude 外接工具的服务)自带工具定义:每个都会加进上下文,动辄 10k+ tokens。用
/mcp查看各占了多少。
作者的真机 /context 演示(10:03 – 11:05)
这是全片唯一的实机数据,逐格放大读过(完整一帧在画面 10:18):
model as glm-5.3[1m]
Context Usage glm-5.3[1m] 52.6k/1m tokens (5%)
Estimated usage by category
System prompt: 3.2k tokens (0.3%)
System tools: 18.4k tokens (1.8%)
MCP tools: 4.4k tokens (0.4%)
Custom agents: 7.3k tokens (0.7%)
Skills: 9.9k tokens (1.0%)
Messages: 12.3k tokens (1.2%)
Free space: 944.5k (94.4%)
MCP tools · /mcp · 29 tools · 4.4k tokens
Custom agents · .claude/agents/ · 57 agents · 7.3k tokens
Skills · /skills · 172 skills · 9.9k tokens
/context all to expand
🚩 这里有一个视频完全没说、但会影响你照做的关键事实:作者的 Claude Code 后端不是 Claude,是 GLM-5.3(1M 上下文)。 状态栏写着
[glm-5.3[1m]] 5% | git:(main) | 1 CLAUDE.md | 3 MCPs | 11 钩子 | tok: 264k (in: 146k, out: 16k);他在 08:20 打开/model菜单时,画面上每一个槽位都指向 glm-5.3:1. Default (recommended) Use the default model (currently glm-5.3[1m]) 2. glm-5.3 Custom Opus model (1M context) 3. glm-5.3 Custom Fable model 4. glm-5.3 Custom Sonnet model (1M context) 5. glm-5.3 Cust... 6. glm-5.3[1M] ✓ Cust... ⚙ xHigh effort ←/→ to adjust也就是说,他演示「换模型会打断缓存」时,菜单里那几个「Opus / Fable / Sonnet」其实是同一个 GLM-5.3 的别名。这不影响原理(换 model 参数照样会换缓存 key),但如果你照着他的菜单理解「切模型」,会以为自己在换模型档位,实际可能什么都没换。另外他运行的界面是 Orca(左侧有 koubo-help-app / media-manager / work-chat / publish / vibecoding-web / goal-task 六个项目),不是裸终端。
口播据此给的排查思路(10:03 起):messages 占比很高 → 内容是不是已经做完了、能不能清空重开;MCP 占比很高 → 停掉不需要的 MCP;skills 很多 → 是不是加载了大量用不上的技能。
口播念到了 0.3%(系统提示)、1.8%(工具定义)、0.4%(MCP)、1.2%(messages),跳过了 Custom agents 0.7% 和 Skills 1.0% —— 而这两项在他机器上恰恰是第二、第三大的自选开销(7.3k + 9.9k = 17.2k tokens,比 MCP 的 4.4k 多得多)。57 个 agents / 172 个 skills 才是他这台机器上真正的「常驻税」。
六、核心点③:四个典型场景与优化技巧(11:05 – 17:24)
页面小标题是「⚒ 问题与技巧 · 四个典型场景」,对应导航条上的「③ 排查」。
技巧 2.1 提问指向明确:少走探索弯路(画面 12:58)
❌ 问题:「测试挂了,帮我看看」这类模糊提问会触发一长串搜索 —— Claude 要用 grep(按关键词搜代码)、逐个打开文件试错,整个探索过程留在上下文里,之后每轮重发。开篇那道选择题的答案,正是这个问题。
✅ 技巧:把目标说清楚,探索链立刻变短 —— 问法越具体,Claude 白跑的路越少:
- 「测试挂了,帮我看看」→ Claude 只能自己 grep、逐个开文件试错,探索痕迹全程占着上下文;
- 「请修复 utils.test.ts」→ 说清了文件名,读取测试文件和被测文件,一步到位;
- 「@utils.test.ts 修一下这个」→ 最省:文件内容直接附在你的第一条消息里,Claude 零探索、直接开工。
📎 小提示:同一个会话里 @ 引用一次就够,之后 Claude 记得住,不必每次都带。
技巧 2.2 让命令输出安静下来(画面 12:00)
❌ 问题:命令的输出会整个进入上下文 —— 大目录里 grep 一次,可能就灌进几万 token 的结果。Claude Code 的保护机制(超过约 30,000 字符的输出写进文件、只给开头预览,
BASH_MAX_OUTPUT_LENGTH可调)也管不到真正的危险区:30k 以下,比如 400 行「测试全绿」—— 每一行都在稀释关键信息,还每轮重发。✅ 技巧:让输出只留下有用的部分 ——
- 用安静模式的 flags:
npm run -s test、git log --oneline、pytest 的-q、构建工具的 dot 进度。- 更省心的做法:把「带安静 flag 的完整命令」直接写进 CLAUDE.md —— 例如「跑单个测试文件用
npx vitest run <file> --reporter=dot」。Claude 不用再摸索命令,还能省下几百行输出(也可以用 hook 自动加安静参数)。📎 判断标准很简单:这条输出里,对任务有用的信息占比有多高?「全绿的 400 行」有用的只有最后一行。
作者在这里切到真实终端跑了一次 git log(口播 11:44「就比如说像我们现在这样执行 git log」;我看到的终端帧落在 11:46–12:02),然后对比 git log --oneline(口播转录成「Gitlog 1LAM」,硬字幕作 git log --oneline),用来说明「这个是占用的上下文长度是非常多的」。
这个演示碰巧比页面的说法更有说服力。放大数了那一屏(11:54)的 5 条完整 commit:每条固定占掉 commit <40 位 hash> / Author: xiaowei <xiaowei@qq.com> / Date: … 三行样板,其中 4 条还各带一行 Co-authored-by: Cursor <cursoragent@cursor.com>(第 3 条 feat: build topic research and AI collaboration workbench 没有)。也就是说 5 条 commit 里,真正是信息的「标题行」只占约四分之一,剩下四分之三是 hash、邮箱、时区和署名 —— 这正是页面说的「这条输出里,对任务有用的信息占比有多高」。
(顺带两个旁证:作者的 git 身份是 xiaowei,与地址栏里的 /Users/xiaowei/.zcode/workspace/… 对得上;他这个仓库同时也在用 Cursor Agent 干活。)
技巧 2.3 按主题拆会话,及时翻篇(画面 14:10)
❌ 问题:长会话上下文越攒越多,每一轮都在为所有历史买单。同样三个任务,「一口气做完」和「每个任务一个短会话」差多少?看官方给出的对比:
📊 同样的三个任务,两种做法的 token 总量
🟢 推荐:任务之间 /clear → 合计 1.0× 🔴 不推荐:一个长会话连做 → 合计 1.9×
✅ 三个短会话(任务之间 /clear)
[任务1] /clear清空 [任务2] /clear清空 [任务3] → 合计 1.0×(只重发自己)
❌ 一个长会话(连着做)
[任务1] [任务2 = 自己 + 重发任务1的历史(任务1 变成了甩不掉的行李)]
[任务3 = 自己 + 重发 1+2 的全部历史(上下文越滚越大)] → 合计 1.9×(多付近一倍)
长会话不是「错」—— 深入调试时值得。但要清楚:它每一轮都在为更长的历史买单。 💡 结论:按「主题」开会话,做完一个就翻篇 —— 一个任务一个会话。 (图注:重绘自原文对比图(柱宽为示意,非实测数据):同样的三个任务,一个长会话约消耗 1.9 倍 token。)
页面在这一节末尾还挂了 5 条实操补充(只在结尾 19:13 快速回滚时完整出现过一帧,正常讲解时被跳过):
- 舍不得丢上下文?
/compact 想保留的说明—— 把历史压缩成摘要再继续。- 准备休息或切走?趁缓存还热先
/compact—— 订阅的缓存约 1 小时过期,趁它还在时做摘要,比过期后全价重来便宜得多。- 可以告诉它压缩时保留什么:在 CLAUDE.md / 设置里配置 Compact instructions。
- 用 1M 上下文模型的用户:
/autocompact 200k(v2.1.221+)把自动压缩阈值调低,避免上下文涨满才压缩。/loop很贵:它会反复触发 Claude。运行它时,最好开一个全新的终端窗口。
口播在这一节延伸出一个页面上没有的用法(13:40–14:50),也是全片作者个人经验最集中的一段:
「比如说我们使用一些技能,不管是 superpowers 还是 Multi skills,我们如果在沟通过程中会产生一些文件,比如说 plan 文件或者具体的计划……我们就马上把上下文清空掉,然后让模型去读取这个文件,然后再去执行。」 「因为我们其实所有跟模型之间的沟通,最终落地的(是)文档,那个沟通的过程的内容是没有任何意义的。」 「特别是我们使用 [Multi skills],用 [gremlin with Docs] 的时候,如果他问你 50 个问题,那么这里面产生的上下文是非常长的。当他确定好了之后,然后你使用这个命令去执行,比如说 to SPEC 或者 to PRD 产生文件文档之后,那么你就直接去清空掉对话,或者新开个对话,去让他读取这样的文件,然后去接着往下执行,那这样的效率是最高的。」
📌 专名说明(做过画面核对,不硬猜):
superpowers、Multi skills、to SPEC、to PRD—— 四个都在作者自压的硬字幕上原样出现(13:43 / 14:26 / 14:38),可信。to SPEC / to PRD在转录里被听成了「ToSpec / ToPID」。gremlin with Docs(14:27)—— **这是作者硬字幕上的写法,转录是「Greeming with DOS」,两者对不上,我无法从本片确定它指哪个命令。**从上下文(先追问几十个问题,再产出 spec/prd 文档)看更像是某个「追问式需求澄清」的 skill,但这是推测,不作为事实。
技巧 2.4 把高输出的脏活外包给子代理(画面 14:58)
❌ 问题:日志分析、全量测试这类活「输出巨大、答案很小」,让主会话亲自干 —— 巨量中间过程会留在上下文里,之后每轮重发。
✅ 技巧:外包给子代理 —— 一个拥有独立上下文的 Claude 实例:有自己的系统提示、工具集和 CLAUDE.md,但看不到你的对话历史。它干完活,只有最终答案被带回主会话,其他一切直接丢弃。
🏠 主会话(你的对话) 🚀 子代理(独立上下文,与你隔离)
💬 你:「分析一下构建日志,为什么挂了」 📋 自带:自己的系统提示 + 工具 + CLAUDE.md
🤖 Claude:我派一个子代理去处理 ──派出任务──▶ 🔧 干脏活:读完整日志 / 反复跑测试(输出量巨大)
(上下文保持干净 —— 没有日志、没有中间过程) 🔍 中间过程:grep、翻文件、报错堆栈……
✅ 主会话只收到:最终答案 ◀──只带回答案── 🗑 任务结束:除答案外全部丢弃,不占主会话一个 token
划算场景:输出巨大、答案很小的任务(日志分析、全量测试);小任务反而可能亏(子代理要重读文件、自己也要花轮次)。 高输出、低保留的任务最适合外包。重复出现的脏活,用
/agents定义一个专用子代理(模型可指定 haiku / sonnet 等便宜档)来干。
页面接着放了官方原图(画面 17:14):
再放大视角看一张原文的图 —— 「一次对话,四个上下文」:你面对的主会话是 1 个上下文;它同时派出的 3 个子代理(翻构建日志、跑完整测试、搜 git 历史),又各自拥有 1 个独立上下文。注意三个细节:
- 启动成本各自要付一份(紫色部分):每个子代理都要带上自己的系统提示 + 工具 + CLAUDE.md,这是「同时跑几个上下文」的固定开销;
- 中间过程全部留在子代理自己的上下文里(橙色「读了什么、跑了什么」):巨量输出不进主会话,任务完成即整体丢弃(discarded when done);
- 只有绿色的一小段「答案」被带回主会话,追加到你的对话末尾,继续参与后面的轮次。
图例(原文配色):紫色 = 启动内容(每个上下文各付一份);蓝色 = 你们的对话;橙色 = 子代理读了/跑了什么(用完即弃);绿色 = 最终带回主会话的答案。
口播的例子(15:39 起):Java 里有个空对象异常,「那么这个时候你就开启一个子代理,让他去排查,通过读取日志去排查这个原因,然后再把原因告诉你,那么你直接再去修复」——「我们要的其实是这个问题的结果,你判断的过程,我们是不关注的」。
📌 页面明确写了「小任务反而可能亏」和「每个子代理的启动成本各自要付一份」,口播完全没提这个反面,只讲了省。三个子代理 = 三份系统提示 + 三份 CLAUDE.md,小活外包是净亏的。
七、总结:常用的方法(17:24 – 19:03)
页面导语:「原文结尾 TL;DR 给出的六条建议 —— 正好对应前面的核心点 ①②③,也是日常最常用的六个习惯。」六张卡(画面 18:42):
| # | 卡片 | 内容 |
|---|---|---|
| 1 | 🧠 选对模型 | 难题用大模型,日常任务换小模型(/model)—— 模型价格会乘在所有成本上。 |
| 2 | ▭ 调低 effort | 输出 ≈ 输入 5 倍价,thinking 也算输出。日常任务用 /effort 调低,机械任务可 MAX_THINKING_TOKENS=0 彻底关掉思考。 |
| 3 | ⚡ 守住缓存 | 昂贵动作(切模型 / 调 effort / fast mode)放在会话开头或 /clear 之后做;休息前趁缓存还热先 /compact。 |
| 4 | 📦 上下文保持精简 | CLAUDE.md 只留必需的,工作流交给 Skills 按需加载;用 /context 和 /mcp 定期检查谁在占上下文。 |
| 5 | 🎯 提问指向明确 | 能 @ 文件就 @ 文件,让内容直接进第一条消息;常用命令写进 CLAUDE.md 并带上安静 flag(如 --reporter=dot)。 |
| 6 | ✂ 按主题拆会话,脏活外包 | 一个任务一个会话(/clear 前先 /rename);要保留就 /compact;高输出、低保留的活交给子代理。 |
页脚:「📖 本页内容改编自 Anthropic 官方博客《Maximizing the value of your Claude Code sessions》(2026-08-14),按原文顺序逐点图解」
八、我对着官方原文做的核查(三处需要打折)
我抓了官方原文全文(31,355 字符纯文本)逐项比对。
✅ 对得上的:所有硬数字
| 数字 | 页面 | 官方原文 |
|---|---|---|
| 输出 ≈ 输入的 5 倍 | ✓ | 5x ✓ |
| 缓存命中 0.1 倍 | ✓ | 0.1x ✓ |
| 缓存写入最多 2 倍 | ✓ | 2x ✓ |
| 输出落盘阈值 30,000 字符 | ✓ | 30,000 ✓ |
| 订阅缓存 1 小时 / API key 5 分钟 | ✓ | ✓ |
/autocompact 200k |
✓ | 200k ✓ |
| 400 行「测试全绿」的例子 | ✓ | “a test runner that prints 400 passing tests” ✓ |
ENABLE_PROMPT_CACHING_1H、MAX_THINKING_TOKENS、BASH_MAX_OUTPUT_LENGTH |
✓ | 三个环境变量全部出现 ✓ |
命令清单也完全覆盖:/clear /model /effort /compact /context /rewind /mcp /rename /autocompact /loop。
🚩 第一处:「1.9 倍」不是官方数字
页面把它写了三遍(成本地图、2.3 的图例、2.3 的图注),视频口播也说「看官方给出的对比」「这边我们可以看一下」。
官方原文全文里 1.9 出现 0 次。 原文这一节(How many turns it stays there)的原话是:
“One long session costs more than the same work spread over a few short ones, and by more than you’d think, because turn 40 is also re-reading the 39 turns before it.”
只有「比你想的更多」这个定性判断,没有任何量化。配图是一条成本随轮次上升的曲线,图注就是那句话本身。
公平地说,页面自己在图注里标了「柱宽为示意,非实测数据」——所以这不是刻意造假,是二次创作时为了画柱状图补了一个示意值。但 1.9× 同时出现在成本地图的「数量」分支上(那里没有任何免责声明,读起来就是一条结论),加上口播的「官方给出的对比」,观众很容易把它当成 Anthropic 测出来的数。引用这个数字时请注明它是图解页的示意值。
🚩 第二处:「6 个技巧」和官方的「6 条 TL;DR」不是同一组 6 条
官方 TL;DR 六条(原文):
- Run
/clearbetween tasks. - Set your model and effort level before you start. Changing either one mid-conversation can bust your prompt cache.
- @-mention files instead of naming them.
- Add quiet flags to noisy commands, or run them in a subagent.
- Run
/contextonce in a fresh session. /compactbefore you take a break from your keyboard.
页面六卡:选对模型 / 调低 effort / 守住缓存 / 上下文保持精简 / 提问指向明确 / 按主题拆会话+脏活外包。
数量凑巧相同,映射却是错位的,而且是双向错位:
| 官方 TL;DR | 页面怎么处理的 |
|---|---|
| 2. Set your model and effort level before you start | 一条拆成三条:选对模型 / 调低 effort / 守住缓存。原文的重点是「开工前就定好,别中途改」,页面把「选什么」独立成两条讲,「before you start」这个真正的要点被挪进了第三条「守住缓存」里 |
| 4. Add quiet flags to noisy commands, or run them in a subagent | 一条里的附属句被提升成独立一节:官方把「子代理」当成「命令太吵」的另一种解法写在同一条里;页面给了它独立的技巧 2.4 + 一整张官方配图 + 总结卡第 6 条的后半 |
1. /clear between tasks + 6. /compact before a break |
两条合并进「按主题拆会话,脏活外包」和「守住缓存」两卡里 |
3. @-mention files / 5. Run /context once |
基本一对一(→ 提问指向明确 / 上下文保持精简) |
结论:页面(和视频标题)的「6 个」是重新归并的结果,不是官方那 6 条。 归并本身不算错——页面按「单价 / 数量」的框架重排更好教——但两个副作用值得知道:① 官方最强调的 before you start 在页面里降格了;② 官方只是顺带一提的子代理在页面里被放大成了四大技巧之一(这是我个人判断:对新手来说,「开工前设好模型和 effort」比「学会用子代理」的性价比高得多,而页面的篇幅分配是反过来的)。
🚩 第三处:演示环境不是 Claude 官方模型(详见第五节)
全片唯一的实机数据来自跑在 GLM-5.3(1M 上下文) 上的 Claude Code,且 /model 菜单里所有别名槽位都指向同一个 GLM-5.3。缓存机制、effort、/context 这些属于 Claude Code 客户端的行为可以照看;但定价倍数(5×/0.1×/2×)是 Anthropic 官方模型的价目,换成第三方网关后能不能享受到同样的 prompt cache 折扣,本片没有验证,也不能想当然。
九、值得单独拎出来的三条(口播和页面都埋得比较深)
/rewind比/compact更适合「走偏了想回退」:只剪掉尾部几轮,前面缓存照常命中。全片口播零提及。- API key 的缓存默认只有 5 分钟(订阅是 1 小时),可用
ENABLE_PROMPT_CACHING_1H=1延长。用第三方 API 的人最该记这条,而口播只说了「一个小时」。 - 子代理不是无脑省:每个子代理都要各付一份「系统提示 + 工具 + CLAUDE.md」的启动成本,小任务外包是净亏。页面写了,口播只讲了省的那一半。
附录:画面上的一整屏「彩蛋」——/doctor 技能文档(口播零提及)
作者切到 Orca 演示 /model、/effort、/context 时(画面 08:20 与 10:10 两处),终端里停留着他自己刚生成的一份文档 docs/claude-code-doctor-skill.md(Thought for 14s、Cogitated for 2m 48s、正文 +244 lines)。这不属于本视频的讲解内容,但它的主题恰好是「省 context」,而且是全片信息密度最高的一屏,逐字抄录如下:
一句话总结这个技能
/doctor是 Claude Code 的环境体检 + 清理工具:它只读扫描你的安装、扩展使用情况、CLAUDE.md 记忆文件、hooks 性能、版本和权限配置,产出一份带明确建议的报告,经你确认(最多 2 个问题)后才应用修改,且所有操作可逆。它的三个核心价值
- 省 context:找出装了但从不用的 skills/MCP 服务器/插件,删掉 CLAUDE.md 里“读代码就能推导”的内容,把任务流程迁移成懒加载的 skill —— 每次会话都少付 token。
- 修隐患:损坏的 JSON 配置(会被静默忽略)、重名冲突的 agent 定义、重复安装、慢 hooks、落后的版本。
- 减少打断:把
defaultMode设为 auto(分类器代替弹窗),给高频被拒的只读命令配精确 allow 规则。它最特别的两点设计
- 权限变更与清理严格分离:放宽权限(Check 8、9)的确认是独立问题,绝不混进 declutter 确认里 —— 同意清理 ≠ 同意放宽安全姿态。
- 自身就是安全范本:配置只按 key 读取(防密钥入对话)、采集的名称绝不插值进 shell(防注入)、转录内容只用于计数(防提示注入)、拒绝证据只认 CLI 打标字段(防恶意 MCP 伪造)、npm 查询固定 registry 且在 HOME 执行(防恶意
.npmrc劫持)。文档包含十项检查的详细说明、数据来源表、报告流程图、安全边界和适用场景,可直接作为团队分享或参考材料使用。
它的第 1 条价值(省 context:清掉不用的 skills/MCP)正是本片技巧 4「上下文保持精简」的自动化版本 —— 而作者自己那台机器上有 172 个 skills(9.9k tokens)+ 57 个 agents(7.3k tokens),是全片最需要这个工具的样本。
顺带一个转场画面给出了这份文档的由来:11:04 切窗口的瞬间,终端底部闪过一行红字 ✗ Auto-update failed · Run claude doctor —— 他大概是被这行提示引到 claude doctor 上,才顺手让 Claude Code 把它写成了一份 skill 文档。
说明:这份文档是作者的产物,不是官方 skill 文档;我没有在本机验证过
/doctor是否真有上述十项检查。此处仅作原样转录。
十、覆盖率与方法声明
做了什么
- 全片转录:whisper large-v3-turbo,
-mc 0 -bs 5 -et 2.8,563 行,结尾自然收尾(无截断)。 - 均匀抽帧:
ffmpeg -ss <t> -frames:v 1,每 8 秒一张共 145 张,md5 去重验证 145/145 全部唯一(不是fps=滤镜,避开重复帧陷阱)。 - 漏采扫描:每秒灰度小图(裁掉硬字幕带与浏览器 chrome)逐秒差分切段,得 80 段、其中 50 段稳定 ≥4 秒;比对采样点后补抽 30 个未覆盖段,另按需补抽 36 帧(含 0.2 秒级)+ 十余张定点裁切放大图。
- 引文定位:字幕拼接串匹配(非
grep -F,可跨字幕条),分三批共查 29 条,28 条完整命中(其中 1 条跨 2 条字幕)、1 条部分匹配(我的检索串与转录用词不同,已换句重查,未采用部分匹配结果)。 - 交叉核查:抓取 Anthropic 原文全文纯文本,对数字、命令、环境变量、TL;DR 逐项比对(
1.9在全文中出现 0 次)。 - 数字复核:
/context里的29 tools / 57 agents / 172 skills三个计数,先是在缩略拼图上读到的,按惯例回去放大核对时,620–658 秒那几帧的左边缘已被裁掉(作者中途放大了终端),差点据此改写成「读不到」;退回到 10:18 那一帧才拿到完整显示并确认三个数无误。判据要选对帧,「这几帧读不到」不等于「画面上没有」。
明确没做到的
-
成本地图的第五行(左右各一格)全片未进入画面 —— 6 个时刻取帧确认过,是客观未呈现。
-
「前缀断裂示意」图的色块主体未读到 —— 8 个时刻取帧,只拿到标题与说明文字。它被夹在两次滚动之间。
-
「gremlin with Docs」这个命令名无法确定所指(转录与作者硬字幕互相矛盾),已按原样标注存疑,未推断成任何具体 skill 名。
-
口播中的「solid 模型」「deep-seek flash 模型」两处专名画面上没有对应物,未强行还原。
-
抽帧只能证明「每一屏都进过视野」,不能证明「进过视野的都写进来了」。这一项没有自动化保证,只能逐节回查。本文回查了两轮,第二轮(全文重读、专找「一句话概括了多个画面」的地方)又改出 7 处:
- 交叉引用指错节号(「见第五节」实为第八节);
- 动画控件数从 7 改成 8(
自动播放 / 重置 / 1 / 2 / 3 / 4 / 5 / End,第一轮漏数了一个); - 「前缀断裂图夹在 08:30 和 08:34 之间」→ 采样点实为 08:26 和 08:34(我按 8 秒步长算错了格);
git log终端画面的时间范围 11:34–12:00 → 实为 11:46–12:02(第一轮把一张浏览器帧当成了终端帧);- 「每一条 commit 都带
Co-authored-by」这个全称断言不成立 —— 放大数过,那一屏 5 条里 4 条带,第 3 条没有; - 引文统计从「15 条全部命中」改为「三批共 29 条,28 条完整命中 + 1 条部分匹配未采用」;
- 官方与页面的映射关系写反了:第一轮写「官方独立成条的子代理在页面里是附属项」,实际相反 —— 子代理在官方只是第 4 条里的一个附属句,是页面把它提升成了独立一节。
这七处里,只有前三处属于「写错了」;后四处都是「写少了 / 写反了」,全部来自第一轮把多个画面压缩成一句话时省掉的核对。
日期
文件名 260824 是我的下载日,不是录制日。片中可确定的绝对日期只有官方原文发布日 2026-08-14(页面标签 + 官方站均可查);口播说「前两天」发布,据此录制约在 08-16 前后。Orca 状态栏里的 5d 23h、646h 13m、Done - Claude 3d 都是相对时间,无法锚定到具体日期,所以这个 08-16 只是软推断。