SuperRoute / Docs
v1.0SuperRoute API 调用出问题了?来这里看常见原因和解决方案
报错与踩坑
调用出问题了?来这里看最常见的报错原因和怎么解决。
常见踩坑速查(按场景)
| 场景 | 看到的现象 | 原因 | 修复 |
|---|---|---|---|
| 协议不匹配 | 404 model_not_found或 401 invalid_api_key | 使用的 API Key 与请求协议或平台分配不匹配 | 查看 [模型列表 → 模型接入要点](/docs/models#模型接入要点速查表),按控制台为该 Key 提供的协议配置 |
| Base URL 写错 | 401 / 404 / Connection error | Base URL 不是 https://api.superoute.uk,或把完整接口路径错误地重复拼接 | SDK、工具配置统一填写 https://api.superoute.uk;直接 HTTP 请求再使用对应完整接口路径 |
| Key 复制错 | 401 invalid_api_key | Key 多空格、少了字符、被禁用 | 在控制台禁用旧 Key,建新 Key |
| Key 协议错 | 401 invalid_api_key | 使用的 API Key 与所调用的协议或平台分配不匹配;不能仅根据 Key 的字符串前缀判断 | 使用 SuperRoute 控制台实际生成的 API Key,并按照平台为该 Key 提供的协议配置 |
| 模型名拼错 | 404 model_not_found | 大小写、空格、错协议 | 复制 [模型列表](/docs/models) 里的完整模型名 |
| 意图跨协议调模型 | 404 model_not_found | 使用某个 API Key 调用了该 Key 不支持的协议或模型 | 按平台为该 Key 提供的协议使用对应模型和接口,不能仅凭 Key 前缀判断 |
| 限速触发 | 429 rate_limit_exceeded | 并发超出档位上限 | 实现指数退避,或升档位(fast / full 配额更高) |
| 余额不足 | 403 insufficient_quota | 账户余额 = 0 | 充值 |
| Prompt 缓存没命中 | usage 没显示 cache_read 部分 | 没用 cache_control 标记,或 prompt 内容已变 | 见 Prompt Caching |
| 外接工具 403 | 403 block / 403 Forbidden | 缺 User-Agent Header | 见 [User-Agent 说明](/docs/ai-coding-tools#外接调用-user-agent-说明) |
| 流式卡死 | 流中断无报错 | 用了非流式 SDK / 没设超时 | 换流式 SDK,加 client timeout |
错误响应格式
所有错误都遵循 OpenAI 风格 响应(即使调用的是 Anthropic 协议):
{
"error": {
"message": "Invalid API key provided: <控制台生成的 API Key>",
"type": "invalid_request_error",
"code": "invalid_api_key",
"param": null
}
}
| 字段 | 说明 |
|---|---|
message | 人类可读的错误描述 |
type | 错误大类 |
code | 错误具体码(用于程序判断) |
param | 出错的参数名(如果有) |
HTTP 状态码速查
4xx 客户端错误
| HTTP | code | type | 含义 |
|---|---|---|---|
| 400 | invalid_request_error | invalid_request_error | 请求参数错误 |
| 400 | context_length_exceeded | invalid_request_error | 输入超过模型上下文窗口 |
| 400 | invalid_json | invalid_request_error | 请求体不是合法 JSON |
| 401 | invalid_api_key | authentication_error | API Key 无效或被禁用 |
| 401 | missing_api_key | authentication_error | 缺少鉴权头 |
| 403 | insufficient_quota | permission_error | 余额不足 |
| 403 | key_disabled | permission_error | Key 已被禁用 |
| 403 | tier_mismatch | permission_error | Key 协议与请求不匹配 |
| 403 | model_not_allowed | permission_error | 当前档位不支持该模型 |
| 404 | model_not_found | not_found_error | 模型不存在 |
| 404 | endpoint_not_found | not_found_error | 接口路径不存在 |
| 413 | request_too_large | invalid_request_error | 请求体过大 |
| 429 | rate_limit_exceeded | rate_limit_error | 触发限速 |
5xx 服务端错误
| HTTP | code | type | 含义 |
|---|---|---|---|
| 500 | server_error | server_error | SuperRoute 内部错误 |
| 502 | upstream_bad_gateway | upstream_error | 上游网关错误 |
| 503 | upstream_unavailable | upstream_error | 上游服务不可用 |
| 504 | upstream_timeout | upstream_error | 上游响应超时 |
| 529 | overloaded | upstream_error | 上游过载 |
详细排查
400 - invalid_request_error
常见原因+
- 参数名拼写错误(如
max_token应为max_tokens) - 参数类型错误(如传字符串给
temperature) - 必填参数缺失(如
model、messages) - 参数值超出范围(如
temperature: 5) - 枚举值错误(如
tool_choice: "always"应为auto/none/required)
排查步骤+
- 仔细阅读
error.message,通常会指出哪个参数有问题 - 对照 Chat Completions 参数表 或 Messages 参数表
- 用
json.loads()在客户端打印请求体,确认序列化正确 - 用 curl 重试,排除 SDK 封装问题
代码示例:捕获并打印+
from openai import BadRequestError
try:
response = client.chat.completions.create(...)
except BadRequestError as e:
print(f"参数错误: {e.message}")
print(f"出错参数: {e.param}")
import anthropic
try:
message = client.messages.create(...)
except anthropic.BadRequestError as e:
print(f"参数错误: {e.message}")
400 - context_length_exceeded
说明+
输入 prompt 的 token 数超过模型的最大上下文窗口。
解决方案+
- 精简 prompt:删除冗余历史、压缩上下文
- 分块处理:长文档分多次输入
- 换模型:用长上下文模型(如 Claude Sonnet 5 1M、GPT-5.6 Terra 1.05M)
- 使用 Prompt 缓存:Anthropic 支持,可降低重复输入成本
401 - invalid_api_key / missing_api_key
常见原因+
- Key 字符串复制时多了空格 / 少了字符
- Key 已被禁用(在控制台「接口密钥」页面停用了)
- Key 已删除
- 鉴权头格式错误(
Authorization: <API Key>漏了Bearer前缀) - 协议不匹配:使用的 API Key 与请求协议不匹配(请以控制台为该 Key 提供的协议配置为准)
排查步骤+
- 打印实际的鉴权 Header,确认完整且格式正确
- 在控制台「接口密钥」页面确认 Key 状态为「启用」
- 测试时临时新建一个 Key,排除污染因素
- 按 SuperRoute 控制台为该 Key 提供的协议配置客户端,不要根据 Key 的固定前缀判断协议
403 - insufficient_quota
解决方案+
- 立即充值(superoute.uk/billing)
- 充值后无需等待,秒级恢复
403 - key_disabled
原因+
Key 已被管理员或用户主动禁用。
解决方案+
- 在控制台「接口密钥」重新启用该 Key
- 如 Key 已泄露,立即创建新 Key 并禁用旧 Key
403 - tier_mismatch
原因+
Key 绑定的协议与请求协议不匹配。请使用 SuperRoute 控制台为该 Key 提供的协议配置客户端;Key 的具体字符串格式(例如 sk_test_822f61571c0a4c608e88af5985ddd7fa)不能单独用来判断协议。
- 对应 OpenAI 兼容协议时调用
/v1/chat/completions - 对应 Anthropic 协议时调用
/v1/messages
解决方案+
使用与请求协议匹配的配置。API Key 请从 SuperRoute 控制台生成并以平台实际分配的协议为准。
403 - model_not_allowed
原因+
当前 Key 绑定的档位不支持该模型。 例如:某些限量模型可能只对 🚀 full 档位开放。
解决方案+
查看 [模型列表](/docs/models),确认该模型在你当前档位下可用。 如需使用,创建一个绑定到合适档位的 Key。
404 - model_not_found
常见原因+
- 模型名拼写错误(如
gpt-5-5-luna应为gpt-5-6-luna) - 模型名大小写错误(一般不敏感,但建议统一用官方小写)
- 模型已下线(查看 [更新日志](/docs/new-document))
解决方案+
对照 [模型列表](/docs/models) 修正模型名。
413 - request_too_large
说明+
请求体超过了单次请求的体积限制(默认 20MB)。 通常由 base64 编码的大图片或大批量消息引起。
解决方案+
- 图片:压缩后再上传,或使用 URL 引用
- 消息:分批发送,或先做总结压缩
- 联系商务提升单请求体积限制
429 - rate_limit_exceeded
说明+
触发了限速。响应头会包含限速信息:
X-RateLimit-Limit-Requests: 500
X-RateLimit-Remaining-Requests: 0
X-RateLimit-Reset-Requests: 23s
解决方案+
- 实现指数退避:
import time, random for attempt in range(5): try: resp = client.chat.completions.create(...) break except RateLimitError: wait = (2 ** attempt) + random.random() time.sleep(wait) - 降低并发:使用 semaphore 控制并发数
- 升级档位:fast / full 档位的限速更高
- 多 Key 分流:创建多个 Key 轮询使用
500 - server_error
说明+
SuperRoute 平台内部错误。 会自动重试 1 次(仅 stable / full 档位)。
解决方案+
- 客户端实现重试(fast 档不会自动重试)
- 持续失败请提工单,附上请求 ID(从响应头
X-Request-Id获取)
502 / 503 / 504 - upstream_*
说明+
上游模型服务方出现故障。 会自动重试 1 次(仅 stable / full 档位)。
解决方案+
- 等几分钟重试
- 加入 QQ 群(见文档底部)查看最新故障通知
- 客户端实现退避重试
529 - overloaded
说明+
上游过载。会自动重试。
解决方案+
- 客户端实现指数退避
- 错峰使用
- 如长期过载,可考虑降级到 fast 档(fast 档走不同通道池)
响应头说明
| 响应头 | 含义 |
|---|---|
X-Request-Id | 本次请求的唯一 ID,排查问题时必填 |
X-RateLimit-Limit-Requests | 每分钟请求数上限 |
X-RateLimit-Remaining-Requests | 当前剩余请求数 |
X-RateLimit-Reset-Requests | 限速重置时间(秒) |
X-RateLimit-Limit-Tokens | 每分钟 token 数上限 |
X-RateLimit-Remaining-Tokens | 当前剩余 token 数 |
X-Cache-Hit | Prompt 缓存是否命中(Anthropic only) |
客户端最佳实践
import time
import random
from openai import (
APIConnectionError,
APITimeoutError,
RateLimitError,
APIStatusError,
BadRequestError,
)
def call_with_retry(client, max_retries=3, **kwargs):
"""通用重试封装"""
for attempt in range(max_retries):
try:
return client.chat.completions.create(**kwargs)
except BadRequestError:
# 400 不重试,参数错误
raise
except RateLimitError as e:
# 429 退避后重试
wait = (2 ** attempt) + random.random()
print(f"429 hit, retry in {wait:.1f}s")
time.sleep(wait)
except (APIConnectionError, APITimeoutError, APIStatusError) as e:
# 5xx 重试
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
continue
raise
raise Exception("Max retries exceeded")
上报问题
持续无法解决的问题?👉 加入 QQ 群(见文档底部),带上 X-Request-Id 和复现步骤