OpenAI 兼容 API 503 “no available accounts” 排错

503 “no available accounts” 表示请求到达了中转层,但上游账号池中没有可用账号——状态、模型白名单或速率预算不允许任何账号接这次请求。它与 401、429、504 是不同的失败模式,恢复方式也不同。

503 Service Unavailableno available accountsaccount_select_failedupstream account pool

这个错误到底意味着什么

中转层返回 HTTP 503 与结构化 JSON 响应体。错误短语 no available accounts 出现在上游日志条目 openai_chat_completions.account_select_failed 的 error 字段。RFC 9110 §15.6.4 规定 503 用于服务端当前无法处理请求的场景——包括反向代理后面的账号池耗尽。

失败发生在选号阶段,尚未真正打到任何上游服务商。/v1/models 仍返回 200,因为模型列表路由根本不需要选号;/v1/chat/completions 返回 503,是因为每个候选账号都没通过预检。

中转层日志的实际样貌

以下两条日志来自 2026-08-08T13:25–13:26+08:00,在 monkeytheme.com 上对 /v1/chat/completions 接口、模型 gpt-5.6-sol 调用时记录:

{"service":"sub2api","env":"production","component":"http","request_id":"05217724-bffa-43c7-9904-8ee9a3545057","path":"/v1/chat/completions","method":"POST","component":"handler.openai_gateway.chat_completions","user_id":1,"api_key_id":53,"group_id":9,"model":"gpt-5.6-sol","stream":true,"error":"no available accounts","excluded_account_count":1}
{"service":"sub2api","env":"production","component":"http","request_id":"607353af-0bd0-4a7e-aecd-558db4daf4de","path":"/v1/chat/completions","method":"POST","component":"handler.openai_gateway.chat_completions","user_id":1,"api_key_id":53,"group_id":9,"model":"gpt-5.6-sol","stream":true,"error":"no available accounts","excluded_account_count":0}

excluded_account_count 字段是最关键的信号:

计数值含义
0根本没尝试切号——选号前账号池就是空的。
1 或以上已经走完切换,每个账号都被排除(速率、状态、模型白名单)。

当 excluded_account_count 为 0,运维应直接排查账号池健康;当 ≥ 1,应查看本条之前记录的每个账号的具体排除原因。

与 401 / 429 / 504 的差别

失败模式发生层客户端第一时间应该做的
401 invalid token鉴权层修正 Authorization: Bearer 头
404 model not found路由 / 模型列表拉一次 /v1/models,复制准确 Model ID
429 rate limit健康账号命中速率限制按 Retry-After 等待,降低并发,使用有上限的退避
504 gateway timeout上游未在超时前返回单次重试,记录 request_id,持续则升级
503 no available accounts选号层(尚未到上游)短暂等待,降低并发;持续则换模型

不要把它们笼统当成“接口报错”。每一类都指向不同层,处置方式也不同。

保存一份完整且脱敏的失败证据

curl -sS -D /tmp/headers.txt -o /tmp/body.json \
  https://monkeytheme.com/v1/chat/completions \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{"model":"你的_MODEL_ID","messages":[{"role":"user","content":"Reply with OK"}],"max_completion_tokens":16}'

sed -n '1,20p' /tmp/headers.txt
python3 -m json.tool /tmp/body.json

记录 HTTP 状态、JSON error 字符串、(如存在的)request_id 响应头、时间戳、接口与脱敏后的请求结构。工单或截图中不要出现 Bearer Token。如果中转层返回 503,运维可以用你的 request_id 匹配到对应的 account_select_failed 日志条目,进而判断是否走完了切换。

本轮没有针对客户 Key 主动触发 no available accounts。上面展示的两条日志是正常流量窗口内,运维侧日志的脱敏片段,不是合成探测。如果你自己的 Key 也看到这个错误,请把真实的 request_id 一并提交,这是最有用的证据。

