如何给 AI 编程工具设置预算预警?
一晚上不小心被 Codex 烧 50 美元,第二天看账单瞠目结舌——这种事预算预警能拦住。这篇讲清各 provider 自带的预算限制、第三方监控方案、以及一个轻量本地方案。
去年圣诞前夜我让 Codex 跑一个 Agent 任务,关掉电脑去吃饭。回来 3 小时后看账单——47 美元。Codex 进入了一个死循环,跑了 200+ 次工具调用最终给出错误结果。
那次之后我装了三层预算预警。这篇讲清都怎么装。
Provider 自带的预算限制
OpenAI:在 platform.openai.com → Billing → Usage Limits 设置月度硬上限。超过自动停止 API。预警阈值(80%、90%、100%)可以发邮件。
Anthropic:在 console.anthropic.com → Billing 类似设置。可以设月度硬上限。
Google AI(Gemini):在 Google Cloud Console → Billing → Budgets 设置。Google 这个稍复杂,但功能最全(可以按 service、按 label 设阈值)。
智谱 GLM / MiniMax / 国产 provider:多数提供后台配额限制。
设置 provider 自带限制是第一道防线——必装。我建议设两个:
- 月度预算:不要太低(不然影响正常工作),按你历史月支出 × 1.5
- 日预算:按月预算 / 20(按工作日)
但 Provider 限制有局限
1. 颗粒度粗
Provider 只能限制按 API key。如果你一个 key 同时跑 Claude Code、Codex、OpenCode——超 budget 时所有工具都停。可能你想停 Codex(跑岔了的那个),但也把 Claude Code 停了。
2. 反馈延迟
Provider 的 usage 数据更新有 15-60 分钟延迟。等你收到 80% 预警邮件时——可能已经超 100% 了。
3. 只能停,不能动作
预警只能发邮件 / 停 API。没法触发"切到便宜模型"或"压缩 context"这种灵活动作。
第三方监控方案
LangSmith / Langfuse / OpenLLMetry——这类专业 LLM 监控工具能做到调用粒度的实时监控。但配置麻烦,要在每次调用插桩。普通开发者搭这种系统不现实。
Helicone——proxy 模式。把你的 API 请求路由经过 Helicone 再到 provider。能做到分钟级监控。但又一层 proxy 引入延迟,且对私密度敏感的项目不合适。
我用的本地方案
我自己用的是 Vibe Usage 的实时面板。它读各工具本地日志,每分钟同步——能做到分钟级反馈。
我设置了三个监控规则:
规则 1:日总消耗超过 X
每天上限按月预算 / 20。如果某天 token 消耗超过这个——立刻通知(macOS 通知中心)。
规则 2:单 session 消耗速率超过 Y
最容易被 Agent 死循环烧的就是这个——不是总量超,而是速率突然变快。如果某 session 在过去 5 分钟消耗了相当于平时一小时的量——通知。
规则 3:单 session 累计超过 Z
如果某个会话累计超过 200 万 token——提醒你 compact 或退出。
Vibe Usage 自带的 alert 功能能配前两个,第三个我自己写了一个 cron 脚本去查。
怎么避免"误报骚扰"
预警最容易遇到的问题是疲劳——预警太频繁会让你忽略真正的危险。
我的规则:
- 日预算预警:只有真的逼近 hard limit 才告警(比如 90%)。不要 50% 就告警。
- 速率预警:阈值要保守(你正常 5 分钟 5 万 token,告警阈值设 30 万——明显异常才响)。
- 累计预警:每天最多触发一次,避免重复响。
一个最重要的"事前预警"
最有效的预警不是"超 budget 提醒",是事前的 token 预估。
每次跑大任务前,问自己:
- 这个任务在历史上单次消耗中位数是多少?(看 Vibe Usage 上你过去类似任务的数据)
- 我的 budget 还剩多少?
- 失败后能不能重试?
如果答案是"任务会消耗 30% 月预算 + 失败率 30%"——你应该把任务拆小,不是直接开跑。
Vibe Usage 帮你建立这种"任务消耗的群体直觉"——你看了 100 个类似任务的数据,自然就会判断"这个任务该不该开始跑"。
Codex 死循环的特殊预警
Codex 是最容易"无声烧钱"的工具。我专门为 Codex 设了预警:
- 单次 Codex 任务超过 30 分钟 → 通知
- Codex session message 数超过 200 → 通知
- Codex 单 session token 超过 500 万 → 通知
任何一个触发,立刻去看 Codex 在干什么。多数时候它已经走偏了,立刻 Ctrl+C 停。
总结:三层防御
- Provider hard limit——硬封顶,绝对不会超
- 本地实时监控(Vibe Usage 这种)——分钟级反馈
- 任务前预估——养成习惯,开跑大任务前心里有数
第二层是免费的——装 Vibe Usage 就有了。但很多人省了这一步,第一层等收到邮件已经晚了,第三层从来没养成习惯——结果就是出事再后悔。