Claude API 成本怎么算:Token 计算与省钱方法
上线一个 AI 功能之前,最常被问的问题是:这东西一个月要花多少钱? Claude API 按 token 计费,只要弄清楚三件事——一次请求有多少 token、每类 token 多少钱、一天有多少次请求——成本就能算个八九不离十。
Token 是什么
Token 是模型读写文字的最小单位。模型不是按「字」或「词」收费,而是把文字切成 token,按 token 数计价。
- 英文:一个 token 大约是 3~4 个字母,一个单词通常是 1~2 个 token;
- 中文:大致一个汉字一个 token 上下,常用词可能更省,生僻字和符号可能更多;
- 代码:缩进、括号、变量名都会占 token,同样长度的代码通常比自然语言更「费」token。
不同模型的分词方式不同,上面只是估算。要精确知道一段内容有多少 token,可以调用计算 Token 数接口,不产生费用;也可以看每次请求返回的 usage 字段,详见 Token 用量计算。
一次请求的四类 token
Claude 的一次请求里,token 分四类,各有各的单价:
| 类型 | 是什么 | 单价 |
|---|---|---|
| 输入 | 你发给模型的内容:系统提示词、历史对话、本次问题、工具定义 | 基础价 |
| 输出 | 模型生成的内容,包括思考过程 | 通常是输入的 5 倍 |
| 缓存写入 | 第一次把一段前缀写进缓存 | 略高于输入价 |
| 缓存读取 | 之后再次用到这段前缀 | 约为输入价的十分之一 |
有两点容易被忽略:
- 多轮对话的输入会越来越长。每一轮都要把之前的对话一起发过去,第 10 轮的输入里包含了前 9 轮的全部内容。
- 输出比输入贵得多。让模型「简要回答」、限制
max_tokens,往往比压缩输入更省钱。
计算公式
单次费用 = 输入 token × 输入单价
+ 输出 token × 输出单价
+ 缓存写入 token × 缓存写入单价
+ 缓存读取 token × 缓存读取单价
单价按「每百万 token 多少美元」标价。在 TokenJoy,每个单价都是官方价乘以该模型的价格倍率,模型价格页逐条列出了每个模型的官方价和实付价,失败的请求不扣费。
例子:估算一个客服机器人的月成本
假设用 claude-haiku-4-5 做客服机器人(官方价:输入每百万 token 1 美元,输出每百万 token 5 美元,以写作时的官方价为例,最新价格以模型价格页为准):
- 每天 1,000 次对话;
- 每次请求输入 2,000 token(其中 1,500 token 是固定的系统提示词和产品资料),输出 500 token。
不用缓存:
输入:2,000 × 1 / 1,000,000 = $0.0020
输出: 500 × 5 / 1,000,000 = $0.0025
单次:$0.0045;每天 $4.5;每月(30 天)约 $135
把固定的 1,500 token 放进缓存:
未缓存输入: 500 × 1 / 1,000,000 = $0.00050
缓存读取: 1,500 × 0.1 / 1,000,000 = $0.00015
输出: 500 × 5 / 1,000,000 = $0.00250
单次:$0.00315;每天约 $3.15;每月约 $95
缓存写入只在缓存过期后的第一次请求发生,请求越密集占比越小,这里忽略不计。只是打开缓存,成本就降了约 30%;剩下的大头是输出,这也说明了控制输出长度的重要性。
以上是官方价。在 TokenJoy 实际扣多少,把结果乘以模型页标出的价格倍率即可;一次真实请求从 token 到扣费的完整算法,见一次请求扣多少钱。
省钱的几个方法
- 用好 prompt caching:把不变的内容(系统提示词、文档、工具定义)放在前面,变化的内容放在后面,让前缀能被缓存命中。Claude Code 会自动使用缓存,所以长时间写代码的实际花费比看上去少得多。
- 按任务选模型:分类、提取、改写这类简单任务用 Haiku,复杂推理和写代码再用 Sonnet 或 Opus。同一个应用里可以按请求类型分别调用。
- 控制输出长度:设置合适的
max_tokens,在提示词里写明需要的格式和篇幅。 - 裁剪历史对话:多轮对话只保留必要的上下文,或者定期把早先的对话总结成一小段。
- 先估算再上线:用计算 Token 数接口量一量真实的提示词,再按上面的公式乘一乘。
上线后怎么核对
在 TokenJoy 控制台,「概览」的请求记录里能看到每一次请求的输入、输出 token 和花费,用量页按天、按 Key、按模型汇总。按项目分开创建 Key,就能分别看到每个项目花了多少钱。
想开始试试,可以先看 Claude API 中转 的接入说明,或者直接从首次调用 API 开始。