问题出现得很突然,日志倒是留得挺全。组织给三个项目各设了月度额度,实际额度是组织级共享的,其中一个项目跑了批量任务把总额用尽,另外两个项目的推理请求全部返回 403,报错说 quota exceeded。
刚开始盯着「没有额度即将耗尽的告警和熔断」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。额度按组织共享,项目级限额只是个展示值。另一种情况是批量任务没有独立预算,直接吃公共池。
少数情况下是申请提额只加了总额,没有做项目隔离。
拉各项目的实际消耗
curl -s https://api.openai.com/v1/usage?date=2026-11-12 -H "Authorization: Bearer $KEY" | jq '.data | group_by(.project_id) | map({p:.[0].project_id,n:(map(.n_requests)|add)})'
给批量任务单独建项目 key 并设硬上限
curl -s -X POST https://api.openai.com/v1/projects/$PID/rate_limits -H "Authorization: Bearer $KEY" -d '{"hard_limit_usd":200}'
随后在网关侧按项目做额度校验
python quota_gate.py --by project --daily-usd 50 --on-exceed 429
压测验证额度用尽时只影响该项目
python failover_test.py --project batch --expect others=200
别只看报错消失,验证要多做一步。批量项目达到上限后只有它返回 429,另外两个项目请求全部 200,账单页能看到项目级的消耗拆分。
补一句。共享额度池里任何一条批量任务都能把全组织打停,项目隔离和硬上限要在接入时就配好。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
