Claude API 按 Token 计费,Opus、Sonnet、Haiku 三档的单价和适用任务都不同。只看“每百万 Token 多少钱”很容易选错:真正决定账单的是输入输出比例、缓存命中率、重试次数,以及任务一次做对的能力。
本文不写死单价,而是给一套可复用的成本对比方法:三档怎么分工、账单由哪些部分组成、同样调用量为什么差几倍、如何用真实日志做预算,以及把成本降下来的顺序。具体单价以 Anthropic 官方文档和站内模型价格为准。
说明:Anthropic、Claude 是其权利人的商标。模型型号、上下文与价格会调整,本文以 2026 年 10 月的常见版本为例,采购前请再次核对官方页面。
一、Opus、Sonnet、Haiku 怎么分工
| 档位 | 当前代表型号 | 定位 | 适合任务 | 成本量级 |
|---|---|---|---|---|
| Opus | Claude Opus 5.5 | 最强推理与长程任务 | 复杂代码、架构评审、多步 Agent | 高 |
| Sonnet | Claude Sonnet 5.5 | 能力与速度平衡 | 日常编码、客服、文档处理 | 中 |
| Haiku | Claude Haiku 5.5 | 低延迟、高并发 | 分类、抽取、改写、路由 | 低 |
型号会迭代,采购时不要背死名字,以模型价格和官方模型列表为准。老项目如果还在用 Sonnet 5 或 Haiku 4.5,先确认生命周期和迁移成本,再决定是否升级。
一个常见的错误是“全站都用 Opus”。复杂任务用 Opus 可能更省,因为一次就能做对;简单分类用 Opus 则是把成本花在不需要的地方。正确的做法是按任务分层,而不是按团队偏好选模型。
二、账单由五块组成
| 计费项 | 什么时候产生 | 成本影响 | 控制手段 |
|---|---|---|---|
| 输入 Token | 系统提示、历史消息、工具定义、文档 | 随上下文线性增长 | 检索、摘要、裁剪历史 |
| 输出 Token | 模型生成内容与思考 | 通常高于输入单价 | 限制 max_tokens、结构化输出 |
| 缓存写入 | 首次写入缓存前缀 | 有写入溢价 | 只缓存稳定复用的内容 |
| 缓存读取 | 命中缓存的前缀 | 通常明显低于输入 | 稳定前缀、固定工具顺序 |
| 批处理 | 非实时任务 | 通常有折扣 | 标注、摘要、离线分析走 Batch |
把一次请求拆开,成本公式是:
单次请求成本 =
未缓存输入 Token × 输入单价
+ 缓存写入 Token × 缓存写入单价
+ 缓存读取 Token × 缓存读取单价
+ 输出 Token × 输出单价
把这个公式落到请求日志里,才能回答“这个功能一个月到底多少钱”。只看控制台的总账单,很难定位是哪个项目、哪类请求在烧钱。
三、同样是一百万 Token,为什么账单不同
| 场景 | 典型 Token 结构 | 主要成本 | 优化方向 |
|---|---|---|---|
| 客服机器人 | 输入多、输出中等 | 历史消息反复传 | 摘要加缓存 |
| 文档分类 | 输入中等、输出短 | 文档被重复读取 | 批处理加 Haiku |
| 代码 Agent | 输入输出都大 | 工具结果和思考 | 检索、effort、缓存 |
| 长文生成 | 输入短、输出长 | 输出单价 | 分段生成加 max_tokens |
差异通常来自五个地方:
- 输入输出比例:客服和长文生成的结构完全不同,不能用同一个平均值估算。
- 缓存命中率:固定 system prompt 和工具定义可以复用;每次都变的时间戳、随机 ID 会让缓存失效。
- 重试次数:429、529 后的重发会增加请求量,失败和重试的计费口径以账单为准。
- 模型档位:Opus 与 Haiku 的成本量级差距很大,错配会把预算放大。
- 上下文长度:每轮都把整份文档塞进去,输入成本会随轮数累积。
四、做一次可复现的成本对比
不要用“感觉 Sonnet 够用”做决策,用一批真实任务跑一次对比:
- 选 20–50 条真实任务,覆盖简单、中等、复杂三档,并写清验收标准。
- 用
count_tokens记录每条请求的输入 Token,输出 Token 从响应的usage读取。 - 同一批任务分别跑 Opus、Sonnet、Haiku,记录质量评分和人工返工次数。
- 把重试、缓存命中、批处理折扣一起算进单任务成本。
- 用“每完成一个合格任务”的成本做决策,而不是每百万 Token 的标价。
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["ANTHROPIC_API_KEY"],
base_url="https://ai.zhongshangqihang.com", # 模型名以站内价格页为准
)
messages = [{"role": "user", "content": "把这段合同条款抽取成 JSON:……"}]
for model in ["claude-opus-5-5", "claude-sonnet-5-5", "claude-haiku-5-5"]:
count = client.messages.count_tokens(model=model, messages=messages)
resp = client.messages.create(
model=model,
max_tokens=512,
messages=messages,
)
print(model, count.input_tokens, resp.usage.output_tokens)
这段代码只统计 Token,不计算金额。金额要用你账户的实际单价去乘,单价从模型价格读取,不要沿用几个月前的截图。
五、把成本降下来的顺序
- 先开缓存:固定 system prompt、工具定义和知识库前缀,用
cache_read_input_tokens验证是否真的命中。 - 再减输入:RAG 只召回相关片段,历史消息做摘要,不要把整个知识库塞进上下文。
- 限制输出:设置合理的
max_tokens,要求 JSON 或固定字段,减少客套话和重复解释。 - 离线任务走 Batch:标注、摘要、分类这类不要求实时返回的任务,优先批处理。
- 做模型路由:简单任务走 Haiku,复杂任务走 Sonnet 或 Opus,按任务难度而不是按团队习惯分配。
- 调 effort:简单任务用较低的思考深度,复杂任务再提高;不要所有请求都用一个档位。
- 监控与告警:按项目看用量,设预算上限,每周复盘消耗排名。
顺序不要反。先做缓存和输入治理,再考虑换更便宜的模型;否则只是把错误答案做得更便宜。
六、预算和账单怎么管
- 一个项目一把 Key,按项目设预算上限和告警。
- 每月按“项目、模型、场景”三个维度对账,找出增长最快的调用。
- 缓存、批处理、模型路由的节省要单独记录,否则优化效果无法证明。
- 需要人民币付款和发票的团队,可以用国内 AI 网关统一账单;具体价格、汇率和发票规则以模型价格为准。
常见问题
Opus 一定比 Sonnet 贵吗?
按单价通常如此,但按“完成一个合格任务”的成本不一定。复杂任务用 Sonnet 反复重试、人工返工,可能比一次 Opus 更贵。用自己的评测集比较,不要只看标价。
缓存能省多少?
取决于前缀复用率和命中率。缓存读取通常明显低于输入单价,但缓存写入有溢价;前缀太短可能无法缓存,内容每次都变则不会命中。
Batch API 适合什么任务?
适合非实时、可延迟的标注、摘要、分类和批量抽取,不适合在线客服和需要立即返回的交互。批处理通常有折扣,但要接受任务排队和结果延迟。
为什么账单比估算高?
常见漏算项包括历史消息、工具定义、图片、重试、缓存写入和长输出。用请求 ID 对照用量日志,才能定位差异。
国内团队怎么用人民币结算?
可以通过提供人民币充值和发票的 AI 网关调用 Claude,统一多模型账单。具体可用型号、价格和发票规则以模型价格为准。
下一步
先在中商起航 AI 网关创建测试 Key,用 Haiku 和 Sonnet 各跑一批真实任务,记录 Token 与质量,再决定主力模型。模型可用性与价格以模型价格为准。
相关阅读:
