---
title: "流式响应：逐字呈现"
description: "为什么 Claude Code 的回答是'打字机效果'而不是一整块弹出"
---

{/* 本章目标：解释流式通信的意义和它如何与工具执行交织 */}

## 为什么需要流式

想象 AI 需要 30 秒才能生成完整回答——如果等 30 秒后才一次性显示，用户体验是灾难性的。

流式响应让用户**实时看到 AI 的思考过程**：
- 文字逐字出现，用户能提前判断方向是否正确
- 工具调用的参数在生成过程中就能预览
- 长时间任务不会让用户觉得"卡死了"

## 流式与工具调用的交织

一次 AI 响应中可能同时包含文字和工具调用。流式系统需要处理这种交织：

```
AI 开始输出文字 → "我来看看这个文件的内容..."
AI 发出工具调用 → [FileRead: src/main.ts]
           ↓ 暂停流式输出
     工具执行中... 
     结果返回给 AI
           ↓ 恢复流式输出
AI 继续输出 → "这个文件里有一个 bug，第 42 行..."
AI 发出下一个工具调用 → [FileEdit: src/main.ts]
```

## 流式工具执行

更进阶的是，**工具本身的执行也可以是流式的**：

- 运行一个长命令（比如 `npm install`），输出逐行显示
- 搜索大型项目时，匹配结果逐条呈现
- AI 在等待工具结果的同时，已经开始规划下一步

## 多 Provider 适配

Claude Code 支持多个 AI 服务提供商，每个提供商的流式协议略有不同：

| Provider | 特点 |
|----------|------|
| Anthropic Direct | 原生 SSE 流，延迟最低 |
| AWS Bedrock | 通过 AWS SDK 包装的流式接口 |
| Google Vertex | gRPC 流转换为事件流 |

系统通过统一的事件抽象层屏蔽这些差异——上层代码不需要关心底层用的是哪个 Provider。
