这篇学完你能回答什么
- token 成本突然涨了 3 倍,第一刀该往哪切?为什么"砍功能"往往是最没用的动作?
- 为什么"上了缓存还是没省下钱"是一个可以预测的结果,而不是玄学?
- 降本动作的正确顺序是什么?每一步的代价分别是什么?
从一个真实故障讲起
一个客服 Agent,三周内 token 成本涨了 3 倍。查了两件事:功能没上新,DAU 只涨了 15%。
团队的第一反应是砍功能——关掉了"自动总结历史工单"和"相关文档推荐"两个用得少的能力。砍完账单只降了 8%。 两周白干,还得罪了两个业务方。
真因是三条同时发生,而且互相掩盖:
- 新加了一个订单查询工具。 它的返回体是完整 JSON,平均 4000 token。而工具结果默认是上下文的永久居民——一次多轮会话里调三次,后面每一轮都要重付这三次的钱。成本按剩余轮次复利。
- 为了修一个 badcase,有人把 effort 从 medium 提到了 high。 这一改不只让思考 token 变多,还让平均工具调用次数从 2.1 涨到 3.4——于是第 1 条被放大了。
- 有人在 system prompt 末尾加了一行"当前时间:{now}"。 prompt 缓存命中率从 85% 掉到 12%,而且账单上完全看不出来——低于门槛或未命中时缓存是静默失效的,不报错。
三条里,只有第 3 条是纯粹的技术失误,另外两条都是"有人为了做对一件事而做的正常改动"。这就是成本排查的难点:它不是 bug,是一堆合理决策的叠加。
而团队第一步就错了——他们跳过了分桶,直接去猜。这和第 5 章那个"分数掉了就回滚模型"的故障是同一种病:猜 → 试 → 猜 → 试。
三周成本涨 3 倍
功能没上新,DAU 只涨 15%
第一反应:砍功能断点
关掉自动总结历史工单与相关文档推荐
账单只降 8%
两周白干,还得罪了两个业务方
真因其实有三条
同时发生,而且互相掩盖
三条都不是 bug
是一堆合理决策叠出来的账单
核心概念:先打比方,再给定义
成本三刀(本篇主线)。把账单异动切成三层,每层只回答一个问题:钱花在输入侧还是输出侧?各侧内部是哪个环节?单价能不能降? 它是 Q2-17 归因树在成本维度上的形态——靠固定住一个变量,把问题一分为二。
输出/输入倍数。所有主流厂商的输出 token 单价都远高于输入:截至 2026-08,Anthropic 全系一律 5 倍,OpenAI 全系一律 6 倍,其余家在 5 到 8 倍之间。一句人话:同样多的 token,写出来的比读进去的贵五六倍。
思考 token(thinking / reasoning tokens)。模型在给出答案前的内部推理,四家全部按输出 token 计费。更贵的是它还有第二次收费——上一轮留在上下文里的思考块,下一轮要按输入 token 再付一次。
缓存三层的成本位置(承接 T6-3):exact cache 省整次调用,prompt/prefix cache 只省输入侧的重算,语义缓存省整次调用但带正确性风险。
同样多的 token,写出来的贵五六倍
所以「先看输出侧」不是经验之谈,是单价结构直接决定的
Anthropic 5 倍,OpenAI 6 倍
截至 2026-08,所有主流厂商的输出单价都远高于输入,其余家在 5 到 8 倍之间;思考 token 四家一律计在输出侧
固定住一个变量,把问题一分为二
和第 5 章那个「分数掉了就回滚模型」是同一种病:猜 → 试 → 猜 → 试
每一刀只回答一个问题
钱花在输入侧还是输出侧 → 各侧内部是哪个环节 → 单价能不能降。切完一刀才切下一刀,跳着切就成了猜
原理拆解
I × 单价,拉总量对比O × 单价 × k,k = 5~80.9·I/(I+k·O)(k=5,Anthropic 口径)| 形态 | 输入 I | 输出 O | 缓存节省率 | 读法 |
|---|---|---|---|---|
| 长 prompt + 短答案(RAG 问答) | 50K | 2K | 67% | 缓存确实救得了 |
| 长 prompt + 推理密集(Agent 多轮) | 50K | 20K(含思考) | 27% | 大头已经挪到输出侧 |
| 短 prompt + 长输出(代码/报告生成) | 2K | 20K | 1.5% | 缓存白开,该去看 effort |
这张表就是「上了缓存还是没省钱」的全部解释。缓存只作用于输入侧被缓存的那一段;成本大头落在输出或思考 token 上时,缓存救不了,正确动作是去看 effort 档位和输出长度。
输入侧唯一会静默发生的是缓存命中率塌陷 —— 前缀里插入任何每次都变的东西(时间戳、随机 ID、用户名)都会让它归零,账单上只表现为「输入侧变贵了」;排查方法是看响应里缓存读取与创建 token 的比值。
第一刀:输入侧还是输出侧
这一刀之所以排第一,是因为它决定了后面所有动作的方向,而且判据是一个可以直接算的公式:
单次调用成本 = I × 单价 + O × 单价 × k I=输入token O=输出token k=输出/输入倍数
缓存能省的比例(缓存把输入压到 0.1×):
节省率 = 0.9 · I / (I + k·O)
代入三种典型形态(k=5,Anthropic 口径):
| 形态 | 输入 | 输出 | 缓存节省率 |
|---|---|---|---|
| 长 prompt + 短答案(RAG 问答) | 50K | 2K | 67% |
| 长 prompt + 推理密集(Agent 多轮) | 50K | 20K(含思考) | 27% |
| 短 prompt + 长输出(代码/报告生成) | 2K | 20K | 1.5% |
这张表就是"上了缓存还是没省钱"的全部解释。 它兑现了一条已经冻结的判断:缓存只作用于输入侧被缓存的那一段;如果成本大头在输出或思考 token 上,缓存救不了,这时候正确动作是去看 effort 和输出长度。
所以第一刀的操作很简单:从账单或 trace 里拉出输入 token 总量和输出 token 总量,各自乘上单价,看哪边涨得多。 不要猜,这是一个查询就能出的数。
第二刀:各侧内部再切
账单涨了 3 倍
│
┌────────────────────┴────────────────────┐
▼ ▼
输入侧涨 输出侧涨
│ │
┌──────┼──────┬──────────┐ ┌────────┼────────┐
▼ ▼ ▼ ▼ ▼ ▼ ▼
工具结果 上下文 缓存命中率 前缀低于 effort 输出 工具
累积 膨胀 塌陷 最小可缓存长度 档位 长度 调用次数
(静默失效) (静默不缓存)输入侧的四个成因,按发现难度从易到难:
- 工具结果累积。最常见,也最容易被低估。工具结果默认是永久居民,成本按剩余轮次复利。一个 4000 token 的返回体在 10 轮会话里被重复计费近 10 次。
- 上下文膨胀。检索条数调大了、few-shot 例子加多了、历史没有压缩。
- 缓存命中率塌陷。这是唯一会静默发生的一类——在缓存前缀里插入任何每次都变的东西(时间戳、随机 ID、用户名)都会让命中率归零,而账单上只表现为"输入侧变贵了"。排查方法是直接看响应里的缓存读取 token 数与创建 token 数的比值。
- 前缀长度低于最小可缓存门槛。截至 2026-08,Anthropic 按模型分四档:512 / 1024 / 2048 / 4096。低于门槛静默不缓存、不报错。 所以"我明明开了缓存"和"缓存真的生效了"是两件事。
输出侧的三个成因:
- effort 档位。这是 2026 年最大的一个隐形开关。官方对它的定位是"行为信号而非硬预算"——它缩放整个响应,包括思考。而 Anthropic 的默认值就是
high。 - 输出长度。
max_tokens设得过大不直接计费,但会让模型倾向于写更长;prompt 里"请详细说明"这类措辞的成本弹性极大。 - 工具调用次数。这条最容易被漏掉,而且它是输出侧影响输入侧的通道——effort 提高会让工具调用次数变多,每一次调用又把工具结果永久留在上下文里。开头那个故障的第 1 条和第 2 条就是这样耦合的。
因此有一条必须写进结论的约束:降 effort 会改变工具调用次数和轨迹,所以任何档位调整都必须重跑轨迹评测,不能只看最终答案。(承接 Q5-05 的轨迹评估与不变量断言)
第三刀:单价
前两刀都做完了,才轮到换模型。这一刀有两条硬判据:
判据一:只有降两档才有意义。 截至 2026-08 的价差结构是——旗舰到次旗舰只有 2.5 到 3 倍,旗舰到同厂最小模型是 10 到 80 倍。只降一档基本是白忙,而降两档的质量风险要靠评测兜住。
判据二:路由的前提是流量的难度分布有方差。 如果你的流量清一色是同类任务,路由器只会在"该不该冒险"上反复摇摆,收益接近零,还多了一层延迟和一个故障点。这条与 T6-3 的四条"不该做路由"判据是同一件事。
降本动作的完整顺序与代价
① exact cache 零风险,吃掉典型流量 15–30% 代价:只对完全重复的请求有效
② prompt/prefix cache 零风险,输入侧降到 0.1× 代价:要重构 prompt 结构,断点位置有讲究
③ 批处理 四家一律五折,可与缓存叠加 代价:24 小时窗口,不支持流式
④ 削工具结果 改返回体 schema、只保留必要字段 代价:可能丢信息,要跑轨迹评测
⑤ 降 effort 档位 输出侧唯一的大杠杆 代价:改变工具调用次数,必须重跑轨迹评测
⑥ 修缓存命中率 把易变内容移出缓存前缀 代价:无,但需要能观测到命中率
⑦ 跨模型路由 降两档才有意义 代价:路由延迟 + 错路由风险 + 双轴评测成本
⑧ 语义缓存 省整次调用 代价:正确性风险不可消除(见 T6-3)
⑨ 减功能 最后一步 代价:产品能力损失,且往往收效最小
顺序不是随便排的:越靠前的动作,"改动 / 收益 / 风险"这个比值越好。 开头那个故障里,团队直接从第 ⑨ 步开始,所以只降了 8%。
工程实践(截至 2026-08)
缓存的盈亏平衡点(必须会算)
Anthropic 的缓存计费是:5 分钟写入 1.25 倍、1 小时写入 2 倍、命中读取 0.1 倍。由此:
- 5 分钟档:写入多付 0.25,每次命中省 0.9 → 平均复用 0.28 次就回本,几乎必赚,可以默认开。
- 1 小时档:写入多付 1.0,每次命中省 0.9 → 需要复用约 1.11 次才回本。用不满就是亏。
- Gemini 的显式缓存还额外按小时收存储费(Pro 档每百万 token 每小时数美元),低频复用时是净亏——缓存 100 万 token 一整天的存储费,可能比直接重算这 100 万 token 还贵。
另一个必须知道的口径变化(截至 2026-08):OpenAI 从 GPT-5.6 起也开始对缓存写入收费(1.25 倍),"OpenAI 写缓存免费"这条 2026 上半年的常识已经过期。
四个反直觉的定价事实(截至 2026-08)
- Anthropic 取消了长上下文加价——Claude 4.6 及以后的完整 100 万 token 上下文按标准价计费,90 万 token 的请求和 9 千 token 的请求同单价。"Claude 超过 20 万 token 翻倍"这条已经作废。
- OpenAI 反过来新增了长上下文阶梯价——超过约 27 万 token 后输入约 2 倍、输出约 1.5 倍。两家方向恰好相反,别用一家的直觉套另一家。
- 两家都新增了数据驻留加价:指定区域推理约 1.1 倍,且含缓存读写。出海与合规场景要单独算。
- 服务分层已成标配:批处理五折 / 弹性档(同批处理价率但同步调用)/ 优先档(约 2 倍换稳定延迟)。"只有批处理一个档"的旧认知已过时。
成本可观测的最低要求
想做上面的三刀,trace 里必须记这些(承接 Q5-06):
- 分环节的输入/输出 token 数,以及缓存创建与缓存读取 token 数分开记
- 每次请求的模型 ID、effort 档位、
max_tokens - 工具调用次数与每次工具结果的 token 数
- 会话轮次数(用来算复利效应)
没有这几项,成本排查只能靠猜。 反过来,有了这几项,第一刀和第二刀都是一句 SQL 的事。
避坑清单
- 不要用月度账单做归因,粒度太粗且滞后。要按天、按环节、按租户拉。
- 缓存命中率要主动监控,不能等账单说话——它静默失效。
- 降档必须灰度 + 重跑轨迹评测,不能只看抽样答案。
- 不要为了省钱关掉 trace。存储成本可以靠"默认脱敏 + 按采样存原文 + 保留期分层"压下来(承接 Q5-06),但把可观测关掉之后,下一次成本异动你就彻底瞎了。
- 警惕"省钱动作引入正确性风险":语义缓存、激进路由、过度压缩上下文,三者都是拿正确性换钱。这类动作必须有评测门禁,不能靠感觉上线。
| 档位 | 计费口径 | 回本判据 |
|---|---|---|
| 5 分钟缓存可默认开 | 写入 1.25 倍,命中读取 0.1 倍 | 写入多付 0.25、每次命中省 0.9 → 平均复用 0.28 次就回本 |
| 1 小时缓存 | 写入 2 倍,命中读取 0.1 倍 | 写入多付 1.0 → 要复用约 1.11 次才回本,用不满就是亏 |
| Gemini 显式缓存 | 额外按小时收存储费(Pro 档每百万 token 每小时数美元) | 低频复用时净亏 —— 缓存一整天可能比直接重算还贵 |
| OpenAI 缓存写入 | 从 GPT-5.6 起对缓存写入也收费(1.25 倍) | 「OpenAI 写缓存免费」这条上半年的常识已过期 |
| 批处理 / 弹性 / 优先 | 批处理五折;弹性同价率但同步调用;优先约 2 倍换稳定延迟 | 「只有批处理一个档」的旧认知已过时,可与缓存叠加 |
- 最小可缓存长度
- Anthropic 按模型分四档 512 / 1024 / 2048 / 4096,低于门槛静默不缓存、不报错
- 长上下文两家反向
- Anthropic 取消加价,Claude 4.6 起百万窗口按标准价;OpenAI 超约 27 万 token 后输入约 2 倍
- 数据驻留
- 两家都新增:指定区域推理约 1.1 倍,且含缓存读写 —— 出海与合规场景要单独算
- trace 必记
- 分环节的输入/输出 token,缓存创建与缓存读取分开记;模型 ID、effort、
max_tokens - 还有两项别落
- 工具调用次数与每次工具结果的 token 数;会话轮次数 —— 它是算复利效应的底数
- 归因粒度
- 不要用月度账单做归因,太粗且滞后;按天、按环节、按租户拉
面试视角
- 开口先定调「我先分桶,不猜」,接着说第一刀切什么
- 第一刀报数据两侧 token 总量各乘单价,范围立刻砍掉一半
- 第二刀报清单输入侧四因、输出侧三因,各说看哪个数
- 第三刀留最后前两刀做完才谈换模型,只降一档没意义
- 收尾给风险「降 effort 会改变调用次数,我会重跑轨迹评测」
- 第一动作是「换个便宜的模型」,或者直接「砍功能」
- 说「上缓存」,却答不出为什么某些场景缓存根本救不了
- 不知道思考 token 按输出计费,也没有「先看输出侧」的直觉
- 把「开了缓存」等同于「缓存生效了」,不知道它会静默失效
- 谈路由时不提「只降一档没意义」
- 第一句是「我先分桶,不猜」,并说得出第一刀切什么
- 写得出缓存节省率公式,报得出推理密集场景从 67% 掉到 27%
- 知道工具结果是上下文的永久居民,成本按剩余轮次复利
- 知道命中率塌陷是静默的,排查看缓存读取与创建 token 的比值
- 能算盈亏平衡点:1 小时档要复用约 1.11 次,用不满就是亏
面试官怎么问
Q6-09 是二三面的排障题,问法通常很具体:"成本突然涨了 3 倍,你怎么查?"它考的不是知识,是排查的次序。 面试官在等一句话——"我先分桶,不猜。"
有一个常见的诱导:面试官会顺口说"是不是模型涨价了"或者"要不要换个便宜的模型"。跟着这个思路走就掉进坑了——那是第三刀,不是第一刀。
答题结构建议
严格按三刀讲,每一刀都说清"我看什么数据、看到什么就往哪走":
- 第一刀:拉输入侧和输出侧的 token 总量,各乘单价。因为输出单价是输入的五六倍、思考 token 计在输出侧,这一刀能立刻把范围砍掉一半。
- 第二刀:输入侧查工具结果累积、上下文膨胀、缓存命中率、前缀长度;输出侧查 effort 档位、输出长度、工具调用次数。
- 第三刀:确认前两刀都做完了,再谈换模型和路由,并说明"只降一档没意义"。
收尾一定要有一句风险陈述:"降 effort 会改变工具调用次数,所以我不会只看最终答案,会重跑轨迹评测。"
分水岭信号
暴露只读过:
- 第一动作是"换个便宜的模型"或者"砍功能"
- 说"上缓存"但答不出为什么某些场景缓存救不了
- 不知道思考 token 按输出计费
- 不知道输出单价是输入的五六倍,因此没有"先看输出侧"的直觉
- 把"开了缓存"等同于"缓存生效了",不知道它会静默失效
- 谈路由时不提"只降一档没意义"
证明真做过:
- 第一句是"我先分桶,不猜",并说得出第一刀切什么
- 能写出或口算缓存节省率的公式,并说得出推理密集场景会从 67% 掉到 27%
- 知道工具结果是上下文的永久居民,成本按剩余轮次复利
- 知道缓存命中率塌陷是静默的,并说得出排查方法(看缓存读取与创建 token 的比值)
- 知道最小可缓存长度有门槛且低于门槛不报错
- 主动说出 effort 会改变工具调用次数,因此必须重跑轨迹评测
- 说得出降本动作的顺序,并解释为什么"减功能"排在最后
- 能算缓存的盈亏平衡点,知道 1 小时档用不满就是亏
小结与延伸
-
成本排查的第一动作是分桶,不是猜。 这与 Q2-17 的归因树、第 5 章的金丝雀集是同一把刀——固定住一个变量,把问题一分为二。
-
第一刀切输入侧与输出侧,因为输出单价是输入的五六倍,且思考 token 计在输出侧。
-
缓存只作用于输入侧,节省率有公式可算;输出侧占大头时,正确动作是降 effort 和压输出长度。
-
降本动作有严格顺序,越靠前"收益/风险"比越好;减功能永远排最后,而且往往收效最小。
-
省钱动作里有一类是拿正确性换钱(语义缓存、激进路由、过度压缩),这类必须有评测门禁。
继续深入
本篇归属第 6 章「部署与成本」,去做这一章的题。