先看现象。组织下三个项目各自把月度配额设成 50 万 token,A 项目跑到 48 万时,B 项目刚用 3 万就开始返回 429,原文 rate_limit_exceeded 后面跟着 organization 字样,控制台里 B 项目的进度条还不到一成。

原因不止一个,得分开看。组织级月度配额是总量,项目配额只是分配展示值。另一种情况是项目设置只限瞬时 TPM,不限月度累计。

另外,组织默认额度一直没提升,三个项目共用同一份。

少数情况下是用量统计按 UTC 日切,跨时区看到的剩余量不一致。

拉组织维度的用量曲线

curl -s 'https://api.openai.com/v1/organization/usage/completions?start_time=1730000000&bucket_width=1d' -H "Authorization: Bearer $ADMIN_KEY" | jq '.data[].results'

再按项目拆分确认是谁在涨

curl -s 'https://api.openai.com/v1/organization/usage/completions?start_time=1730000000&project_ids=proj_a,proj_b' -H "Authorization: Bearer $ADMIN_KEY" | jq -r '.data[].results[] | [.project_id,.input_tokens] | @tsv'

给消耗最大的项目加独立硬上限

curl -X POST https://api.openai.com/v1/organization/projects/proj_a/rate_limits -H "Authorization: Bearer $ADMIN_KEY" -d '{"max_tokens_per_month":200000}'

等前面都确认过,再用 B 项目的小请求复验是否恢复

curl -s -o /dev/null -w '%{http_code}\n' https://api.openai.com/v1/chat/completions -H "Authorization: Bearer $PROJ_B_KEY" -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}]}'

恢复的判定其实很直接。B 项目的小请求回到 200,用量页里组织剩余额度随 A 项目的消耗单独变化,两个项目的 429 不再互相牵连。

看到 429 别只盯自己项目的进度条,组织池是三个项目一起分的,先拉组织用量再谈扩容,顺序弄反会一直加预算。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189