跳转到主要内容
OrcaRouter 在工作区层面限流,而不是按 API 密钥。同一工作区下的 所有密钥共享同一个桶。超出限制时你会收到一个 429 Too Many Requests 响应,带 Retry-After 头。

为什么按工作区限流

工作区是 OrcaRouter 用来把同一团队或同一个人的密钥、成员、计费 归在一起的方式。把限额放在工作区层面,让流量随团队增长保持可预期: 新增一个密钥(或新增一名成员)不会让你的共享预算成倍增加。如果你 需要更高的天花板,请升级工作区的套餐。 OrcaRouter 不向调用方暴露逐模型的速率限制——从你应用的视角看, 网关表现为一个单一逻辑服务商,与服务商不透明 保持一致。指向上游服务商的内部限流是透明发生的,不属于对外契约。

响应

被限流的请求始终返回:
HTTP/1.1 429 Too Many Requests
Retry-After: <seconds>
某些限流路径还会带一个 JSON body 解释命中的限制;另一些(最快路径 的工作区桶)只返回状态码和响应头。不要依赖 body 的形态——按状态码 429 + 读取 Retry-After 处理。 当 body 存在时,遵循 OpenAI 兼容信封,error.typeorcarouter_api_errorerror.message 可能本地化(当前为中文)—— 信封结构见错误 Retry-After 单位是秒。它是速率限制窗口的时长(保守值——精确等待 这么久是安全的);下一个窗口会有完整预算。不等就立刻重试会再次失败。

推荐的客户端行为

  1. 收到 429 时读取 Retry-After
  2. 等待相应秒数。
  3. 重试同一请求。
  4. 若再次出现 429,把等待时间翻倍(指数退避),最多到 60 秒。
  5. 如果你反复看到 429,考虑通过 extra_body.models 把流量分散到 多个模型——见模型回退链
OpenAI 的 Python / TypeScript SDK 默认会自动处理 Retry-After。 除非你已禁用重试,否则不需要自己写代码。

反应式,不是预测式

OrcaRouter 不返回 X-RateLimit-Remaining / X-RateLimit-Reset 响应头, 所以你没法提前查询还剩多少预算。把 429 当作信号——看到就退避, 然后再继续。