1. 从一次账单复盘说起:为什么模型选型比调参更烧钱
上个月帮一个做智能客服的朋友复盘他们的API账单,发现一个很典型的现象:他们线上跑着三个不同量级的模型,但超过六成的调用量其实都落在最便宜的那个小模型上,而剩下四成里,有将近一半的请求压根不需要用大模型——用户只是问“我的订单到哪了”“怎么修改收货地址”这类高度模板化的问题。他们每个月光是这一块的支出,就够再养两个全职工程师。
这件事让我意识到,模型选型与成本核算这件事,很多人是“先跑通再说”,等账单堆起来了才回头优化,而这时候架构已经定型,改起来伤筋动骨。尤其是最近小尺寸模型这一档的定价出现了明显下探,像 Claude Haiku 这一档的模型价格调整之后,很多原本“用不起小模型做高频任务”的假设都不成立了。换句话说,单位成本的结构变了,选型的逻辑也得跟着变。
这篇内容我想聊的不是“哪个模型最强”这种排行榜式的问题,而是更实际的一层:当你手里有一堆任务、一个预算上限、和几个不同价位的模型时,怎么把任务分配到模型上,让总成本可控、效果又不塌。适合正在做API集成、做AI产品后端、或者负责技术预算的读者。我会把成本核算的公式、任务分层的思路、以及实际压测中踩过的坑都摊开讲,你可以直接拿去套自己的场景。
需要先说明一点:下面涉及的具体价格数字,我会用“相对倍数”和“假设单价”来表达,因为各家定价会调整,直接写死数字反而误导。你要做的是掌握这套核算方法,然后代入你当前看到的实际报价。
2. 小模型降价背后的账:单价降了,但总成本不一定降
2.1 单次调用成本到底由什么构成
很多人算成本只盯着“每百万token多少钱”,这其实只算了一半。一次完整的API调用成本,至少包含四块:
- 输入token成本:你发过去的提示词、上下文、历史对话,全部计入。
- 输出token成本:模型生成的内容,通常单价比输入贵,这是大头。
- 重试与失败成本:超时、限流、格式错误导致的重发,这部分在账单里是隐形的,但真实存在。
- 工程侧成本:为了适配某个模型而做的提示词工程、后处理、缓存层,这些是人力与算力成本。
我见过一个团队,为了省钱把主力模型换成便宜档,结果因为小模型指令遵循能力弱,输出格式经常跑偏,后处理代码从200行涨到800行,还加了一层正则兜底。最后算总账,省下的token费还不够覆盖多出来的维护工时。所以单价下降不等于总成本下降,这是第一个要建立的认知。
2.2 用“有效成本”而不是“标价”做对比
我习惯用一个指标叫有效成本,公式大致是:
有效成本 = (输入token × 输入单价 + 输出token × 输出单价) × (1 + 重试率) + 单次工程摊销其中“单次工程摊销”是个估算值,把为这个模型写的适配代码、提示词模板、测试用例的维护成本,按预估调用量摊到每一次调用上。这个值很难精确,但哪怕粗估,也能帮你避免“只看标价”的陷阱。
举个我实际遇到的对比:模型A标价是模型B的两倍,但模型A一次就能输出正确格式,模型B平均要重试1.4次才能拿到可用结果。算下来模型B的有效成本反而更高。降价真正带来的红利,是让那些“以前因为贵而不敢用”的场景变得可行,而不是让所有场景都无脑换便宜模型。
2.3 降价改变了哪一类任务的可行性边界
小模型降价最直接的影响,是让高频、低复杂度、对延迟敏感的任务变得经济可行。比如:
| 任务类型 | 典型特征 | 降价前 | 降价后 |
|---|---|---|---|
| 意图分类 | 短输入短输出、量大 | 用规则或大模型兜底 | 可全量走小模型 |
| 文本摘要 | 中等输入、短输出 | 抽样走大模型 | 可全量走小模型 |
| 格式转换 | 结构化输入输出 | 手写解析为主 | 小模型+校验可行 |
| 多轮对话 | 长上下文、需推理 | 必须大模型 | 简单轮次可下沉 |
这张表的关键不是让你照抄,而是理解一个判断标准:任务越模板化、输出越可校验、单次价值越低,就越适合下沉到便宜档模型。反过来,涉及开放推理、长链条规划、高价值决策的,省这点钱不值得冒险。
3. 把任务分层:哪些请求该走便宜档,哪些必须上大模型
3.1 先做一次调用量盘点,别凭感觉分层
在动手改架构之前,我强烈建议先做一件事:把过去一周或一个月的调用日志拉出来,按任务类型打标,统计每类的调用量占比和平均token消耗。这一步很多人跳过,直接凭印象说“大部分是简单问题”,结果改完发现长尾任务才是成本大头。
盘点的维度我一般看这几个:
- 调用量占比:哪类任务调用最频繁。
- token分布:输入输出各多少,有没有超长上下文。
- 失败率:哪类任务重试最多。
- 业务价值:这类任务的错误代价高不高。
把这四个维度画成一张表,你就能一眼看出哪些任务是“高频低价值”,哪些是“低频高价值”。前者是下沉候选,后者是必须保效果的。
3.2 一个可落地的三层分流模型
基于盘点结果,我通常会把请求分成三层:
第一层:规则/缓存层。完全确定性的问题,比如固定FAQ、状态查询,直接走规则匹配或缓存,连模型都不调。这一层能吃掉多少量,直接决定你的成本下限。我见过做得好的团队,这一层能拦掉40%以上的请求。
第二层:小模型层。需要一点语言理解但输出可校验的任务,走便宜档模型。关键是输出必须可校验——要么是固定枚举的分类结果,要么是能正则校验的结构化数据。校验不过的,自动升级到第三层。
第三层:大模型层。开放推理、长上下文、高价值决策,走大模型。这一层的调用量要严格控制,每一次调用都应该有明确的业务理由。
这个分层模型的核心思想是:让最贵的资源只处理最需要它的请求。降价的意义在于把第二层的容量做大,而不是把第三层也拉下来。
3.3 分流阈值怎么定:一个基于成本的决策规则
分流不是拍脑袋,可以用一个简单的成本比较来定阈值。假设小模型单次有效成本是 C_small,大模型是 C_large,小模型处理某类任务的成功率是 p(即不需要升级的比例),那么:
- 如果
C_small + (1-p) × C_large < C_large,也就是C_small < p × C_large,那么下沉是划算的。 - 反过来,如果小模型成功率太低,升级带来的额外成本会吃掉省下的钱。
这个不等式很朴素,但它能帮你把“感觉上可以下沉”变成“算下来确实划算”。实际中 p 的取值要靠小批量灰度测试来估,别用猜的。
提示:灰度测试时,建议同时记录“小模型输出被人工判定为可用”的比例,而不是只看“格式校验通过”。格式对但内容错的情况,在分类任务里很常见。
4. 成本核算实操:从token估算到月度预算表
4.1 token估算的三种方法及适用场景
算成本绕不开token估算。我常用的有三种方法,精度和成本各不同:
方法一:字符数粗估。中文大约1个token对应1.5到2个字符,英文大约1个token对应4个字符。这个方法误差能到30%,只适合做量级判断,比如“这个需求大概要花几百还是几千”。
方法二:分词器实测。用对应模型的分词器对真实样本跑一遍,得到准确token数。这个方法准,但需要写点代码,适合在方案定型前做精确测算。
方法三:日志回填。如果已经有线上调用,直接从API返回的usage字段里读真实token数。这是最准的,也是做预算表应该用的数据。
我的建议是:新场景用方法二,已有场景用方法三,早期探索用方法一。别在粗估上纠结太久,但也别拿粗估数字去做正式预算。
4.2 一张能直接套用的月度成本表
下面这张表是我做预算时的模板,你可以把列名换成自己的任务类型,把单价换成实际报价:
| 任务类型 | 月调用量 | 平均输入token | 平均输出token | 输入单价 | 输出单价 | 重试率 | 月成本 |
|---|---|---|---|---|---|---|---|
| 意图分类 | 200万 | 80 | 10 | — | — | 5% | 计算 |
| 摘要生成 | 30万 | 800 | 150 | — | — | 8% | 计算 |
| 多轮对话 | 10万 | 2000 | 400 | — | — | 12% | 计算 |
月成本的计算公式:
月成本 = 调用量 × (输入token × 输入单价 + 输出token × 输出单价) × (1 + 重试率)把三类任务的成本加起来,再乘一个1.2到1.5的“波动系数”(应对突发流量和价格调整),就是你该申请的预算。波动系数不是拍脑袋,而是基于历史流量的峰谷比来定。
4.3 缓存与批处理能省下多少
有两个常被忽略的省钱手段:
缓存。对于重复率高的请求,把结果缓存起来直接返回。意图分类、FAQ问答这类任务,缓存命中率能做到30%以上。缓存层可以放在规则层之后、模型调用之前。
批处理。如果业务允许延迟(比如离线分析、日报生成),把请求攒起来批量调用,很多平台对批量调用有折扣。批处理的代价是延迟,所以只适合非实时场景。
我实测过一个场景:加了缓存之后,模型调用量直接降了35%,而且这部分降的是纯成本,没有任何效果损失。缓存是性价比最高的优化,没有之一。
5. 选型时最容易踩的四个坑
5.1 只看单价不看输出长度
有些模型输入便宜但输出贵,有些反过来。如果你的任务输出很长(比如生成报告),那输出单价才是决定性的。我见过有人选了个“输入最便宜”的模型,结果因为输出单价高,总成本反而上去了。选型前先算清楚你的输入输出比例。
5.2 忽略上下文长度对成本的非线性影响
多轮对话场景里,上下文是累积的。第10轮的输入token可能是第1轮的10倍。如果不做上下文裁剪或摘要压缩,成本会随对话轮次快速上涨。我的做法是:超过N轮之后,把早期对话压缩成摘要,只保留最近几轮原文。这个N要根据任务对历史信息的依赖程度来定。
5.3 低估提示词工程的迁移成本
换模型不是改个endpoint就完事。不同模型对提示词的敏感度不同,同一个提示词在A模型上表现好,在B模型上可能完全跑偏。迁移时至少要留出两周的提示词调优和回归测试时间,别指望无缝切换。
5.4 没有设置成本熔断
这是最危险的。线上流量突增、代码bug导致循环调用、恶意请求,都可能让成本瞬间失控。一定要设置日/月成本上限和告警,超过阈值自动降级或限流。我见过一个团队因为一个死循环,一晚上烧掉了一个月的预算。
注意:成本熔断的阈值不要设得太紧,否则正常业务高峰会被误伤。建议设在预估峰值的1.5倍左右,并配合分级告警。
6. 灰度迁移的完整流程:从10%流量到全量
6.1 迁移前的准备清单
在把任何流量切到新模型之前,我会确认这几件事:
- 新模型的输出格式校验逻辑已经写好并通过测试。
- 升级兜底路径已经打通,小模型失败能自动转大模型。
- 成本监控和告警已经配置。
- 有一批标注好的回归测试集,能对比新旧模型效果。
- 回滚方案已经就绪,出问题能在10分钟内切回。
这份清单看着啰嗦,但每一条都是踩过坑之后加的。
6.2 分阶段放量的节奏
我的放量节奏一般是:
- 影子模式:新模型和旧模型同时跑,只记录新模型输出不实际使用,对比效果。跑3到5天。
- 1%流量:真实切1%,观察错误率和成本。跑1到2天。
- 10%流量:扩大观察面,重点看长尾case。跑3天。
- 50%流量:确认稳定后过半。跑3天。
- 全量:保留回滚开关,观察一周。
每个阶段都要看三个指标:效果指标(准确率/可用率)、成本指标(单次有效成本)、稳定性指标(错误率/延迟)。任何一个恶化,就停下来排查,别硬推。
6.3 迁移后如何持续优化
全量之后不是结束。我会持续做两件事:
一是定期复盘分流比例。业务在变,任务分布也在变,原来适合下沉的任务可能变得复杂了,需要重新评估。
二是维护提示词版本库。每次调整提示词都记录版本和对应的效果数据,方便回溯。提示词是模型效果的核心资产,别让它散落在各个代码文件里。
7. 我自己的几条经验之谈
做这类成本优化项目,技术只是一半,另一半是对业务的理解。我最大的体会是:不要为了省钱而省钱,要为了把钱花在刀刃上而省钱。便宜档模型降价是好事,但它不是让你把所有任务都往下压的理由。真正该做的是把任务分层做扎实,让每一层都跑在最适合它的模型上。
另外,成本核算这件事要常态化,不能一年算一次。价格会变、业务会变、模型能力也会变,今天划算的方案半年后可能就不划算了。我现在习惯每个季度做一次调用量和成本的复盘,花半天时间,能省下的往往是真金白银。
最后一个实用建议:在预算表里永远留一块“实验预算”。新模型、新方案、新优化,都需要小规模试错的空间。把实验预算和线上预算分开管理,既不会影响线上稳定,也不会因为怕超支而错过优化机会。这块预算不用多,占总预算的5%到10%就够,但一定要有。