错误处理
InfinityBlue API 的所有错误响应都遵循统一、与 OpenAI 兼容的结构。掌握这个结构与最常见的 HTTP 状态码,可以把”请求失败”变成 5 分钟内能解决的小问题。错误响应格式
message
人类可读的错误描述。可以安全地写入日志,大多数情况下也可以直接展示给用户。
type
粗粒度分类,例如
invalid_request_error、authentication_error、rate_limit_error、server_error。可用于驱动重试逻辑。code
稳定的机器可读标识符。code 一旦发布就不会变更,可以在代码里放心地 switch。
param
当错误与特定字段相关时,这里返回该字段的 JSON 路径。
null 表示错误与具体字段无关。常见状态码
| 状态码 | type | 含义 | 推荐处理 |
|---|---|---|---|
| 400 | invalid_request_error | 请求体格式错误、缺少字段或值超出范围。 | 修正请求后重试,不要盲目重试。 |
| 401 | authentication_error | API Key 缺失、格式错误或被撤销。 | 重新检查 Key,参考 鉴权。 |
| 403 | permission_error | 当前 Key 没有访问该模型或功能的权限。 | 升级套餐或改用其他模型。 |
| 404 | not_found_error | 端点或模型不存在。 | 检查路径和 model 参数。 |
| 413 | invalid_request_error | 请求体超过模型上限。 | 减小输入或对内容分片。 |
| 429 | rate_limit_error | 超过每分钟请求数或 token 数预算。 | 退避后重试,遵循 Retry-After 头。 |
| 500 | server_error | 上游服务商失败。 | 指数退避后重试。 |
| 502 / 503 | server_error | 网关或上游暂时不可用。 | 退避后重试,这是我们这边的问题。 |
| 504 | server_error | 上游响应超时。 | 退避重试一两次后向用户提示。 |
排查清单
写一个健壮的客户端
生产级客户端应当做到:- 把
2xx视为成功。 - 对
429和5xx使用指数退避 + 完全抖动重试,限制最大尝试次数。 - 不要重试
400、401、403、404——这些失败不会自己恢复。 - 重试耗尽后向用户展示清晰的错误信息,优先使用网关返回的
message。 - 通过成功响应的
usage字段维护自己的成本统计。
上面这张表是快速排查的速查表。遇到表中未覆盖的错误,请附带 request ID 和时间戳联系 支持。