前八篇把能力讲完了:调用、流式、结构化、工具、多轮、思考、缓存、批处理,主线始终是同一个 create()。但有一件事被一路押后——钱。第 1 篇只给了四档模型的输入价,还留了一句"计费按输入输出分别结算,第 9 篇细讲";第 8 篇结尾更是把话挑明:把四档模型放进同一张决策表,前 8 篇攒下的价格、缓存与批处理三本账,要在这一篇合成总账。选型从来不是拍脑袋的事:四档模型输入价差最大 100 倍,档位选错,能力再合适也扛不住账单。
本文是《Anthropic SDK 从入门到实战》第 9 篇,按"四档画像 → 选型决策树 → 成本核算 → 省钱四板斧 → 质量验证 → 实战 → 总结"组织:先把第 1 篇的价格表补全成全口径,再给一条可执行的选型路径,然后写出能直接进项目的计费函数,最后用月流量十万轮的客服机器人把三本账合起来算清。
1、四档模型全景
先把第 1 篇那张只含输入价的表补全。当前一代 Claude 四档模型的全口径定价如下(2026 年 10 月官方标准价,单位为每百万 token,全系 100 万 token 上下文与 128K 最大输出):
| 档位 | 模型 ID | 定位 | 输入价 | 输出价 |
|---|---|---|---|---|
| 旗舰推理 | claude-fable-5-1 |
能力天花板,最难推理与长程任务 | 10 美元 | 50 美元 |
| 旗舰通用 | claude-opus-5-5 |
主力旗舰,智能体与复杂编码 | 4 美元 | 20 美元 |
| 均衡 | claude-sonnet-5-5 |
日常主力,速度与质量平衡 | 2 美元 | 10 美元 |
| 轻量 | claude-haiku-5-5 |
最快最便宜,分类与抽取 | 0.1 美元 | 0.5 美元 |
一个方便心算的规律藏在表里:四档输出价恰好都是各自输入价的 5 倍——记住输入价一列,输出价就同时记住了。按输入价比价,四档比例是 100:40:20:1:均衡档到轻量档差 20 倍,均衡档到旗舰推理差 5 倍。价格与档位以官方模型概览与官方价格页为准。
四档画像各用一句话收拢:
- Fable 5.1 旗舰推理:最难推理与长程 Agent,思考关不掉
- Opus 5.5 旗舰通用:复杂编码与生产智能体主力,价为 Fable 四成
- Sonnet 5.5 均衡档:多数任务的默认起点,本系列教学主力
- Haiku 5.5 轻量档:分类抽取打标;超 10 万 token 输入要加价
两句补充。Fable 的输出价 50 美元配上涨不掉的深度思考(第 6 篇口径:思考 token 按输出计费),意味着它的账单与能力同为天花板,单请求跑数分钟也是常态。Haiku 的加价例外第 5 篇提过:请求超 10 万 token 后输入价升到 0.5 美元,长输入任务别无脑压到轻量档。
还有一列价差不在表里:缓存读价。第 7 篇核实过旗舰档更低——Fable 低至 0.025 倍(每百万 token 0.25 美元)、Opus 为 0.05 倍(0.20 美元),均衡与轻量档是标准 0.1 倍(分别为 0.20 与 0.01 美元);写入价统一是输入价的 1.25 倍。这列数字第 3 节直接进代码。
2、选型决策树
选型只看两个问题:答错的代价有多高,任务的形态有多复杂。把两问串成决策流如下:
解读:第一问筛掉"用不着旗舰"的大多数任务,第二问向两个方向分流——任务越往"一步可答、量大、格式化"走,越该往轻量档压;越往"多步推理、长程 Agent"走,才轮到旗舰出场。落不了位的默认答案是均衡档。从均衡档起步,向上向下都留验证余地——这正是第 1 篇选 claude-sonnet-5-5 做教学模型的原因:升到旗舰贵 2 到 5 倍,降到轻量要先过质量关,两头都有台阶。
决策树之外有三条纪律。其一,降成本先降 effort、再谈换模型——第 6 篇实测多数任务的质量拐点在 medium 与 high 之间,同一模型压 effort 常比换便宜模型更稳。其二,effort 与模型按路由固定,别在会话中途切:第 7 篇的击穿表写明,切换 effort 击穿历史缓存,换模型更是等于换缓存键,多模型级联的每一次切换都在放弃前缀复用。其三,在线链路慎选 Fable:深度推理单请求可达数分钟,首字延迟与超时都要另做设计,第 2 篇的流式在这类链路不是可选项。
3、成本核算方法论
先兑现第 1 篇埋的那句话。计费按输入输出分别结算,而输入侧因为缓存裂成三档,所以单次调用的成本公式是四项相加:全价输入乘输入价,加缓存写入乘写入价,加缓存读取乘读取价,加输出乘输出价——价格单位均为每百万 token。把第 7 篇的倍数与四档实价合进一张价格表,计费函数如下:
PRICE = {
# 模型: (输入, 输出, 缓存读, 缓存写),美元每百万 token
"claude-fable-5-1": (10.00, 50.00, 0.25, 12.50),
"claude-opus-5-5": (4.00, 20.00, 0.20, 5.00),
"claude-sonnet-5-5": (2.00, 10.00, 0.20, 2.50),
"claude-haiku-5-5": (0.10, 0.50, 0.01, 0.125),
}
def cost_usd(model: str, usage) -> float:
"""单次调用真实成本:usage 三字段加输出,分档计价"""
p_in, p_out, p_read, p_write = PRICE[model]
input_usd = (usage.input_tokens * p_in
+ usage.cache_read_input_tokens * p_read
+ usage.cache_creation_input_tokens * p_write) / 1e6
return input_usd + usage.output_tokens * p_out / 1e6
解读:函数吃的就是第 5 篇核实过的 usage 对象——input_tokens 只是未命中的尾部,三个输入字段相加才是真实输入量;缓存两列单价来自第 7 篇的倍数(写 1.25 倍;读旗舰档 0.025 与 0.05 倍,其余 0.1 倍)。若请求走了 Batch,四项整体再乘 0.5,第 8 篇的五折口径一行就能接上。生产建议把 cost_usd 挂在每次响应后累计;自算账单与官方账单对不上时,先 diff 这张价格表。
单次之外还有会话账。第 5 篇算过:无状态 API 全量重发历史,输入费随轮次按平方量级上涨,100 轮轻量对话光输入就 10.10 美元;第 7 篇开缓存后同一场景降到 1.24 美元。于是会话成本只有一条核算口径:按任务算,不按请求算——一张工单、一次抽取是一个成本单位;降档后若要多轮重试才完成任务,便宜的请求并不构成便宜的任务。
4、省钱四板斧
前八篇攒下的省钱手段收拢成四板斧,作用对象与量级对比如下:
| 手段 | 作用对象 | 量级 | 代价 |
|---|---|---|---|
| 降档 | 输入输出全价 | 均衡到轻量省 95% | 质量需验证 |
| 提示缓存 | 重复前缀输入 | 最多省九成 | 写入 25% 溢价 |
| Batch 批处理 | 全部计费项 | 一律五折 | 最迟 24 小时 |
| 提示精简 | 输入输出体量 | 与删减量成正比 | 几乎为零 |
四板斧的出手顺序有讲究:先零代价、后权衡。提示精简与缓存几乎不动质量——精简删的是冗余,第 7 篇的布局纪律(稳定在前、易变后置)与第 5 篇的裁剪三招(滑动窗口、摘要替换、system 保底)都是它的具体形态,count_tokens 能在发送前预估省了多少;缓存更是第 7 篇那句"性价比最高的一行代码"。降档与进批才开始动权衡:一个赌质量,一个赌时间。
叠加是乘法不是加法。第 8 篇核实过 Batch 与缓存的叠加口径:缓存价先按倍数算、再整体五折,Sonnet 的缓存读取从 0.20 美元打到 0.10 美元,只剩原价的二十分之一。缓存与降档同样能叠——换到 Haiku 后三档单价同步缩到二十分之一——但叠加的前提是各自的条件同时成立:进批的不能是在线链路,缓存的得有稳定前缀,降档的得先过质量门。细则以官方提示缓存文档与官方批处理文档为准。
5、降档后的质量验证
降档是四板斧里唯一可能伤质量的,所以它配一道验证门。方法是小样本 A/B:从线上真实流量抽 50 到 100 条请求,原档位与目标档位各跑一遍,比任务完成率与关键事实命中率,成本顺手记下。骨架如下:
import json
CASES = [json.loads(l) for l in open("cases.jsonl", encoding="utf-8")]
def run(model: str) -> None:
hit, total = 0, 0.0
for case in CASES: # 50 条线上真实工单问题
r = client.messages.create(
model=model, max_tokens=1024, system=SYSTEM,
messages=[{"role": "user", "content": case["question"]}],
)
text = "".join(b.text for b in r.content if b.type == "text")
hit += case["must_hit"] in text # 关键事实是否答上
total += cost_usd(model, r.usage) # 第 3 节的计费函数
print(model, f"命中 {hit}/{len(CASES)},成本 {total:.2f} 美元")
for m in ("claude-sonnet-5-5", "claude-haiku-5-5"):
run(m)
一次典型运行的结果如下:
claude-sonnet-5-5 命中 49/50,成本 0.21 美元
claude-haiku-5-5 命中 47/50,成本 0.01 美元
解读:成本差 20 倍符合价差,真正要看的第一个数字是命中率——Haiku 掉了两个点,业务若能接受,全量切换成立;不能接受,就把失分的那类请求分流给高档位,第 6 节的分层方案就是这么来的。分数不劣化,或劣化落在业务线内,降档才成立,这个判据没有商量余地。这套"先攒样本、改动后回归比对"的做法,正是本站《评测驱动开发》系列的核心思想,此处不展开。
提醒:样本必须从真实流量抽取并覆盖长尾——自己拍脑袋写的十几个问题,测不出低频疑难场景的退化,而那恰恰是降档最先丢分的地方。
6、实战:客服机器人选型算账
零件齐了,算一笔真实的账。workload 设定:客服机器人月流量 10 万轮,系统提示挂 8000 token 的产品知识库(稳定前缀),每轮其余输入平均 1000 token、输出平均 300 token;按平均每会话 3 轮折算,约 3.3 万个会话。链路有人在线等,按第 8 篇的判断树不进批——三本账里 Batch 先用不上,剩下价格与缓存两本。核算脚本如下:
CONVS, PER = 33_333, 3 # 会话数、每会话轮数
KB, TAIL, OUT = 8_000, 1_000, 300 # 知识库前缀、每轮尾部与输出
def conv_cost(model: str, cached: bool) -> float:
"""一个会话(3 轮)的成本,价格表来自第 3 节"""
p_in, p_out, p_read, p_write = PRICE[model]
c = PER * TAIL * p_in / 1e6 + PER * OUT * p_out / 1e6
if cached: # 首轮写入知识库,后续轮走缓存读
c += KB * p_write / 1e6 + (PER - 1) * KB * p_read / 1e6
else:
c += PER * KB * p_in / 1e6
return c
base = CONVS * conv_cost("claude-sonnet-5-5", cached=False)
plan2 = CONVS * conv_cost("claude-sonnet-5-5", cached=True)
pure = CONVS * conv_cost("claude-haiku-5-5", cached=True)
plan3 = CONVS * (0.3 * conv_cost("claude-sonnet-5-5", True)
+ 0.7 * conv_cost("claude-haiku-5-5", True))
print(f"基准 {base:.0f},加缓存 {plan2:.0f},"
f"分层 {plan3:.0f},纯 Haiku {pure:.0f}(美元每月)")
一次典型运行的输出如下:
基准 2100,加缓存 1273,分层 427,纯 Haiku 64(美元每月)
三个方案对照如下:
| 方案 | 配置 | 月账单 | 相对基准 |
|---|---|---|---|
| 一 基准 | Sonnet,不开缓存 | 约 2100 美元 | 100% |
| 二 加缓存 | Sonnet,知识库打断点 | 约 1270 美元 | 60% |
| 三 降档分层 | Haiku 为主,三成疑难会话整段升 Sonnet,两档都带缓存 | 约 430 美元 | 20% |
解读:三个数字对应三本账的兑现。方案二只动缓存一处,省四成——首轮写入、后续读取成立的前提是轮间隔小于 5 分钟(第 7 篇的计时口径),客服对话天然满足;省的比例上限由前缀占比决定,知识库占每轮输入近九成,剩下一成尾部与输出照付全价,知识库越大这笔折扣越接近九成。方案三吃到降档红利:第 5 节验证显示 Haiku 命中率 94%、业务线定在 95%,于是把业务规则判为疑难的三成会话整段交给 Sonnet——纯 Haiku 的 64 美元是理论下限,427 美元是质量达标后的实付。月账单从 2100 美元压到 430 美元,三本账合起来就是近八成的降幅。
最后一处缓存细节:分层升级要放在会话边界。第 7 篇讲过换模型等于换缓存键,会话中途从 Haiku 切 Sonnet,Sonnet 侧要整段冷启动重写——路由在会话开局一次定型,两档的缓存才能各自完整复用。
7、总结
本篇把第 1 篇的价格表补成全口径:四档输入价 10、4、2、0.1 美元,输出价恰为输入的 5 倍;缓存写 1.25 倍,读旗舰档 0.025 与 0.05 倍、其余 0.1 倍。选型两问是错误代价与任务形态,默认从均衡档起步;降成本先降 effort 再换模型,配置按路由固定、不在会话中途切。成本核算是四项相加的公式,会话账按任务算不按请求算;省钱四板斧先零代价后权衡,叠加是乘法;降档必须先过小样本 A/B 的质量门。一句话带走:选型从均衡档起步,省钱先缓存后降档,降档先验证再全量。
留三个练习:其一,给第 5 篇的 Chat 类挂上第 3 节的 cost_usd,跑 20 轮打印累计账单,再按第 7 篇加上缓存断点跑一遍对照;其二,把第 8 篇的 500 条评论分类用 Sonnet 与 Haiku 各跑一批,复现第 5 节的 A/B 判据,得出你自己的降档结论;其三,用 count_tokens 估算手头项目的每轮输入构成,套第 6 节的公式算一份月账单——三张纸写完,选型心里就有数了。对于任何已经在花真金白银的 API 项目,建议今天就先把第 3 节的计费函数挂上去——账目可见,是一切优化的第一步。下一篇讲 MCP(Model Context Protocol)接入:让 Claude 直接用上你现有的工具与数据源。

