【Bug已解决】codex: 速率限制 429 — CodeX CLI 请求过于频繁解决方案
📅 2026/7/15 3:21:04
👁️ 阅读次数
📝 编程学习
【Bug已解决】codex: rate limit exceeded / 429 Too Many Requests — CodeX 速率限制解决方案
1. 问题描述
CodeX CLI 遇到速率限制错误,无法继续发送请求:
# 速率限制 $ codex "分析代码" Error: 429 rate_limit_exceeded You've exceeded your rate limit. Please wait. # 或 TPM 限制 $ codex --print "分析大文件" --max-turns 10 Error: 429 Token limit exceeded: 150000 tokens/minute. # 或 RPM 限制 $ for i in $(seq 1 100); do codex --print "task $i"; done Error: 429 Request limit: 60 requests/minute. # 或并发限制 $ codex "task1" & $ codex "task2" & Error: 429 Concurrent request limit exceeded.这个问题在以下场景中特别常见:
- 高频请求(RPM 超限)
- 大量 Token(TPM 超限)
- 并发请求
- 免费层限制低
- CI/CD 批量任务
- 多终端同时使用
2. 原因分析
原因分类表
| 原因分类 | 具体表现 | 占比 |
|---|---|---|
| RPM 超限 | 请求太多 | 约 35% |
| TPM 超限 | Token 太多 | 约 30% |
| 并发限制 | 同时请求 | 约 15% |
| 免费层 | 限制低 | 约 10% |
| CI/CD | 批量 | 约 5% |
| 多终端 | 同时 | 约 5% |
3. 解决方案
方案一:等待重试(最推荐)
# 步骤 1:等待 60 秒 sleep 60 codex "task" # 步骤 2:重试脚本 for i in 1 2 3 4 5; do output=$(codex --print "task" --max-turns 5 2>&1) if echo "$output" | grep -qi "429\|rate_limit"; then echo "Rate limited, retry $i in 60s..." sleep 60 else echo "$output" break fi done # 步骤 3:CI/CD 中 codex --print "task" --max-turns 5 || sleep 60 && codex --print "task" --max-turns 5方案二:控制请求频率
# 步骤 1:添加延迟 codex --print "task1" --max-turns 5 sleep 10 codex --print "task2" --max-turns 5 sleep 10 # 步骤 2:CI/CD 中串行 for task in task1 task2 task3; do codex --print "$task" --max-turns 5 sleep 15 # 15 秒间隔 done # 步骤 3:避免并发 # 不要同时运行多个 codex 实例 # 步骤 4:验证 codex --print "hello" --max-turns 1方案三:减少 Token 消耗
# 步骤 1:使用更便宜的模型 codex --model gpt-4o-mini "task" # 步骤 2:减少 --max-turns codex --print "task" --max-turns 5 # 步骤 3:精简提示 # 错误: codex "分析整个项目所有文件" # 正确: codex "分析 src/index.js" # 步骤 4:分步执行 codex "分析 src/index.js" sleep 10 codex "分析 src/auth.js"方案四:升级计划
# 步骤 1:检查当前计划 # 登录 https://platform.openai.com/ # 查看 Usage & Limits # 步骤 2:升级计划 # Free: 低限制 # Plus/Team: 中等限制 # Enterprise: 高限制 # 步骤 3:使用 API Key export OPENAI_API_KEY=sk-xxxxx codex "task" # 步骤 4:验证限制 codex --print "hello" --max-turns 1方案五:使用多个 API Key
# 步骤 1:创建多个 Key # Key A: sk-KEY_A # Key B: sk-KEY_B # 步骤 2:轮换使用 export OPENAI_API_KEY=sk-KEY_A codex --print "task1" --max-turns 5 export OPENAI_API_KEY=sk-KEY_B codex --print "task2" --max-turns 5 # 步骤 3:自动轮换 KEYS=("sk-KEY_A" "sk-KEY_B" "sk-KEY_C") for i in 0 1 2; do export OPENAI_API_KEY=${KEYS[$((i % 3))]} codex --print "task$i" --max-turns 5 sleep 20 done方案六:使用 --no-stream
# 步骤 1:非流式模式减少请求 codex --no-stream "task" # 步骤 2:或 --print --no-stream codex --print --no-stream "task" --max-turns 5 # 步骤 3:CI/CD 中 codex --print --no-stream --full-auto "task" --max-turns 5 # 步骤 4:验证 codex --print --no-stream "hello" --max-turns 14. 各方案对比总结
| 方案 | 适用场景 | 推荐指数 | 难度 |
|---|---|---|---|
| 方案一:等待重试 | 即时 | ⭐⭐⭐⭐⭐ | 低 |
| 方案二:控制频率 | 预防 | ⭐⭐⭐⭐⭐ | 低 |
| 方案三:减少 Token | 成本 | ⭐⭐⭐⭐⭐ | 低 |
| 方案四:升级 | 长期 | ⭐⭐⭐⭐ | 中 |
| 方案五:多 Key | 高频 | ⭐⭐⭐⭐ | 中 |
| 方案六:--no-stream | 减少 | ⭐⭐⭐⭐ | 低 |
5. 常见问题 FAQ
5.1 429 错误是什么
Too Many Requests。请求频率或 Token 超过限制。
5.2 RPM 和 TPM 是什么
- RPM: Requests Per Minute
- TPM: Tokens Per Minute
5.3 速率限制多久重置
通常 1 分钟。等待 60 秒后重试。
5.4 如何查看限制
登录 https://platform.openai.com/ 查看计划的限制。
5.5 免费层限制多少
通常 RPM: 3-5, TPM: 40000。Plus 更高。
5.6 如何减少 RPM
添加sleep 10间隔,串行运行,不并发。
5.7 如何减少 TPM
使用 gpt-4o-mini 模型,减少--max-turns,精简提示。
5.8 多 API Key 合法吗
合法。可以在 OpenAI 平台创建多个 Key。
5.9 CI/CD 中如何避免 429
使用sleep 15间隔,重试脚本,--no-stream。
5.10 排查清单速查表
□ 1. sleep 60 等待重置 □ 2. 重试脚本: for + sleep + grep 429 □ 3. sleep 10 间隔控制频率 □ 4. 串行运行不并发 □ 5. --model gpt-4o-mini 减少 Token □ 6. --max-turns 5 减少轮次 □ 7. 精简提示 □ 8. 升级 Plus/Team 计划 □ 9. 多 API Key 轮换 □ 10. --no-stream 减少请求6. 总结
- 根本原因:速率限制最常见原因是 RPM 超限(35%)和 TPM 超限(30%)
- 最佳实践:
sleep 60等待重置,使用重试脚本自动处理 429 - 控制频率:使用
sleep 10间隔,串行运行,不并发 - 减少消耗:使用 gpt-4o-mini 模型,减少
--max-turns,精简提示 - 最佳实践建议:CI/CD 中使用
sleep 15间隔 + 重试脚本 +--no-stream,多 API Key 轮换
故障排查流程图
flowchart TD A[速率限制 429] --> B{是 RPM?} B -->|是| C[等待 60 秒] B -->|否, TPM| D[减少 Token] C --> E[sleep 60 + 重试] D --> F[--model gpt-4o-mini] F --> G[--max-turns 5] G --> H[精简提示] H --> I[codex 验证] E --> I I --> j{还 429?} j -->|否| K[✅ 问题解决] j -->|是| L[控制请求频率] L --> M[sleep 10 间隔] M --> N[串行运行] N --> I j -->|是| O[使用多 Key] O --> P[KEY_A → KEY_B 轮换] P --> I j -->|是| Q[使用 --no-stream] Q --> R[codex --no-stream] R --> I j -->|是| S[升级计划] S --> T[Plus/Team/Enterprise] T --> I K --> U[长期: sleep + mini + 多 Key] U --> V[✅ 长期方案]
编程学习
技术分享
实战经验