事件顺序

事件顺序通常为 message_start → 多组 content_block_start / content_block_delta / content_block_stop → message_delta → message_stop;期间可能有 ping 或 error。按 block index 聚合 text_delta、thinking_delta、signature_delta 和 input_json_delta,工具 JSON 到块结束再解析。不要等待 OpenAI 的 [DONE]。message_delta.usage.output_tokens 为累计值,不逐事件相加。断线后保留已收事件,本入口没有按消息 ID 续传的流程。

如何组装

为每个 content_block_start.index 建立缓冲区。text_delta.text 追加文字;thinking_delta.thinking 追加摘要;signature_delta.signature 追加签名;input_json_delta.partial_json 追加工具参数原始片段。到 content_block_stop 才解析该工具的 JSON。

message_start 中 usage 是消息开始时的输入统计;后续 message_delta 带累计输出用量。message_stop 只证明协议消息结束,还需查看 stop_reason,决定展示结果或执行工具。

错误与兼容

收到 error 事件即使 HTTP 状态为200也要报告失败。对未知事件类型采取兼容处理并保留原始事件,不将 ping 显示为正文。流断开后不得为“补齐最后几个字”自动重复提交整段付费请求。

完整示例

三语言 SSE 消费示例 · 工具工作流 · Claude Streaming Messages。