错误码
UniGateway API 所有错误响应的完整参考,包含原因和处理方式。
错误响应格式
所有错误遵循统一的 JSON 结构:
{
"error": {
"code": "429",
"type": "rate_limit",
"message": "Rate limit exceeded"
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
code | string | HTTP 状态码(字符串形式) |
type | string | 错误类别 — 用作程序逻辑判断 |
message | string | 人类可读的描述 — 仅用于展示,内容可能变更 |
错误速查表
| HTTP 状态 | 错误类型 | 说明 |
|---|---|---|
| 400 | invalid_params | 请求参数无效 |
| 401 | auth_invalid | API Key 无效或缺失 |
| 402 | insufficient_credit | 账户欠费 |
| 402 | reject_no_credit | 余额不足以调用该模型 |
| 403 | access_denied | 权限不足 |
| 403 | safety_check_failed | 触发上游安全策略 |
| 404 | model_not_available | 模型不在当前套餐中 |
| 404 | invalid_model | 模型不存在 |
| 404 | model_not_supported | 模型不支持该 API |
| 413 | prompt_too_long | 请求超出模型最大上下文长度 |
| 422 | provider_unprocessable | 上游无法处理请求 |
| 429 | rate_limit | 超过频率限制 |
| 500 | internal_server_error | 平台内部错误 |
| 500 | provider_api_error | 上游 Provider API 错误 |
| 500 | provider_error | 上游 Provider 服务错误 |
| 502 | no_provider_available | 无可用上游 Provider |
| 503 | service_unavailable | 服务暂时不可用 |
| 524 | provider_timeout | 上游 Provider 超时 |
鉴权错误
401 — auth_invalid
原因: API Key 缺失、无效或已过期。
处理方式:
- 确认
Authorization: Bearer <key>请求头格式正确 - 登录控制台确认密钥未被吊销
- 确保密钥值中没有多余空格或换行
- 使用环境变量时确认已正确设置和导出
权限错误
403 — access_denied
原因: API Key 无权访问请求的资源。
处理方式:
- 检查是否用标准密钥访问了管理接口(需管理密钥)
- 确认账户有权访问请求的模型或功能
403 — safety_check_failed
原因: 输入内容被上游安全策略拦截。
处理方式:
- 调整提示词、图片或工具输入内容
- 移除可能触发安全规则的描述
- 切换到安全阈值不同的模型
计费错误
402 — insufficient_credit
原因: 账户余额为负(欠费)。
处理方式: 前往 设置 → 计费 充值
402 — reject_no_credit
原因: 账户余额为零或过低,该模型需要正余额才能调用。
处理方式:
- 充值账户余额
- 切换到允许低余额访问的模型或方案
参数校验错误
400 — invalid_params
请求参数未通过校验时的具体子情况:
| 错误信息 | 原因 | 处理方式 |
|---|---|---|
Parameter model is required | 缺少 model 字段 | 添加有效的 model 值 |
Model {model} is not valid | 模型标识符不存在 | 查询 GET /v1/models 获取有效名称 |
Parameter messages is required | 缺少 messages 字段 | 包含 messages 数组 |
Parameter messages can not be empty | messages 为空数组 | 至少提供一条消息 |
Parameter messages can not contain null elements | messages 包含 null 元素 | 移除 null 条目 |
Parameter messages can not contain elements without content | 消息缺少 content 字段 | 确保每条消息都有 content |
Parameter stream_options is not supported while stream is false | 设置了 stream_options 但 stream 为 false | 设置 stream: true 或移除 stream_options |
Parameter n greater than 1 is not supported | n 值超过 1 | 将 n 设为 1 或省略 |
Parameter temperature is not valid | temperature 为负数 | 使用 >= 0 的值 |
413 — prompt_too_long
原因: 请求体(含所有消息)超过模型最大上下文长度。
处理方式:
- 减少消息数量或长度
- 使用支持更大上下文窗口的模型
- 摘要历史对话而非包含完整内容
422 — provider_unprocessable
原因: 请求通过了平台校验,但上游 Provider 无法处理。通常因为上游对字段结构、工具或多模态输入有更严格的要求。
处理方式:
- 查看响应
message字段中的具体描述 - 确认所有参数与所选模型兼容
- 移除可选/高级参数,用最小请求重试
模型可用性错误
404 — model_not_available
原因: 模型存在但当前账户无法访问。
处理方式:
- 升级套餐以包含目标模型
404 — invalid_model
原因: 指定的模型标识符不匹配任何已知模型。
处理方式:
- 检查模型名称拼写
- 查询
GET /v1/models获取有效标识符
404 — model_not_supported
原因: 模型存在但不支持当前调用的 API 接口。
处理方式:
- 检查模型详情页确认支持的 API
- 切换到支持当前 API 的模型
限流错误
429 — rate_limit
原因: 请求频率超过允许的限制,可能来自平台级或上游 Provider 限流。
处理方式:
- 降低请求频率
- 在请求间添加延迟或使用指数退避
- 更均匀地分散高峰流量
服务端和上游错误
500 — internal_server_error
原因: 平台侧发生意外错误。
处理方式:
- 指数退避重试 — 多数 500 错误为临时性
- 若持续出现,联系客服并提供响应头中的
X-UniGateway-RequestId
500 — provider_error / provider_api_error
原因: 请求到达上游 Provider,问题来自 Provider 侧。
处理方式:
- 指数退避重试
- 若持续出现,联系客服并提供
X-UniGateway-RequestId
502 — no_provider_available
原因: 当前无可用上游 Provider 处理请求。可能原因:
- 指定的 Provider 不存在
- 该模型所有配置的上游 Provider 均故障
- 所有 Provider 重试后均失败
处理方式:
- 放宽或移除 Provider 特定路由规则
- 短暂等待后重试
- 重试请求
503 — service_unavailable
原因: 平台暂时不可用,通常在维护或容量事件期间。
处理方式:
- 短暂延迟后重试
- 查看状态页了解进行中的事件
524 — provider_timeout
原因: 上游 Provider 在超时窗口内未响应。
处理方式:
- 指数退避重试
- 考虑使用更快的模型变体
- 如果模型接近处理上限,减少提示词长度
流式请求的错误处理
使用 stream: true 时,错误的表现形式与非流式请求不同。
流中发生的错误
流式传输开始后发生的错误不会回退为标准 JSON 错误体。流会终止或在流中发出失败事件。客户端应处理:
- 流消费前的 HTTP 状态码评估
- 事件流完整性检查(查找
data: [DONE]) - 流内错误事件解析
- 连接中断处理
SSE Keep-Alive
长时间运行的请求中可能收到 SSE 注释:
: UNIGATEWAY PROCESSING
这不是错误 — 是为防止连接超时定期发送的保活信号。根据 SSE 规范,客户端解析器应忽略以 : 开头的行。
流断开
如果客户端主动断开(如取消请求),服务端会清理进行中的流。客户端主动断开不会产生错误响应。
错误处理最佳实践
-
始终基于
type字段处理错误 — 用type做程序逻辑分支;message仅用于展示,内容可能变更 -
对可重试错误实现重试逻辑:
类别 状态码 可重试 429, 500, 502, 503, 524 不可重试 400, 401, 402, 403, 404, 413, 422 -
保存
X-UniGateway-RequestId— 联系客服时提供此 ID 可加速定位 -
优雅处理流式响应 — 始终处理不完整响应和连接中断
-
使用指数退避重试 — 逐步增加间隔(如 1s → 2s → 4s → 8s),加入随机抖动避免"惊群效应"
示例重试逻辑(Python)
import time
import random
from openai import OpenAI
client = OpenAI(
api_key="<YOUR_UNIGATEWAY_API_KEY>",
base_url="https://api.unigateway.ai/v1",
)
max_retries = 3
for attempt in range(max_retries):
try:
resp = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
break
except Exception as e:
if attempt < max_retries - 1:
delay = min(0.3 * (2 ** attempt), 8) + random.uniform(0, 0.1)
time.sleep(delay)
else:
raise
常见问题
问:同一请求某些模型正常但某些返回 404? 答:不同方案包含不同模型列表。升级套餐可获得完整模型访问。
问:偶尔出现 500 错误,需要担心吗? 答:分布式系统中偶发 500 是正常的。实现指数退避自动重试即可。如果错误率持续偏高,联系客服。
问:流式请求中 UNIGATEWAY PROCESSING 是什么?
答:这是 SSE 保活注释(以 : 开头),表示请求仍在处理中。不是错误,SSE 客户端应按规范忽略注释行。
问:如何知道哪个上游 Provider 处理了我的请求?
答:将响应头中的 X-UniGateway-RequestId 提供给客服团队即可追踪请求路径。