先对照:429 原因和处理方法
| 错误文本或 error.code | 原因 | 正确动作 | 重试有用吗 |
|---|---|---|---|
| Rate limit reached for requests | 请求发得太快 | 降低频率,遵循 Retry-After | 有用,但要等待 |
| slow_down(rate_limit_error) | 请求量增长太快 | 遵循 Retry-After,降低速率后逐步提升 | 有用,但要慢慢加量 |
| credit_balance_exhausted | 预付余额用完 | 补充余额 | 没用 |
| organization_spend_limit_exceeded | 组织达到支出上限 | 提高或取消组织支出上限 | 没用 |
| project_spend_limit_exceeded | 项目达到支出上限 | 在项目设置里调整上限 | 没用 |
| organization_usage_limit_exceeded | 组织达到 OpenAI 分配的使用上限 | 申请更高的使用上限 | 没用 |
| ChatGPT 登录提示"使用限制" | 订阅套餐的使用额度用完 | 等待重置,或购买额外额度 | 等到重置时间 |
| 第三方 Provider 返回 429 | 服务商自己的限流、余额或上游渠道状态 | 按服务商文档和后台状态处理 | 视情况 |
先执行这几条,确认你属于哪一类:
# 1. 确认认证方式:ChatGPT 登录还是 API Key
codex login status
# 2. 在 Codex 会话里查看剩余额度(ChatGPT 登录)
/status
前六行来自 OpenAI 错误码文档。最关键的一点:余额、支出和使用上限类的 429,不会靠不停重试恢复。OpenAI 官方文档原话是,重试账单、支出或配额类错误不会恢复 API 访问,需要先更新余额或上限。下面是详细的排查方法。
为什么"等一会儿再试"只对一部分情况有用
看到 429,很多人的第一反应是等几十秒再点一次。这招只对"请求太快"这一类有用。OpenAI API 的 429 至少要分成两大类:
- 速率类:请求或 token 发得太快,等一等、降低频率就能恢复;
- 账户类:余额耗尽、支出上限、使用上限,你等半小时也不会自己好。
官方还特别说明,对于账单相关的错误,要看 error.code 来确定具体原因,因为更宽泛的 error.type 可能都显示为 insufficient_quota。所以排查 429 的第一步,永远是拿到完整的错误信息。
拿到完整错误信息:按系统打开日志
很多时候,Codex 界面上只显示一句简短的提示,看不到完整的 error.code。这时可以借助日志。官方 Configuration Reference 说明,Codex 默认把日志写在 $CODEX_HOME/log 下,CODEX_HOME 默认是 ~/.codex。如果你显式设置了 log_dir,Codex 还会在那个目录里额外写一份明文的 TUI 日志 codex-tui.log。
临时为一次运行指定日志目录,官方给出的写法是:
codex -c log_dir=./.codex-log
各系统查看默认日志目录:
macOS / Linux:
ls -la ~/.codex/log
Windows PowerShell:
Get-ChildItem "$env:USERPROFILE\.codex\log"
在日志里搜索 429,通常就能找到完整的错误内容和 code。注意日志里可能包含你的提示词和项目信息,分享给别人排查之前,先检查并删掉敏感内容,尤其不要把 Key 一起发出去。
先确认你走的是哪条路线
运行:
codex login status
然后按结果走下面三条路线中的一条:
- ChatGPT 登录:429 通常和订阅套餐的使用额度有关;
- OpenAI API Key:429 的含义以 OpenAI 错误码文档为准;
- 第三方 Provider:429 的含义由服务商决定。
三条路线的处理方法完全不同,不要把一条路线的经验套到另一条上。
路线一:ChatGPT 登录的使用额度
如果你用 ChatGPT 账号登录 Codex,看到"使用限制""稍后恢复"之类的提示,就按产品给出的额度窗口处理。不要因为它也叫"额度"或"限制",就强行换算成 API 的 RPM、TPM,两套机制不是同一张表。
OpenAI 的 Codex 定价页说明了几点:
- 能发多少条消息,取决于使用的模型、任务的规模和复杂度,以及在本地还是云端运行;看起来相似的任务,消耗也可能不同;
- 页面给出的是 Plus 和标准 Business 套餐每五小时本地消息数的估算,这些只是估算,不是固定上限;Pro 套餐目前没有五小时限制;
- 当前额度和重置时间可以在使用情况页面查看,在 Codex CLI 会话里也可以用
/status查看剩余额度; - 如果在一轮任务进行中达到上限,Codex 可以继续完成这一轮(受公平使用限制);
- Plus 和 Pro 用户达到上限后,可以购买额外的 credits 继续使用,不需要升级套餐。
所以这条路线下的处理顺序是:先用 /status 看剩余额度和重置时间;急用就购买额外额度;不急就等重置。想减少消耗,可以把大任务拆小、减少不必要的长上下文。Codex 不同计费方式的区别,见《Codex 怎么收费》。
路线二:OpenAI API Key
真的是 rate limit 时怎么处理
如果错误明确是请求或 token 的速率限制,先把并发降下来。官方给出的处理原则是:
- 有
Retry-After响应头时,至少等到它给出的时间再重试; - 没有
Retry-After时,用指数退避,并加一点随机抖动(jitter),同时限制最大重试次数。
别写这种死循环:
失败 → 立即重试 → 失败 → 立即重试 → ...
这会让原本的限流更难恢复。更稳妥的思路是:
失败 → 读取 Retry-After → 降低并发 → 等待 → 只重试一个最小请求
slow_down 是另一种速率限制
官方文档单独列出了 slow_down 这个 code。它表示你的请求量增长得太快,即使总量还在每分钟请求数和 token 数的限额以内,也可能出现。官方给的经验值是:当流量达到每分钟 100 万输入 token 后,每 15 分钟的增幅不要超过 50%。具体触发点会因模型和流量情况不同。
所以如果你刚刚把 codex exec 的并发从几个一下子提到几十个,遇到 slow_down 就很正常,解决方法是逐步加量,而不是一次性拉满。
余额、支出和使用上限
这几类 429 必须去账户后台处理:
credit_balance_exhausted:预付余额用完了,补充余额;organization_spend_limit_exceeded:组织达到了每月支出上限,这个上限对组织内所有项目生效,需要提高或取消;project_spend_limit_exceeded:某个项目达到了自己的支出上限,其他项目可以继续使用,除非它们也达到上限;organization_usage_limit_exceeded:组织达到了 OpenAI 分配的每月使用上限,这和你自己设置的支出上限是两回事,需要申请更高的额度。
处理完之后,只发一个最小请求验证,不要一恢复就马上把所有任务重新跑起来。
路线三:第三方 Provider
如果请求经过第三方 Base URL,429 的含义由该服务商决定。这时要同时检查:
- 服务商账户的余额;
- 上游渠道状态;
- 并发限制;
- 当前模型是否受限;
- 是否存在自动重试把问题放大。
AICodeWith 上的两种 429 报错
如果你通过 AICodeWith 调用,返回 429 时错误信息里常见下面两种文本,它们都来自上游,不是你的 Key 或配置写错了:
| 错误文本 | 含义 | 怎么处理 |
|---|---|---|
| gateway_queue_full | 上游请求队列已满,暂时排不进去 | 稍等几秒到几十秒再重试,不要立刻连续重发 |
| Upstream rate limit exceeded | 上游模型服务触发了速率限制 | 降低并发,减少同时运行的任务数,间隔一段时间再重试 |
两种情况都是临时性的。处理原则一样:等一小会儿再试,同时把并发降下来,并且只保留一层重试(见下文“Codex 自己的重试设置”)。如果持续出现,可以在渠道页查看当前渠道状态。
如果使用 AI Code With,可以在这里查看:
- 渠道状态:https://aicodewith.ai/zh/dashboard/channels?ref=docs&src=codex-429-too-many-requests
- 模型与计费:https://aicodewith.ai/zh/dashboard/pricing?ref=docs&src=codex-429-too-many-requests
- 渠道和线路的说明:渠道管理文档和线路选择文档
渠道切换能降低"单一渠道故障"带来的影响,但它不能保证绕过真正的上游限流、账户额度或组织限制。
别把"自动切渠道"当万能修复
AI Code With 的渠道页适合用来确认第三方路径里的渠道状态和模型成本,但"下一个渠道可用"不等于"所有 429 都能被绕过去"。如果错误来自上游真实的速率限制、余额不足或组织、项目限制,仍然要按错误 code 处理。把渠道切换当作可用性手段,把 429 分类当作排错手段,两件事不要混在一起。
还没有账号的话,可以先注册 AI Code With,在控制台里查看渠道和用量。
429 和 503 别搞混
有些"太忙了"的错误其实不是 429。OpenAI 错误码文档里还有一个 503,code 是 server_is_overloaded,表示请求的模型暂时过载。它和 429 的区别在于:429 是你这边的请求超出了限制,503 是服务端那边暂时忙不过来。
两者的处理方法有相似之处:有 Retry-After 时都要至少等到它给出的时间。但 503 如果持续出现,官方建议去 OpenAI 状态页查看是否有正在发生的故障,而不是去调整你的账户上限。
如果你自己写脚本调用 API,还要注意官方提到的一点:Python SDK 对 429 抛出 RateLimitError,对 503 抛出 InternalServerError。如果你的代码只捕获其中一种,另一种错误就会漏掉。官方建议两种都处理,并检查 error.code。
另一种报错:Selected model is at capacity
如果你看到的不是 429,而是「Selected model is at capacity. Please try a different model.」,那是模型服务端满载(HTTP 503),不是限流,也不是额度用完,处理方法也不一样:等它自动续跑或换个模型。详见《Codex 报错 Selected model is at capacity 怎么办》。
Codex 自己的重试设置
很多人不知道,Codex 本身对自定义 Provider 就有自动重试。官方 Configuration Reference 里有两个相关字段:
request_max_retries:对 Provider 的 HTTP 请求重试次数,默认 4 次;stream_max_retries:流式响应中断时的重试次数,默认 5 次。
如果你在脚本里又包了一层重试,一次失败就可能被放大成十几次请求,在限流时尤其糟糕。批量运行 codex exec 时,建议只保留一层重试,并让它遵循 Retry-After。这两个字段写在 [model_providers.<id>] 下,写法见《Codex config.toml 配置指南》。
一个推荐的排查顺序
- 保存完整的 429 错误信息;
- 用
codex login status确认是 ChatGPT 登录还是 API Key; - 确认是否经过第三方 Provider;
- 看
error.code; - 如果是速率限制,看
Retry-After、并发和请求频率; - 如果是余额、支出或使用上限,直接处理账户限制,不要重试;
- 只用一个最小请求验证恢复。
如果只有某一个模型失败,而其他模型正常,问题可能已经从"限流"转到模型或路由层,继续查模型 ID 和 Provider。
恢复之后怎么确认真的好了
处理完 429 之后,不要马上把所有任务重新跑起来。建议按这几步确认:
- 只发一条最短的请求,确认能正常返回;
- API Key 路线下,到后台确认余额、支出上限和用量都已经更新;
- ChatGPT 登录路线下,用
/status确认剩余额度已经恢复; - 第三方 Provider 路线下,在调用记录里确认请求成功,并看一眼当前走的是哪个渠道;
- 最后再逐步恢复原来的并发,观察一段时间没有新的 429 再完全放开。
这样即使问题没有完全解决,也只会损失一两个请求,而不是让整批任务再失败一次。
批量任务怎么避免 429
如果你用 codex exec 跑批量任务或定时任务,可以提前做几件事:
- 控制并发:从很小的并发开始,确认稳定后再逐步增加,避免触发
slow_down; - 错开时间:多个定时任务不要都设在整点同时启动;
- 只保留一层重试:要么依赖 Codex 自带的重试,要么在脚本里重试,不要两层叠加;
- 设置预算告警:API Key 路线下,提前在后台设置支出上限和提醒,比任务跑到一半突然 429 更可控;
- 记录错误码:脚本里把
error.code写进日志,出问题时一眼就能分清是哪一类。
常见问题
Codex 429 要等多久?
取决于原因。速率限制类按 Retry-After 等待,通常很快恢复;ChatGPT 登录的使用额度要等到重置时间,可以用 /status 查看;余额或上限类不会自己恢复,必须去后台处理。
怎么知道是限流还是余额不足?
看完整错误里的 error.code。credit_balance_exhausted 是余额问题,带 spend_limit 或 usage_limit 的是上限问题,Rate limit reached 和 slow_down 才是速率问题。
ChatGPT Plus 用户遇到使用限制怎么办?
OpenAI 定价页说明,Plus 和 Pro 用户达到上限后可以购买额外的 credits 继续使用,不需要升级套餐;也可以等待额度重置。
换成 API Key 能解决 429 吗?
换成 API Key 后,计费和限制改为按 API 规则,不再受订阅额度影响,但会有 API 自己的速率限制和支出上限。是否划算,取决于你的用量。
为什么只是偶尔用一下也会 429?
如果你用的是 API Key,可能是余额或项目支出上限的问题,而不是用得太频繁。看 error.code 就能分清。
第三方服务的 429 怎么判断?
以服务商的文档和后台状态为准。先看账户余额和渠道状态,再确认是不是只有某个模型受限。
AICodeWith 返回 gateway_queue_full 是什么意思?
表示上游排队已满,属于临时拥堵。等几秒到几十秒后重试,并降低并发即可。
相关阅读
- 《Codex 401 Unauthorized 怎么解决》
- 《Codex 怎么收费:ChatGPT、Credits 与 API 三条计费路线》
- 《Codex API Key 怎么配置》
- 《Codex timeout 怎么排查》



