跳转至

错误码与重试

六哥原样转发官方响应,因此错误结构与直连官方一致:HTTP 状态码 + JSON 错误体。

HTTP 状态码速查

HTTP 含义 处理
400 请求 / 参数错误 检查请求体、模型名、必填字段
401 Key 无效或缺失 核对 Authorization: Bearer 头与 Key
402 / 403 余额不足 / 无权限 充值或核对模型开通权限
404 模型名或端点不存在 核对模型 ID(以控制台为准)与端点路径
413 请求体过大 裁剪输入 / 拆分
429 触发限流(RPM/TPM) retry-after 退避重试
5xx 上游 / 中转服务异常 指数退避重试

错误体结构

{
  "error": {
    "message": "You exceeded your current quota…",
    "type": "rate_limit_exceeded",
    "code": "rate_limit_exceeded"
  }
}
{
  "type": "error",
  "error": { "type": "overloaded_error", "message": "Overloaded" }
}

重试原则

  • 只重试 429 / 5xx / 网络超时;4xx(除 429)直接失败,重试无意义。
  • 指数退避 + 随机抖动等待 = base * 2^n + random,避免雷群效应。
  • 遵守响应头的 retry-after(秒)。
  • 各官方 SDK 默认已内置重试,多数情况无需手写。
一段可用的退避重试(Python)
import time, random
from openai import OpenAI

client = OpenAI(base_url="https://6geapi.com/v1", api_key=KEY)

def call_with_retry(messages, max_tries=5):
    for n in range(max_tries):
        try:
            return client.chat.completions.create(model="gpt-5.6-sol", messages=messages)
        except Exception as e:                      # RateLimitError / APIStatusError 等
            last = e
            wait = min(2 ** n + random.random(), 30) # 指数 + 抖动,封顶 30s
            time.sleep(wait)
    raise last

排查清单

  • 401:Key 复制是否带空格?环境变量是否真的设进了当前 shell?
  • 404 模型:模型名是否拼对、是否在该端点可用?(如 Claude 模型不能在 /v1/chat/completions 用 OpenAI 格式调)
  • 400 temperature:Claude 新模型已移除 temperature/top_p/top_k,传会报 400(见 Claude 参数)。
  • 间歇 5xx:多为上游波动,退避重试即可;持续失败再到控制台 / 群里确认状态。