【Bug已解决】codex: 速率限制 429 — CodeX CLI 请求过于频繁解决方案

【Bug已解决】codex: 速率限制 429 — CodeX CLI 请求过于频繁解决方案

【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 1

4. 各方案对比总结

方案适用场景推荐指数难度
方案一:等待重试即时⭐⭐⭐⭐⭐
方案二:控制频率预防⭐⭐⭐⭐⭐
方案三:减少 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. 总结

  1. 根本原因:速率限制最常见原因是 RPM 超限(35%)和 TPM 超限(30%)
  2. 最佳实践sleep 60等待重置,使用重试脚本自动处理 429
  3. 控制频率:使用sleep 10间隔,串行运行,不并发
  4. 减少消耗:使用 gpt-4o-mini 模型,减少--max-turns,精简提示
  5. 最佳实践建议: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[✅ 长期方案]