长会话的模型选型:缓存命中率如何决定真实成本

一句话结论:长会话省钱的开关不在「模型单价」,在「缓存命中单价」。 我按单价挑了个更便宜的模型,结果账单是另一条路线的 2.15 倍。

一、先说结果:为了省钱,我多付了 72%

账单出来那天我盯着屏幕看了半天。用量一个字没变,只是换了个"更便宜"的模型,钱却变多了。

半年前我干了件自以为聪明的事:在高峰时段把默认模型切换成一个「输入便宜 25%、输出便宜 35%」的型号,想着一天里最贵的那几个小时总能省下三成。

实际账单,三条路线的花费指数摆在一起(以最省的方案为 1.00):

我怎么花的 花费指数 说人话
换成"更便宜"的模型 2.15 我以为会最省的这个
同样的 token,原方案按峰时价 2.00 什么都不改,也比这个省
同样的 token,原方案按谷时价 1.00 什么都不改,只要这个价

同一批 4.94 亿 token,我多花了 115%,是谷时方案的 2.15 倍。

最讽刺的是:我之所以要"省钱",就是为了避开高峰的贵价时段。结果我换过去的那个模型,连原方案的峰时价都没打过。

为什么会这样?一句话:我比的是不重要的那两列价格,而真正决定账单的那一列,我根本没看。

下面三件事值得说清:我当初为什么这么选、钱到底花在哪、以及下次用什么数字一秒判断该不该换------最后那个数字,你现在就可以算出来。

二、我是怎么"省钱"的

我的使用场景很典型:跑 Agent,一个会话动辄几千万 token,上下文不断累加。高峰时段(9--12 点、14--18 点)我写了个定时任务,把默认模型切到另一家的 flash 版本。

选它的理由就三条:

  • 输入单价比原方案便宜 25%
  • 输出单价比原方案便宜 35%
  • 名字里带 flash,官方定位就是"轻量高性价比"

按这个算法,高峰时段应该省下约三成的钱。两个月后我去拉了账单。

三、账单摊开:它不是免费的

我一直以为它在高峰时段是免费的------因为这个模型名字里带 "flash",很多平台的 flash 档都有免费额度。直到我把明细表拉下来,才知道自己错了两个月。

按用量结构还原,9 月到 10 月 22 日的总消耗 4.94 亿 token,其中主力模型贡献 98.8%,这部分是实打实计费的。

这里有个细节值得单说:我这套调度工具本地没有这家 provider 的定价表 ,所以它记的费用恒为 0。我在控制台里看了两周的"花费 ¥0",真以为它是免费的。直到我去平台后台拉了明细表。

四、钱到底花在哪:三个价格列,只有一行重要

类型 模型 B(我换的) 模型 A(原方案) 谁便宜
缓存命中 贵 便宜 10.7 倍 原方案
输入(未命中缓存) 便宜 25% 贵 我换的
输出 便宜 35% 贵 我换的

我在选型时比对的那两行,确实更便宜。但它们在真实用量里只占 8.6%,而贵 10.7 倍的那一行占了 91.4%。

类型 token 占比 费用占比
缓存命中 91.4% 73.6%
输入 8.2% 22.3%
输出 0.5% 4.1%

长会话的成本结构不是「问答钱」,是「重读上下文的钱」。

五、换成一个可判定的公式

上面的结论不用背,把它画成曲线就行------两条线交叉的那个点,就是「该不该换」的分界线。

设缓存命中率 h,输出/输入比 r,某模型的三档单价为 c_cache / c_in / c_out,则每个「输入类 token」的综合成本:

scss 复制代码
cost(h) = (1 - h) × c_in + h × c_cache + r × c_out

我这次的实测参数:r = 0.055,h = 0.914。两个方案的综合单价,以原方案为 1.00 归一:

