529 是唯一一种不是由您的代码造成的 Claude 错误:过载的是 Anthropic 本身。您无法修复它,只能妥善处理。这意味着使用带退避的耐心重试,在对延迟敏感的路径上准备备用模型,并绝不能立即发起重试风暴,否则只会进一步加剧故障。
错误
{
"type": "error",
"error": { "type": "overloaded_error",
"message": "Overloaded" }
}原因和解决方法一览
| 原因 | 解决方法 |
|---|---|
| 提供商一侧过载(发布日、区域性故障)。会同时影响所有客户。 | 使用带抖动的退避;查看 Anthropic 状态页,而不是重新部署自己的应用。 |
| 您自己的负载峰值遇上了已经紧张的容量。 | 错开批处理任务;通常延迟十分钟即可缓解。 |
| 与 429 混淆:速率限制在日志中看起来相似,但原因完全不同。 | 429 表示您超出了自己的限制(服务器正常);529 表示服务器过载(您的配额正常)。只有 429 会提供 Retry-After 提示。 |
| 未定义备用方案,因此提供商问题会一路传递到最终用户。 | 设置备用链——在同一模型系列内(Sonnet → Haiku),行为保持相近;跨提供商切换(Claude → GPT)则可以应对完整的服务中断。 |
重试时不要加剧故障
将 529 当作没有 Retry-After 的 429 处理:从约 2 秒开始指数退避,加入抖动,将间隔限制在 30–60 秒,约五次尝试后放弃,并将工作放入队列。抖动至关重要:没有抖动,所有客户端会同时恢复请求,从而延长它们正试图摆脱的过载。
切换而不是中断
对于对延迟敏感的路径,请定义备用链。在兼容 OpenAI 的端点上,只需更改一个字符串——不需要第二个 SDK,也不需要第二个账户:
PREFERRED = ["claude-sonnet-5", "claude-haiku-4-5", "gpt-5-6-terra"]
def complete(messages):
last = None
for model in PREFERRED:
try:
return client.chat.completions.create(
model=model, messages=messages, max_tokens=800)
except APIStatusError as e:
if e.status_code not in (429, 500, 529):
raise
last = e # überlastet — nächste Stufe versuchen
raise last最后再检查自己的代码
如果 529 只出现在一种请求类型上,而同一时间其他调用都能通过,那么这不是提供商范围内的故障:检查该路径是否发送了异常大的 prompt,或是否在紧密循环中持续请求。相反,如果所有调用同时出现问题,并自行恢复,那么原因就是容量——此时应使用重试和备用方案,而不是重构代码。
如果你通过 Kunavo 调用
Kunavo 通过多个上游路径接入 Claude,多模型目录则让跨提供商故障转移变成在使用同一个密钥和同一套计费机制的情况下更改模型名称——上述模式不需要第二个账户。即使仍有 529 返回到您这里,也永远不会被计费。 容量和价格是两个不同的问题;关于后者,各模型费率请参阅 Claude API 价格表.
常见问题
529 是我的错误吗?
不是。这是提供商一侧的容量问题。您只需避免加剧故障(使用退避和抖动),并在事件持续时间超过延迟预算时准备备用目标。
529 还是 429——有什么区别?
429 表示您超出了自己的限制,服务器正常。529 表示服务器本身过载,您的配额正常。两者都可以重试;只有 429 会附带 Retry-After 提示。
529 阶段通常会持续多久?
无法预测,也无法保证——因此正确做法是设置有上限的退避并使用队列,而不是把固定等待时间写入代码。如果您的路径有延迟预算,就应使用备用方案,而不是继续等待。
失败的 529 调用会收费吗?
通过 Kunavo 不会:以错误结束的请求不会计费。直接与提供商签约时,则取决于相应提供商的计费规则。