简介
CrewAI 提供了在 crew 执行期间流式传输实时输出的能力,允许您在结果生成时显示它们,而不是等待整个过程完成。此功能对于构建交互式应用程序、提供用户反馈和监控长时间运行的过程特别有用。流式传输工作原理
启用流式传输后,CrewAI 会实时捕获 LLM 响应和工具调用,将它们打包成结构化块,其中包括有关哪个任务和代理正在执行的上下文。您可以实时遍历这些块,并在执行完成后访问最终结果。启用流式传输
要启用流式传输,请在创建 crew 时将stream 参数设置为 True
代码
同步流式传输
当您在启用了流式传输的 crew 上调用kickoff() 时,它会返回一个 CrewStreamingOutput 对象,您可以对其进行迭代以接收到达的块
代码
流块信息
每个块都提供丰富的执行上下文代码
访问流式传输结果
CrewStreamingOutput 对象提供了一些有用的属性
代码
异步流式传输
对于异步应用程序,请使用kickoff_async() 和异步迭代
代码
使用 kickoff_for_each 进行流式传输
当使用kickoff_for_each() 执行多个输入的 crew 时,流式传输的工作方式因您使用同步还是异步而异
同步 kickoff_for_each
使用同步kickoff_for_each(),您将获得一个 CrewStreamingOutput 对象列表,每个输入一个
代码
异步 kickoff_for_each_async
使用异步kickoff_for_each_async(),您将获得一个单独的 CrewStreamingOutput,它会并发地从所有 crew 生成块
代码
流块类型
块可以是不同的类型,由chunk_type 字段指示
TEXT 块
来自 LLM 响应的标准文本内容代码
TOOL_CALL 块
有关正在进行的工具调用的信息代码
实际示例:使用流式传输构建 UI
这是一个完整的示例,展示了如何使用流式传输构建交互式应用程序代码
用例
流式传输对于以下情况特别有价值- 交互式应用程序:在代理工作时向用户提供实时反馈
- 长时间运行的任务:显示研究、分析或内容生成的进度
- 调试和监控:实时观察代理行为和决策
- 用户体验:通过显示增量结果来减少感知延迟
- 实时仪表盘:构建显示 crew 执行状态的监控界面
重要说明
- 流式传输会自动为 crew 中的所有代理启用 LLM 流式传输
- 您必须在访问
.result属性之前遍历所有块 - 对于带流式传输的
kickoff_for_each_async(),请使用.results(复数)获取所有输出 - 流式传输增加的开销极小,实际上可以提高感知性能
- 每个块都包含完整的上下文(任务、代理、块类型),用于丰富的 UI
错误处理
处理流式执行期间的错误代码
