这篇把 Claude Code 的省钱门道讲透了:缓存怎么省、什么时候切模型便宜、哪些命令输出是隐形开销。适合天天用 Claude Code 写代码的人照着调。
Claude Code 成本由模型、输入输出类型和提示词缓存决定,其中输出 token 价格约为输入的 5 倍,thinking token 占输出大头。缓存读取仅 0.1× 价格,但切换 /model、/effort 或开启 Fast mode 会击穿缓存,导致全价重新 prefill。会话中读过的文件和命令输出会在每轮重复计费,第 40 轮需重读前 39 轮,长会话成本超直觉。建议任务间用 /clear、@提及文件省去 Read 调用、给命令加静默参数,并在缓存 1 小时过期前用 /compact 压缩。
Claude Code 会话价值最大化指南 -- 适用于你的 Coding Agents:从缓存、上下文到 Subagent 的成本优化 https://t.co/ISeyEUsfyt 先看两个问...
Claude Code 会话价值最大化指南 -- 适用于你的 Coding Agents:从缓存、上下文到 Subagent 的成本优化 claude.com/blog/maximizin… 先看两个问题: 1. 单个 token 的价格由什么决定 2. 一个会话会发出多少 token # Token 单价的三个决定因素 1. 模型 更大的模型对输入、输出都做更多计算。难题/模糊任务用大模型,常规任务用小模型——其余所有优化都会被模型单价放大。 2. 输入 vs 输出 · Prefill:系统提示、CLAUDE.md、你的消息、以及会话中累积的所有内容(读过的文件、命令输出)。 · Decode:思考、工具调用、回复文本。逐 token 串行生成,GPU 占用时间更长,因此输出价格约为输入的 5 倍。 · 输出中很大比例是 thinking token,其数量由 /effort 控制。已知是体力活的会话,可用 MAX_THINKING_TOKENS=0 直接关闭思考。 3. 提示词缓存 · 机制:请求前缀与上次完全相同,则前缀部分直接读取缓存状态,只对新增部分全价 prefill。 · 价格:缓存读取 0.1×,缓存写入最高 2×(写入只发生一次,之后每轮都是 0.1× 读取)。 · Claude Code 自动管理缓存,但以下行为会击穿缓存,导致整个会话重新全价 prefill: · /model 切换模型(含 opusplan 进出 plan 模式) · /effort 切换思考档位 · 开启 Fast mode(且按 fast 价格重新 prefill) · /compact 压缩会话(系统提示部分保留) · 时间过期:订阅 1 小时、API key 5 分钟(ENABLE_PROMPT_CACHING_1H=1 可延长到 1 小时);恢复旧会话基本必然 miss 结论:不是不能切换,是要选便宜的时机——会话开始时或 /clear 之后,而不是长对话中途。 # 会话 Token 量的成本模型 关键事实:进入上下文的任何内容(读过的文件、命令输出),会在之后的每一轮被重新发送,直到会话结束。虽然有缓存折扣,但便宜不等于免费,还占用模型每轮要"绕着思考"的上下文空间。 1. 什么进入了上下文 · 启动即加载:工具定义、系统提示、CLAUDE.md、MCP 工具定义。用 /context 审计;CLAUDE.md 只留通用指令,流程性内容移到 skills;用不到的 MCP 用 /mcp 关掉。 · 探索成本:说"测试挂了",Claude 要先 grep、开一堆文件去定位,这些中间结果会留在上下文里。直接说"修 utils.test.ts 里挂掉的测试"省掉搜索;用 @ 提及文件连 Read 调用都省了(文件随第一条消息直接附上,且一次会话只需提及一次)。 · 命令输出:超过 3 万字符会自动落盘只留摘要(BASH_MAX_OUTPUT_LENGTH 可调),真正的杀手是阈值以下的中等输出——比如 400 行逐行打印的通过测试。对策:给命令加 quiet flag、用 subagent、或用 hook 改写嘈杂命令;把高频命令连同静默参数写进 CLAUDE.md。 2. 在上下文里停留多少轮 · 一个长会话比拆成几个短会话贵,且贵得超乎直觉——第 40 轮要重读前 39 轮。 · 任务切换用 /clear,同一任务前半段完成用 /compact;/clear 前可先 /rename 以便找回;/compact 时告诉它保留什么。 · 一个反直觉的省钱技巧:如果最近几轮走偏了,用 /rewind 回滚而不是 /compact——rewind 只砍掉尾部,前缀缓存仍在,成本为零。 · 注意"你不在打字时发生的轮次":/loop 每次都携带整个会话触发完整一轮,超 1 小时还叠加缓存失效——应在新终端的干净会话里跑。 3. Subagents:隔离上下文的另一手段 · 子 agent 有独立上下文(含系统提示、工具、CLAUDE.md),但不带你的对话;只有最终结论返回主会话,其余全部丢弃。 · 代价是可能要重读主会话已读过的内容,小任务不划算;适合"产出大量你不需要保留的输出"的任务(如翻日志)。 · 固定外包的嘈杂任务,给它定义一个用 haiku/sonnet 的专属 subagent,否则它默认跑在主会话的模型上。 # 可执行清单(按性价比排序) 1. 任务之间 /clear —— 阻断无关上下文持续计费 2. 开工前定好 /model 和 /effort —— 中途切换击穿缓存 3. @ 提及文件代替写路径 —— 省掉 Read 调用和搜索 4. 嘈杂命令加静默 flag 或丢给 subagent —— 命令输出会驻留整个会话 5. 新会话先跑 /context —— 审计启动加载项,砍掉不需要的 6. 离开键盘前 /compact —— 缓存 1 小时过期,趁热压缩便宜得多 💬 1 🔄 0 ❤️ 2 👀 257 📊 2 ⚡