账单翻倍的那个凌晨,我们复盘了五种最常见的排查错误做法
一、先看反例:突增发生时,大家通常怎么错
凌晨两点,监控群里弹出一条消息:「本月 token 用量已超出预算的 180%。」第二天一早,技术负责人的第一反应往往是错的。以下五种做法,几乎每支团队都至少踩过一个。
错误一:直接找供应商客服,要求「退钱」。
用量归因还没做清楚之前,任何人(包括供应商)都无从判断这是计费误差、模型定价调整,还是你自己的调用行为变了。把排查起点放在外部,通常意味着三天后你收到一份「数据无误」的回复,而账单一分没少。
错误二:盯着总账单看,不看维度。
「总用量涨了三倍」是一句废话。没有按项目、按 API Key、按模型、按时段拆分的总量数据,等于拿着一张只有合计行的发票在做审计。多数团队在事后复盘时才发现,突增往往来自某一个 Key、某一个模型、某一段代码路径,而不是全面上涨。
错误三:把锅甩给「用户量涨了」。
业务增长确实会带来用量增长,但业务增长通常是平缓曲线。真正的突增是阶梯状或尖刺状的——一次重试风暴、一个死循环里的模型调用、一段没设上限的 agent 任务,都长这样。用业务增长解释突增,是放弃排查的委婉说法。
错误四:第一时间降级模型或关掉功能。
砍功能止血没有错,错在顺序。没有归因就动手,你可能在砍掉一个无辜功能的同时,放过了真正在烧钱的那个定时任务。更糟的是,两周后同样的突增换个入口再来一次。
错误五:加一行日志就完事。
在应用代码里手动打日志,粒度取决于哪个工程师顺手写了没有。多服务、多模型、多环境的调用链,靠零散日志拼不出完整视图,而且日志本身也在消耗资源。
二、正确的排查路径:从归因到止血
第一步:确认形状,再找来源
拿到逐小时甚至逐分钟的用量曲线,先回答三个问题:
- 是阶梯、尖刺还是缓坡? 尖刺指向重试风暴或异常输入;阶梯指向某次代码发布打开了新调用路径;缓坡才可能与业务增长相关。
- 突增从哪个维度开始? 按 API Key、按模型、按调用来源(用户端/后台任务/测试环境)切片,找到那一条先抬头的曲线。
- 突增时刻对应什么变更? 对照发布记录、配置变更、定时任务清单。时间戳对齐,往往问题已经缩小到一次提交。
第二步:定位调用方
如果所有调用都走同一个裸 API Key,这一步就卡死了——这正是许多团队排查失败的根本原因:没有归因基础设施,事中一切排查都是猜。正确做法在下一节展开。
第三步:止血与复盘
定位后按影响排序处理:加硬上限、封禁异常 Key、回滚问题版本。复盘时把这次事件转化为规则:预算告警阈值、模型白名单、渠道熔断条件。
三、三种预算治理方法:让下一次突增可预防
方法一:按团队/项目/用途分发独立凭证,做用量归因
不要让所有调用共用一个 Key。给每个项目、每个环境(生产/测试)、每类用途(用户对话/批量处理/内部工具)分配独立凭证。这样用量天然按维度切分,突增发生时,第一步归因已经在数据里了。
通过 ThisToken.AI 的网关统一接入后,这件事的成本大幅降低:你不需要在各家供应商后台反复创建和管理一堆原生 Key,而是在网关层为每个团队、每个应用签发独立的托管凭证。所有调用的 token 消耗、请求量、错误率都按凭证维度自动记录,归因从「事后拼日志」变成「看面板」。
方法二:模型白名单 + 路由约束,防止隐性消耗
很多突增不是「调多了」,而是「调贵了」:某段代码悄悄把模型从轻量档切到了旗舰档,或者一个 agent 框架默认调用了你没批准的模型。治理手段是模型白名单——明确每个凭证只能访问哪些模型,未列入白名单的调用直接拒绝。
ThisToken.AI 的网关支持为每个渠道和密钥配置可用模型白名单。更进一步,可以按任务类型做路由治理:简单分类任务路由到低成本模型,只有复杂推理任务允许调用旗舰模型,并给旗舰通道设置独立的额度上限。这样即使某段代码失控,它的爆炸半径也被限制在一条通道内。
方法三:分层预算告警与硬性熔断
告警要在「还来得及」的时刻触发:
| 层级 | 触发条件 | 动作 | 责任人 |
|---|---|---|---|
| 提醒 | 日用量达预算 60% | 通知到群 | 值班工程师 |
| 警告 | 日用量达预算 85% | 通知负责人 + 排查清单启动 | 技术负责人 |
| 软限流 | 单 Key 分钟级速率超阈值 | 自动限流该 Key | 自动 |
| 熔断 | 单凭证达周期硬上限 | 停止服务该凭证 | 自动 |
| 总闸 | 账户总量达月度上限 | 全局告警 + 人工决策 | 管理者 |
关键设计原则:熔断按凭证粒度,不按账户粒度。一个测试任务烧爆了,只熔断它的 Key,生产流量不受影响。通过 ThisToken.AI 托管渠道统一管理时,这套限额逻辑在网关层配置一次,对所有下游模型生效,不用在每个应用里各写一套。
四、预算治理清单
上线任何 AI 功能前,逐项打勾:
- [ ] 该功能使用独立凭证,凭证命名可追溯到项目和用途
- [ ] 凭证绑定了模型白名单,未批准的模型无法被调用
- [ ] 设置了单请求与单任务周期的 token 上限(防单次调用失控)
- [ ] 分层告警已配置(60%/85%/硬上限三档)
- [ ] 硬熔断阈值已确认,且熔断动作有演练过
- [ ] 重试逻辑有退避和次数上限,避免重试风暴
- [ ] 批处理任务有 dry-run 模式,先小样本再放量
- [ ] 用量面板对团队可见,异常曲线人人能看
- [ ] 每月一次用量复盘:Top 5 消耗来源是否与业务价值匹配
五、写在最后
突增本身不是事故,无法归因才是。当所有调用经过统一网关、每个凭证有白名单和限额、告警分了层,你会发现「排查」这个词正在从你的工作中消失——因为答案一直在面板上等着你。
如果你的团队还在用一堆裸 Key 直连各家模型,可以从统一接入开始:在 ThisToken.AI 注册一个账户,把第一个项目的调用迁到网关上,配好白名单和熔断,剩下的项目按节奏跟进。
从这一步开始:https://api.thistoken.ai/register
---
不想折腾多家供应商的接入差异?在 https://api.thistoken.ai/register 注册,用一个 base_url 调用所有模型。