就在刚刚,Anthropic 发了一篇博客。核心信息就是:各位,别再烧冤枉 token 了,我们都看不下去了!

为此,官方详细列举了六条省钱心法,先贴为敬:
1. 任务做完就 / clear。修完一个 bug 就清掉当前对话,别让上一个任务读过的文件和命令输出拖进下一个任务里,白白占着上下文。
2. 开局就定好模型和推理强度(effort level)。中途切换的话,之前积累的提示缓存会全部失效,整段对话历史要按全价重新计算一遍。
3. 用 @引用文件,别手打路径。用 @直接把文件附到消息里,Claude 不用再花一次工具调用去读。如果你只打文件名,Claude 可能先搜一圈再打开好几个文件试探,这些操作全部会进入对话历史,之后每一轮都带着。
4. 给输出多的命令加静默参数(quiet flag)。在 CLAUDE.md 里写一句类似--reporter=dot 的配置,让测试输出只打印几行摘要,不是几百行详情。输出越短,占的上下文越少。
5. /compact 在休息前做。对话还在缓存里的时候压缩,成本只有正常的十分之一。等你回来缓存过期了再压,就得按全价重新读一遍再压缩。
6. 大输出任务扔给子 Agent。子 Agent 在一个独立的上下文窗口里运行,做完只把结论传回来,过程中读的文件和跑的命令输出不会进入你的主对话。

一个 token 的前世今生
用 Claude Code 干活,API 按量走,订阅制月费从 20 美元到 200 美元分三档。
根据官方推算,开发者日均消耗 13 美元 token,月均花在 150 到 250 美元之间。
这还只是平均水平。同样修一个 bug,问法不同,花费能差出好几倍。
而且每一轮对话都在拖着前面所有轮的全部内容重新发送,会话越长,每一轮就越贵。
这些钱花在哪,得从 token 的计价逻辑说起。

每次你在 Claude Code 里输入一条指令,背后发生两件事。
第一件叫预填充(prefill),也就是模型一口气读进你的整个请求,包括系统提示词、CLAUDE.md、你的消息,以及之前对话里积累的一切。这些都是输入 token。
第二件叫解码(decode),也就是模型一个字一个字往外写的过程,包括它的思考、工具调用和你最终看到的文字。这些都是输出 token。
关键区别在这里。
预填充是并行的,一次性把所有输入 token 过一遍 GPU。解码是串行的,每吐一个 token 都要跑一次模型。200 个 token 的回复,就是 200 次独立运算。
所以也就不难理解,为什么输出 token 要比输入 token 贵 5 倍了。

在这个基础上,最终账单取决于两件事。
第一是模型,决定每个 token 的单价。
Opus 5,输入 5 美元 / 百万 token,输出 25 美元。
Sonnet 5,输入 2 美元,输出 10 美元。
Haiku 4.5,输入 1 美元,输出 5 美元。
第二是推理强度,决定 token 的数量。
一个会话里大部分输出 token 都是思考 token,推理强度控制的就是这个量。推理强度越高,模型想得越久,输出的思考 token 越多。max 和 low 之间能差好几倍。
简单活用 Sonnet,硬骨头才上 Opus。牛刀杀鸡的钱,花得最冤。

提示缓存,是最大的省钱利器
token 定价里还有一个巨大的变量,就是缓存。
Claude Code 的每次请求都从相同的前缀开始,也就是系统提示词、工具定义、CLAUDE.md 和对话历史。
如果这次请求的前缀和上次逐字节一样,服务器就不重新算,直接加载上次的计算结果。
缓存读取只要正常输入价的 0.1 倍,直接省掉 90%。
写入缓存贵一点,最高 2 倍。但写入只发生一次,后面每一轮都享受 0.1 倍读取。
举个例子。
假设你的对话历史有 5 万个 token。不走缓存的话,每一轮光是重读这 5 万 token 就得付全价。但只要命中缓存,同样的 5 万 token 只需要花十分之一的钱。
一个会话跑二三十轮,缓存命中攒下来的折扣是天文数字。
这是你最大的薅羊毛杠杆。

