streaming.mdx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. ---
  2. title: "流式响应:逐字呈现"
  3. description: "为什么 Claude Code 的回答是'打字机效果'而不是一整块弹出"
  4. ---
  5. {/* 本章目标:解释流式通信的意义和它如何与工具执行交织 */}
  6. ## 为什么需要流式
  7. 想象 AI 需要 30 秒才能生成完整回答——如果等 30 秒后才一次性显示,用户体验是灾难性的。
  8. 流式响应让用户**实时看到 AI 的思考过程**:
  9. - 文字逐字出现,用户能提前判断方向是否正确
  10. - 工具调用的参数在生成过程中就能预览
  11. - 长时间任务不会让用户觉得"卡死了"
  12. ## 流式与工具调用的交织
  13. 一次 AI 响应中可能同时包含文字和工具调用。流式系统需要处理这种交织:
  14. ```
  15. AI 开始输出文字 → "我来看看这个文件的内容..."
  16. AI 发出工具调用 → [FileRead: src/main.ts]
  17. ↓ 暂停流式输出
  18. 工具执行中...
  19. 结果返回给 AI
  20. ↓ 恢复流式输出
  21. AI 继续输出 → "这个文件里有一个 bug,第 42 行..."
  22. AI 发出下一个工具调用 → [FileEdit: src/main.ts]
  23. ```
  24. ## 流式工具执行
  25. 更进阶的是,**工具本身的执行也可以是流式的**:
  26. - 运行一个长命令(比如 `npm install`),输出逐行显示
  27. - 搜索大型项目时,匹配结果逐条呈现
  28. - AI 在等待工具结果的同时,已经开始规划下一步
  29. ## 多 Provider 适配
  30. Claude Code 支持多个 AI 服务提供商,每个提供商的流式协议略有不同:
  31. | Provider | 特点 |
  32. |----------|------|
  33. | Anthropic Direct | 原生 SSE 流,延迟最低 |
  34. | AWS Bedrock | 通过 AWS SDK 包装的流式接口 |
  35. | Google Vertex | gRPC 流转换为事件流 |
  36. 系统通过统一的事件抽象层屏蔽这些差异——上层代码不需要关心底层用的是哪个 Provider。