错误码与重试
按 HTTP 状态码判断错误原因、是否重试和需要保留的信息。
本页目录
HTTP 状态码先告诉你错误属于请求、鉴权、权限、限流还是服务端。处理时先保存请求标识和最小错误信息,再决定修改配置、降低流量或有限重试。
先保留诊断信息
每次失败至少记录下面字段,但不要记录完整 API Key、Cookie、Authorization Header 或敏感提示词:
- 请求发生的日期、时间和时区。
- 客户端名称与版本。
- 请求方法、脱敏后的 Base URL 和接口路径。
- 完整模型名。
- HTTP 状态码和错误类型。
- 响应中的 request ID,或使用日志中的请求标识。
- 当前 API Key 的分组,以及日志中的实际命中 group。
- 是否流式、超时设置和本次重试次数。
请求标识可能出现在响应 Header、错误 JSON 或控制台使用日志中。它用于关联网关日志和上游调用,比单独提供错误截图更有效。
状态码总表
| 状态码 | 常见含义 | 默认是否重试 | 第一处理动作 |
|---|---|---|---|
400 |
请求体、参数、协议或模型能力不匹配 | 否 | 退回最小请求并检查字段 |
401 |
API Key 无效、过期、停用或认证格式错误 | 否 | 重新复制 Key 并检查 Header |
403 |
用户分组、Key 或模型权限不足 | 否 | 查询 /v1/models 和 Key 限制 |
404 |
URL、/v1、接口或模型路由错误 |
否 | 核对实际完整 URL 和协议 |
408 |
客户端、网关或上游请求超时 | 有条件 | 缩小请求并有限重试 |
409 |
请求状态冲突或资源状态不允许 | 有条件 | 读取错误正文,确认是否可重复提交 |
413 |
请求体或上传内容过大 | 否 | 缩短上下文、压缩或拆分文件 |
422 |
请求结构可解析但语义无效 | 否 | 按错误字段修改请求 |
429 |
频率、并发、额度或上游限流 | 是 | 降低并发,遵守 Retry-After |
500 |
网关或上游内部错误 | 是 | 保存 request ID,有限退避 |
502 |
上游响应无效或网关连接失败 | 是 | 有限退避,持续失败时换模型或联系支持 |
503 |
暂时无可用渠道或服务过载 | 是 | 延迟重试并降低并发 |
504 |
网关等待上游超时 | 是 | 增加合理超时、缩小请求、有限重试 |
错误 JSON 中的文字比状态码更具体。同一个 400 可能是 JSON 格式错误、参数不支持、上下文过长或协议错用,必须同时阅读错误正文。
400 Bad Request
常见原因:
- JSON 语法错误或
Content-Type不正确。 - 把 Chat Completions 的
messages发到 Responses API,或把 Responses 的input发到 Messages API。 - 模型不支持工具、图片、音频、某个推理参数或指定响应格式。
max_tokens、max_output_tokens等字段用错协议。- 上下文超过模型限制。
处理顺序:
- 删除工具、多模态、流式和所有非必要参数。
- 只保留模型、一条用户消息和很小的输出上限。
- 按目标协议的教程重新核对字段名。
- 最小请求成功后,每次只加回一个参数。
参数错误不会因为重试自动修复,不要对同一个 400 无限重发。
401 Unauthorized
检查:
- 是否误粘贴了整段连接 JSON,而不是其中的纯 Key。
- Key 前后是否带引号、空格或换行。
- OpenAI 协议是否使用
Authorization: Bearer ...。 - Anthropic 协议是否按客户端要求使用
x-api-key或认证 Token。 - Key 是否已停用、删除、过期或轮换。
- 启动客户端的终端是否真的读到了环境变量。
不要把完整 Key 打印到日志来验证。可以只检查变量是否非空,或只显示首尾各少量字符。
403 Forbidden
鉴权身份通常已经识别,但请求没有相应权限。依次检查:
GET https://api.zcloudapi.com/v1/models是否包含目标模型。- API Key 是否设置了模型白名单。
- Key 分组和用户可用分组是否允许该模型。
- 账户或 Key 是否有其他状态限制。
模型广场有该模型,不等于当前 Key 一定有权限。最终以当前 Key 的 /v1/models 为准。
404 Not Found
先检查实际发送的完整 URL:
正确示例: https://api.zcloudapi.com/v1/chat/completions
重复版本: https://api.zcloudapi.com/v1/v1/chat/completions
遗漏版本: https://api.zcloudapi.com/chat/completions
重复接口: https://api.zcloudapi.com/v1/responses/responses
如果 URL 正确,再确认模型是否使用这个协议。Claude Messages、OpenAI Responses、Chat Completions 和 Gemini native 的路径不能互换。完整地址规则见「接入地址选择」。
408、504 与超时
先区分:
- 连接超时:DNS、网络、代理或防火墙问题。
- 首字节超时:模型排队、推理时间或上游压力。
- 流式中断:代理缓冲、客户端读取或上游连接中断。
- 整体超时:客户端总超时小于模型实际完成时间。
处理方法:
- 用同一模型发送短输入、小输出、非流式请求。
- 确认客户端超时适合模型类型,推理和图片模型通常更慢。
- 检查代理是否支持长连接和 SSE。
- 只对幂等或可接受重复执行的请求有限重试。
- 持续超时时保存 request ID、模型和用时,再联系支持。
429 Too Many Requests
429 可能来自账户、API Key、网关、分组渠道或上游模型。处理时:
- 如果响应有
Retry-After,优先遵守。 - 降低并发和每秒请求数。
- 使用带随机抖动的指数退避。
- 设置最大重试次数和总重试时间。
- 检查余额、Key 额度和使用日志中的具体错误。
立即并发重试会进一步放大限流。生产服务需要排队、背压和失败预算,而不是无限重试。
5xx 服务端与上游错误
单次 500、502、503、504 通常可以有限重试,但要同时满足:
- 请求允许重复执行,或者有业务幂等键。
- 没有超出客户端总超时预算。
- 重试使用退避和随机抖动。
- 每次失败都保留同一业务操作的关联标识。
如果同一模型持续失败,而 /v1/models 和其他模型正常,记录模型、group、request ID、状态码和用时。不要提供完整 Key 或请求 Header。
推荐重试策略
400 / 401 / 403 / 404 / 413 / 422:
不自动重试,先修复请求、地址或权限
408 / 429 / 500 / 502 / 503 / 504:
在请求可重复的前提下重试
第 1 次等待约 1 秒
第 2 次等待约 2 秒
第 3 次等待约 4 秒
每次增加少量随机抖动
同时受最大次数和总耗时限制
模型生成并不天然幂等。超时发生时,上游可能已经完成并产生费用,只是客户端没有收到结果。涉及外部工具、写数据库、发消息或付费动作的 Agent 请求,必须由业务层提供幂等控制。
最小请求排障法
- 不带凭据检查
https://api.zcloudapi.com的 DNS、TLS 和连接。 - 使用目标 Key 请求
https://api.zcloudapi.com/v1/models。 - 从返回列表复制模型名。
- 使用对应协议发送单条文本、小输出、非流式请求。
- 查看 HTTP 状态、完整错误文字和 request ID。
- 到使用日志按时间核对模型、group、channel、用时和错误。
- 最小请求成功后,每次只恢复一个复杂参数。
联系支持时提供
- 请求时间与时区。
- 模型名、协议和脱敏 Base URL。
- HTTP 状态码与完整错误文字。
- request ID 或使用日志标识。
- 日志中的 group、channel_id 或 channel_name。
- 请求耗时、重试次数和客户端版本。
发送到 support@zcloudapi.com。不要发送完整 API Key、密码、Cookie、Authorization Header 或包含敏感业务数据的请求正文。