集成/错误处理与重试

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

错误处理与重试

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

前置条件

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

失败处理原则

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

HTTP 状态码处理

状态码含义处理方式
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
  • 最终用户可见结果

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