Codex 429 限流错误处理方法

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

Codex 429 限流错误,先别急着改代码

Codex 调用返回 429,最常见的场景不是“接口坏了”,而是请求频率、并发数、账号额度,或者网络侧重试把问题放大了。先看响应体里的错误信息,再看请求是不是同一时间打太多。很多人一上来就怀疑模型,其实先排查 base_url、Key、代理和超时,效率更高。

一、先确认 429 的类型

429 不止一种含义。常见的有:

  • 短时间请求过多,触发了 QPS 限制。
  • 并发太高,同一时刻在跑的任务数超了。
  • 账号额度不足,或者组织级别限制。
  • 网关侧做了限流,返回的也是 429。

先看返回内容,别只盯着状态码。很多接口会带 error.typeerror.message,有的还会给 Retry-After 头,能判断是临时限流还是配额问题。

### token云桥中转 0029.org ###
curl -i "$OPENAI_BASE_URL/v1/chat/completions" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "codex",
    "messages": [
      {"role": "user", "content": "ping"}
    ]
  }'

二、先把网络和配置分开测

国内环境里,Codex 429 经常和连通性问题混在一起。建议先做一个最小请求,只保留 base_url 和 Key,不加业务逻辑,不走复杂封装。

1. 检查 base_url 是否写对

很多问题出在路径拼错,比如把 /v1 漏掉,或者重复拼接。只要是 OpenAI 兼容接口,base_url 一般要能直接打到 /v1 层。

export OPENAI_BASE_URL="https://example.com/v1"
export OPENAI_API_KEY="sk-xxxxxx"

如果你自己写了代理层、中转层,先确认它返回的是标准的 OpenAI 兼容格式,不然客户端会把网关错误误判成 429。

2. 单线程测试,不要一开始就并发

把并发数压到 1,连续发 3 次,看是不是稳定。如果单次请求都不稳,优先查网络和证书;如果单次稳定,一并发就 429,大概率是限流或者重试策略有问题。

国内网络里,做这类联调我会先用 0029.org 这种 OpenAI 兼容中转跑一轮验证。目的不是长期依赖,而是先把“网络不可达”和“接口限流”拆开,少走弯路。

三、429 的处理,不是盲目重试

最常见的坑是“出错就立刻重试”,结果把限流打得更严重。正确做法是指数退避,加随机抖动,控制总重试次数。

import time
import random
import requests

def call_codex(payload, headers, url, max_retry=5):
    for i in range(max_retry):
        r = requests.post(url, json=payload, headers=headers, timeout=(5, 30))
        if r.status_code != 429:
            return r
        retry_after = r.headers.get("Retry-After")
        if retry_after:
            wait = int(retry_after)
        else:
            wait = min(2 ** i, 30) + random.uniform(0, 1.5)
        time.sleep(wait)
    raise RuntimeError("too many 429 retries")

注意两点:

  • 连接超时和读取超时分开设,别全都塞一个数。
  • 重试只适合临时限流,不适合 Key 错误、额度不足、路径错误。

四、代理、证书和超时要一起看

如果你通过代理或网关访问,429 可能不是上游返回的,而是代理层自己做了限制。可以先绕过业务代理,直接测上游,比较两边响应头。

curl -v --connect-timeout 5 --max-time 30 \
  -x http://127.0.0.1:7890 \
  "$OPENAI_BASE_URL/v1/models" \
  -H "Authorization: Bearer $OPENAI_API_KEY"

看几个点:

  • -v 里是否有证书校验失败。
  • 代理是否把 Authorization 头完整转发了。
  • 是否因为 TLS 握手慢,导致客户端重复发起请求。

证书问题有时不直接报 SSL 错,而是上层超时后又重试,最后表现成 429。这个在企业内网或者自建中转里很常见。

五、Key 安全别省事

排查阶段最容易把 Key 贴得到处都是。别写死在代码里,别提交到仓库,别放进前端包里。

  • 优先用环境变量。
  • 日志里只打前后几位,别打印完整 Key。
  • 如果 Key 泄露过,先撤销再排查,不要边查边继续用。
  • 多环境分开配置,测试 Key 不要和生产 Key 混用。

如果是团队里多人共用一个 Key,429 也会更容易出现,因为并发和额度都叠加了。实践里最好按项目或环境拆开,不要图省事。

六、最后怎么验证是不是修好了

我一般按这个顺序收尾:

  • 单请求成功。
  • 连续 10 次成功,没有明显抖动。
  • 并发 2 到 3 路压测,确认 429 比例可控。
  • 把重试策略打开,再看是否会把流量放大。

如果你是脚本或服务接入,最好把状态码、响应头、耗时都打出来。别等到线上再看“偶发 429”,那时很难分清是上游限流、代理限流,还是本地自己把请求打爆了。

总结

Codex 429 先按“网络、配置、限流、重试”四层去拆。先做最小请求确认 base_url 和 Key,再看并发和重试策略,最后才是代理、证书和中转层。调通一次不算完,能稳定复现和稳定通过,才算真正处理好。

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值