10Streaming 处理

L2P1

SSE(Server-Sent Events)是 HTTP 上的单向流协议,每个 event 是 event: type\ndata: {...}\n\n。Anthropic 的事件类型:

message_start          // 开始,带元数据
content_block_start    // 开一个 block(text 或 tool_use)
content_block_delta    // 增量内容:text_delta 或 input_json_delta
content_block_stop     // 这个 block 结束
message_delta          // stop_reason 等
message_stop           // 整个消息结束

累积 tool_use:

current_tool = { name: "", input_json: "" }
on content_block_start (tool_use): current_tool.name = block.name
on input_json_delta: current_tool.input_json += delta.partial_json
on content_block_stop:
  args = JSON.parse(current_tool.input_json)
  execute_tool(current_tool.name, args)  // ← 这里才能执行

UI bridge:把 SSE 转成 ReadableStream / WebSocket 推到前端。Claude Code 把 thinking、tool_use、tool_result 都用不同样式渲染,让用户看到 agent 在想什么。

速查
"流式中能不能边接收边执行 tool?"——不能。input_json_delta 是 partial,JSON parse 不出。必须等 content_block_stop 才有完整参数。