Claude 流式请求遇到 529 怎么处理:SSE 错误与续传验收

Claude Messages API 可能在 HTTP 200 流中发送 error 事件。本文用官方事件规范说明 529、累计用量、分块恢复及 4.6 之后的续写边界。

关键词
LALondAI 内容团队发布日期 2026-11-15
6 分钟阅读模型教程
LA
Claude 流式请求遇到 529 怎么处理:SSE 错误与续传验收
Claude SSE官方来源与可执行检查LondAI 内容团队

Claude Messages API 设置 stream: true 后返回 SSE 事件流。客户端不能只看初始 HTTP 200 就判定成功:Anthropic 文档指出,服务过载时可能在流中发送 event: error,其 error.type 为 overloaded_error;同类错误在非流式请求中通常对应 HTTP 529。若前端已展示部分回答,简单重试整个请求可能造成重复文字、重复工具动作和账单误判。

先按事件状态判断

正常事件流从 message_start 开始,内容块按 content_block_start、content_block_delta、content_block_stop 推进,随后有 message_delta 和最终 message_stop。中间还可能出现 ping。只有收到终止事件并检查停止原因,才应把响应记为完整。message_delta 中的 usage 是累计值,不能把每次事件的 token 数相加。直接来源:Anthropic Streaming messages 官方指南、Claude Sonnet 5.5 模型卡。

可复现的最小验证

在已具备 Claude API 权限的隔离测试环境,用脱敏请求和官方 SDK 或 curl 开启流式;示例模型 claude-sonnet-5-5 以账号实际权限为准。API Key 从本机环境变量读取,不写进脚本或日志。记录每条 SSE 的 event 与 JSON type,保存请求 ID、最后一个完整文本块和最终 usage;不要记录真实用户原文。

curl -N https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5-5","max_tokens":128,"stream":true,"messages":[{"role":"user","content":"请用两句话解释幂等性。"}]}'

分别测试正常结束、客户端主动断开、代理超时,以及模拟流中 event: error。模拟错误要在本地测试层注入,不能把真实生产请求作为故障演练。

接入与排障顺序

  1. 确认代理未缓冲 SSE,客户端能逐条接收事件;首个 HTTP 状态和流内事件分别记录。
  2. 按内容块索引累积文本,仅在完整块结束后提交可恢复进度;ping 不作为正文。
  3. 遇到 overloaded_error 或中断时,标记请求未完成,保留已显示内容和请求 ID;重试采用退避及次数上限。
  4. 若需要续写,按模型代际使用官方恢复策略:Claude 4.5 及以前可把已收到的 assistant 文本作为下一轮前缀;Claude 4.6 及以后改用 user 消息提供已收到文本并要求从断点继续。
  5. 工具调用和 thinking 块不能按半截文本恢复,出现部分工具参数时停止自动执行并转人工或重新规划。

中转站尤其要检查的边界

上游可能已生成部分 token,即使用户只看到失败,也不能凭 HTTP 200 或本地断线假定费用为零。是否扣费必须依据实际 usage、平台计费规则及失败处理链路对账。本文只说明 Anthropic 官方协议与客户端排障方法,没有更改 LondAI 网关、重试或余额逻辑,也未用本站 Key 做真实扣费测试。若中转渠道改写 SSE 事件,应先确认其与官方事件流的差异。

验收表

正常流必须收到 message_stop、文本不重复且 usage 与请求记录一致;故障流必须显示未完成状态、不会误执行半截工具调用、重试有上限,并能解释是否产生费用。对 Claude 4.5 与 4.6 之后分别演练续写,比较重复句、遗漏句和成本,再决定是否向用户提供“继续生成”按钮。通用接入参数可参考 LondAI API 文档。