OpenAI 兼容 API · 429 排错

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。

本轮没有使用客户 Key,也没有故意制造突发流量。未认证请求会到达 MonkeyAI 认证层并返回 401,而不是人为构造的 429。请用自己的真实失败响应判断限制发生在哪一层。

重试时避免形成请求风暴

# 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 时按其等待,没有时再使用带随机抖动的指数退避。

按这个顺序排查

  1. 确认域名和接口。本文使用 https://monkeytheme.com/v1。
  2. 用同一个 Key 请求 /v1/models,复制准确的 Model ID。
  3. 保存 429 的响应头和 JSON,注意隐藏 Key。
  4. 区分请求/Token 速率、余额不足和消费上限。
  5. 合并计算 SDK、代理、队列和应用层的重试。
  6. 增加重试次数前,先降低并发。
  7. 问题持续时,向支持人员提供时间、请求 ID、模型、接口和脱敏错误代码。

本文没有作出的承诺

模型列表成功不代表生成容量一定可用。429 也不能直接证明模型服务商宕机;响应没有 Retry-After 时,立即重试同样不安全。不同网关和上游的限制名称与范围可能不同,应以真实响应体为准。

官方资料与相关教程

常见问题

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 行为和脱敏后的生产日志证据。