orientxorientx

速率限制与错误

速率限制响应头、429 退避重试和错误码列表

限制按密钥生效,同时约束请求数量和 token 吞吐量。 每个响应都携带当前状态:

响应头含义
x-ratelimit-limit-requests当前窗口允许的请求数量。
x-ratelimit-remaining-requests当前窗口剩余的请求数量。
x-ratelimit-reset-requests请求计数器重置前的剩余秒数。
x-ratelimit-limit-tokens当前窗口允许的 token 数量。
x-ratelimit-remaining-tokens当前窗口剩余的 token 数量。
x-ratelimit-reset-tokenstoken 计数器重置前的剩余秒数。

超过限制时返回 429。请等待 Retry-After 响应头指定的时间后重试, 并使用带随机抖动的指数退避,避免并发任务在同一时刻再次发送请求:

import random
import time

import openai

def with_retries(fn, attempts=5):
    for attempt in range(attempts):
        try:
            return fn()
        except openai.RateLimitError as err:
            if attempt == attempts - 1:
                raise
            retry_after = getattr(err, "response", None)
            delay = float(retry_after.headers.get("Retry-After", 0)) if retry_after else 0
            time.sleep(max(delay, 2**attempt) + random.random())

OpenAI 官方 SDK 已会对 429 和 5xx 自动重试几次。如需调整行为, 可在创建客户端时设置 max_retries;仅在 SDK 未覆盖的场景中使用自定义重试逻辑。

错误

失败响应使用常规 HTTP 状态码,并采用统一的响应体:

{
  "error": {
    "message": "Human-readable description of what went wrong.",
    "type": "invalid_request_error",
    "code": "context_length_exceeded"
  }
}
状态码含义处理方式
400请求格式错误或参数不受支持修正请求,重试无效。参见模型与参数。
401密钥缺失或无效检查 Authorization 请求头。参见密钥与身份验证。
403密钥无权访问此模型申请权限或选择其他模型。
404接口不存在或模型已下线重新检查路径和 GET /v1/models。
429触发速率限制或额度耗尽退避重试,或提高限额。额度信息参见用量与计费。
5xx上游或网关故障退避后重试。

请记录 error.code,而不是匹配 error.message 的文本;错误码稳定,错误消息则可能变化。

本页目录