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 才有完整参数。