【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[✅ 长期方案]

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