第一次看到账单的震惊,几乎是每个 Claude Code 用户的成人礼。你让它在真实仓库里干一件真实的活——读文件、改代码、跑测试、修回归——事后打开用量一看,数字是同样一小时聊天窗口用法的好几倍。没有任何东西出错。这个数字就是 agentic 编程的真实成本。这篇文章先讲清楚钱到底烧在哪,再按威力从大到小过一遍真正有效的杠杆,最后落在那个让超支在结构上不可能发生的手段:给 key 本身装一个消费硬上限。
token 到底烧在哪
agentic CLI 不是聊天窗口,账单主要由四个机制构成:
读过的每个文件都进上下文。 Claude Code 为了看懂一个调用点打开一个 800 行的文件,这些行就变成了输入 token——而且会留在对话里,之后每一轮都跟着。在一个中等规模的仓库里认真探索一圈,第一行代码还没改,上下文里可能已经有几万个 token。
长会话每一轮都重发全部累积上下文。 底层 API 是无状态的:每一轮,客户端都要把到目前为止的整个对话——每次文件读取、每个 diff、每段测试日志——原样发一遍,再按输入价付一遍钱。单轮成本随会话长度增长,所以整个会话的总成本增长远超线性。第 40 轮在悄悄为第 1 到 39 轮再付一次钱。
子代理成倍放大。 Claude Code 派出子代理去探索代码库或复查改动时,那是一个独立对话,有自己的上下文、自己的文件读取,费用叠加在主会话之上。
重试和测试循环不断累加。 跑测试、读失败输出、改代码、再跑——每一次迭代都往上下文里追加输出,再付一轮全量上下文的钱。一个顽固的失败测试,花掉的钱可能比它守护的功能还多。
这些都不是贬义上的浪费。重发的上下文让模型记得三次编辑之前它做过什么;文件读取让它改得对;测试循环是「写了代码」和「交付了代码」之间的差距。这是工具真正干活的成本。正确的应对不是和架构较劲,而是抓住你手里的三个变量:哪个模型干活、上下文能长到多长、这把 key 最多能花多少。
杠杆一:模型分工——最大的单一乘数
上面每一个被重发的上下文 token,都按当前模型的输入价计费,所以模型选择会放大前面的一切。全程用最强的模型是最贵的配置,而多数会话根本用不上:
| 工作类型 | 模型 | 理由 |
|---|---|---|
| 日常主力:功能、修 bug、重构 | Claude Sonnet 5 | 用旗舰价的零头搞定绝大多数编码工作 |
| 真正的硬骨头:架构设计、深度排障 | Claude Opus 4.8 | 推理深度成为瓶颈时,溢价才值得 |
| 机械式操作:改名、样板代码、注释清扫、日志分诊 | Claude Haiku 4.5 | 活是模式化的,最便宜的模型足够胜任 |
Claude Code 支持用 /model 命令在会话中途切换,所以实用的习惯是:默认 Claude Sonnet 5,撞墙时升到 Claude Opus 4.8,机械活降到 Claude Haiku 4.5。因为这个乘数作用在每轮重发的整个上下文上,混合用法的账单通常只有「全程 Opus」的一小部分。
Claude Code 走 Anthropic 协议,通过 Router One 接入的是 Claude 系列;各模型实时单价见模型页,部分模型最低可到官方公示价的 1 折(最高 90% off)。想在跑之前先估一笔账,成本计算器可以直接算。
杠杆二:会话卫生——更短的上下文是最可靠的杠杆
既然每一轮都要为整个上下文重新付钱,上下文长度就是你直接掌控的第二个变量:
- 一个任务一个会话。 换任务就
/clear重开。早上修 bug 的会话,对下午的重构来说就是昂贵的压舱石。 - 把需求说窄。 「修掉
src/api/auth.ts里的空值检查」读一个文件;「找到并修复登录 bug」读二十个。 - 给路径,别贴全文。 把一整个大文件或完整日志贴进提示词,它就永远留在上下文里了。给个路径让工具自己读相关部分,或者只贴失败的那 30 行。
- 让长会话善终。 当会话累积的历史多到每一轮都很沉重时,把状态总结成一段笔记,重开一个干净的会话。重启的代价是重读一次文件;继续拖着的代价是每一轮都拖着全部历史。
关于缓存说一句:你可能读到过 prompt caching 会改变这笔账。无论上游的缓存机制怎样,我们不在这里承诺任何缓存计价——你永远可以在自己的请求 trace 数据里验证的杠杆,是更短的上下文。发出去的 token 更少,计费的 token 就更少,任何计价方案下都成立。
杠杆三:网关兜底——用上限代替祈祷
卫生习惯是一种实践;上限是一种保证。让 Claude Code 走 Router One,只需要两个环境变量:
export ANTHROPIC_BASE_URL=https://api.router.one
export ANTHROPIC_AUTH_TOKEN=your-router-one-key
在成本这件事上,你换来的是三个 key 级控制项和一本账:
- maxSpend —— key 上的消费硬上限。建一把 maxSpend 设成 $10 的 key 交给一个跑通宵的实验:最坏情况从此就是 $10 整,而不是「到早上它烧掉了多少算多少」。key 到顶即停,钱包在上限之外分毫不动。
- rateLimit —— 请求频率上限,把失控的重试循环从一场火灾降级成涓涓细流。
- tokenLimitTpm —— 每分钟 token 上限,正是针对本文所讲这种失控模式的直接刹车。陷在「读-改-测」旋涡里的 agent,物理上烧不过你画下的这条线。
- 每请求 trace —— 每个请求都记录模型、token、成本、延迟和状态(Dashboard → Logs)。一个项目或一个实验一把 key,「周二那 $14 是谁烧的」这个问题就有一个可以直接读出来的答案,而不是靠猜。
「一个实验一把带上限的 key」这个模式,和按 key 归因成本里描述的是同一套机制;账本具体记录什么,见成本追踪页。
订阅焦虑,还是一个看得见的钱包
Claude Code 账单让人刺痛的,从来不是金额本身,而是它成形的过程你看不见。包月订阅用藏起计价器来回应这种焦虑;没有可观测性的按量 API 则让你害怕计价器。第三条路就是这篇文章一直在铺垫的:一个预充值的钱包,每把 key 都有硬上限,每笔扣费背后都有一条请求 trace。你充了一个确定的数,key 花不过你设的顶,账本告诉你钱去了哪个会话、哪个模型、哪个循环。这里的价值主张不是一个更便宜的黑盒——是根本没有黑盒。
如果你确实偏好可预期的月度支出,Router One 在钱包之外也有订阅方案。从中国大陆接入——直连端点无需 VPN——完整配置见 Claude Code 中国指南。Claude Code 之外的省钱打法,见降低 LLM API 成本。
常见问题
Claude Code 为什么消耗这么多 token? 因为 agentic 编程在设计上就是上下文密集的:读过的每个文件都变成留在对话里的输入 token,每一轮都重发全部累积上下文,子代理跑的是独立计费的对话,测试-修复循环每迭代一次就再付一轮全量上下文的钱。这是工具真正干活的成本,不是故障——但它对模型分工、更短的会话和 key 级上限都有很好的响应。
日常使用 Claude Code 最省钱的方式是什么? 按难度分配模型:Claude Sonnet 5 做日常主力,只在推理深度成为瓶颈时用 Claude Opus 4.8,改名、样板代码这类机械活交给 Claude Haiku 4.5。因为模型输入价每轮都乘在整个重发的上下文上,这种混合用法的成本通常只有全程旗舰的一小部分。各模型实时单价见模型页。
怎么给 Claude Code 设一个花费硬上限? 让它走一把带上限的网关 key。在 Router One 上创建 API key,把 maxSpend 设成你的上限,再通过 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 让 Claude Code 指向它;无论会话里发生什么,key 到顶即停。rateLimit 和 tokenLimitTpm 还能在过程中掐住失控循环,每请求 trace 则精确展示每一笔花在了哪。
缩短会话真的能省钱吗? 能,而且是模型选择之外最可靠的杠杆。API 每一轮都重发完整对话,长会话在反复为自己的历史付钱,总成本增长远超线性。每个任务重开会话、把请求限定到具体文件、给路径而不是粘贴大文件,都在直接缩小被反复计费的上下文。
给 agent 设每分钟 token 上限安全吗? 安全——tokenLimitTpm 是刹车,不是墙。正常节奏的会话不会碰到一个合理的每分钟上限,而失控的「读-改-测」旋涡会被压到你选定的速率,而不是自由燃烧。再叠加 maxSpend 作为绝对兜底,任何实验的最坏情况都被双重限定:速度和总额。
诚实的总结
Claude Code 每小时很贵,因为它干了这一小时的活:读、改、测、重试。你没法让这套架构变便宜,但它的三个输入都在你手里——日常工作交给 Claude Sonnet 5、有意识地升级模型,会话保持短小和聚焦,所有流量走一把 maxSpend 由你事先定好的 key。到 router.one 给钱包充值,给 key 上好上限,然后去读账本,而不是害怕账单。