RH
RouterHub AI API 中转站导航与平台推荐
博客

OpenAI API 现在如何区分 429 和 503:中转渠道的限流、过载与重试清单

OpenAI 在 2026 年 9 月更新了 API 错误语义:流量增长过快通常返回 429 slow_down,模型暂时过载则返回 503 server_is_overloaded。本文从中转 API 用户的角度,拆解错误分类、Retry-After、流式请求、备用渠道和成本治理的核验方法。

muchacha 2026-09-26 02:32:31

正文

OpenAI API 现在如何区分 429 和 503:中转渠道的限流、过载与重试清单

如果你在 AI 编程代理、批处理脚本或多步 Agent 里遇到 OpenAI API 请求失败,看到 429 或 503 后直接“再发一次”并不一定是正确做法。

OpenAI 在 2026 年 9 月 2 日更新了 API 错误说明:流量增长过快时,可以返回 429、rate_limit_error、slow_down;请求的模型暂时没有足够容量时,则返回 503、service_unavailable_error、server_is_overloaded。两者都可能携带 Retry-After,但原因、恢复动作和是否应该切换模型并不相同。

这对使用第三方 API 渠道的开发者尤其重要:如果中转站把所有错误都压成一个“请求失败”,你的应用就无法判断是该降速、等待、换模型,还是检查余额和权限。本文不评价某个具体渠道,而是给出一套接入前和故障时都能使用的核验清单。

先看结论:不要只按 HTTP 状态码重试

现象 更应关注的字段 通常意味着什么 第一动作
429 + rate_limit_error + slow_down Retry-After、限流响应头 流量增加太快,哪怕 RPM/TPM 尚未达到表面上限也可能触发 至少等待 Retry-After 指定时间,降低并发,再逐步恢复
503 + service_unavailable_error + server_is_overloaded 模型名、Retry-After、状态页 当前模型暂时没有足够处理容量 等待后有限重试;持续失败时再评估同一渠道的替代模型或备用渠道
429 + credit_balance_exhausted 余额、账单状态 预付额度耗尽 不要重试,先补余额或核对账单
429 + project_spend_limit_exceeded 等 项目/组织限制 达到支出或用量上限 处理配额或限额,重试本身不会恢复访问
401、403、404 鉴权、地区、模型 ID Key、权限、地区或模型配置问题 修正配置,不要把它当作临时拥塞

关键点是:HTTP 状态码只是第一层,error.type 和 error.code 才决定恢复策略。 同样是 429,slow_down 与余额耗尽的处理方式完全不同;同样是服务不可用,也不能把模型过载和请求参数错误混为一谈。

9 月 2 日的变化,为什么会影响中转 API

OpenAI 更新日志将两类情况分开:

  • 流量增长过快,返回 429 和 slow_down;
  • 模型暂时过载,返回 503 和 server_is_overloaded;
  • 两类响应都可能带 Retry-After;没有该字段时,官方建议使用带随机抖动的指数退避。

官方速率限制文档还特别说明,slow_down 不一定代表你已经超过了 RPM 或 TPM。它反映的是流量上升速度,而不是简单的累计请求数量。因此,刚刚扩容、批量任务同时启动、Agent 短时间内并发创建大量子任务,都可能先遇到 slow_down。

模型过载则是另一类问题:请求已经抵达服务,但目标模型暂时缺少处理容量。此时盲目把并发继续加大,只会让重试和原始请求叠加,延长恢复时间,并可能增加实际用量。

对于中转渠道,变化带来三个验收问题:

  1. 是否原样保留上游 HTTP 状态码?
  2. 是否保留 error.type、error.code 和 Retry-After?
  3. 如果渠道做了错误转换,是否在文档中说明转换规则?

如果答案是否定的,客户端就很难区分“渠道没钱了”“模型暂时拥塞”和“自己的流量爬升过快”。这不是接口能返回文本就算兼容的问题,而是故障恢复语义是否完整的问题。

