很多团队的 AI 成本不是慢慢涨上去的,是某天打开账单发现这个月比上个月多了一倍。等你发现,钱已经花出去了。
这篇文章不讲怎么算预算(已经写过 AI API预算常见误差来源与修正方法),也不讲怎么对账(AI API账单和定价表对不上怎么办 已覆盖),而是讲怎么在账单出来之前发现问题——AI 成本失控通常有 7 类早期信号,每一类都有对应的排查路径。
前提:你需要拿得到哪些数据
在讲信号前先确认一件事:你得能看到自己的用量明细。Anthropic Console、OpenAI Usage Dashboard、各家 API 后台都提供按天、按 model、按 API key 的明细。如果你只看月底总账单,本文 80% 的信号你都来不及反应。
最少配齐这三个:
- 每日用量曲线(按 model 拆分)
- 每个 API key 的归属(哪个项目 / 服务在用)
- token 输入输出比(很多失控信号藏在这)
下面 7 个信号按”严重程度 × 容易忽略程度”排序。
信号 1:单日成本曲线突然出现尖峰
长什么样:日成本曲线本来在 $50/天,某一天跳到 $300,然后第二天回落到 $80。
最常见原因(按出现频率排):
- 某个调度任务的循环退化 —— 本来一天跑 1 次的批处理,被 retry 逻辑或 cron 配置错误改成 1 小时一次
- 新功能上线遇到边界 case —— 比如新加的”长文档总结”对小用户没限长度,某个用户上传 200MB PDF
- 缓存失效 —— 某次部署清掉了 Redis,导致大量本来命中缓存的 prompt 走真实 API
- 客户端 retry 风暴 —— 服务端某个 5xx 让客户端无脑重试
怎么排查:先按 API key 拆——是不是某一个 key 的调用量异常?再按 endpoint 拆——是 /messages 还是 /embeddings?最后按时间精度拆到小时——尖峰是均匀分布还是集中在某个时段。
止血动作:高优先级的,立刻在客户端加 token-bucket 限流(比如 p-limit、bottleneck),防止重试风暴持续。
信号 2:输出 token 占比突然上升
长什么样:本来输入/输出比是 5:1,某周变成 2:1 甚至 1:1。这个变化在总成本曲线上不一定明显,但真实账单影响巨大——输出价格通常是输入的 3-5 倍。
为什么这个信号被很多团队忽略:大家盯总成本,没盯结构。结构变了,相同总价的内容质量已经在下滑。
常见原因:
- prompt 不再约束输出长度 —— 比如
Be concise这一句被新版 prompt 模板覆盖掉了 - 结构化输出 schema 改了 —— 原本要一段 JSON,现在改要一个嵌套对象,模型把每个字段都展开了
- 换了模型 —— 切到推理模型(reasoning model)后,输出包含 thinking tokens,结构化看像普通输出
- 流式输出被错误地完整保存 —— 重复的中间帧
输出 Token 是大头 那篇专门讲过为什么输出占成本主导。这次的”突然上升”通常意味着上面四种里出了一种。
怎么排查:抽 5-10 条最贵的请求,看完整 prompt 和 response。绝大多数情况你一眼就能看出哪个变了。
信号 3:缓存命中率掉下来
长什么样:本来 prompt caching 命中率 60-70%,某天降到 20%。
Prompt caching(不管是 Anthropic 的 cache_control 还是 OpenAI 的 prompt cache)是控制成本的关键工具。命中率从 60% 掉到 20%,意味着你的有效成本立刻翻 2-3 倍——因为你不仅没拿到 cache 折扣,每次还要按完整价格读完整 prompt。
常见原因:
- system prompt 改了某个字符 —— 哪怕只是修了个 typo,cache key 就变了
- 变量插值打乱了 cache 边界 —— 把”日期戳”放在了应该被缓存的部分前面
- TTL 到期前没刷新 —— Anthropic 默认 5 分钟 TTL,OpenAI 不同 model 不一样
- 模型版本切换 —— 切了 model 就是新的 cache 池
详细排查思路在 Prompt 缓存预算检查清单 里。
止血动作:检查 system prompt 第一行是不是有时间戳、版本号等高频变化的字段,把它们移到 cache 边界之后。
信号 4:某个 API key 异常活跃
长什么样:内部有 5 个 key(dev / staging / prod / batch / experimental),平时 prod 占 80% 成本。某天 experimental 突然占到 30%。
常见原因:
- 试验代码忘了下线 —— 数据科学团队跑的对比实验
- key 泄露 —— 写在前端代码、写到 git commit、贴到 issue 里
- 被本地脚本套娃调用 —— 某个工程师在本地 Jupyter 里跑长 loop,忘了关
第二种是真正的紧急情况——这种异常曲线通常 24 小时内能跑出几千美元。
怎么排查:
1. Anthropic / OpenAI 后台按 API key 拆 → 确认哪个 key
2. 用 git log 搜该 key 是否被 commit 过
3. grep 整个仓库(含历史)确认没有 hardcode
4. 看 IP 来源是不是预期范围内
止血动作:发现可疑立刻 revoke 重发,不要犹豫”还在调试”。
信号 5:调用量平稳但成本上涨
长什么样:API 总调用次数没变(甚至少了),但成本上涨 30-50%。
常见原因:
- 从便宜 model 切到贵 model —— 比如 GPT-4o-mini 切到 GPT-4o,单价差 5 倍以上
- input tokens 越来越长 —— 历史 conversation 越攒越多,每次调用都把全部历史发回去
- 附件解析量上升 —— 用户开始大量传图片/PDF,单请求 token 飙升
- 某个客户用法变了 —— 单一大客户的 conversation 长度 / 频率显著上升
第二种最容易忽略——曲线看着稳,实际上每次调用单价在涨。
怎么排查:算一个”单次调用平均 token 数”指标。把这个指标按周画曲线,比看总成本曲线更早发现这类问题。
信号 6:测试 / 监控环境占成本异常比例
长什么样:dev + staging 加起来占总成本超过 15-20%。
健康的比例:dev/staging 应该 < 10% 总成本,prod 应该是大头。如果 dev 反过来占 30%,说明:
- 测试 mock 没做好 —— 应该用 fixture 的地方在打真实 API
- CI 流水线在跑真实 LLM 测试 —— 每次 push 都要 $5
- 本地开发没限速 —— 工程师全天 hot reload 触发后台请求
止血动作:
- CI 里的 LLM 测试改成抽样跑(每 N 个 PR 跑一次完整集,平时跑 mock)
- dev 环境换成低价 model(mini / haiku 系)
- 给 dev/staging 设月度上限(OpenAI 后台支持,Anthropic 通过 monitoring 实现)
信号 7:错误率上升的同时成本不降反升
长什么样:某段时间 5xx 多了,但成本没跟着错误率一起降。
正常情况下,错误率上升应该带来成本下降——失败请求不应该计费。但有几种情况会让错误率上升反而变贵:
- 重试逻辑层层嵌套 —— SDK 内置重试 + 应用层重试 + 队列层重试,一次失败变三次成本
- 错误的 fallback 策略 —— 主 model 失败 → fallback 到更贵的 model
- 超时但已经计费 —— 某些 API 在 streaming 中断时,已生成的 token 仍计费
- content filter 不计费但 retry 计费 —— 内容审查失败本身免费,但你的 retry 是真钱
怎么排查:把”失败请求数 × 各次重试成本”算出来。很多团队从来没算过这个数。
长期机制:把”被动发现”变成”主动告警”
7 个信号都讲完了。但真正的问题是——你不能每天手动排查这 7 项。需要把它们变成自动化告警:
| 信号 | 可监控指标 | 推荐告警阈值 |
|---|---|---|
| 单日尖峰 | 当日成本 vs 7 日均值 | > 3× 触发告警 |
| 输出占比 | 输出/输入 token 比 | > 周环比上升 50% |
| 缓存命中率 | cache hit rate | < 周均值 70% 触发 |
| key 异常 | 单 key 当日成本 | > 该 key 7 日均值 5× |
| 单次调用变贵 | avg tokens per call | > 周环比上升 30% |
| 测试占比 | dev+staging / prod | > 15% |
| 重试成本 | retry attempts × 单价 | 占总成本 > 5% |
实现工具看团队偏好——简单的方案就是每天早上一封自动邮件(cron + Anthropic Cost API + 一段脚本),高级的接 Datadog / Grafana。关键不是工具多炫,是这些数据有人在每天看。
止血动作清单
如果你已经看到账单失控,下面这个顺序通常 24 小时内能压住成本:
- 立刻 —— 把所有 API key 的月度上限设到当前月的 1.5 倍,防止继续失控
- 当天 —— 按”信号 1-4”对照排查,定位最大头来源
- 第二天 —— 上一个客户端 token-bucket 限流,给最贵的 endpoint 加 rate limit
- 当周 —— 把告警机制部署上,下个月不再被动发现
- 持续 —— 月度成本拆分作为运营会议固定议题,不要等到失控才看
延伸阅读:
- 想要从写预算阶段就避开这些坑:AI API预算常见误差来源与修正方法 一篇覆盖
- 账单数字看不懂、对不上定价表:AI API账单和定价表对不上怎么办 走一遍对账流程
- 想从根本上压低单次调用成本:7 种可立刻执行的 AI API 降本动作 给具体方法
- 用 Token 计算器 把当前 prompt 和预期用量算一遍,做防御性预算