大模型成本最容易犯的错,是把单价当成成本。单价只是系数,真正决定账单的是 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 + 重试率)
三个关键点:
- 输入和输出不是一个价。输出通常贵 2~4 倍,所以"让模型少说废话"比"少喂资料"更省钱。
- 缓存命中是另一个价。多数厂商的缓存命中价只有输入价的 10%~25%,但只有稳定不变的前缀才会命中。
- 重试也是钱。失败重试、超时重发、流式中断后的补发,都会真实计费。
三、五个悄悄放大成本的环节
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 prompt | 800 |
| 检索片段(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 prompt | 500 |
| 每轮用户输入 | 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,两者不同步,很容易"越忙越亏"。
七、采购时,别只问单价
价格表只能告诉你系数,不能告诉你账单。真正该问的是:
- 能不能按我的真实流量做一版月度估算?
- 失败请求、重试、流式中断,是否计费?
- 缓存命中怎么计价?命中率怎么统计?
- 有没有阶梯价或承诺用量折扣?
- 余额有效期多久,能否退款?
一个愿意拿你的流量算账的供应商,比一个只会报单价的供应商靠谱得多。
结语
Token 成本的公式只有一行,难的是知道钱花在了哪一段上下文里。
先把单次成本算清楚,再乘调用量,最后处理那几个放大器——大部分"AI 太贵"的问题,都能在这三步里找到答案。