Qwen API 调用排障:401、404、429、503 和超时怎么区分
Qwen API 调用排障:401、404、429、503 和超时怎么区分
调用 EXAIV 的 Qwen 端点时,最头疼的不是某个功能不工作,而是看到一串错误码却不知道该改什么。401、404、429、503、timeout……每个数字背后的原因都不一样,改错地方只会浪费时间。这篇把五类常见错误拆成可操作的排查顺序,每一步都有对应的检查项和修复动作。
30 秒版本
排障有固定顺序:先确认 Key → 再确认 URL → 再确认模型 ID → 最后看服务状态。能用 curl 打出一句最小请求,基本就能定位八成问题。记住这个顺序,避免在错误的方向上反复试错。
先用 curl 打一个最小请求
在改任何业务代码之前,先用 curl 打出一个最小可复现请求。这是最快的定位手段,能帮你区分「是配置问题」还是「是业务逻辑问题」。
curl -sS https://exaiv.com/api/ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "qwen3.8-flash",
"messages": [{"role": "user", "content": "hi"}]
}'
为什么先 curl
业务代码(SDK、框架)会封装请求、错误处理和重试,一旦报错,你看到的错误码可能来自 SDK 的包装,而不是服务端的真实响应。curl 能打出原始 HTTP 状态码和响应体,是排障的第一现场。
401:Key 或鉴权问题
401 Unauthorized 意味着请求没被认出来。通常三种原因:
| 原因 | 检查项 |
|---|---|
| Key 无效或格式错误 | 是否完整复制、首尾有无空格、是否被吊销 |
| 鉴权头格式不对 | 是否是 Authorization: Bearer 前缀 |
| Key 用错了账号 | 控制台里确认 Key 属于当前站点 |
最小修复动作:重新在控制台生成一个 Key,复制时不碰首尾空格,然后重跑 curl。如果还 401,检查请求头:
curl -sS -H "Authorization: Bearer YOUR_API_KEY" https://exaiv.com/api/ai/v1/chat/completions -d '{"model":"qwen3.8-flash","messages":[{"role":"user","content":"hi"}]}'
Bearer 前缀别忘了
Authorization 头的值不是 Key 本身,而是 Bearer <Key>。少写 Bearer 或者多写空格,都会导致 401。
404:路径或模型 ID 问题
404 Not Found 有两个主要来源:
1. URL 路径不对。 EXAIV 的 Chat Completions 端点是 /api/ai/v1/chat/completions。常见错误:
- 少了一层
/api/ai/v1:https://exaiv.com或https://exaiv.com/api/ai/v1 - 多写了一层
/v1:/api/ai/v1/v1/chat/completions
2. 模型 ID 不对。 当前 EXAIV 目录里可调用的 Qwen 模型 ID 是 qwen3.8-max、qwen3.8-flash、qwen3.7-flash。如果你写了 qwen3.8-flash-next、qwen3.8-27b、或者从 HuggingFace 抄来的 Qwen/Qwen3.8-Flash-Next,都会 404。
最小修复动作:先确认 URL,再查模型目录:
# 确认端点可达(不带 body,看 404 还是 405)
curl -sS -o /dev/null -w "%{http_code}\n" https://exaiv.com/api/ai/v1/chat/completions
然后在 /models 页面确认当前可用的 Qwen ID,不要凭记忆。
模型 ID 以目录为准
Qwen 的模型命名会随版本更新变化。HuggingFace 上的 Qwen/Qwen3.8-Flash-Next 是开源权重名,不是 API ID。写进代码前,到 /models 核对当前真实可用的 ID。
429:限流
429 Too Many Requests 意味着服务说「稍后再来」。常见原因:
| 原因 | 对策 |
|---|---|
| 并发过高 | 加客户端指数退避重试 |
| 请求频率过快 | 降低并发、加间隔 |
| 配额耗尽 | 检查账户配额、联系平台调整规格 |
最小修复动作:写一个简单的退避重试。如果持续 429,说明并发规格需要调整,而不是硬扛。
import time
import openai
client = openai.OpenAI(api_key="...", base_url="https://exaiv.com/api/ai/v1")
def call_qwen(messages):
for attempt in range(4):
try:
return client.chat.completions.create(model="qwen3.8-flash", messages=messages)
except openai.RateLimitError:
wait = 2 ** attempt # 指数退避:2, 4, 8 秒
time.sleep(wait)
raise RuntimeError("重试 4 次仍限流")
429 不等于服务挂了
429 是服务主动说「忙不过来」,不是不可用。加退避重试通常就能解决;持续出现说明并发档位需要调整。
503:服务暂不可用
503 Service Unavailable 意味着服务暂时无法处理请求。可能原因:
- 后端服务在做维护、滚动更新
- 上游模型供应波动
- 请求触发了异常保护机制
最小修复动作:做有限退避重试,重试次数不要太多(建议 3-4 次)。如果持续 503,大概率不是你能解决的,检查平台状态页或联系支持。
503 不要用长退避死等
503 通常是暂时的,但持续重试可能加剧问题。限次数(如 3 次)、短退避(几秒级)、然后失败退出或切到备用方案。
timeout:网络或上下文问题
timeout 不是 HTTP 状态码,而是客户端在规定时间内没收到完整响应。两个主要来源:
1. 请求本身太大。 超长上下文、大输出、模型繁忙都可能让单个请求超过客户端超时。
2. 网络链路问题。 本地代理、跨境链路、CDN 节点都可能引发超时。
最小修复动作:
- 先确认 curl 能打出来:
curl --max-time 30 ...,如果 curl 也超时,是网络问题。 - 再确认请求大小:减小上下文、减小
max_tokens,看是否解决。 - 最后检查链路:是否有代理、VPN、CDN 节点影响。
# 用 max-time 和 verbose 观察网络
curl --max-time 30 -v https://exaiv.com/api/ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"model":"qwen3.8-flash","messages":[{"role":"user","content":"hi"}]}'
timeout 和 429 的区别
429 是服务明确说「稍后再来」;timeout 是请求根本没回来。前者加退避重试,后者要先看网络和请求大小。
模型未找到:先查目录再改代码
很多人遇到「模型不存在」的第一反应是改代码。但更高效的做法是先确认目录里到底有什么:
# 查目录(如果平台提供)
import requests
catalog = requests.get("https://exaiv.com/models").json()
qwen_models = [m for m in catalog if "qwen" in m["model_id"]]
如果目录里没有你写的那个 ID,改代码也没用——正确的动作是换成目录里真实存在的 ID,或者改用本地 GGUF。
不要用 HuggingFace 名当 API ID
HF 上的模型名(如 Qwen/Qwen3.8-Flash-Next)是开源权重名,不是 API ID。API ID 是平台目录里提供服务时使用的名字,两者完全不同。
排障顺序总结
固定这个顺序,能省掉大量试错:
| 步骤 | 检查 | 动作 |
|---|---|---|
| 1 | Key | 重新生成、复制时去首尾空格 |
| 2 | URL | 确认到 /api/ai/v1/chat/completions 为止 |
| 3 | 模型 ID | 到 /models 核对真实 ID |
| 4 | 服务状态 | 有限退避重试,超 3 次退出或切备用 |
| 5 | 网络链路 | curl 确认,排除代理/VPN 影响 |
先 curl 再改业务代码
改业务代码之前先用 curl 打出最小请求,确认端点、Key、模型 ID 都正确。否则改了半天,可能只是改错了方向。
FAQ
401 一定是 Key 错了吗?
404 怎么判断是 URL 问题还是模型问题?
429 要重试几次?
timeout 怎么和 429 区分?
模型 ID 从哪查?
相关阅读
- Qwen 系列怎么选 — 云端三个 Qwen 模型的选型
- Qwen 本地编码工作流 — 本地编码与云端兜底
- Qwen GGUF 本地部署入门 — 本地部署常识
- Chat Completions API 参考 — 请求与响应格式详解
- 模型目录 — 核对当前可用的 Qwen 模型 ID