docai.cc

429 Too Many Requests:请求太频繁怎么解决

429高频限速rate-limit重试

30 秒结论

429 是限速,不是你的 Key 有问题。 直连官方时它代表“你请求太快”;走中转站时,多数情况是中转站那个分组的并发上限到了,跟你无关。

判断方法:等 60 秒再发一次同样的请求。好了就是限速,没好才需要往下查。

报错原文对照

不同厂商的 429 长得不一样,但都是同一件事:

// OpenAI
Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-4o in organization org-xxx on requests per min (RPM): Limit 500, Used 500.', 'type': 'requests', 'code': 'rate_limit_exceeded'}}

// Anthropic
{"type":"error","error":{"type":"rate_limit_error","message":"Number of request tokens has exceeded your per-minute rate limit"}}

// 中转站常见(new-api / one-api 系)
当前分组上游负载已饱和,请稍后再试

原因排序(按发生概率)

概率 原因 怎么确认
62% 客户端并发太高 / 没有退避重试 看代码里是不是 for 循环直接打
28% 中转站分组并发上限到了 换一个分组或渠道,能好就是它
10% 上游模型商整体过载 换不同厂商的模型也不行 → 上游

修法

场景 A:你在直连官方

  1. 加指数退避重试。不要立刻重试,第一次等 1 秒,之后 2、4、8 秒。
  2. 把并发降到 1-3,逐步加。
  3. 查一下你的 RPM / TPM 配额,是不是真的打满了。
import time, random

def with_retry(fn, max_attempts=5):
    for i in range(max_attempts):
        try:
            return fn()
        except Exception as e:
            if "429" not in str(e) or i == max_attempts - 1:
                raise
            wait = min(2 ** i, 30) + random.random()
            time.sleep(wait)

场景 B:你用中转站

  1. 换分组:很多中转站同一个模型有多个分组,价格不同、限流也不同。
  2. 换站点:我们的中转站实测里有各家 429 的实际发生率。
  3. 如果只有某个模型 429,说明是这个模型的渠道限流,不是你的问题。

责任判定表

现象 责任方
换任意站点、任意模型都 429 你的客户端(并发/无退避)
只有某一家站 429 那家站的限流
只有某个模型 429,换模型就好 该模型的渠道容量
全网都在 429(同一时段) 上游模型商

什么时候该换

连续三天、每天多次 429,而且换分组也没用 → 这家站的容量就是不够,换。


本文的判定规则已内置到报错诊断器,可以直接贴报错原文测。

还是没解决?把报错贴进来

纯本地判断,不上传你的报错内容。支持 400 / 401 / 403 / 404 / 413 / 429 / 500 / 502 / 503 / 504 / 529 及常见错误码文字。

新用户福利:先免费试,再决定充值

注册就送积分,可兑换 API 额度。拿真实请求验证本页结论,比看十篇教程都有用。

领免费额度