跳到正文
OpenRouter Blog·· 19 小时前精选AI 评分65

Claude 529 Overloaded 是什么以及如何修复

Claude 529 Overloaded: What It Means and How to Fix It

AI 导读

OpenRouter 发文解释 Claude 的 529 overloaded_error 表示 Anthropic API 对该模型的容量不足,与用户的密钥、套餐和请求无关,而 429 才是用户自身用量触发的限流。

推荐理由

原文区分了 529 与 429 的成因,并给出重试、多供应商路由和模型回退三层可复用方案。

正文 · AI 翻译

Claude 返回的 529 overloaded_error 意味着 Anthropic 的 API 对你所请求的模型暂时没有容量。你的密钥、套餐和请求都没有问题,同样的请求通常几秒后就能通过。为了让应用撑过这段时间,先采用退避策略重试,然后把请求发给另一个提供同一 Claude 模型的提供商。

大多数人是在 Claude Code 中遇到这个错误的,会话会以 API Error: Repeated 529 Overloaded errors 停止。我们在重试示例中用本地模拟的 API 替代品模拟了过载,因为真实的过载无法按需触发。指南中的每个 OpenRouter 请求都是真实的。

简而言之

  • 529 overloaded_error 意味着 Anthropic 的 API 在所有用户范围内对该模型都没有容量。429 则是源于你自己用量的错误。
  • 先采用带随机性的指数退避重试。Anthropic 的 SDK 和 Claude Code 已经这样做了。
  • 当过载持续时,把同一模型发给另一个提供商。在 OpenRouter 上,Claude Sonnet、Opus 和 Haiku 5.5 各由五家提供商提供服务,默认路由会为你做故障转移。
  • 对于所有提供商都繁忙的罕见情况,用 models 列出一个回退模型。
  • 在 Claude Code 中,运行 ori claude 即可在 OpenRouter 上启动会话,获得同样的故障转移。

529 overloaded 是什么意思?

当 Anthropic 的 API 对某个模型的流量超过其服务能力时,就会返回 529。响应体如下所示:

{"type": "error", "error": {"type": "overloaded_error", "message": "Overloaded"}}

这个错误与你无关。Anthropic 的错误参考指出,当 API 在所有用户范围内流量过高时就会发生,因此当时调用该模型的任何人都可能遇到,无论其使用什么套餐。一位 Max 套餐用户报告称 Claude Code 重试了八分钟以上才放弃。

真正源于你这边的错误是 429 rate_limit_error。它意味着你的组织达到了自身的速率限制或支出上限,你可以通过放慢速度或提高限额来解决。529 不是你的用量限制,Claude Code 的错误参考称它不计入你的配额。当 Anthropic 恢复容量时它就会消失,所以你要么等它过去,要么把请求发到当前有容量的地方。接下来的三步两者都做。

第 1 步:采用指数退避重试

大多数 529 会在几秒内消失,所以先从重试开始。每次尝试后多等一会儿,并加入一些随机性,这样许多客户端就不会在同一时刻一起重试。我们把这个循环指向一个小型本地服务器,它对前三次请求返回真实形态的 529,然后成功:

import random
import time
import requests

# The local stand-in. In production, use https://api.anthropic.com/v1/messages
URL = "http://127.0.0.1:8529/v1/messages"

def call_with_backoff(body, attempts=5):
    for attempt in range(attempts):
        r = requests.post(URL, json=body, timeout=60)
        if r.status_code != 529:
            return r
        if attempt == attempts - 1:
            r.raise_for_status()  # out of attempts: fail now instead of sleeping again
        wait = min(2 ** attempt, 30) + random.uniform(0, 1)
        print(f"attempt {attempt + 1}: 529 {r.json()['error']['type']}, retrying in {wait:.1f}s")
        time.sleep(wait)

r = call_with_backoff({
    "model": "claude-sonnet-5-5",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "hi"}],
})
print(r.status_code, r.json()["content"][0]["text"])
attempt 1: 529 overloaded_error, retrying in 1.9s
attempt 2: 529 overloaded_error, retrying in 2.3s
attempt 3: 529 overloaded_error, retrying in 4.0s
200 Hello! How can I help you today?