429 slow_down:先控制流量,不要急着换模型

1. 先读取服务端的等待提示

Retry-After 如果存在,应当被视为最短等待时间,而不是建议值。客户端至少等待该时长,再增加少量随机抖动,避免所有请求在同一秒再次冲击服务。

如果没有 Retry-After,可以使用指数退避,但要同时设置:

  • 最大重试次数;
  • 单次任务的总重试时限;
  • 全局并发上限;
  • 单个用户或项目的预算上限。

不要在 SDK 已经自动重试的情况下,再在业务层无条件套一层重试。两层重试会把一次失败变成多次请求,尤其容易放大 Agent 的调用量。

2. 稳定流量比短时冲刺更重要

对批处理、代码索引、批量评测和 Agent 子任务,建议把“瞬时并发”改成“有节奏的队列”:

  1. 先以较低并发启动;
  2. 观察 429、Retry-After 和剩余限流响应头;
  3. 逐步增加,而不是一次性把并发拉满;
  4. 出现 slow_down 后退回最近的稳定档位;
  5. 将请求速率和 token 速率分别记录。

这也解释了为什么只看一个渠道的“理论 RPM/TPM”不足以判断实际可用性。爬升速度、共享项目、模型差异和渠道自身的排队策略,都可能改变结果。

503 server_is_overloaded:把模型容量问题与 Key 问题分开

当错误体明确是 server_is_overloaded 时,优先把它当作模型暂时不可用,而不是 API Key 失效。

推荐顺序如下:

  1. 尊重 Retry-After;
  2. 没有该字段时,使用递增等待和随机抖动;
  3. 在有限次数内重试同一个请求;
  4. 如果任务允许,再切换到已经验证过的替代模型或备用渠道;
  5. 记录原始模型、渠道、时间和错误码,避免把上游过载误判成渠道长期不稳定。

这里要注意“替代模型”不是随便换一个模型名。对于 AI 编程代理、工具调用和结构化输出,替代模型至少要重新核对:上下文窗口、工具调用格式、推理参数、流式事件、输出结构和账单方式。一个能返回文本的模型,不一定能无损替代原模型。

OpenAI 在 2026 年 9 月 24 日曾记录 GPT-6 Astra Pro 错误率升高事件,之后完成恢复。这类模型级事件说明:即使账号、请求格式和渠道都没有改变,单个模型也可能出现短时异常。因此,可靠性记录应至少按“渠道 + 模型 + 时间段”拆分,而不是只给整个 API 平台贴一个稳定或不稳定的标签。

余额、配额和过载,为什么不能用同一套重试

最容易造成成本失控的做法,是把所有 429 都交给同一个重试装饰器。

  • slow_down:可以有限重试,但必须降速;
  • server_is_overloaded:可以等待后有限重试,必要时做经过验证的降级;
  • credit_balance_exhausted:先处理余额;
  • organization_spend_limit_exceeded、project_spend_limit_exceeded:先处理限额;
  • organization_usage_limit_exceeded:需要提升获批用量或联系平台;
  • 鉴权、地区和模型不存在:修正配置。

官方错误码文档明确提醒,账单、支出和配额类错误不会因为不断重试而恢复。对中转 API 来说,还应额外确认渠道是否把余额不足、分组不可用、模型未开通等渠道级错误保留在响应体中。如果这些错误都被包装成 503,自动故障转移可能会把同一错误复制到多个渠道。

流式响应是重试设计的分界线

请求在流开始前失败,与流开始后中断,不是同一个问题。

  • 流开始前收到 429 或 503:可以依据错误码和等待提示决定是否重试;
  • 流已经开始后连接中断:不要简单地重放原请求,否则可能造成重复输出、重复工具调用或重复扣费;
  • 工具调用已经执行后再失败:要根据工具是否具有幂等性决定恢复方式;
  • Agent 已经产生部分状态后:优先保存会话和任务状态,再判断是否续跑,而不是重新创建整个任务。

