错误排查
401、额度不足、无可用渠道、参数错误、429、超时,线上真实返回的错误体和处理办法。
先看 HTTP 状态码和返回体里的 error.code / error.message。所有错误体的结构一致:
{
"error": {
"code": "...",
"message": "...(request id: 2026...)"
}
}示例中省略了 type(错误类型标识)字段,判断问题请以 error.code 和 error.message 为准。
message 末尾的 request id 请保留,向管理员反馈问题时附上它,也可以在 使用日志 的「请求 ID」筛选框里直接定位那一次请求。
下表中的错误体均为线上实测返回(request id 已省略)。
| 状态码 | 常见原因 | 跳转 |
|---|---|---|
| 401 | Key 无效、缺失、被删除 | 401 |
| 403 | 额度不足,或令牌无权访问该模型 | 额度不足、模型被限制 |
503 model_not_found | 当前分组没有该模型的可用渠道 | 模型不存在 |
4xx/5xx invalid_request | 请求体缺字段、参数错误 | 请求参数错误 |
| 401 / 5xx(上游) | 上游模型服务拒绝或出错 | 上游错误 |
| 429 | 请求太频繁 | 429 |
| 超时 / 524 | 响应太慢 | 超时 |
401 Invalid token
{
"error": {
"code": "",
"message": "Invalid token"
}
}检查清单:
- Key 是否完整,以
sk-开头。 - 请求头是否是
Authorization: Bearer sk-...(Anthropic 格式用x-api-key)。 - 环境变量是否真的生效:
echo ${#ATHANDRA_API_KEY}看长度是否不为 0。 - 令牌是否在控制台被删除、禁用或已过期。
- Key 中是否混入了换行、空格等不可见字符;这种情况有时连 JSON 错误体都没有,直接返回一个空 body 的 400,重新复制 Key 即可。
额度不足
HTTP 403:
{
"error": {
"message": "token quota is not enough, token remain quota: $0.000002, need quota: $0.000146",
"param": "",
"code": "pre_consume_token_quota_failed"
}
}含义:令牌剩余额度(remain quota)小于本次预估需要的额度(need quota)。处理:
- 在「API 密钥」页给该令牌调高额度,或改为无限额度。
- 若令牌本身没问题,检查账户余额是否也用完,用兑换码充值或联系管理员(见 钱包与额度)。
- 预估额度和
max_tokens、输入长度有关,把max_tokens调小可以降低预估值。
模型被令牌限制
HTTP 403:
{
"error": {
"code": "",
"message": "该令牌无权访问模型 deepseek-v4-flash"
}
}这个令牌开启了「模型限制」,且没有包含你请求的模型。编辑令牌,把该模型加入允许列表或关闭模型限制。
模型不存在 / 无可用渠道
HTTP 503:
{
"error": {
"code": "model_not_found",
"message": "分组 default 下模型 claude-sonnet-4-5 无可用渠道(distributor)"
}
}注意这里不是 404。原因有两种,看 message 里的“分组”:
- 模型名拼错(大小写敏感,例如
MiniMax-M3),或根本没有这个模型。 - 模型存在,但令牌所在的分组不提供它。例如
default分组调用原生 Claude 就会这样。
处理:先 GET /v1/models 看当前令牌能用的模型;需要别的模型就用对应分组创建新令牌,见 令牌管理。
请求参数错误
缺少必填字段时的实测返回:
{
"error": {
"message": "field messages is required",
"param": "",
"code": "invalid_request"
}
}这类错误的 HTTP 状态码可能是 4xx 也可能是 5xx,以 error.code 和 message 为准,不要只看状态码。对照对应接口的必填字段检查:OpenAI 格式要 model 和 messages,Anthropic 格式还要 max_tokens。
上游错误
请求已经通过平台的鉴权,但上游模型服务返回了错误。这类错误和你的 Key、额度无关,换一个模型通常就能绕过。线上实测遇到过:
上游拒绝访问,HTTP 401(注意这和上面「Invalid token」不同,code 是 "401",message 来自上游):
{
"error": {
"message": "Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource.",
"code": "401"
}
}上游内部错误,HTTP 500:
{
"error": {
"message": "System error, please retry later.",
"code": "bad_response_status_code"
}
}模型不支持该接口,例如对 deepseek-v3.2 调用 Responses 接口,HTTP 400:
{
"error": {
"message": "<400> ***.***.InvalidParameter: Agent capabilities are not enabled for the current model.",
"code": "InvalidParameter"
}
}处理办法:先确认该模型支持你调用的接口(见 Responses 接口 的实测结论);5xx 可以稍后重试,持续出现就换模型,并向平台管理员反馈,附上 request id。
429 限流
429 表示请求频率超过限制,可能来自平台,也可能来自上游模型厂商。目前没有稳定复现手段,所以本文不列出线上实测的错误体,处理办法是通用的:
- 读取响应头里的
Retry-After(如果有),按它等待。 - 使用指数退避重试:等 1 秒、2 秒、4 秒……并加随机抖动,最多重试 3 到 5 次。
- 降低并发,不要一次性发起大量请求。
- OpenAI / Anthropic 官方 SDK 已内置重试,可用
max_retries调整。
长期稳定被限流,请联系平台管理员调整。
超时
大模型生成长文本可能需要几十秒甚至更久。非流式请求如果超过中间网络层(CDN、反向代理)的时间上限,会被断开,常见表现是 504 / 524 或客户端读超时。
处理:
- 优先改用 流式输出:数据持续返回,连接不会因空闲被断开。
- 调大客户端超时。Python:
OpenAI(timeout=120);Node:new OpenAI({ timeout: 120_000 })。 - 减少输出长度(调小
max_tokens),或换更快的模型。 - 推理类模型思考时间长,更适合用流式。
还没解决?
联系平台管理员时,请提供:时间、请求的模型名、令牌名称(不要发送 Key)、完整错误体里的 request id。