Claude Code 省钱三件套:模型、effort、缓存
更新·markdown 原文
账单不是被某一个开关决定的,是三个乘数相乘:用哪个模型 × 思考多深 × 缓存命中多少。我把官方文档里散在三处的口径接到一起,顺带补上「长会话为什么会安静地烧钱」那份清单。数字截至 2026 年 7 月。
先给个尺子。官方公布的企业部署均值:约 $13 / 开发者 / 活跃日,$150–250 / 开发者 / 月,90% 的人活跃日花费低于 $30。你的数比这个高一截,多半能在下面三件套里找到原因。
一、模型:默认别停在 Opus
官方的话很直接:Sonnet 应付大多数编码任务,成本低于 Opus;Opus 留给复杂的架构决策和多步推理。
/model会话中途切/config设默认- 子代理单独指定:配置里写
model: haiku
API 或云厂商账单异常高,官方点名两个最常见的原因,第二个就是把 Opus 当默认放着没动。
顺带一个容易误解的:订阅计划下的会话/周限额是跨模型共享的,/model 换个模型不会让额度回来。只有撞到「你已达到 Opus 限额」这条模型专属的消息时,换模型才能接着干活。
二、effort:思考深度是可以调的
扩展思考默认开着——它对复杂规划和推理确实有明显帮助,但思考 token 按输出计费,默认预算可能是每次请求几万 token。
简单任务上调低它:
- `/effort`,或者在
/model里设 - `/config` 里可以整个关掉思考
- 固定思考预算的模型上,用环境变量
MAX_THINKING_TOKENS(比如MAX_THINKING_TOKENS=8000)
三个坑:
- 自适应推理的模型会忽略非零预算——在那些模型上设
MAX_THINKING_TOKENS是无效操作,要用 effort 档位。 - Fable 5 关不掉思考,它永远用扩展思考。
- 反过来也成立:难活儿上把 effort 压太低,会换来更多轮返工,总账更贵。
档位怎么选:high 是大多数场景的默认;编码和 agentic 任务里最难的那部分值得上 xhigh;例行活儿 medium 甚至 low 就够。这不是单调关系——高 effort 常常因为一次做对而减少轮次,反而更便宜。
三、缓存:Claude Code 里的寿命跟你怎么登录有关
缓存读取按输入价的 0.1 倍计,写入 1.25 倍(5 分钟档)或 2 倍(1 小时档)。这层机制单独一篇写了。这里只补 Claude Code 特有的那条:
缓存寿命取决于你用什么在跑:
| 怎么登的 | 缓存寿命 |
|---|---|
| 订阅(Pro / Max / Team / Enterprise) | 1 小时 |
| 订阅但已经在用 usage credits | 掉到 5 分钟 |
| API key 或云厂商 | 默认 5 分钟 |
这解释了一个很常见的困惑:同样是「离开一会儿再回来问一句」,在订阅上几乎无感,在 API key 上就是一次全量重算——你的整个会话上下文重新按全价过一遍。
/usage 会在最近用量里标出占比 ≥10% 的行为,缓存未命中是它会点名的一项。看到它就说明这笔钱是真的在漏。
长会话为什么会安静地烧钱
一个开了一整天的会话,用掉的额度会远超你的活动量。官方列了五个原因,每个都不显眼:
- 全量重发。 每条消息都带着整个对话过去。开了一天的会话里问一句话,付的是整段历史的钱,不是那一句的钱。
- 缓存过期。 休息时间超过缓存寿命,回来第一条消息就是全量重算(见上表)。
- 定时任务。 挂着的 scheduled task 到点就跑,哪怕会话空闲,照样发一整份上下文。
- agent 队友。 每个活着的 teammate 都在持续烧 token,直到它退出或会话结束。
- `/compact` 本身是个大请求。 它要读完那段对话才能总结——压缩一个大上下文,这个动作本身就很贵。
最后一条推出一个反直觉的结论:`/clear` 不花钱,`/compact` 花钱。 要的是接着干就 compact,要的是重新开始就 clear,别习惯性 compact。
其余几个杠杆
`/clear` 分隔不相关的任务。 陈旧上下文在之后每一条消息上都收一次费。想回头找,先 /rename 再 clear,之后 /resume。
MCP 开销。 工具定义默认是延迟加载的,只有工具名进上下文。但 `gh`、`aws`、`gcloud` 这类 CLI 更省——它们连工具名都不占。/mcp 看有哪些开着,不用的关掉;/context 看谁在占地方。
用 hook 预处理。 Claude 读一个一万行的日志找报错,不如一个 PreToolUse hook 先 grep 出 ERROR 再给它——几万 token 变几百。官方给的例子是把 npm test 改写成只输出失败部分。
把 CLAUDE.md 里的长流程搬进 skill。 CLAUDE.md 每次会话都全量加载,哪怕你今天干的是完全无关的活。skill 只在被调用时加载。
大输出交给子代理。 跑测试、抓文档、处理日志,让冗长的输出留在子代理的上下文里,主对话只收一份摘要。
agent teams 很贵。 队友在 plan mode 下跑时,token 用量约是普通会话的 7 倍——每个队友是独立的 Claude 实例,各带一份上下文。队友用 Sonnet、队伍开小、活干完就关掉。(默认是关的,要 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 才开。)
把话说具体。 「改进一下这个代码库」会触发大范围扫描;「给 auth.ts 的 login 函数加输入校验」让它直接干活。这条最便宜也最有效。
复杂活先走 plan mode。 Shift+Tab 切过去,让它先探再提方案给你批——方向错了才返工,是最贵的一种浪费。走岔了按 Esc 立刻停,/rewind 或双击 Esc 回到之前的检查点。
怎么看自己花了多少
/usage 的 Session 区块:
Total cost: $0.55
Total duration (API): 6m 20s
Usage by model:
claude-sonnet-4-6: 1.2k input, 5.3k output, 940.0k cache read, 50.0k cache write ($0.55)注意那行数字的构成——940k 缓存读 vs 1.2k 全价输入,这就是缓存在实际会话里的占比。金额是本地按 token 估算的,跟真实账单会有出入,权威数字看 Console 的 Usage 页。
订阅用户看的是额度条和用量分解,会把用量归给 skill、子代理、插件、各个 MCP server,各占百分之多少。按 d / w 在 24 小时和 7 天之间切。/clear 之后这些计数归零。
后台还有一小笔固定开销(会话摘要、状态查询之类),通常每个会话低于 $0.04。