但缓存有个致命弱点。它必须从请求的第一个字节开始连续匹配,中间任何地方变了,从那里往后全部作废。
具体来说,一共有六种情况:
1. /model 切模型:每个模型的缓存独立。从 Sonnet 切到 Opus,整个对话历史按 Opus 的价格重新预填充,没有折扣。
2. /effort 切推理强度:推理强度也是 cache key 的一部分,切换之后整个对话历史都要重新计算。
3. 开关 Fast mode:效果和前两种一样,缓存直接失效。
4. /compact 压缩对话:对话被重写成摘要,原来的内容全部对不上,旧缓存直接作废。
5. 时间过期:订阅用户的缓存保活 1 小时,API 用户默认 5 分钟。超时后下一轮全量重算。
6. 恢复旧会话:隔了太久缓存早就没了,几乎 100% 要全价重新计算。
坏消息是,只要中一个就意味着整个对话历史从 0.1 倍打回原价。
好消息是,当你知道什么会让缓存失效时,就能知道怎么保住它。
比如,会话开头就锁定模型和推理强度,全程不切。不在缓存还热的时候做 / compact,等到准备休息的时候再跑。
这里,还有个隐藏坑。
opusplan 模式每次进出 plan 都切模型。进一次,缓存失效一次。出来,又失效一次。来回跳的话,每跳一次都是一笔全价 prefill。
你的会话,正在偷偷变胖
缓存帮你把重复发送历史的成本压到十分之一。
但有一件事它帮不了。你的历史本身在一轮一轮地膨胀。
每次 Claude 读一个文件,文件内容追加到对话里。每次 Claude 跑一个命令,输出也追加进去。从追加那一轮起,后面每一轮都带着。
第 40 轮对话在重新发送第 1 到 39 轮的全部累积内容。
这种增长,是接近平方级别的 O(n²)。

CClaude Code 有个兜底机制。
命令输出超过 30000 字符,就不往对话里塞了,而是写到一个临时文件里,对话里只放一句摘要。但 30000 以下的输出没人管。
比如一个测试框架跑完,打印 400 行通过记录,每行几十个字符,总量不到 3 万,够不上这个阈值。
于是这 400 行就原封不动地留在了对话历史里,后面每一轮都跟着重新发送一遍。
对此,Anthropic 博客里给了几招很实用的瘦身方法。
1. @引用文件。
不要手动输入路径让 Claude 自己去找。@引用会把文件直接附到消息里,省掉一次读取操作。
你只说文件名的话,Claude 可能先 grep 搜一圈,打开好几个文件看哪个对。然后这些试探就会全部进入对话历史,徒增成本。

2. 给 noisy 命令加 quiet flag。
在 CLAUDE.md 里写一句「run tests with npx vitest run <file> --reporter=dot」,以后每次跑测试只输出几行点状结果,不是几百行详情。一分钟的配置,以后每个会话省几百行上下文。
3. subagent 隔离大输出任务。
subagent 在自己独立的上下文窗口里跑,做完只传答案回来,过程中读的文件和命令输出全部丢弃。适合「去翻翻日志有什么异常」「帮我过一遍这个大文件」这种活。你只要结论,不要过程。

还有最重要的一条。
4. /clear 切任务。
修完一个 bug 就 / clear,开始下一件事。上一个 bug 的文件、命令输出、中间探索,全部和下一个任务无关,但如果不清,它们在后面每一轮都占着位置、吃着 token。
不想彻底清空的话,/compact 可以把对话压成摘要。一万到两万个 token 能压到一千到三千。

此外,博客里还提了一个冷门但免费的操作,/rewind。
如果最后几轮跑偏了,/rewind 直接砍掉那几轮,前面的缓存完全不动。
管 token,也是一种开发者素养
上面这些操作拆完,你会发现一个规律。写代码的人正在长出一套新技能。
跟框架和语言没关系,而是知道该选什么模型、怎么管上下文、怎么保住缓存、推理强度开多高合适。
这些能力一年前并不存在。但它现在却决定了你在同一个任务上,是花 3 美元还是 30 美元。
Anthropic 自己就是最好的例子。
他们 80% 的代码靠 AI 写,代码合并量一年翻了 8 倍,基准测试加速 52 倍。AI 用到这个强度,如果没人管 token,光推理成本就能把预算吃穿。
从这个角度看,与其说这篇博客讲的是省钱技巧,不如说是 AI 时代写代码的人需要长出来的一种新本能 ——
知道你的每一个操作在消耗什么,知道怎么让同样的预算干出更多的活。
读懂它的人,薅到的不只是几美元的 token。
参考资料:
https://claude.com/blog/maximizing-the-value-of-your-claude-code-sessions