大模型成本最容易犯的错,是把单价当成成本。单价只是系数,真正决定账单的是 token 的消耗结构:system prompt 有多长、历史带几轮、检索塞几段、输出有多啰嗦。

这篇文章给一套可以落地的算法:先算清单次调用,再乘上调用量,最后处理那几个悄悄放大成本的环节。

一、Token 不是"字数"

模型不认识汉字和单词,它看到的是分词器切出来的 token。

内容类型 经验换算 备注
英文1 token ≈ 4 字符 ≈ 0.75 词相对稳定
中文1 汉字 ≈ 0.6~1.5 token依模型分词器差异很大
数字、标点、符号1~3 字符 / token数字往往被拆得很碎
JSON、代码密度高按"字符数"估会明显低估

不要用字节数估算:一个汉字在 UTF-8 里是 3 个字节,按字节数除以 3 再乘系数,误差会层层放大。

做预算时,先用 1 汉字 ≈ 1.2 token 粗估,上线后用真实 usage 校准。想更准,直接用对应模型的分词器跑一遍你的真实样本——十分钟的事,能省掉后面所有的争论。

二、一个公式,算清单次成本

单次成本 = (输入 token × 输入单价
          + 输出 token × 输出单价
          + 缓存命中 token × 缓存单价) ÷ 1,000,000

月成本 ≈ 单次成本 × 日均调用次数 × 30 × (1 + 重试率)

三个关键点:

  1. 输入和输出不是一个价。输出通常贵 2~4 倍,所以"让模型少说废话"比"少喂资料"更省钱。
  2. 缓存命中是另一个价。多数厂商的缓存命中价只有输入价的 10%~25%,但只有稳定不变的前缀才会命中。
  3. 重试也是钱。失败重试、超时重发、流式中断后的补发,都会真实计费。

三、五个悄悄放大成本的环节

1. System prompt 每次都在计费

一段 800 token 的系统提示,如果每天调用 5000 次,一年就是 14.6 亿 token 的输入量。

很多人写 system prompt 像写需求文档,越写越长。它确实重要,但每一条都要按调用量付费。

2. 多轮对话是平方级增长

这是最容易被忽略的一条。多轮对话每一轮都要把完整历史重新发一遍:

  • 第 1 轮:system + 问题
  • 第 2 轮:system + 第 1 轮全部 + 新问题
  • 第 n 轮:system + 前 n-1 轮全部 + 新问题

10 轮对话的输入 token,不是单轮的 10 倍,而是接近 5~6 倍的单轮量 × 轮数。轮数越多,增长越陡。

3. RAG 检索片段

"多塞几段总没坏处"是成本杀手。top-k 从 4 调到 8,检索部分的 token 直接翻倍,而准确率往往只提升一两个点。

4. 输出啰嗦

没有输出约束的模型,会把一个"是/否"回答写成三段话。输出单价最贵,这部分浪费最直接。

5. 重试与失败

限流重试、超时重发、格式不合规重生成——生产环境里 5%~15% 的额外消耗很常见,做预算时不加这一项,月底一定超。

四、两个算例

以下单价为示意值(输入 2 元 / 百万 token,输出 8 元 / 百万 token),实际以各厂商官网为准。

算例 A:企业知识库问答

项目Token 数
System prompt800
检索片段(top-5)1,500
用户问题50
输入合计2,350
模型输出400

单次成本:

2,350 × 2 ÷ 1,000,000 = 0.0047 元
  400 × 8 ÷ 1,000,000 = 0.0032 元
合计 ≈ 0.0079 元 / 次

按日调用 5,000 次、重试率 8%:

日成本 ≈ 0.0079 × 5,000 × 1.08 ≈ 42.7 元
月成本 ≈ 1,280 元

优化一下:如果把 800 token 的 system prompt 做成缓存前缀(按 25% 计价),每次省 0.0012 元,月省约 180 元——改动只是调整 prompt 结构,不动业务逻辑,是性价比最高的一刀。

算例 B:10 轮客服对话

项目数值
System prompt500
每轮用户输入100
每轮模型输出200

第 n 轮的输入 = 500 + (n−1) × 300 + 100。10 轮累计输入 19,500 token,累计输出 2,000 token:

19,500 × 2 ÷ 1,000,000 = 0.039 元
 2,000 × 8 ÷ 1,000,000 = 0.016 元
合计 ≈ 0.055 元 / 会话

对比"每轮都不带历史"的 0.028 元——同样的对话,成本差了近一倍。

如果改成"只带最近 3 轮 + 前文摘要",累计输入降到约 13,200 token,单次成本约 0.042 元,省 23%,而大多数客服场景的体验几乎无感。

五、降本动作,按 ROI 排序

动作 经验节省幅度 改动量 适用场景
System prompt 前缀缓存输入成本 20%~50%小所有高频调用
历史滑动窗口 / 摘要压缩多轮场景 20%~40%中客服、助手类
RAG top-k 下调 + rerank检索 token 30%~50%小知识库问答
输出格式与长度约束输出成本 20%~40%小分类、抽取、工单
小模型分流(分类 / 抽取)该环节 50%~80%中多步骤流程
离线任务走 Batch该任务 40%~50%中批量处理、报表
重试与超时治理总量 5%~15%小所有生产环境

幅度为工程经验区间,实际以你的流量结构压测为准。

执行顺序建议:先做"改动小、收益确定"的三项(缓存、top-k、输出约束),再做需要改架构的分流和批处理。不要一上来就重写链路。

六、盯住这几个指标

指标看什么
每请求平均 token
(输入 / 输出分开)
有没有异常膨胀
每用户 / 每租户 token 消耗谁在烧钱、是否该限流
缓存命中率前缀结构是否合理
失败率与重试率隐性成本来源
单次业务动作成本一次问答、一次工单分类花多少钱
p95 延迟与成本往往此消彼长

如果做的是转售或对外服务,还要算毛利:收入按次/按月,成本按 token,两者不同步,很容易"越忙越亏"。

七、采购时,别只问单价

价格表只能告诉你系数,不能告诉你账单。真正该问的是:

  1. 能不能按我的真实流量做一版月度估算?
  2. 失败请求、重试、流式中断,是否计费?
  3. 缓存命中怎么计价?命中率怎么统计?
  4. 有没有阶梯价或承诺用量折扣?
  5. 余额有效期多久,能否退款?

一个愿意拿你的流量算账的供应商,比一个只会报单价的供应商靠谱得多。

结语

Token 成本的公式只有一行,难的是知道钱花在了哪一段上下文里。

先把单次成本算清楚,再乘调用量,最后处理那几个放大器——大部分"AI 太贵"的问题,都能在这三步里找到答案。