Skip to main content

什么是流式输出?

流式输出使用 Server-Sent Events (SSE) 协议,实时传输 AI 生成的内容,提供类似 ChatGPT 的打字机效果。

启用流式输出

设置 stream: true

SSE 事件类型

花卷智能体 API 的流式响应使用标准 SSE 格式,所有事件都以 data: 开头,后跟 JSON 对象。
重要:所有事件都只包含 data: 行,没有 event: 行。每个事件的 type 字段标识事件类型。

流程控制事件

标志整个流式响应开始:
SSE 事件
标志新步骤开始(对话可能包含多个步骤,如思考 → 工具调用 → 最终回复):
SSE 事件
标志当前步骤完成:
SSE 事件
标志整个流式响应完成:
SSE 事件

文本事件

标志新文本块开始,包含唯一的 id 标识:
SSE 事件
实时传输文本内容片段(打字机效果的核心):
SSE 事件示例
字段说明
  • id: 文本块标识符,对应 text-start 的 id
  • delta: 文本增量内容
标志文本块传输完成:
SSE 事件

工具调用事件

标志 AI 开始调用工具,包含工具名称和调用 ID:
SSE 事件
字段说明
  • toolCallId: 唯一的工具调用 ID
  • toolName: 被调用的工具名称
实时传输工具输入参数的 JSON 字符串片段:
SSE 事件示例
字段说明
  • inputTextDelta: 输入参数 JSON 字符串的增量片段
工具输入参数传输完成,包含完整的解析后参数对象:
SSE 事件
字段说明
  • input: 完整的工具输入参数对象(已解析的 JSON)
此时服务端开始执行工具,客户端可以显示”正在调用工具…”等加载提示。
工具执行完成,返回输出结果:
SSE 事件
字段说明
  • output: 工具执行结果对象(结构取决于具体工具)
工具调用完成后,AI 通常会继续生成文本回复(新的 start-steptext-starttext-delta…)。

流结束标记

流结束时会发送特殊的 [DONE] 标记:
SSE 流结束标记
重要[DONE] 是字面量文本,不是 JSON 对象。客户端应该检测到这个字符串后停止读取流。

完整事件流示例

以下是一次包含工具调用的完整流式响应示例:
完整 SSE 事件流
事件流程理解
  1. 开始流 (start)
  2. 第一步:AI 思考过程 (start-step → 思考文本 → 工具调用 → finish-step)
  3. 第二步:基于工具结果生成最终回复 (start-step → 回复文本 → finish-step)
  4. 结束流 (finish[DONE])

客户端实现

React 组件示例

使用 React 实现流式聊天界面:
React 流式聊天组件
关键改动
  • 使用 event.type === "text-delta" 而非 event.type === "text.delta"
  • 可选地处理 tool-input-available 事件以显示工具调用状态
  • 添加占位符文本以反映流式状态

响应头

流式响应包含以下特殊头:

最佳实践

监听 error 事件并向用户展示友好的错误信息:
设置合理的超时时间,处理网络中断:
批量更新 UI,避免频繁渲染:

下一步

文本对话

了解基础文本对话功能

错误处理

学习如何处理各种错误