跳到内容
AI

AI API账单突然涨了?7个失控信号与排查清单

AI

AI Cost Calculator

3 分钟阅读

很多团队的 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. 某个调度任务的循环退化 —— 本来一天跑 1 次的批处理,被 retry 逻辑或 cron 配置错误改成 1 小时一次
  2. 新功能上线遇到边界 case —— 比如新加的”长文档总结”对小用户没限长度,某个用户上传 200MB PDF
  3. 缓存失效 —— 某次部署清掉了 Redis,导致大量本来命中缓存的 prompt 走真实 API
  4. 客户端 retry 风暴 —— 服务端某个 5xx 让客户端无脑重试

怎么排查:先按 API key 拆——是不是某一个 key 的调用量异常?再按 endpoint 拆——是 /messages 还是 /embeddings?最后按时间精度拆到小时——尖峰是均匀分布还是集中在某个时段。

止血动作:高优先级的,立刻在客户端加 token-bucket 限流(比如 p-limitbottleneck),防止重试风暴持续。

信号 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。

常见原因

  1. system prompt 改了某个字符 —— 哪怕只是修了个 typo,cache key 就变了
  2. 变量插值打乱了 cache 边界 —— 把”日期戳”放在了应该被缓存的部分前面
  3. TTL 到期前没刷新 —— Anthropic 默认 5 分钟 TTL,OpenAI 不同 model 不一样
  4. 模型版本切换 —— 切了 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%。

常见原因

  1. 从便宜 model 切到贵 model —— 比如 GPT-4o-mini 切到 GPT-4o,单价差 5 倍以上
  2. input tokens 越来越长 —— 历史 conversation 越攒越多,每次调用都把全部历史发回去
  3. 附件解析量上升 —— 用户开始大量传图片/PDF,单请求 token 飙升
  4. 某个客户用法变了 —— 单一大客户的 conversation 长度 / 频率显著上升

第二种最容易忽略——曲线看着稳,实际上每次调用单价在涨。

怎么排查:算一个”单次调用平均 token 数”指标。把这个指标按周画曲线,比看总成本曲线更早发现这类问题。

信号 6:测试 / 监控环境占成本异常比例

长什么样:dev + staging 加起来占总成本超过 15-20%。

健康的比例:dev/staging 应该 < 10% 总成本,prod 应该是大头。如果 dev 反过来占 30%,说明:

  • 测试 mock 没做好 —— 应该用 fixture 的地方在打真实 API
  • CI 流水线在跑真实 LLM 测试 —— 每次 push 都要 $5
  • 本地开发没限速 —— 工程师全天 hot reload 触发后台请求

止血动作

  1. CI 里的 LLM 测试改成抽样跑(每 N 个 PR 跑一次完整集,平时跑 mock)
  2. dev 环境换成低价 model(mini / haiku 系)
  3. 给 dev/staging 设月度上限(OpenAI 后台支持,Anthropic 通过 monitoring 实现)

信号 7:错误率上升的同时成本不降反升

长什么样:某段时间 5xx 多了,但成本没跟着错误率一起降。

正常情况下,错误率上升应该带来成本下降——失败请求不应该计费。但有几种情况会让错误率上升反而变贵:

  1. 重试逻辑层层嵌套 —— SDK 内置重试 + 应用层重试 + 队列层重试,一次失败变三次成本
  2. 错误的 fallback 策略 —— 主 model 失败 → fallback 到更贵的 model
  3. 超时但已经计费 —— 某些 API 在 streaming 中断时,已生成的 token 仍计费
  4. 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 小时内能压住成本:

  1. 立刻 —— 把所有 API key 的月度上限设到当前月的 1.5 倍,防止继续失控
  2. 当天 —— 按”信号 1-4”对照排查,定位最大头来源
  3. 第二天 —— 上一个客户端 token-bucket 限流,给最贵的 endpoint 加 rate limit
  4. 当周 —— 把告警机制部署上,下个月不再被动发现
  5. 持续 —— 月度成本拆分作为运营会议固定议题,不要等到失控才看

延伸阅读:

推荐阅读