Claude Code 的账单,钱到底去了哪?
把 AI API 账单逐行读一遍:每笔请求背后的三个数字、悄悄主导 Agent 账单的上下文重发机制,以及把任何服务商的账单变成可审计记录的三个问题。
月度账单是最不适合发现疑问的地方。它只告诉你花了多少,从不告诉你花去了哪——而在编码 Agent 这类工具上,钱的真实去向第一次看时确实出人意料。这篇是我希望每个开发者在打开计费面板之前就具备的心智模型。
先说清楚:我运营 Teapot Router,一个面向 Claude Code 与 OpenAI SDK 工具的 API 网关。但本文不依赖它——下面的解剖适用于任何 Anthropic 兼容的接入点。
每一行都是三个数字
一次编码 Agent 请求按三个组成部分计费。要养成的反射是:账单让你意外时,别问哪个模型贵——把明细拉出来,问三个数字里哪一个动了。
- 提示词 token——模型读到的一切:系统提示、项目上下文、此前的对话、工具结果。长会话里这几乎从来不是「你的问题」,而是你的问题加上 Agent 为了回答而重读的全部内容。
- 补全 token——模型写回的部分:代码、推理、工具调用。通常只占 Agent 账单的小头。
- 缓存读/写——提示词缓存的计价。读是大幅折扣的命中,写是填充缓存的成本。你的工具和接入点缓存用得好不好,会剧烈影响实际单价。
安静的主角:上下文每轮重发
Claude Code 这类 Agent 在协议层无状态:每一轮,客户端都会把整段对话重新发一遍——系统提示、文件上下文、之前的工具结果全在内。会话里第 15 条消息的计费,等于你把 15 条一次性问了出去。这不是缺陷,是协议的工作方式;但它解释了两个反直觉的事实:
便宜模型的长会话可能贵过贵模型的短会话。而 ROI 最好的解法通常是管理上下文——清理过期的工具输出、让会话保持聚焦、让缓存干活——而不是到处找折扣。
三根杠杆,按诚实的程度排序
在动价格表之前,先看这几根按「省得有多实在」排序的杠杆:
- 按任务选对模型。模板化的改动和全文检索用不着旗舰,难的架构级任务才配得上。按任务分流是最大的一笔诚实节省。
- 让缓存真正生效。提示词缓存的读比冷提示 token 便宜一个数量级。稳定的系统提示和会话结构,比任何价格表都管用。
- 订阅还是按量——按你自己的形状算账。用量集中砸在一个模型上时套餐划算;一旦负载多样、偶发、或分散在多个工具上,按量就赢。没有万能答案,只有你自己的算术。
问任何服务商的三个问题
无论用哪个接入点,这三个问题能把黑盒变成审计记录:
- 能不能看到每笔请求的费用、token 和延迟——而不只是月度总额?而且要能导出。
- 有没有机器可读的价格表,让脚本能在下单前算出成本?无需登录的公开 JSON 接口是我会拿来要求任何服务商的及格线。
- 没用完的余额到底会怎样——过期政策、退款规则、手续费?「反正一直躺在那」应该是一条写在纸面上的政策,而不是一种氛围。
隐私——毕竟你的代码要经过这个接入点
问清楚什么会被留存。Teapot Router 只保留计费元数据,不归档提示词和响应——而对任何供应商(包括我们)的「零日志」宣传,你都该去验证,而不是相信。
你不需要变成成本优化专家。你需要的是账单可以被回答:打开面板、找到那一行、说出那个数字的名字。一旦接入点给了你这个,每次意外都成了一行能解释清楚的账,而不是一张工单。
常见问题
为什么 Claude Code 会话越长,单条消息越贵?
每一轮都会把此前的对话重发一遍,所以第 15 条消息是按比第 1 条大得多的提示计费的。token 单价不变,单条成本也会随会话长度上涨。
缓存能降账单吗?
能,而且幅度很大:提示词缓存的读比冷提示 token 便宜一个数量级。提示词保持稳定、会话保持聚焦,缓存就能命中,而不是反复为同一段上下文付全价。
怎么逐笔核对费用?
用一个在工作台里能看到每笔请求费用、token、延迟且支持导出的接入点,再配一份能对账的机器可读价格表。这个组合把账单变成审计记录。