Skip to content
CrewAI 文档版本 跟随上游 源快照 9810e339 更新于 2026-10-18

对话式 Flow

通过 AG-UI 提供原生、感知会话的 CrewAI Flow,具备托管对话状态和完全一致的前端体验。

三种执行形态,一个桥接

在 AG-UI 桥接之后,CrewAI 后端可以采用三种形态之一。了解你正在提供的是哪一种,决定的是你如何编写后端,而不是你如何构建前端。

形态它是什么如何进入
常规 Flow由作者控制的 @start/@listen/@router 图。这些指南中全程使用的默认形态。kickoff / astream
对话式 Flow原生、感知会话、基于轮次的 Flow,具备托管对话状态。stream_turn(message, session_id=...)
Crew封闭的自主任务/智能体循环。仅支持基础聊天,是一条独立的兼容路径。不是本文重点。

对话式 Flow 是 CrewAI 较新的能力,有一点需要一开始就讲清楚:它们是 Flow,不是 Crew。 它们现在以完全等同于常规 Flow 的功能特性运行。本页介绍它们,并说明它们如何与其余前端指南配合。

NOTE

当你想要原生多轮对话、由 CrewAI 为你管理会话状态和历史记录,而不是自己将轮次和状态处理接入常规 Flow 时,请选用对话式 Flow。如果你是新来的,请从 前端概览 开始,了解基础服务器、运行时和服务商设置。

注册对话式 Flow

你通过与任何其他 Flow 相同的端点辅助函数注册对话式 Flow,只需多一个参数:conversational=True。

python
# server.py
from ag_ui_crewai.endpoint import add_crewai_flow_fastapi_endpoint

add_crewai_flow_fastapi_endpoint(
    app,
    flow,
    "/conversation",
    conversational=True,
)

要使其生效,必须满足两项要求:

  • Flow 实例声明 conversational = True。
  • Flow 暴露 CrewAI 公开的、可调用的 stream_turn(message, session_id=...)。

检测基于能力,而非由版本决定:桥接会检查 Flow 是否实际提供基于轮次的对话,而不是依据版本号判断。

WARNING

如果不满足这些要求,请求会以 RUN_ERROR(代码 AGUI_CREWAI_CONVERSATIONAL_FLOW_UNSUPPORTED)明确失败。它绝不会静默回退到常规 kickoff 语义,因此你始终清楚自己处于哪条路径。

编写 Flow 本身,包括如何实现 stream_turn,属于 CrewAI 的对话式 Flow 文档范畴。本页仅停留在注册和集成边界。

会话与状态

对话式 Flow 为你跨轮次管理会话状态和历史记录。你无需手动重新串联历史。

  • AG-UI 的 threadId 就是 CrewAI 的对话 session_id。同一个线程就是同一个对话。
  • 每一轮之前,桥接会注入 Flow 的状态和对话历史,然后调用 stream_turn。CrewAI 恢复已存储的会话状态,而每次请求的覆盖层会重新应用传入的 AG-UI 状态和历史,使浏览器的最新编辑优先于过时的存储。

结果:从后端作者的角度看,每一轮到达时已经携带了该对话的状态,而 CrewAI 会持久化你写入的内容以供下一轮使用。

前端一致性

这是需要牢记的要点:对话式 Flow 与常规 Flow 运行在相同的事件管道上,因此前端代码完全相同。

不存在对话式 Flow 专属的前端 API。这些指南中的每项功能在对话式 Flow 上的工作方式与常规 Flow 完全一致,使用相同的 hook 和组件:

唯一的区别在后端:你如何编写 Flow(基于轮次的 stream_turn 和托管会话状态)以及 conversational=True 注册。端点一旦启动,你已掌握的所有前端构建知识都原样适用。

相关

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。