文中价格均取自官方定价页并标注数据日期;所有金额示例均为演示数据,不代表真实账单。 数据截至 2026-08-24,正式预算前请以官方定价页复核。
做 AI 应用的同学大概率被问过一句话:「这个功能跑一个月,大概多少钱?」
答不上来通常不是数学问题,而是计费模型的问题。AI API 的账单由四个维度共同决定:调的是哪个模型、输入多少 token、输出多少 token、走没走缓存与错峰。任何只报一个「单价」的答案都是不完整的,因为不存在「一次调用多少钱」这个固定值——同样一次调用,成本可能相差十倍。
更麻烦的是价格本身在高频变动。2026 年 8 月就同时发生了两件事:DeepSeek 自 8 月 17 日起执行峰谷定价,V4-Pro 高峰输出价抬到每百万 token 27 元;Anthropic 在 8 月 24 日确认 Claude Sonnet 5 的涨价取消,输入 2 美元、输出 10 美元从「限时介绍价」转为标准价。拿三个月前的表格做预算,结论必然是错的。
这篇文章给一套能直接落地的核算链路:对齐口径 → 单价存档 → 代码算账 → 优化动作。四步走完,你交付的不再是一个含糊的「大概几百美元」,而是一张有来源、有日期、可复核的预算表。
在写任何代码之前,先把下面五条钉死,否则数字没有意义。
以下是 2026-08-24 口径的核心单价,单位为美元 / 每百万 token:
模型 | 输入价 | 输出价 | 缓存命中 | 数据来源与日期 |
|---|---|---|---|---|
Claude Sonnet 5 | $2.00 | $10.00 | $0.20 | Anthropic 官方定价页,2026-08-24 确认转正为标准价 |
Claude Opus 5 | $5.00 | $25.00 | 以官方页为准 | 官方定价页快照,2026-08-24 |
Claude Haiku 4.5 | $1.00 | $5.00 | 以官方页为准 | 官方定价页快照,2026-08-24 |
DeepSeek V4-Pro(高峰) | — | ¥27.00 | — | DeepSeek 官方新规,2026-08-17 起执行 |
DeepSeek V4-Pro(闲时) | — | ¥13.50 | — | DeepSeek 官方新规,2026-08-17 起执行 |
两个实用提醒:
as_of 日期字段。价格更新时改一处,全链路生效。下面这段代码把上面四个维度全部覆盖:输入输出分列、缓存命中单独计价、峰谷分档、月度汇总。Python 3.10+ 可直接运行。
# token_cost.py —— 单次调用成本 + 月度预算核算
from dataclasses import dataclass
@dataclass(frozen=True)
class Price:
"""单价结构:每百万 token 的计价,as_of 必须写数据日期。"""
input_per_m: float
output_per_m: float
cache_hit_per_m: float = 0.0 # 无缓存价的模型置 0
as_of: str = ""
# 单价存成数据字典:一处维护,全链路引用(口径见第三节,2026-08-24)
PRICE_BOOK: dict[str, Price] = {
"claude-sonnet-5": Price(2.00, 10.00, cache_hit_per_m=0.20, as_of="2026-08-24"),
"claude-opus-5": Price(5.00, 25.00, as_of="2026-08-24"),
"claude-haiku-4.5": Price(1.00, 5.00, as_of="2026-08-24"),
}
# DeepSeek V4-Pro 输出价:高峰 ¥27 / 闲时 ¥13.5(官方新规,2026-08-17)
DEEPSEEK_V4_PRO_OUTPUT = {"peak": 27.0, "off_peak": 13.5}
def call_cost(model: str, input_tokens: int, output_tokens: int,
cached_tokens: int = 0) -> float:
"""单次调用成本:常规输入 + 缓存命中 + 输出,三段分别计价。"""
p = PRICE_BOOK[model]
billed_input = max(input_tokens - cached_tokens, 0) # 未命中部分走常规输入价
hit_price = p.cache_hit_per_m or p.input_per_m # 无缓存价则按输入价计
cost = billed_input / 1_000_000 * p.input_per_m
cost += cached_tokens / 1_000_000 * hit_price
cost += output_tokens / 1_000_000 * p.output_per_m
return round(cost, 6)
def deepseek_output_cost(output_tokens: int, peak: bool = True) -> float:
"""DeepSeek 输出成本:按峰谷档位计价。"""
return round(output_tokens / 1_000_000 * DEEPSEEK_V4_PRO_OUTPUT["peak" if peak else "off_peak"], 6)
def monthly_budget(calls_per_day: int, unit_cost: float, days: int = 30) -> float:
"""月度预算 = 日调用量 × 单次成本 × 工作天数。"""
return round(calls_per_day * unit_cost * days, 2)
if __name__ == "__main__":
# 示例 1:标准问答,输入 2000 / 输出 500,其中 1600 命中缓存
unit = call_cost("claude-sonnet-5", 2000, 500, cached_tokens=1600)
print("Sonnet 5 单次:", unit, "USD / 月度(1000 次/天):",
monthly_budget(1000, unit), "USD")
# 示例 2:批处理生成,单次输出 5000 token,日 10 万次
peak = monthly_budget(100_000, deepseek_output_cost(5000, peak=True))
off = monthly_budget(100_000, deepseek_output_cost(5000, peak=False))
print("DeepSeek 高峰月度:", peak, "CNY / 闲时月度:", off, "CNY / 节省:", round(peak - off, 2))跑完这两个示例,你会得到两个非常具体的数字:一个是「长上下文 + 缓存」场景下的单次成本,一个是「批处理错峰」能省下的金额。这两个数字,就是预算表的两端。
坑一:把 /M 看成每次都收费。 这是最高频的错误,后果是预算放大 1000 倍。
坑二:只算输出,漏算输入。 对话、Agent、RAG 场景里输入往往远超输出。举个例子:单次输入 20,000 token、输出 800 token,用 Sonnet 5,输入成本 0.04 美元、输出成本 0.008 美元——输入占了 83%。账单高而输出量不大,问题多半出在 prompt 塞了太多上下文。
坑三:无视缓存与峰谷。 多轮对话场景下,同样 10,000 token 的固定前缀,无缓存每轮约 0.023 美元,开启缓存后约 0.005 美元,差距接近 5 倍。峰谷同理:DeepSeek 场景把可延迟任务挪到闲时,输出成本直接减半。
单价每月在动,靠手算和记忆维护不了。我们团队的做法是把它固化成技能(Skill),在对话里直接问结果:输入模型、日调用量、输入输出 token 量,输出覆盖输入/输出/缓存/峰谷四类计价的结构化账单,并强制标注单价来源与数据日期——未知价格会先确认,绝不臆造数字。
相关技能已发布在 SkillHub:搜索「AI Token 成本计算器」与「Claude API 价格查询」即可安装,前者负责算账、后者负责查实时价,两个配合使用即可覆盖「查价 → 算账」的完整链路。
如果你正在做多模型接入或成本治理,欢迎在评论区交流你们的字段设计与对账口径。
Link AI 提供企业级多模型 API 统一接入与成本管理服务,文中单价数据取自官方定价页实时数据。
(内容由 AI 辅助整理,价格以官方定价页为准)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。