写在前面
贵不在单价,在用法。同一份活放在 Claude Code 里做,即使用同一个模型,用法不同,花费也可能相差很大。
我在 TeamoRouter 工作,是一个接入 Claude、GPT、Gemini 的 API 网关,每天有数十万个 Claude Code 会话经过我们。但客服经常收到同一个问题:「昨天花了 $5,今天花了 $20,干的活差不多,为什么?」
这类投诉我们会一条请求一条请求地拆开看。多数时候计费没有错,钱花在了用法上:一个会话从早用到晚,中途去倒了杯咖啡,8 个子代理每个想了 20 分钟。
这篇文章包括:
- Claude 怎么计费,为什么离开 6 分钟再回来,第一轮的输入费是平时的 25 倍;
- 客服处理过的 2 个真实案例;
- 针对这些案例的 7 条规则;
- 一份可以逐项自查的省钱清单。
数字来自我们的网关,但这些规则和用哪家提供商无关,直接用官方 API 也同样适用。
Claude API 怎么计费:输入、缓存读写和输出
每一轮都会把整段对话重新发一遍,这一遍按什么价钱算,由缓存决定。
Claude Code 的每次请求都带着系统提示、工具定义、CLAUDE.md 和此前的全部对话。提示缓存按前缀匹配:和上一轮相同的开头从缓存读,很便宜;新增的部分写进缓存,比普通输入还贵。前缀里只要有一处变了,后面的内容全部重算。
| 计费项 | Opus 5.5($/百万 token) | Sonnet 5.5($/百万 token) | 相当于输入价 |
|---|---|---|---|
| 普通输入 | 4 | 2 | 1× |
| 缓存读取 | 0.20 | 0.10 | 0.05× |
| 缓存写入,5 分钟 TTL | 5 | 2.50 | 1.25× |
| 缓存写入,1 小时 TTL | 8 | 4 | 2× |
| 输出(含思考) | 20 | 10 | 5× |
来源:Anthropic 官方价格表。
想对比更多模型,可以查看 Claude Code 与 Claude API 各模型的 token 价格。这里重点看缓存如何改变同一个模型的实际费用。
Claude Code 默认缓存 TTL 为什么只有 5 分钟
缓存不是永久的:默认 5 分钟没有新请求就过期。1 小时 TTL 要单独开启,写入价也更高。
- 用 API key 或第三方网关的 Claude Code,主对话和子代理默认都是 5 分钟。只有 Claude 订阅用户在套餐额度内,主对话才默认 1 小时(官方文档)。我们抽查过 1085 条 Claude Code 的写缓存请求,全部是 5 分钟写入。
- 计时从请求开始算,模型生成的时间也算在内。模型想了 4 分钟,留给下一轮的只剩 1 分钟。
算一笔账:Opus 5.5,上下文 30 万 token。缓存还热的时候,这一轮的输入费是 30 万 × $0.20/百万 = $0.06。离开 6 分钟再回来,缓存已过期,要整段重写:30 万 × $5/百万 = $1.50,是平时的 25 倍。
缓存命中也不是白送的:上下文涨到 80 万,就算每轮都命中,光读缓存每轮也要 $0.16。Claude Code 每次调用工具都算一轮,一个任务常常就是几十轮。
哪些操作会让缓存失效
- 两次请求之间的间隔超过 TTL。
- 中途换模型:每个模型各有一份缓存。opusplan 模式下每次进出计划模式,也算一次换模型。
- 开关 fast mode。
- 会话中途增删 MCP 服务器(工具定义没有延迟加载时)。
/compact:它会把历史换成摘要。- 图片累积到上限,最早的一批被移除。
- 升级 Claude Code 后的第一轮。
- 网关把
cache_control标记删掉了:这时每一轮都按全价算。
不影响缓存的操作:改仓库里的文件、改权限模式、调用 skill、/rewind。会话中途改 CLAUDE.md 也不影响缓存,但要等 /clear 或重启之后才生效。
2 个真实案例
下面 2 个案例都来自客服工单,用户信息已经匿名。金额是用户在我们平台的实际扣费,比官方价低,但比例关系一样。
案例 1:「前天 $5,今天 $20」,钱花在子代理上
一位 Cowork 用户,前几天每天用约 4800 万 token,花 $5.39,其中 98% 是缓存读取。出问题那天只用了 3400 万 token,却花了 $20.60。
- 主线程 53 次请求花了 $3.84。它派出的子代理 178 次请求花了 $16.75,占 81%,最多时 8 个并行。
- 子代理每轮思考 4–11 万 token,一轮要 8–25 分钟。子代理的缓存默认只保留 5 分钟,一轮想完缓存就过期了,下一轮要把约 10 万 token 整段重写,当天发生了 21 次。
教训:token 总数说明不了什么,要按读、写、输出拆开看。子代理是另外一份账,而且往往比主线程还贵。
核对平台扣费时,可以对照一条消息多条扣费与缓存计费说明,区分一次用户操作和背后的多次模型请求。
案例 2:「越用越笨」,超长会话
一个桌面版会话连续开了 3 天,1960 条消息、82.7 万 token,中间做过好几个不相关的任务。模型开始在每次调用工具前重复同一句话:20–50 万 token 时约 5–8% 的回复带这句,到后期一半都带。同一用户的其他会话一次都没有出现。模型在超长上下文里开始模仿自己之前的输出。
另一位 Cowork 用户的会话在约 12 万 token 时第一次出现错误的值,到 24 万 token 时反复犯同一个错,模型自己都建议换窗口。
教训:长会话不只贵,质量也会下降。
办法:降低 Claude Code 费用的 7 条规则
上面 2 个案例的问题都能归到下面 7 条里,每条都给出具体的设置或命令。配置项以 Claude Code v2.1.257 及以上为准。
1. 写代码用 Claude Code,少在 Cowork 和桌面版里干长活
我们统计了同一天 Opus 5.5 的全部请求:
| 指标 | Claude Code | Cowork |
|---|---|---|
| 上下文中位数(token) | 11.1 万 | 21.8 万 |
| 超过 20 万 token 的请求占比 | 30% | 54% |
| 每次请求带的工具数 | 20 | 38 |
| 「上下文超长」报错(每万次请求) | 6.4 | 37.6 |
Cowork 的单价并不更贵,贵在用法:会话更长、工具更多、子代理更多。桌面版接第三方 API 时,长会话里不要开 auto 模式(见案例 2)。
还没配置命令行环境的,可以先按 Claude Code 安装与 API 接入教程完成安装和连接。
2. 一个任务一个会话
- 换到不相关的任务就
/clear,这个操作不花钱。先用/rename起个名字,以后用/resume还能找回来。 - 上下文到 15 万 token 左右,让 Claude 写一份交接文件(目标、已完成、未完成、关键文件、下一步),然后开新会话读它。
- 不需要就别开 1M 上下文。
如果已经遇到上下文超长报错,可以查看 Claude Code「Prompt is too long」的原因和处理步骤。
3. 用 API key 的话,开启 1 小时缓存
在 ~/.claude/settings.json 里加一行:
{ "promptCacheTtl": "1h" }
这样算是否划算:1 小时缓存的写入价是 2×,比 5 分钟的 1.25× 贵,但只对每轮新增的部分收。上下文 30 万、每轮新增 5 千 token 时,每轮多付 0.75 × 5 千 = 3,750 token 的输入价。反过来,一次 5–60 分钟的停顿如果没有 1 小时缓存,要多付 (1.25 − 0.05) × 30 万 = 36 万 token 的输入价。所以每 96 轮里只要有一次这样的停顿,1 小时缓存就回本了。人在干活时,很少能保证每次都在 5 分钟内接着输入。
设置后检查一下是否生效:
claude -p "hello" --output-format json
结果里 usage.cache_creation.ephemeral_1h_input_tokens 大于 0 就是生效了。如果是 0,说明你的提供商不支持,把这行设置删掉。经过网关时,网关需要原样转发 anthropic-beta 请求头。
4. 离开超过 TTL,回来就开新会话,不要「冷压缩」
- 离开前,趁缓存还热,让 Claude 写好交接文件。这时候写交接主要是读缓存,很便宜。
- 回来时如果已经超过 TTL(5 分钟或 1 小时),上下文又很大,就开新会话读交接文件。
- 这时不要
/compact:缓存冷了以后,压缩要把整段历史按无缓存的价格重读一遍。压缩留在缓存还热的自然间隔时做。
5. 管住子代理
{
"env": {
"CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS": "3",
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
"CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
}
}
- 同时运行的子代理默认最多 20 个,建议改成 3 个。
- 子代理统一换成便宜的模型。子代理主要做搜索、阅读时用
haiku,要写代码时用sonnet。 - 子代理一轮要想超过 5 分钟时,给它们也开 1 小时缓存:
"subagentPromptCacheTtl": "1h"(见案例 1)。 - Agent teams 默认是关着的,不要打开。官方文档说,队员在计划模式下运行时,它的 token 消耗约为普通会话的 7 倍。
- 在 CLAUDE.md 里加一句:派子代理前先说明要派几个、为什么。
主模型和子代理分别选什么,可参考 Claude Opus、Sonnet、Fable 的价格与任务分工对比,在任务开始前配好。
6. 会话中途不要动前缀
- 开头就选好模型和 effort,中途不要换。
- 不要中途开关 fast mode、增删 MCP 服务器、用 opusplan 来回切。
- 简单任务开新会话用 Sonnet,或者把 effort 调低。
7. 先确认缓存在工作
- Claude Code 的
/usage里有一行Prompt cache (main):命中率、未命中次数、可能的原因、缓存现在是冷还是热(v2.1.251 起)。 - 状态栏脚本可以读到同样的数据,把上下文大小和缓存冷热一直显示在屏幕上。
- 自己写的 agent:看响应
usage里的cache_read_input_tokens,连续几轮都是 0,就说明缓存没生效。
提供商也会吃掉省下的钱
用法对了,提供商也可能让缓存失效。我们测试一家供应商时就遇到过:同一个会话切过去以后,每轮只能命中固定的 4.7 万 token 前缀,其余约 59 万 token 每轮都重写。每轮花费从 $0.09 变成 $1.67,差了 18 倍。
常见的几种问题:
- 把
cache_control标记删掉,每轮都按全价算。 - 只命中固定前缀,对话部分每轮重写。
- 不支持 1 小时缓存。
- 同一会话在 5 分钟内偶发整段丢缓存。
- usage 里报的数前后对不上,比如总输入比上一轮还少。
选择提供商时,除了比较单价,也要检查缓存支持、路由稳定性和用量记录。需要横向比较方案,可以参考 LLM 网关选型与成本管理功能对比。
Claude API 省钱自查清单
照着勾一遍:
-
写代码用 Claude Code,不在 Cowork 里干长活;桌面版长会话不开 auto 模式
-
一个任务一个会话,上下文到 15 万 token 左右就写交接、开新会话
-
设置
promptCacheTtl: "1h",并确认已经生效 -
离开超过 TTL 再回来就开新会话,不在缓存冷的时候
/compact -
子代理同时最多 3 个,用便宜的模型
-
会话中途不换模型、不开关 fast mode、不增删 MCP
-
用
/usage或状态栏确认缓存在命中
最后
省钱的关键不是找更便宜的 token,而是少让模型重读、少让缓存过期。这些规则对官方 API 和其他提供商同样适用。
TeamoRouter 做了数百次实验优化出最优的省钱路由算法,Claude 模型价格低至官方 2.8 折,具体以 Claude 模型实时 API 价格为准。想接入使用,可以按 CC Switch 安装与 TeamoRouter 配置教程设置。