如何降低 Claude Code 使用费用:同一个 Java 修 bug 任务实测 6 种设置,花费从 0.69 到 0.02 美元

导读:最近掘金上有篇"AI 编程工具一年烧掉两台 MacBook"挺火,知乎"如何降低 Claude Code 的使用费用"也有 20 万浏览。省钱的建议网上很多,但很少有人拿同一个任务把几种设置的花费摆在一起比。我在本机用一个 Java 订单金额计算的修 bug 任务,跑了 6 种设置,每次都用 10 个隐藏用例验收,再按官方价格表把花费拆开。结论有点反直觉:这种小任务里,钱大半花在"写缓存"上,不在模型输出。


一、先说清楚:Claude Code 的钱花在哪

Claude Code 每发一次请求,都要把系统提示词、工具定义、你的 CLAUDE.md、整段对话历史一起发给模型。模型本身不记事,所以每一轮都是"从头再读一遍"。为了不重复收全价,API 有个提示词缓存:第一次读到的内容写进缓存(贵一点),之后再读同样的开头就按缓存价收(便宜很多)。

所以一次任务的账单分四块:

部分 是什么 Opus 5.5 标价(每百万 token)
输入 没命中缓存的新内容 4 美元
写缓存 第一次读到、存进缓存的内容 5 美元(5 分钟有效)/ 8 美元(1 小时有效)
读缓存 命中缓存的历史内容 0.2 美元
输出 模型写出来的字,包括思考过程 20 美元

不管它会怎样?用订阅(Pro、Max)的话,钱不会多扣,但会更快撞到用量上限,提示"You've hit your session limit";用 API Key 的话就是直接多花钱。什么时候值得调:经常撞上限、团队按 token 付费、或者要在 CI 里批量跑 claude -p。

⚠️ 本文的美元数字是 Claude Code 在 claude -p --output-format json 里报的 total_cost_usd,它按标价在本地算出来。我是 claude.ai 订阅登录,官方文档说订阅用户这个数字和账单无关。订阅额度怎么折算 token,官方没公开,所以下面只能说"哪种设置用的 token 少",不能换算成"省了多少额度"。


二、测试方法

项目 版本 / 设置
Claude Code 2.1.299,claude.ai 订阅登录
任务项目 Spring Boot 3.5.5 父 POM + JUnit 5,JDK 17.0.12,Maven 离线
每组运行方式 claude -p,--output-format json,权限 acceptEdits,只放行 Bash(mvn:*)、Read、Edit、Write、Glob、Grep
验收 跑完后放进 10 个模型看不到的隐藏用例

任务是一个订单金额计算类 PriceCalculator,规则写在 TASK.md 里:商品小计、VIP 打 95 折、按折后金额判断满减门槛并自动选减得最多的券、HALF_UP 四舍五入到分、最低 0.01 元、不满 99 元加 10 元运费。原实现故意埋了 6 个 bug:用 double 算钱、向下取整、先加运费再打折、门槛按折前判断、遇到第一张券就用、没有最低金额。

每组用的提示词完全一样:

text 复制代码
这是一个订单金额计算模块,计算规则写在 TASK.md。现在的 PriceCalculator 实现有 bug,现有单测会失败。
请按 TASK.md 修好 src/main/java/demo/price/PriceCalculator.java,并补充你认为需要的单元测试。
不要修改 TASK.md,也不要改现有测试的断言。
用这条命令跑测试验证(离线,不要联网):mvn -o -q -s <临时 settings.xml> test
完成后用两三句话说明你改了什么。

每组的命令形如下面这样,只改 --model、--effort 和环境变量:

bash 复制代码
# 在任务项目目录执行;结果 JSON 里有 total_cost_usd、usage、num_turns
claude -p "$(cat prompt.txt)" --model sonnet --effort medium \
  --output-format json --permission-mode acceptEdits \
  --allowedTools "Bash(mvn:*)" "Read" "Edit" "Write" "Glob" "Grep" > sonnet_medium.json

隐藏用例里有一条是 0.10×3 + 0.20×3 必须等于 10.90(含运费),专门抓 double 精度;还有"95 元商品加运费不能凑满 100 元门槛"这种只有认真读规则才能写对的。


三、6 组实测结果

# 设置 花费(美元,按标价) 轮数 写缓存 token 读缓存 token 输出 token 隐藏验收 它自己补的测试
1 Opus 5.5,medium(我本机默认) 0.694 13 61,565 458,446 5,470 10/10 9 个
2 Sonnet 5.5,medium 0.349 11 61,555 395,243 6,305 10/10 8 个
3 Haiku 5.5,medium 0.021 10 64,494 416,719 8,625 10/10 8 个
4 Opus 5.5,low 0.410 8 33,901 293,592 3,997 10/10 7 个
5 Opus 5.5,medium,--safe-mode 0.249 9 12,767 224,014 5,105 10/10 0 个
6 Opus 5.5,medium,缓存强制 5 分钟 0.525 14 62,475 525,315 5,379 10/10 8 个

