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 秒,之后 2、4、8 秒。
- 把并发降到 1-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:你用中转站
- 换分组:很多中转站同一个模型有多个分组,价格不同、限流也不同。
- 换站点:我们的中转站实测里有各家 429 的实际发生率。
- 如果只有某个模型 429,说明是这个模型的渠道限流,不是你的问题。
责任判定表
| 现象 | 责任方 |
|---|---|
| 换任意站点、任意模型都 429 | 你的客户端(并发/无退避) |
| 只有某一家站 429 | 那家站的限流 |
| 只有某个模型 429,换模型就好 | 该模型的渠道容量 |
| 全网都在 429(同一时段) | 上游模型商 |
什么时候该换
连续三天、每天多次 429,而且换分组也没用 → 这家站的容量就是不够,换。
本文的判定规则已内置到报错诊断器,可以直接贴报错原文测。
还是没解决?把报错贴进来
新用户福利:先免费试,再决定充值
注册就送积分,可兑换 API 额度。拿真实请求验证本页结论,比看十篇教程都有用。
领免费额度