调用方的恢复清单

  1. 确认 Base URL 是 https://monkeytheme.com/v1,且 Key 以 sk- 开头。
  2. 用同 Key 拉一次 /v1/models。返回 200 即可排除 401 与路由问题。
  3. 把并发至少砍半,等待 10–15 秒后再发起一次探针。
  4. 用 stream: false 发送一条小请求,确保只收到一条 503 响应和一个干净的 request_id。
  5. 如果同一 request_id 在 60 秒后仍返回 503,换一个已知健康池的模型(用 /v1/models 比对)。
  6. 若错误仅出现在某模型且持续,向支持人员提供时间、模型名、脱敏响应体与 request_id。

与官方 SDK 的交互

OpenAI 官方 Python 与 Node.js SDK 当前默认对符合条件的 429 和连接错误重试两次。它们当前并不会对 no available accounts 这类 503 重试,因为 503 是网关在说“换上游或等待”,不是 SDK 认为“瞬时传输错误”。紧密的应用层重试循环只会把流量打到一个已经空的账号池上。诊断时把 max_retries 临时设为 0,先拿到一条干净的失败,再恢复有上限的重试策略。

本文没有作出的承诺

/v1/models 成功不能证明任一具体模型的生成容量可用。一次 no available accounts 的 503 并不意味着中转层宕机——中转是健康的,是上游账号池耗尽了。如果同一时间大量模型都返回 503 且均为 excluded_account_count: 0,这才是需要运维介入的池级容量信号。

官方资料与相关教程

常见问题

“no available accounts” 在 OpenAI 兼容 API 中是什么意思?

表示中转层已经选了 Key 和路由,但当前上游账号池中没有任何账号能够满足模型白名单、状态和速率预算。请求到达了网关,不是 Key 或提示词的问题。

这是 503 还是 401?

MonkeyAI 返回 503 和结构化 JSON。RFC 9110 §15.6.4 规定,当服务端暂时无法处理请求时,无论上游原因如何,都应使用 503。失败模式要读响应体,单看 HTTP 状态不够。

它和 429、504 的区别是什么?

429 表示在健康账号上命中了请求或 Token 速率限制;504 表示上游未在超时前返回;“no available accounts” 表示根本没有账号能接这次请求。失败发生在选号层,尚未真正打到上游。

为什么 /v1/models 还能成功?

模型列表和 Key 信息接口不需要选号。它们只能证明 Key、Base URL 和路由可用,不能证明当前存在能服务目标模型的推理账号。

是否应该立即重试?

不应该。账号池耗尽通常是暂时性的,紧密重试只会加重压力。等待几秒、降低并发后再发一次探针;如果错误持续超过 1 分钟,应更换模型或向运维提供 request_id。

是否能在服务端确认?

可以。中转层会输出 openai_chat_completions.account_select_failed,error 字段为 “no available accounts”。excluded_account_count 是关键信号:0 表示根本没有尝试切号;≥1 表示切换已尝试但全部被排除。

故障在客户端还是在网关?

故障在中转层的账号池。Key、Header、Base URL 均正常——/v1/models 返回 200,/v1/chat/completions 返回 503。应作为临时容量问题处理,而不是配置错误。

相关教程

ChatGPT Plus 5 小时 OAuth 账号池耗尽

OpenAI ChatGPT Plus OAuth 账号池上大多数 503 的具体根因 — 在重试前先看上游 401 和滚动 5 小时窗口。

打开页面

API 504 上游超时排错

区分 504 与 503,保留 request_id 和时间,再做有限重试。

打开教程

HTTP 429 限流排错

区分请求速率 429 与余额错误,并按 Retry-After 处理。

打开教程

API 401 invalid token

先确认 Header 格式与 Key 是否来自 monkeytheme.com。

打开教程

Model not found

用同 Key 拉一次 /v1/models,复制准确的 Model ID。

打开教程

AI API 网关开发者指南

面向 SDK 与编程客户端的预检清单与 6 步配置,附 401/404 实测。

打开教程

联系支持

提供脱敏的 request_id、模型与时间戳。

打开页面