第四次尝试成功了,距第一次大约八秒。如果你使用 Anthropic 的官方 SDK,你已经具备这一能力。它们对 5xx 错误采用指数退避重试,默认重试两次,你可以用 max_retries 提高次数。

重试能应对短暂的峰值。当模型持续过载数分钟时,重试就无济于事,而且每次等待都会增加用户能感受到的延迟。为此,你需要第二个发送请求的地方。

第 2 步:把同一模型发给另一个提供商

Anthropic 的 API 并不是 Claude 运行的唯一地方。在 OpenRouter 上,Claude Sonnet 5.5 由五家提供商提供服务,Opus 5.5 和 Haiku 5.5 也是如此。以下是我们的端点 API 在 2026 年 10 月 21 日对 Sonnet 5.5 返回的结果:

提供商Slug每百万 token 输入价格
Anthropicanthropic$2.00
Amazon Bedrockamazon-bedrock$2.00
Google Vertex AIgoogle-vertex$2.00(全球),$2.20(美国或欧洲)
Azureazure$2.00(全球),$2.20(美国)
AWS 上的 Claude Platformclaude-on-aws$2.00

向全球端点而不是 Anthropic 发送请求,并不会改变你为此支付的费用。不同提供商之间的延迟和正常运行时间仍可能不同,如何评估 LLM 提供商性能 介绍了如何对它们进行比较。

你无需进行任何配置即可使用它们。当你调用 anthropic/claude-sonnet-5.5 时,我们的默认路由会将请求分散到为其提供服务的各个提供商,降低在过去 30 秒内出现严重故障的提供商的优先级,并在请求失败时于下一个提供商处重试。

如果你想选择哪个提供商优先,请设置 order:

import os

import requests

body = {
    "model": "anthropic/claude-sonnet-5.5",
    "provider": {
        "order": ["anthropic", "amazon-bedrock", "google-vertex"],
        "allow_fallbacks": True,
    },
    "messages": [{"role": "user", "content": "Reply with the word ok."}],
    "max_tokens": 16,
}

r = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    json=body,
    timeout=120,
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
)
data = r.json()
print(r.status_code, data["model"], data["provider"])
200 anthropic/claude-sonnet-5.5 Anthropic

Anthropic 作出了响应,因此没有发生故障转移。每个响应中的 provider 字段都会指明为其提供服务的提供商,因此你的日志会显示流量何时从 Anthropic 转移。设置 order 确实会关闭默认负载均衡。请求会按照你的列表而不是我们的健康排名进行,并且只有在你列出的提供商失败后,才会转向其余提供商。

有两个设置会停止故障转移,如果你仍然看到 529,值得检查一下:

  • "allow_fallbacks": false 会将请求保留在你列出的提供商上。如果它们全部过载,你就会收到该错误。
  • "only": [...] 会限制哪些提供商可以完全为该请求提供服务。如果它们中没有一个提供该模型,请求会在开始前就失败。

我们将 only 设置为 ["openai"],以查看这种失败是什么样子:

import json
import os

import requests

body = {
    "model": "anthropic/claude-sonnet-5.5",
    "provider": {"only": ["openai"]},
    "messages": [{"role": "user", "content": "Reply with the word ok."}],
    "max_tokens": 16,
}

r = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    json=body,
    timeout=120,
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
)
print(r.status_code)
print(json.dumps(r.json(), indent=2))
404
{
  "error": {
    "message": "No allowed providers are available for the selected model. Providers serving anthropic/claude-sonnet-5.5-20260928: google-vertex, amazon-bedrock, azure, claude-on-aws, anthropic, but your request's provider.only preference permits only: openai.",
    "code": 404,
    "metadata": {
      "available_providers": [
        "google-vertex",
        "amazon-bedrock",
        "azure",
        "claude-on-aws",
        "anthropic"
      ],
      "requested_providers": [
        "openai"
      ],
      "routing_funnel": [
        {
          "step": "Initial Endpoints",
          "endpoint_count": 8
        },
        {
          "step": "Filter by Regional Surcharge",
          "endpoint_count": 5
        }
      ],
      "failed_routing_step": "Filter by Allowed Providers"
    }
  }
}

该错误会列出所有本可以为该请求提供服务的提供商,因此你可以将所需的 slug 直接复制到你的 only 列表中。