每组只跑了一次,任务也小,数字会有波动,适合看量级,不适合当精确的倍数。用时都在 45~62 秒之间,第 2~4 组是同时跑的,用时没有可比性,表里就没列。

几件事:

1. 这个任务上,6 种设置全部做对了。 连 Haiku 都把 6 个 bug 修完、10 个隐藏用例全过。Haiku 写出来的 PriceCalculator 和 Opus 的几乎一样:BigDecimal、HALF_UP、按折后金额选最大券、最低 0.01。说明规则写清楚、有测试可跑的小任务,用不着最贵的模型。

2. 钱主要花在写缓存。 拿第 1 组按官方价格表拆一下:

部分 token 单价(每百万) 金额
写缓存(1 小时) 61,565 8 美元 0.493
读缓存 458,446 0.2 美元 0.092
输出 5,470 20 美元 0.109
合计 0.694

和 Claude Code 报的 0.6937 对得上。写缓存占了 71%。读了 45 万 token 的历史,才花 9 分钱;写进缓存的 6 万 token 却花了近 5 毛。

3. 那 6 万 token 里,有一大半是我自己的配置。 第 5 组加了 --safe-mode(关掉 CLAUDE.md、Skills、插件、hooks、MCP),写缓存从 61,565 降到 12,767。看最后一轮请求的上下文:默认约 6.2 万 token,safe-mode 约 3.6 万。我本机装了不少 Skills、插件和 MCP,全局和项目里各有一份 CLAUDE.md,加起来每次请求多带约 2.5 万 token。不过要说明:第 5 组这次没补测试,少干了活,花费低一部分是这个原因。

4. effort 调低,轮数少了。 第 4 组 low 只用了 8 轮,补的测试也最少(7 个),花费比 medium 少 4 成,结果照样全对。

5. 缓存有效期不同,同样的活花费不同。 订阅用户的主对话默认用 1 小时缓存,写入价 8 美元;第 6 组用 FORCE_PROMPT_CACHING_5M=1 强制 5 分钟,写入价 5 美元,花费从 0.694 降到 0.525。API Key 用户默认就是 5 分钟,所以同样的任务,API 用户看到的数字会比订阅用户低。


四、按实测结果整理的省钱做法

4.1 小任务换 Sonnet 或 Haiku

这次 Sonnet 花了 Opus 的一半,Haiku 花了 Opus 的 3%,结果都对。官方文档的建议也是 Sonnet 处理大多数编码任务,Opus 留给复杂的架构决策和多步推理。

bash 复制代码
# 会话中途切换模型
/model sonnet
# 一次性的命令行任务直接指定
claude -p "修复 PriceCalculator 的 bug" --model haiku

⚠️ 官方文档说每个模型有自己的缓存,会话中途切模型,下一轮要把整段历史重新处理一遍。所以最好在会话开始时就选好,不要一个任务里来回切。

4.2 effort 先用 medium,简单活用 low

bash 复制代码
# 在交互会话里调整(Opus 5.5、Sonnet 5.5、Haiku 5.5 上,据文档换 effort 不会丢缓存)
/effort low

effort 越低,模型想得越少、工具调用越少。这次 low 少了 5 轮。复杂的跨模块改动我还是建议 medium 起步,效果不好再往上调。

4.3 给 CLAUDE.md 和插件瘦身

每次请求都带着它们,上下文越大,写缓存越多。可以这样查:

bash 复制代码
# 交互会话里看上下文被什么占用(本文没有截图验证,命令据官方文档)
/context
# 关掉暂时不用的 MCP 服务器
/mcp

官方建议 CLAUDE.md 控制在 200 行以内,把只在特定场景用的长说明挪到 Skill 里,Skill 只在用到时才加载。想知道自己的配置占了多少,最简单的办法就是像第 5 组那样,用 --safe-mode 跑一次同样的任务,比一比 cache_creation_input_tokens。

4.4 不相关的任务之间用 /clear

上下文会一直累积,每一轮都要读一遍。换任务时 /clear 重开,官方文档说 /clear 不花钱,/compact 本身要发一次请求去做总结。

4.5 放行规则写宽一点,少一轮重试

这次 6 组里每组都有 1~3 条命令被拒,看 JSON 里的 permission_denials,被拒的基本是这种:

text 复制代码
mvn -o -q -s .../settings.xml test; echo EXIT=$?
mvn -o -q -s .../settings.xml test 2>&1 | tail -30; echo exit=$?

我只放行了 Bash(mvn:*),模型在后面接了 ; echo 或 | tail,整条命令就不算 mvn 了,被拒后模型换成不带尾巴的写法重试。每被拒一次,就多一轮请求、多读一遍上下文。在 CI 里批量跑 claude -p 时,可以把 echo、tail 这类只读命令也加进放行列表。这一条我没有单独做对照实验,是根据 permission_denials 记录推断的。

