Guides

错误处理

常见 HTTP 状态码、错误类型、余额和限流问题的处理建议。

概述

UOUODUO Gateway 的错误响应尽量保持 OpenAI 兼容。

客户端应同时检查 HTTP 状态码和响应体里的错误对象。

生产环境建议记录 request ID、模型、状态码和错误类型,方便后续排查。

响应结构

典型错误响应如下:

{
  "error": {
    "message": "The API key is invalid.",
    "type": "invalid_request_error",
    "param": null,
    "code": "invalid_api_key"
  }
}

不同上游可能返回额外字段。

如果字段不完全一致,优先按 HTTP 状态码和 `message` 做用户提示。

错误码总览

HTTP status常见 code含义处理建议
400invalid_request_error请求体格式错误或参数不支持检查 JSON、模型参数和 endpoint
401invalid_api_keyAPI key 缺失、错误或已撤销重新创建 key,确认 Authorization header
403forbidden当前账户或密钥无权限检查项目、分组、模型权限
404model_not_found模型不存在或不可见到 `/models` 或 `/v1/models` 确认模型 ID
408timeout请求超时缩短输入、降低 max_tokens,或重试
409conflict请求状态冲突避免重复提交同一任务
422validation_error字段类型合法但语义不合法检查参数范围和多模态格式
429rate_limit_exceeded触发限流使用退避重试,读取 Retry-After
500server_error网关或上游内部错误带 request ID 重试或联系支持
502upstream_error上游返回异常换模型或稍后重试
503service_unavailable上游暂不可用稍后重试,查看状态页
504gateway_timeout上游响应超时降低输出长度或切换模型

认证错误

401 通常来自密钥问题。

请确认请求里包含:

Authorization: Bearer $UOUODUO_API_KEY

不要把 `sk-xxx...` 直接放进 URL query。

如果密钥是项目密钥,请确认项目没有被归档,密钥没有被撤销。

余额不足

余额不足通常表现为 402、403 或带有 quota 相关 message 的错误。

处理步骤:

  1. 打开 `/app/usage` 确认最近消耗。
  2. 打开 `/app/credits` 或账单页确认余额。
  3. 如果使用项目预算,进入项目页确认预算是否已触顶。
  4. 临时降低模型规格或输出长度。

生产服务建议在调用失败时把余额不足错误单独分类,避免误判成系统故障。

限流错误

429 表示当前账户、项目、密钥或上游模型触发限流。

常见维度包括请求数、输入 token、输出 token 和并发任务数。

客户端应使用指数退避:

const delay = Math.min(30_000, 500 * 2 ** attempt);
await new Promise((resolve) => setTimeout(resolve, delay));

如果响应里包含 `Retry-After`,优先使用该值。

参数错误

400 和 422 最常见于以下情况:

  • `messages` 为空
  • `model` 拼写错误
  • `temperature` 超出模型允许范围
  • 图片、音频或文件字段格式不符合 endpoint 要求
  • tools/function calling 字段混用了不同 SDK 的格式

排查时建议先用最小请求体复现,再逐步加回参数。

上游错误

502、503 和 504 往往来自上游模型服务。

如果日志显示某个供应商连续失败,可以先切换到同能力模型。

如果业务必须使用固定模型,请在应用层设置短时间重试和降级文案。

流式错误

流式请求可能在连接建立后中断。

客户端需要处理三类状态:

  • HTTP 阶段直接返回错误
  • SSE 中途断开且没有 `[DONE]`
  • SSE chunk 中包含错误事件或错误 JSON

详见 `/docs/guides/streaming`。

记录字段

建议至少记录以下字段:

  • request ID
  • endpoint
  • model
  • HTTP status
  • error code
  • error message
  • latency
  • input token 和 output token

日志不要记录完整 prompt,除非用户明确允许。

排障顺序

  1. 复制同一请求到 cURL 中复现。
  2. 检查 `/app/logs` 的状态和错误摘要。
  3. 检查 `/app/usage` 是否有异常消耗或限流迹象。
  4. 检查 `/status` 是否有近期事件。
  5. 换一个同类模型验证是否为单一上游问题。

如果仍无法定位,把 request ID、时间、模型和错误响应提交给支持团队。