直接答案
先使用 GET /v1/models 做带鉴权诊断:401 指向凭据或 Host;404 加无效路由消息指向路径;模型错误需要重新读取 data[].id;瞬时 429 可以按服务器等待时间重试;额度类 429 必须先改变账户状态;5xx 或网络失败只做有上限、能识别重复结果的重试。HTTP 529 是提供商特定状态,只看数字不能确定根因。
| 信号 | 首先检查 | 是否重试 |
|---|---|---|
| 401 | API Key、准确的 Bearer Header、账户、空白字符和 Base URL。 | 不重试,先修复鉴权。 |
| 404 无效路由 | Host、/v1、HTTP 方法和接口路径。 | 不重试,先修正 URL。 |
| 模型不存在 | 带鉴权的 GET /v1/models 和准确的 data[].id。 | 不要继续使用同一个旧模型 ID。 |
| 429 瞬时限流 | 响应 Body、Header、并发量、请求速率和服务器等待指示。 | 可以,但必须延迟且有次数上限。 |
| 429 额度或账户限制 | 脱敏错误码和账户限制。 | 不重试;重复调用不能恢复权限。 |
| 529 | 脱敏响应 Body、请求 ID、模型 ID 和响应来源。只看数字不能作统一诊断。 | 仅当响应指向瞬时故障且操作可安全重复时有限重试。 |
| 5xx | 请求 ID、状态、服务状态,以及请求是否能安全重复。 | 通常可做有限重试,不能无限。 |
| 超时或连接错误 | DNS、代理、VPN、TLS、防火墙、客户端超时,以及第一次请求是否可能已完成。 | 仅在能处理重复结果时重试。 |
改代码前先采集响应
2026-08-24 的线上检查中,Primordial AI GET /v1/models 无鉴权请求返回 HTTP 401,并带有 x-oneapi-request-id;故意构造的 GET /v1/not-a-real-endpoint 返回 HTTP 404 和无效 URL 错误。这些结果确认了当前公开边界,但不代表每个错误都会使用相同 Body 或 Header。
请在可信服务端 Shell 运行。下面的命令会输出响应 Header 和响应 Body,但不会输出请求中的 Authorization Header:
if [ -z "${PRIMORDIAL_API_KEY:-}" ]; then
echo "PRIMORDIAL_API_KEY 未设置" >&2
exit 1
fi
curl --silent --show-error --include --max-time 30 \
https://www.primoraihub.com/v1/models \
-H "Authorization: Bearer $PRIMORDIAL_API_KEY"
不要把真实 Key、Authorization Header、Session Cookie 或敏感 Prompt 粘贴到 Issue、客服消息、统计事件或公开帖子中。Key 一旦暴露,应立即轮换,而不是试图隐藏旧值。
HTTP 401:修复鉴权,不要重试
- 确认环境变量存在,但不要输出变量值。
- 确认 Header 准确写成
Authorization: Bearer YOUR_API_KEY。 - 移除密钥中意外出现的引号、换行、前导空格和尾随空格。
- 确认 Key 来自目标 Primordial AI 账户,并且仍处于启用状态。
- 确认 API Base URL 是
https://www.primoraihub.com/v1,不是控制台页面或其他提供商域名。
创建、保存、无生成鉴权测试和安全轮换步骤请查看 API Key 快速入门。
HTTP 404 与模型不存在是两个排查分支
无效路由需要修正 URL 或 HTTP 方法;模型错误需要当前有效的模型标识。不要用随机模型名试错。
- 检查响应状态和脱敏错误消息;无效 URL 消息指向接口路由。
- 核对文档接口,包括
/v1前缀和完整路径。 - 带鉴权调用
GET /v1/models,从data[].id读取所有可用 ID。 - 使用一个准确返回的 ID,并确认它支持应用调用的目标接口。
- 删除旧缓存 ID;如果模型可用性变化,缩短缓存时间。
curl --silent --show-error \
https://www.primoraihub.com/v1/models \
-H "Authorization: Bearer $PRIMORDIAL_API_KEY" \
| jq -r '.data[]?.id'
解析、缓存、空列表处理和接口检查请查看模型发现指南。
HTTP 429:区分瞬时限流和账户限制
不能把每个 429 都当成重试信号。先检查脱敏错误 Body 和响应 Header。若是临时请求速率或并发限流,有 Retry-After 时按该时间等待;没有时使用指数退避、抖动和较小次数上限。若错误明确指向额度、余额、消费或其他账户限制,必须先改变限制或账户状态。
- 增加重试前,先降低并发并删除重复请求。
- 不要盲目叠加应用重试;已安装 SDK 可能已经对合格错误自动重试。
- 设置总耗时和最大次数,防止故障演变成重试风暴。
- 在成本和延迟统计中,把原始请求与所有重试归为同一次业务操作。
OpenAI 官方错误指南区分了速率限制和余额、消费、用量限制,并建议在有 Retry-After 时遵守该 Header;官方 SDK 对符合条件的重试已经处理该 Header。这些内容描述 OpenAI API 和 SDK,不保证兼容网关使用相同错误码或 Header;排查 Primordial AI 时应以实际响应为依据。
HTTP 529、其他 5xx 与连接失败
HTTP 529:先读响应 Body,再决定动作
IANA HTTP 状态码注册表把 512–599 列为未分配,因此 HTTP 529 没有统一的已注册含义。Claude API 直连把 529 定义为 overloaded_error;这是提供商特定契约,不能证明每个兼容网关或上游都用 529 表达同一根因。
2026-09-09,Primordial AI 的隐私安全访问日志聚合观察到 6 次启发式 human-like 的 /v1 POST 返回 HTTP 529。访问日志没有响应 Body,也不能确定上游提供商、受影响人数、重试结果或客户端最终结果,因此根因仍未知。
- 记录时间、模型 ID、请求 ID、状态,以及脱敏后的
error.type、error.code和消息。 - 若 Body 明确指向瞬时过载,有
Retry-After时遵守该值,并使用次数很少、带抖动的指数退避。 - 若 Body 指向模型、额度、余额、权限或账户问题,先修复该状态,不要重放同一请求。
- 不能只凭状态码命名上游提供商或宣布服务故障。
其他 5xx、超时与连接失败
瞬时 5xx 可以短暂等待,再用指数退避和抖动重试。超时或连接失败还需要检查 DNS、代理或 VPN 路由、TLS 证书、防火墙、客户端超时配置,以及请求是在到达服务前还是到达后失败。
客户端超时不能证明服务端没有处理 POST。盲目重放可能重复工作、用量或副作用。必须限制重试次数,并让调用流程能识别潜在重复结果。
OpenAI 官方 Python 库提供 APIConnectionError、APITimeoutError、AuthenticationError、NotFoundError、RateLimitError 和 APIStatusError。下面的诊断示例只分类错误,不输出凭据:
import os
from openai import (
OpenAI,
APIConnectionError,
APITimeoutError,
APIStatusError,
RateLimitError,
)
client = OpenAI(
api_key=os.environ["PRIMORDIAL_API_KEY"],
base_url="https://www.primoraihub.com/v1",
timeout=30.0,
)
try:
models = client.models.list()
print(f"models={len(models.data)}")
except RateLimitError:
print("rate_limited: 请检查响应细节和限制")
except APIStatusError as exc:
print(f"api_status_error status={exc.status_code}")
except APITimeoutError:
print("api_timeout_error")
except APIConnectionError:
print("api_connection_error")
这些异常类型来自 OpenAI 官方 Python 错误参考。编写自动重试前,仍需根据已安装 SDK 版本和兼容网关实际响应进行验证。
日志要足以复现错误,但不能足以泄露凭据
记录时间、环境、HTTP 方法、路径、状态、耗时、第几次尝试、模型 ID、脱敏后的 error.type 或 error.code,以及响应中存在的 x-oneapi-request-id、x-request-id 等请求 ID。同时记录当时是否启用了代理或 VPN 路由。
不要记录 API Key、Authorization Header、Cookie、完整请求 Header,也不要在可能包含敏感数据时记录原始 Prompt 和响应。OpenAI 官方 API 概览说明了 OpenAI 的服务端请求 ID 和限流 Header;这些名称可以用于对照,但兼容网关不保证一定返回。
常见问题
OpenAI 兼容 API 为什么返回 HTTP 401?
检查服务端 Key、准确的 Bearer Header、空白字符、账户和 Base URL。鉴权修复前不要重试。
如何修复 HTTP 404 或模型不存在?
先区分无效接口和不可用模型;核对路由,带鉴权调用 GET /v1/models,再使用准确的 data[].id。
每个 HTTP 429 都要重试吗?
不需要。仅对瞬时限流做有上限的延迟重试;额度或账户限制必须先改变状态。
OpenAI 兼容 API 的 HTTP 529 表示什么?
它没有统一的已注册含义。Anthropic 在 Claude API 直连中用它表达 overloaded_error,但兼容网关可能转发或转换提供商特定错误;选择有限重试前必须检查脱敏 Body 和请求 ID。
5xx 和超时应该重试吗?
只有当重复调用安全时才做少量有限重试;超时后第一次 POST 的结果可能仍然未知。
应该记录什么日志?
记录状态、耗时、路由、模型 ID、重试次数、脱敏错误码和可用请求 ID;不要记录凭据或敏感 Prompt。