OpenAI 兼容 API 429 限流排错
429 表示服务器应用了某项限制,但只有错误响应体才能说明是哪一项。先区分请求或 Token 速率、余额与消费上限,再避免重试把流量越放越大。
第一步应该查什么?
调整并发前,先读 JSON 中的错误代码和消息。429 是一类状态,不是单一结论。OpenAI 当前错误指南将请求速率限制、预付额度耗尽和组织消费上限都列为 429。
| 证据 | 说明 | 下一步 |
|---|---|---|
Retry-After | 服务器为本次响应给出了最短等待时间 | 至少等待该时长 |
| 错误代码为 rate limit | 请求或 Token 速率超过限制 | 降低并发或吞吐,使用有上限的退避 |
| 错误代码为 credit exhausted | 重试不能恢复额度 | 检查余额或账单 |
| 错误代码为 spend limit | 账号消费上限阻止了请求 | 检查账号限制 |
| 没有 429,只有 401 | 请求先在认证环节失败 | 先修复 Key,再排查限流 |
保存一份完整且脱敏的失败证据
curl -sS -D /tmp/headers.txt -o /tmp/body.json \
https://monkeytheme.com/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"MODEL_ID_FROM_YOUR_LIST","messages":[{"role":"user","content":"Reply with OK"}],"max_completion_tokens":16}'
sed -n '1,20p' /tmp/headers.txt
python3 -m json.tool /tmp/body.json保留状态码、Retry-After、请求 ID、时间、接口和脱敏后的错误体。工单或截图中不要出现 Bearer Token。
重试时避免形成请求风暴
# Python SDK:排错时明确指定重试次数
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url="https://monkeytheme.com/v1",
max_retries=2,
)
# Node.js SDK
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://monkeytheme.com/v1",
maxRetries: 2,
});OpenAI 官方 Python 和 Node.js SDK 当前默认会对符合条件的 429 重试两次。如果队列、Worker、HTTP 库和 SDK 都在重试,一次用户操作会产生多次上游请求。应指定一个重试责任层,限制次数;有 Retry-After 时按其等待,没有时再使用带随机抖动的指数退避。
按这个顺序排查
- 确认域名和接口。本文使用
https://monkeytheme.com/v1。 - 用同一个 Key 请求
/v1/models,复制准确的 Model ID。 - 保存 429 的响应头和 JSON,注意隐藏 Key。
- 区分请求/Token 速率、余额不足和消费上限。
- 合并计算 SDK、代理、队列和应用层的重试。
- 增加重试次数前,先降低并发。
- 问题持续时,向支持人员提供时间、请求 ID、模型、接口和脱敏错误代码。
本文没有作出的承诺
模型列表成功不代表生成容量一定可用。429 也不能直接证明模型服务商宕机;响应没有 Retry-After 时,立即重试同样不安全。不同网关和上游的限制名称与范围可能不同,应以真实响应体为准。
官方资料与相关教程
- OpenAI API 错误代码:当前 429 分类与重试建议。
- RFC 6585 第 4 节:HTTP 429 与可选的 Retry-After。
- openai-python 重试说明和 openai-node 重试说明。
- API Key 与模型排错
- API 504 超时排错
常见问题
HTTP 429 表示什么?
HTTP 429 表示服务器判定请求方在一段时间内发送了过多请求。响应可以包含 Retry-After,但 RFC 6585 并未要求必须返回该响应头。
遇到 429 是否应该立即重试?
不应该。响应带有 Retry-After 时应按其等待;没有时使用带随机抖动、次数受限的指数退避。达到上限后应返回最终错误。
429 是否也可能表示余额不足?
可能。OpenAI 文档列出了请求速率限制、预付额度耗尽和组织消费上限等 429 情况。调整并发前应先读取响应中的错误代码和消息。
OpenAI 官方 SDK 会自动重试 429 吗?
会。当前 Python 和 Node.js SDK README 说明,符合条件的 429 默认会用短指数退避重试两次。应用层重试可能把请求次数进一步放大。
/v1/models 成功能否排除 429?
不能。模型列表成功后,生成请求仍可能触发请求数、Token、并发、余额或上游限制。
本文是否在 MonkeyAI 上主动触发了认证后的 429?
没有。本轮检查了生产认证路由,但没有使用客户 Key 或故意突发流量。排错步骤来自标准、官方 SDK 行为和脱敏后的生产日志证据。