Mingyu's Library主页
2026年8月21日

第 15 课:成本控制——把 token 账单按住

2026-08-21 · 主题:成本控制(cost control) 为什么是今天:v2.1.237(8/20)刚修了 LLM gateway 下 prompt caching 失效的问题,同版本还内置了 Concise 输出风格——两项都是直接冲着账单去的。趁热把成本这条线一次讲透。

前 14 课讲的是「怎么让 Claude Code 干得更好」,这一课讲「怎么让它干得更便宜」。四条技巧由浅入深:先学会看账,再改输出,再改上下文习惯,最后是模型与 effort 的分层调度。


技巧 1(入门):先看账,再谈省 —— /cost 与 /usage

省钱的第一步不是砍什么,是知道钱花在哪。/cost 会给出当前会话的累计 API 花费(美元,四位小数),并按模型拆分 input / output / cache read / cache write 四类 token 与各自小计。

/cost

关键读法:

估算月度成本的实操做法:跑一个有代表性的任务 → /cost → 乘以你预计的会话数,比任何定价表都准。

📎 Manage costs effectively — Claude Code Docs


技巧 2(基础):用 Concise 输出风格砍掉「过程叙述」

v2.1.237(2026-08-20)新增了内置的 Concise 输出风格:Claude 直接给结果,跳过前言(preamble)和过程叙述(narration)。

这条省的不只是当次的 output token。Claude Code 的每一轮都会把历史带上,今天多写的 300 token 叙述,会在后面每一轮里被重新计价一次——省一次,省的是「一次 × 剩余轮数」。

启用方式(输出风格是会话级设置,可在会话内切换):

/output-style

在列表里选 Concise。想让它成为默认,写进项目级设置:

// .claude/settings.json
{
  "outputStyle": "Concise"
}

配套的 CLAUDE.md 一句话约束,效果叠加:

## 输出约定
- 不要复述我的需求,不要写「我将要…」的开场白。
- 改完文件不要贴全文 diff,只列改了哪些文件 + 一行原因。
- 只在我问「为什么」时才解释设计取舍。

📎 Claude Code changelog · 📎 Claude Code 成本优化实践


技巧 3(进阶):养成「任务完成 → /clear」的肌肉记忆,并保护缓存前缀

成本的最大驱动项是上下文体积——每发一条新消息,累积的对话历史都要跟着走一遍。会话越长,每次交互越贵。

最贵的一个习惯是:把一个已完成任务的庞大上下文,原封不动带进一个不相关的新任务。旧上下文对新任务零价值,却在每条消息上继续计费。

# 任务完成 → 清空 → 开新任务
/clear

/clear 与 /compact 的成本取舍:

做什么 成本影响
/clear 丢弃全部历史,重新开始 上下文归零,但缓存前缀也重建(一次 cache write)
/compact 压缩历史成摘要后继续 保留连续性,但压缩会改写前缀 → 缓存整段失效

所以:任务之间用 /clear,任务内部尽量别频繁 /compact。频繁 compact 是长会话里悄悄烧钱的典型模式——每压缩一次,后面所有缓存都得重写。

同理,任何会在每轮变化的东西都不该进 CLAUDE.md 或系统提示的前部。一个时间戳、一个会话 ID 放在前缀里,就足以让整段缓存每轮失效。CLAUDE.md 保持精简、把目录级指引下沉到嵌套 CLAUDE.md,既省 token 也保缓存。

📎 Claude Code Token Optimization · 📎 Prompt caching — Claude Platform Docs


技巧 4(高阶):模型与 effort 的分层调度

单项收益最大的动作是给每类任务配对的模型,而不是全程用最贵的那个。

v2.1.236(2026-08-19)新增了 ANTHROPIC_DEFAULT_MODEL,可以指定新会话的默认启动模型——把默认设成便宜档,需要时再手动升档,比「默认最贵、忘了降档」的模式稳得多:

# ~/.zshrc 或 ~/.bashrc
export ANTHROPIC_DEFAULT_MODEL="claude-sonnet-5"

会话内按需升降:

/model            # 查看/切换当前模型

思考预算同样可调。复杂重构值得深思,改个 typo 不值得:

/effort           # 调低/调高思考强度

固定思考预算的模型上,可用环境变量兜底:

export MAX_THINKING_TOKENS=8000

第三层是用 subagent 隔离上下文(见第 3 课)。让 subagent 去啃「读 30 个文件找出调用点」这种脏活,主会话只收一份结论——脏上下文留在子会话里,不会污染主会话的后续每一轮。这既是质量手段,也是成本手段。

📎 Manage costs effectively · 📎 Claude Code Cost Tracking


一页速记

看账     /cost                  # 关注 cache read 占比
输出     /output-style → Concise  # settings.json: "outputStyle": "Concise"
上下文   任务完成 → /clear        # 少用 /compact(会毁缓存)
模型     ANTHROPIC_DEFAULT_MODEL # 默认便宜档,按需 /model 升档
思考     /effort、MAX_THINKING_TOKENS=8000
隔离     subagent 啃脏活,主会话只收结论

一句话: 账单不是被模型价格决定的,是被「你每轮重复发送多少字节」决定的。


下一课预告方向(候选):调试工作流、git worktree 并行、skills 的组织与复用。