4.6 给批量任务设预算上限

bash 复制代码
# 只在 -p 模式生效:花费估算超过 1 美元就停
claude -p "$(cat prompt.txt)" --max-budget-usd 1

这个参数在 claude --help 里写的是"only works with --print"。本文没有测它超额时的具体行为。


五、怎么查自己花了多少

方法 看到什么 适合谁
claude -p ... --output-format json total_cost_usd、usage 里各类 token、num_turns、permission_denials 脚本和 CI,本文就是用它
交互会话里 /usage Session 区块的总花费和各模型 token;订阅用户还有额度条和"哪些 Skill、插件、MCP 占了多少" 日常使用
/insights 分析最近的会话,生成一份 HTML 报告 想看自己的使用习惯

/usage 和 /insights 的说明据官方文档,本文没在交互会话里截图验证。文档还提到 2.1.305 起 /usage 里能按 f 让 Claude Code 自动执行它给出的省钱建议,我本机是 2.1.299,用不了。

确认自己用的是哪种缓存有效期,可以看 JSON 里的 usage.cache_creation:

json 复制代码
{
  "ephemeral_1h_input_tokens": 61565,
  "ephemeral_5m_input_tokens": 0
}

这是第 1 组的输出,说明订阅登录时主对话写的是 1 小时缓存。


六、速查表

想省的地方 做法 本次实测效果
模型 小任务用 --model sonnet / haiku 0.694 → 0.349 / 0.021 美元
思考深度 --effort low 或 /effort low 0.694 → 0.410 美元,13 轮 → 8 轮
底座上下文 精简 CLAUDE.md、Skills、插件、MCP --safe-mode 时写缓存 6.2 万 → 1.3 万 token
缓存有效期 API 用户默认 5 分钟;订阅默认 1 小时 强制 5 分钟:0.694 → 0.525 美元
被拒重试 放行规则覆盖常见的管道命令 每组被拒 1~3 次(未做对照)
失控保护 -p 模式加 --max-budget-usd 未测

七、常见问题

Q:订阅用户看 total_cost_usd 有意义吗?

不能当账单看,但能当"用了多少 token"的相对指标。同一个任务,这个数字低的设置,用的 token 就少,撞上限会晚一点。订阅额度和 token 怎么折算,官方没公开,我也没法验证。

Q:Haiku 这么便宜,为什么不全用 Haiku?

这次任务规则写得很清楚,还有现成的测试命令可以跑,这是对小模型最友好的情况。需求模糊、要跨很多文件、要自己设计方案的任务,本文没有测,不能拿这个结果外推。我的建议是先用 Sonnet,跑几次觉得不够再换 Opus。

Q:为什么 1 小时缓存反而更贵?

1 小时缓存的写入单价更高(Opus 5.5 是 8 美元对 5 美元),好处是你离开一会儿再回来,不用重新处理整段上下文。像这次 1 分钟就结束的任务,用不上长有效期,就白付了差价。官方文档的说法也是:短时间的连续工作,1 小时缓存更贵。

Q:Claude Code 的 /cost 命令去哪了?

现在的官方成本文档里讲的是 /usage,没有再提 /cost。本机 2.1.299 我没在交互会话里试 /cost,不确定它是否还能用。


参考链接


你平时主力用的是 Opus 还是 Sonnet?有没有试过把 effort 调到 low 干活?评论区说说你的模型、effort 和一般做什么任务,我挑几种补测一下花费。

觉得有用的话点个赞、收个藏,下次撞上限时翻得到。

相关推荐
ZzT7 小时前
AI-SDLC 实践 00|让 Coding Agent 参与整个项目周期:AI-SDLC 是什么、为什么要做
ai编程·claude
jerrywus10 小时前
你还在手动seo? 那你可以试试claude-seo skill
agent·claude·seo
一缕82年的清风10 小时前
智能体“自主决策”的虚假繁荣:当 Claude 5.5 与 GPT-6.1 深入生产,为什么顶级架构师都在重回“确定性状态机”?
gpt·claude
重生之我在番茄自学网安拯救世界1 天前
AI开发者日报 第2期 | Anthropic零 Rust 团队靠Claude重写核心 API,CPU 降 40–50%
人工智能·网络安全·大模型·ai编程·claude
一缕82年的清风1 天前
算力平民化神话破产:当推理成本暴降 90%,为什么生产级 Agentic 架构反而更贵更脆弱了?
gpt·claude
灵感__idea1 天前
Claude Code:能干活只是初级目标,再提10倍
ai编程·claude·cursor
jerrywus3 天前
Skill、MCP、Workflow、Rules、Memory 有什么区别?拿几次真实开发任务讲清楚
前端·agent·claude