因此,接入中转渠道时,不能只用一个非流式 curl 成功就宣布“兼容”。至少要测试普通请求、流式请求、错误发生在流开始前和工具调用后的行为,并记录是否产生重复计费或重复事件。

多渠道应用的最小故障转移策略

如果你的应用本身接入了多个 API 渠道,可以把恢复动作分成三层,而不是遇到任何失败都立即换渠道:

第一层:请求级恢复

适用于明确的临时错误:

  • 读取 Retry-After;
  • 加入随机抖动;
  • 限制尝试次数和总时间;
  • 避免 SDK 与业务层重复重试。

第二层:任务级降级

适用于模型暂时过载或任务允许降低规格的情况:

  • 切换到已验证的同类模型;
  • 缩小上下文或降低并发;
  • 将非实时任务放入队列;
  • 将可延迟任务改为批处理。

第三层:渠道级替代

适用于经过证据确认的渠道异常:

  • 使用另一个已验证模型 ID 和接口协议的渠道;
  • 保留原始错误和切换原因;
  • 记录切换前后的成本、延迟和成功结果;
  • 任务完成后复盘,不把一次切换结果当作长期稳定性证明。

RouterHub 更适合用来查找和比较候选渠道;实际请求是否切换、如何重试,仍应由你的应用或客户端按自己的任务约束实现。不要把“目录中能找到某模型”理解成“该渠道已经验证了所有流式、工具调用和故障恢复行为”。

接入中转 API 前的 8 项核验清单

  1. 错误体:是否保留 error.type、error.code、消息和请求 ID?
  2. 状态码:slow_down 是否仍是 429,server_is_overloaded 是否仍是 503?
  3. 等待提示:是否透传 Retry-After?单位和格式是否明确?
  4. 限流头:是否能看到剩余请求数、token 数和重置时间?
  5. 流式行为:流开始前的错误与流中断是否可区分?
  6. 工具调用:重试是否可能重复执行工具?有没有幂等键或任务状态?
  7. 账单边界:失败请求、重试请求和部分流输出如何计费?
  8. 模型维度:能否按模型、渠道、时间段查看错误,而不是只有一个总成功率?

若渠道没有公开这些信息,结论应写成“协议兼容性证据不足”,而不是直接判断它稳定或不稳定。一次成功请求只能证明某个时刻、某个模型和某种请求条件下能返回结果。

给 AI 编程代理用户的实际建议

如果你把 OpenAI API 接到 Codex、代码审查、自动修复或其他编程代理里,优先落实下面四点:

  • 为 slow_down 和 server_is_overloaded 分别设置处理路径;
  • 为工具调用、文件修改和外部写操作设置幂等或人工确认边界;
  • 把重试次数、总等待时间和备用模型切换记入任务日志;
  • 每次评估渠道时,同时观察成功率、错误类型、恢复时间和实际用量。

这样做的目标不是让每个请求都永不失败,而是让失败可解释、可恢复、可计费核对。对于需要长时间运行的 Agent,“能否在一次故障后继续正确完成任务”通常比“单次请求是否成功”更值得关注。

参考来源

  1. OpenAI API 更新日志:2026 年 9 月 2 日错误语义更新
  2. OpenAI API 速率限制:slow_down、server_is_overloaded 与 Retry-After
  3. OpenAI API 错误码:余额、配额、限流和模型过载
  4. OpenAI API 部署检查清单:重试、后台任务和错误处理
  5. OpenAI Status:GPT-6 Astra Pro 错误率升高事件(2026 年 9 月 24 日)

资料核验时间:2026 年 9 月 26 日(UTC)。文中的错误语义、状态码和官方恢复建议以该时间点公开文档为准;第三方渠道的错误透传、计费和模型可用性需要在实际接入时单独验证。