Skip to main content

概述

流式传输允许您在生成响应 token 时接收它们,而不是等待完整响应。这非常适合:
  • 聊天机器人 - 在键入时显示响应
  • 实时助手 - 实时显示进度
  • 长响应 - 立即开始显示内容
  • 更好的用户体验 - 减少感知延迟

工作原理

1

启用流式传输

在请求中设置 stream: true
2

接收数据块

通过 SSE 逐步获取响应 token
3

处理事件

解析包含 JSON 数据块的 data: 事件
4

处理完成

监听 [DONE] 信号以了解何时完成

端点

流式传输适用于两种 API 格式:
两个端点都支持 stream: true 参数。

请求格式

OpenAI 格式

Anthropic 格式

响应格式

事件流结构

响应以服务器发送事件的形式发送:

流生命周期

  1. 初始数据块 - 包含角色:
  1. 内容数据块 - 增量文本:
  1. 最终数据块 - 包含 finish_reason:
  1. 流结束

实现示例

Async Python

高级功能

流式传输中的函数调用

进度跟踪

性能缓冲

错误处理

流式连接可能在中途失败。始终实现重试逻辑。

最佳实践

  1. 缓冲 UI 更新 - 不要为每个数据块更新 DOM(批处理可提高性能)
  2. 显示加载指示器 - 在流式传输期间显示输入指示器
  3. 实现超时 - 为连接设置合理的超时
  4. 处理中断 - 使用指数退避的重试逻辑
  5. 清理资源 - 始终正确关闭流
  6. 测试错误场景 - 确保您的应用程序优雅地处理网络故障

性能提示

在更新 UI 之前将小数据块缓冲在一起,以避免过多的 DOM 更新。
  • 在 Python 的 print 中使用 flush=True 以立即输出
  • 为频繁的 UI 更新实现防抖
  • 考虑对长响应进行虚拟化
  • 在浏览器中使用 Web Workers 进行解析
  • 监控长流的内存使用情况

相关内容