第 3 步:添加回退模型

如果某个模型的所有提供商同时繁忙,例如在新版本发布后的需求高峰期间,可以由第二个模型来应答。使用 models 按顺序列出模型,并像第 2 步那样发送请求:

body = {
    "models": ["anthropic/claude-sonnet-5.5", "anthropic/claude-haiku-5.5"],
    "provider": {
        "order": ["anthropic", "amazon-bedrock", "google-vertex"],
        "allow_fallbacks": True,
    },
    "messages": [{"role": "user", "content": "Reply with the word ok."}],
    "max_tokens": 16,
}
200 anthropic/claude-sonnet-5.5 Anthropic

Sonnet 可用,因此由它作出了响应。如果它在每个提供商处都失败,我们就会将请求发送给 Haiku 5.5,并且响应中的 model 字段会指明它。模型回退会在第一个模型出现任何错误时触发,包括速率限制、停机以及上下文长度错误。如果列表中的最后一个模型也失败,你就会收到它的错误。

选择一个对你的任务来说足够好的回退模型。像 Haiku 5.5 这样较小的模型适合短摘要或分类等常规工作,我们的最低成本推理指南介绍了如何找到仍能胜任工作的最便宜模型。对于只有较大模型才能处理好的工作,请依赖第二个提供商和重试,而不是较小的回退模型。

如何修复 Claude Code 中的 529 错误?

Claude Code 已经为你完成了第 1 步。它会以指数退避方式最多重试瞬时故障 10 次,并且只有在这些重试耗尽后才会显示 API Error: Repeated 529 Overloaded errors。你可以用 CLAUDE_CODE_MAX_RETRIES 更改次数,但当模型持续繁忙时,更多重试只意味着更长的等待。无需任何设置的最快修复方法是运行 /model 并切换模型,因为 Anthropic 会按模型跟踪容量。

要保留你选择的模型,请在 OpenRouter 上运行 Claude Code,这会增加第 2 步。最快的方法是 Ori Harness,它会使用已配置好的 OpenRouter 设置启动你机器上已有的 Claude Code:

curl -fsSL https://openrouter.ai/labs/ori/install.sh | bash
ori claude --model anthropic/claude-sonnet-5.5

Ori 会打开浏览器,以便你使用 OpenRouter 账户登录,因此无需创建或粘贴 API 密钥。只有你使用 ori claude 启动的会话才会在 OpenRouter 上运行,而普通的 claude 会像以前一样工作。

如果改为手动设置,请设置三个环境变量:

export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
export ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY"
export ANTHROPIC_API_KEY=""  # must be empty

如果你使用 Claude 账户登录,请运行一次 /logout 并重新启动,以使变量生效。我们的 Claude Code 指南 建议将 Anthropic 保留为首选提供商,因为这是 Claude Code 保证可以与之配合使用的提供商。当 Anthropic 过载时,请求会故障转移到提供同一模型的其他提供商。

我们以这种方式在一个小型 bug 修复任务上运行了 Claude Code 九次,使用 Opus、Sonnet 和 Haiku 5.5,每个会话都完成了。Claude Code 与 OpenRouter 涵盖了其余设置,包括为每个角色选择模型。

常见问题

529 错误是我的错吗?

不是。529 表示 Anthropic 的 API 对该模型在所有用户范围内已达到容量上限。你的密钥、计划和请求都没有问题。429 才是由你自己的使用量导致的错误。

Claude 529 会持续多久?

通常只有几秒钟,这就是为什么带退避的重试能解决大多数此类问题。在需求高峰期,过载可能持续数分钟,这时将请求发送到另一个提供商就会有帮助。

付费计划或更高级别能防止 529 错误吗?

不能。更高级别会提高你的速率限制,从而防止 429,但 529 来自该模型的总需求。从多个提供商提供该模型才是减少你所受影响的方法。

如何检查 Claude 是否宕机?

Anthropic 在 status.claude.com 发布事件,旧的 status.anthropic.com 地址会重定向到那里。在 OpenRouter 上,每个模型的页面会显示提供该模型的每个提供商最近的正常运行时间,例如 Claude Sonnet 5.5。

后续步骤

来源:OpenRouter Blog · openrouter.ai