use-case
AI API 通用错误码与排障指南
直接答案处理 AI API 错误时应同时解析 HTTP 状态、厂商业务码、错误类型、消息、重试提示和请求 ID;参数、鉴权、余额与硬配额错误先修复根因,只有临时限流、网络错误和确认属于瞬时故障的部分 5xx 才适合有限重试。
更新 · 审核信息
先分开 HTTP 状态与厂商业务码
HTTP 状态只说明失败的大类,不能直接决定根因或重试。一次错误至少要读取:HTTP 状态、厂商 type/code/status、消息、相关参数、重试 Header 和请求 ID。OpenAI 风格错误常见 error.type/code/param/message;Anthropic 使用顶层 request_id 与嵌套 error.type/message;Gemini Interactions 的 error.code 是字符串,而 GenerateContent 使用数字 code、字符串 status 和可选 details。腾讯云原生 API 3.0 业务失败时还可能保持 HTTP 200,必须检查 Response.Error.Code。
建议把不同厂商响应归一化到日志字段,不要伪造一套“所有厂商都支持”的上游 JSON:
http_status=429
provider_error_type=rate_limit_error
provider_error_code=rate_limit_exceeded
gateway_request_id=...
provider_request_id=...
retry_after=2s
attempt=1
通用错误码速查
400Bad Request:JSON、必填字段、参数范围、上下文、模型能力或内容安全校验失败。先按消息修请求,不原样重试。401Unauthorized:密钥缺失、无效、过期、撤销或签名失败。修复认证后再发。402Payment Required:Anthropic、DeepSeek 等用于账单或余额问题。充值或修复付款信息前重试无效。403Forbidden:凭证可能有效,但缺少模型、区域、资源或账户权限,也可能未接受模型协议。先授权或换正确资源。404Not Found:域名、路径、API 版本、部署名、模型或任务不存在。注意展示名、原生模型 ID、云部署名和本站别名并不等价。405Method Not Allowed 与415Unsupported Media Type:先核对 HTTP 方法、端点和Content-Type;部分平台也会把不支持的 SDK 或模型能力映射到 405,所以仍要读业务码。408Request Timeout:请求或模型处理超时;499Client Closed Request 表示客户端取消或断开。执行结果可能未知,先查任务状态再决定是否重试。409Conflict:资源并发更新、重复创建或状态冲突。刷新状态、解决冲突后再试。413Payload Too Large:HTTP 请求体字节数超限,常见于 Base64 媒体;压缩、缩放、分片或改用目标端点明确支持的文件引用。422Unprocessable Entity:请求可解析但参数语义无效,DeepSeek、Mistral 等会使用;修改字段组合后再发。424Failed Dependency:上游模型或依赖失败,Amazon Bedrock 的ModelErrorException是代表性用法;先看原始状态和资源名,不应把所有 424 一律重试。429Too Many Requests:可能是 RPM、TPM、并发、突发流量、余额、套餐、日配额、免费额度或平台容量;必须继续按业务码分类。500Internal Server Error:厂商内部错误,也可能掩盖输入边界问题;保留原始错误,只对确认的瞬时故障有限重试。502Bad Gateway、503Service Unavailable、504Gateway Timeout:网关、区域容量、上游不可用或处理超时。持续失败时应降速、熔断、切换已验证的区域/模型或检查状态页。529Overloaded:Anthropic 明确用于临时全局过载;流式场景可能在已返回 200 后以overloaded_error事件出现。
429 必须按业务码再分类
临时速率限制可遵循 Retry-After;Azure 还可能返回毫秒级 retry-after-ms。Header 缺失时,可使用带随机抖动的指数退避并限制最大次数与总时长。失败请求也可能计入限额,热循环只会让恢复更慢。
余额不足、套餐过期、消费上限、日配额或免费额度耗尽需要充值、续订、提额或等待重置,不能靠快速重试恢复。代表性差异包括:DeepSeek 用 402 表示余额不足;Kimi 把过载、余额和 RPM/TPM 都放在 429 下;智谱在 429 下用不同业务码区分欠费、账户限流、模型拥挤和套餐上限;Cloudflare 的 3036 是免费 Neurons 用尽,3040 是无可用数据中心。生产逻辑必须匹配稳定业务码,不能匹配可能改写或本地化的 message。
厂商协议差异
- OpenAI:保留
error.type与error.code;429要区分临时限流和余额/组织或项目消费上限。官方 SDK 默认会重试连接错误、408、409、429与 5xx,应用层不要无意叠加。 - Anthropic:除常见码外还定义
402、409与529;每个响应有request-id,错误体也有request_id。错误类型和流事件可能扩展,解析器应容忍未知值。 - Gemini:Interactions 与 GenerateContent 是两套错误模型,不能混用字段。Interactions 把
rate_limit_exceeded与quota_exceeded分开;GenerateContent 的安全拦截、停止原因或无候选结果可能不是 HTTP 错误。 - 百炼、Kimi、智谱与百度千帆:普遍同时使用 HTTP 状态和更细业务码;同一个
400或429可能分别表示参数、安全、余额、套餐、硬配额或临时拥挤。百炼原生响应常带request_id,但不能据此假设所有兼容端点结构完全相同。 - 腾讯混元原生协议:服务端正常处理后常返回 HTTP 200,业务错误位于
Response.Error.Code;判断必须依赖稳定 Code,不能依赖可能变化的 Message。 - Amazon Bedrock:SDK 暴露
ValidationException、ModelTimeoutException、ModelErrorException、ThrottlingException等异常名;424、429和503的根因不同。 - Azure OpenAI:
429可能是部署 TPM/RPM,也可能是临时容量;优先读取retry-after-ms与x-ratelimit-*。内容策略信号不能当作临时 400 重试。 - Cloudflare Workers AI 与 Mistral:Cloudflare 需要结合内部数字码判断免费额度或容量;Mistral 将
429/500/502/503/504归为可退避的瞬时错误,但请求、认证和权限错误仍须先修复。
HTTP 200 后仍可能失败
SSE 或 NDJSON 一旦开始传输,HTTP 状态通常不能再改变。OpenAI Responses、Anthropic Messages 和 Gemini Interactions 都可能在流中发送错误事件;Gemini GenerateContent 还要检查 promptFeedback、候选项 finishReason 和是否存在候选结果。异步图片、视频与 Batch 的 200/202 只表示受理,最终任务仍可能失败。
客户端必须按协议边界解析完整事件,容忍未知事件类型,并只在收到明确完成事件或终态后标记成功。流中断后不要自动重放已产生副作用或可能计费的创建请求;先用任务 ID、幂等键和日志确认上游状态。
保存请求 ID 与最小证据
本站每次响应使用 X-Oneapi-Request-Id;请同时保存厂商返回的 x-request-id、request-id、apim-request-id、x-amzn-requestid 或响应体 request_id/RequestId(存在时)。不要把异步任务 ID 当成所有同步请求的追踪 ID,也不要假设每家厂商都提供相同 Header。
一次可定位的失败至少包含:UTC 时间、本站请求 ID、厂商请求 ID、路径、模型、HTTP 状态、业务码、是否流式、尝试次数和耗时。密钥只保留少量掩码,正文、文件与个人数据按最小必要原则采集;工单中不要发送完整密钥或敏感输入。
生产重试与降级规则
- 默认不自动重试
400/401/402/403/404/405/413/415/422、内容安全、余额、套餐和硬配额错误;根因修复后再发。 409先刷新状态并解决冲突;408/499先判断是否已执行,只有幂等或可安全去重的操作才重试。- 临时
429、网络错误与确认属于瞬时故障的500/502/503/504/529使用有界指数退避、随机抖动、总截止时间和并发上限。 - 优先遵守有效的
Retry-After,同时检查 SDK 是否已经自动重试;配置熔断、降级模型和告警,避免故障期间形成重试风暴。 - 异步创建使用业务幂等键;超时后先查询,无法确认结果时转人工或补偿流程,不盲目重复计费操作。
最小复现与升级支持
先用 快速入门 的最小 curl 验证同一 Base URL、本站密钥、端点和模型,再逐项加回媒体、工具和可选参数。若 curl 成功而 SDK 失败,记录 SDK 的脱敏有效 URL、版本、代理、超时和重试配置;若最小 curl 也失败,携带请求 ID、时间、路径、模型、状态码和业务错误对象联系支持。
适用场景
- 排查首次调用失败
- 设计生产重试、熔断与降级
- 向平台支持提供可定位证据
API 协议
/v1/chat/completions/v1/responses/v1/messages/v1beta/models/{model}:generateContent/v1beta/models/{model}:streamGenerateContent
FAQ
429 一定是请求太快吗?
不一定。OpenAI、Kimi、智谱、百炼、Azure 和 Cloudflare 等平台还会用 429 表示余额、套餐、日配额、并发或平台容量问题。必须结合业务码、错误类型、消息和重试 Header 判断;只有临时限流或容量错误适合退避重试。
400、413 和 422 有什么区别?
400 通常是格式、字段或模型能力不匹配;413 是整个 HTTP 请求体字节数过大;422 表示请求可解析但参数语义无效。三者都应先修改请求,原样自动重试通常无效。
500、502、503、504 与 529 都能重试吗?
不能一概而论。过载、网关和临时服务故障可有限退避,但部分 500/504 也可能由确定性输入问题触发;529 是 Anthropic 的临时过载。先读厂商业务码与消息,并确保操作幂等或可安全去重。
HTTP 200 但没有文本,算成功吗?
不一定。流式连接可在 200 后发送错误事件,GenerateContent 可能通过安全反馈或 finish reason 表示拦截,腾讯云原生协议还可能在 HTTP 200 的响应体中返回业务错误。只有收到协议定义的完成状态才算成功。
内容安全错误可以自动重试吗?
不应原样重试。先读取 content_filter、safety、ResponsibleAIPolicyViolation 或厂商安全业务码,修改输入、图片或业务流程后再提交;对同一内容做指数退避既无效,也可能放大费用和审核压力。
为什么排障时必须保存 request ID?
它能把客户端错误关联到本站和厂商日志。本站响应头使用 X-Oneapi-Request-Id;厂商可能使用 x-request-id、request-id、apim-request-id、x-amzn-requestid 或响应体 request_id。升级支持时同时提供 UTC 时间、路径、模型与脱敏错误对象。
客户端超时是否代表模型没有执行?
不能这样判断。客户端断开不等于上游取消;图片、视频、Batch 或其他有副作用的提交超时后,应先按任务 ID、请求 ID 或业务幂等键查询,避免重复创建和重复计费。
curl 成功但 SDK 失败,先检查什么?
比较 SDK 实际使用的 Base URL、路径、代理、模型名、API 版本和请求 JSON,再检查 SDK 版本、默认超时、自动重试与环境变量。官方 SDK 可能已经重试,应用层叠加重试会放大流量。
关联指南
官方来源
- OpenAI Error Codes Official
- OpenAI Rate Limits Official
- Claude API Errors Official
- Gemini API Errors Official
- Gemini API Troubleshooting Official
- DeepSeek Error Codes Official
- 阿里云百炼错误码 Official
- Kimi API 错误说明 Official
- 智谱 API 错误码 Official
- 百度千帆错误码 Official
- 腾讯混元错误码 Official
- Amazon Bedrock API 错误排查 Official
- Azure OpenAI 配额与 429 Official
- Cloudflare Workers AI Errors Official
- Mistral Error Glossary Official
兔子API