错误码与重试¶
六哥原样转发官方响应,因此错误结构与直连官方一致:HTTP 状态码 + JSON 错误体。
HTTP 状态码速查¶
| HTTP | 含义 | 处理 |
|---|---|---|
400 |
请求 / 参数错误 | 检查请求体、模型名、必填字段 |
401 |
Key 无效或缺失 | 核对 Authorization: Bearer 头与 Key |
402 / 403 |
余额不足 / 无权限 | 充值或核对模型开通权限 |
404 |
模型名或端点不存在 | 核对模型 ID(以控制台为准)与端点路径 |
413 |
请求体过大 | 裁剪输入 / 拆分 |
429 |
触发限流(RPM/TPM) | 按 retry-after 退避重试 |
5xx |
上游 / 中转服务异常 | 指数退避重试 |
错误体结构¶
重试原则¶
- 只重试
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:多为上游波动,退避重试即可;持续失败再到控制台 / 群里确认状态。