开发指南/错误处理与重试

生产环境下的重试与幂等实践建议。

错误处理与重试

建立稳定的重试策略,确保 UniGateway 接入在高可用场景下保持正常服务。

前置条件

  • 已完成基础接口联调
  • 已建立请求日志记录机制

失败处理原则

  1. 区分请求校验错误(4xx)和临时性错误(429、5xx)
  2. 仅对临时性错误执行重试
  3. 为每个模型和任务设置封顶重试预算
  4. 记录每次尝试,保证回退行为可审计

HTTP 状态码处理

Example request

Run it in your stack

Pick the SDK style that matches your app and copy the snippet directly into your project.

from openai import OpenAI

client = OpenAI(api_key="<YOUR_UNIGATEWAY_API_KEY>", base_url="https://api.unigateway.ai/v1")
# implement retry with exponential backoff for 429/5xx
状态码含义处理方式
400请求参数错误修正参数,不直接重试
401鉴权无效或缺失检查 API Key 和请求头
402余额不足触发充值或告警流程,暂停重试
403无权限检查账号权限或访问策略
404资源不存在检查路径和模型 ID
429触发限流指数退避 + 抖动重试
5xx服务或上游异常退避重试;超预算后切换回退模型

401、403、402 比例升高时立即升级处理,重试无法修复账号状态。

退避参数

参数
初始延迟300ms
倍率2x
最大延迟8s
单模型最大重试次数3

超过预算后切换到回退链中的下一个模型。

按接口族处理

Chat 与 Responses

  • 4295xx 在同模型内做封顶退避重试
  • 重试预算耗尽后切换回退模型
  • 流式和非流式请求分开统计

流式输出

  • 已有部分 token 被用户消费时,视为已产生用户可见结果
  • 流中途断开时开启新的请求追踪,不伪装为同一次响应
  • 流中断率独立监控

模型发现(GET /v1/models

  • 模型调用返回 404 时不盲重试,先刷新模型列表
  • 模型列表可短缓存,发版或目录变更后立即失效

异步任务

  • 创建任务时保守重试,避免重复创建作业
  • 重新提交同一业务动作前,先查询已有任务 ID
  • 建议调用方保留自己的关联 ID

重试预算

接口族重试预算预算耗尽后的动作
chat.completions / responses每模型最多 3 次切换下一个模型
流式聊天无用户可见 token 时允许 1 次重连开启新的请求追踪
GET /v1/models短时间小爆发重试持续失败时上报降级状态
异步任务创建最多 1-2 次创建新任务前先查询或对账
异步任务轮询可多次轮询,频率降低到达总超时后停止

幂等处理

场景策略
非流式文本生成完整响应前失败可安全重试
流式输出部分结果视为已消费,重试时创建新的请求追踪
状态型或异步接口设计幂等键策略,避免重复副作用

升级规则

出现以下情况时立即升级处理:

  • 401403402 比例升高
  • 一个模型家族异常而其他家族正常,优先怀疑路由或上游局部故障
  • Fallback 使用率异常飙升

可观测性

每次尝试至少记录:

  • 请求时间
  • 模型 ID
  • 接口路径
  • 状态码
  • 重试次数
  • 延迟
  • 上游错误摘要

建议补充:

  • 当前在回退链中的位置
  • 是否为流式请求
  • 任务 ID 或调用方关联 ID
  • 最终用户可见结果