文档目录
本页目录

运行与帮助

错误与重试

先根据状态、错误体和响应阶段判断失败类型,再决定修正请求、等待额度恢复还是进行次数受限的重试。

错误响应结构

网关自身、兼容协议和异步任务可能使用不同 envelope。客户端应同时保留 HTTP 状态、完整错误体和响应头,不要只解析一个固定路径。

来源常见结构读取方式
网关前置校验{"code":"API_KEY_REQUIRED","message":"..."}读取顶层 codemessage
OpenAI 兼容或上游错误{"error":{"type":"...","message":"..."}}读取 error,同时保留未知字段
失败的异步图片任务{"status":"failed","http_status":502,"error":{...}}轮询 HTTP 200 时仍要检查任务 status

状态码与建议动作

结果常见原因默认动作自动重试
400 / 422JSON、字段、协议或模型能力不匹配修正请求
401Key 缺失、格式错误、无效或撤销修正认证
403分组、模型、订阅、账户或来源权限不足修正权限
404路径错误、功能未开放或资源不存在核对 endpoint 和功能状态通常否
413请求体超过当前网关上限缩短历史或减小附件
429速率、并发、Token、余额或额度限制读取错误代码和 Retry-After仅临时限流可重试
5xx 或提供方过载网关、网络或模型服务暂时失败保留请求 ID,有限退避条件允许
2xx 后流中断SSE 已建立后出现上游错误或断线检查最后事件与副作用不能盲目重放

429 不能只按状态码处理:余额和总额度不足不会因为等待几秒恢复,速率或临时过载才适合遵循 Retry-After 或指数退避。

流式错误

开始流式输出后,HTTP 状态通常已经是 200,后续失败只能作为 SSE 事件或连接中断出现。客户端应:

  • 分别处理协议的完成、失败、不完整和 error 事件。
  • 保留已经收到的内容,但不要把断流当作完整成功。
  • 区分客户端取消、读取超时、代理断开和服务端错误。
  • 工具或其他有副作用的操作执行后,先核对结果再决定是否重试。

重试策略

  1. 只重试确认属于临时故障且业务允许重放的请求。
  2. 优先遵循有效的 Retry-After;否则使用带随机抖动的指数退避。
  3. 设置较小的最大尝试次数和总体截止时间,不让 SDK 与业务层同时无限重试。
  4. 每次尝试记录请求时间、模型、协议、HTTP 状态、错误代码和服务端返回的请求 ID。
  5. 对发信、支付、写文件和外部工具调用使用业务幂等键或执行去重。

请求 ID

排错时记录响应头实际返回的 X-Request-IdX-Client-Request-Id(如果存在)。当前不承诺服务会原样保留客户端主动发送的 X-Client-Request-ID,因此不要把自定义值作为唯一关联键。

请求 ID 不应包含 Key、Prompt、完整响应或个人信息。SDK 不暴露 headers 时,保留控制台对应记录标识。

需要支持时提供的信息

  • UTC 时间和本地时区,精确到分钟。
  • 最终请求 URL、协议、模型 ID、Key 所属分组和 SDK/客户端版本。
  • HTTP 状态、错误代码、经过脱敏的完整错误体和响应请求 ID。
  • 流式请求最后收到的事件类型,以及是否已有文本或工具执行。

不要提供完整 API Key、未脱敏 Prompt、完整私有文件或账户密码。