缓存命中率 h 模型 B(我换的) 模型 A(原方案) 谁便宜
0% 0.73 1.00 B 便宜 27%
40% 0.82 1.00 B 便宜 18%
60% 0.90 1.00 B 便宜 10%
73.6% 1.00 1.00 打平(临界点)
91.4%(我的实测) 1.25 1.00 A 便宜 20%
100% 1.49 1.00 A 便宜 33%

临界命中率 73.6%。 只要缓存命中率高过它,"输入便宜 25%"这个优势就会被"缓存贵 10.7 倍"完全吃掉。我实测 91.4%,越过临界点 17.8 个百分点。

六、决策表:什么时候换模型真能省钱

先看流程图,四个问题就能定结局:

你的场景 缓存命中率典型值 结论
单轮问答、客服、批量生成 0--20% 按输入/输出单价选,便宜的那家真能省
多轮对话(3--10 轮) 40--70% 看具体单价,接近临界点,必须实测
Agent / 长上下文 / 代码库问答 85--97% 只看缓存单价,输入输出便宜没用
完全相同的长 system prompt 反复调用 ~100% 缓存单价低的那家压倒性赢

一句话:短任务看 token 单价,长任务看缓存单价。

七、两个工程教训

1. 成本监控必须能对到账单

自建监控的 estimated_cost 在两种情况下会变成假数字:

  • 本地定价表里没有这个 provider → 恒记 0,看着像免费
  • 不同计费档位没拆分(比如按量价 vs 资源包抵扣 vs 分长度区间)→ 记出来的数只是标价复算

验法 :每周拿一张平台明细表,按「模型 × 价格类型(缓存/输入/输出)」交叉核对。对不上就说明你的定价表过期了。我给自己的断言是:标价复算值与账单金额相差超过 10% 就要查。

2. 缓存命中率是新的关键性能指标

以前我会盯 QPS、首字延迟、上下文长度。现在第一个看的是 缓存命中率:

  • 命中率高 → 省钱,但一旦切换模型,缓存全部作废(跨 provider 缓存不通用)
  • 频繁切模型 = 频繁丢掉缓存 = 每次都要付全价输入

所以"按时间段切模型省钱"这个策略,在长会话场景下天然是负收益 ------它不仅换了单价,还换了缓存池。我这次的账单就是这条规律的实证:省下的输入输出钱抵不过缓存损失 + 重新预热的钱。

八、我最后怎么处理的

  1. 把四个切模型的定时任务全停掉,只留一家
  2. 把配置里的"故障自动转备用 provider"也清空------否则主 provider 抖动时会静默切到计费未知的那家
  3. 定价表补齐之前不做选型对比,先看账单再谈性价比
  4. 留一条基线:现在只跑单一 provider,30 天花费固定在一个基数上,之后任何"优化"都对着这条线量,不要再凭单价表下结论

最后一句 :模型选型最容易犯的错不是选贵了或选便宜了,而是拿错的那一列做比较。价格表上有三列,你用来做决策的那一列,最好是真实用量占比最高的那一列。

相关推荐
SQL38 分钟前
从 TraeWork 到全新 TRAE:双端融合后,我用 SOLO 模式 20 分钟做了个考研倒计时工具
人工智能
用户804677180097538 分钟前
Spring MVC Controller 返回值类型全解
后端
用户1276530181439 分钟前
把客服分流、询盘清洗、多平台改写做成 3 个 HTTP 接口,纯规则引擎也能跑
后端
Topskys40 分钟前
RSI递归自我改进
agent
程序员初一41 分钟前
玩了这么多年服务器,那服务器管理工具哪个好用?
后端
探索者轻舞43 分钟前
Logprobs 零成本测谎仪——从分母抹杀理论到软预警协同裁决
人工智能·深度学习
JGrigg1 小时前
DeepSeek 的“思考过程”到底是什么?
agent
用户427019230121 小时前
改个模型名,两个定时任务静默死了:一次定义与引用的分离事故
后端
数聚天成DeepSData1 小时前
Landsat 影像去哪里下载:选景、批量与脚本检索怎么选
人工智能·深度学习·机器学习·数据集·deepsdata