PolyAI 中文文档 下载 App

为什么 Flows 比 Topic 更适合多步引导式对话

Topic 和 Flow 的边界

维度Topic(知识话题)Flow(对话流程)
对话模式单轮问答多步引导
状态管理无状态(每次对话独立)有状态(跟踪用户提供的信息)
典型场景"营业时间几点?"预订(收集人数→日期→时间→姓名→确认)
可验证性话题是否匹配每个步骤都能单独验证输入
触发方式RAG 自动召回Topic Actions 触发 / 其他 Flow 跳转 / 代码触发

一个简单的判断标准:如果对话需要用户提供多个信息、并且顺序或条件有约束——用 Flow。

Flow 的基本构成

每个 Flow 由步骤(Step) 组成,步骤之间用带条件的边(Edge) 连接。每个步骤包含:

PolyAI 支持两种构建方式:无代码(Default Steps + 实体提取) 和 代码驱动(Python 转场函数)。

Flow 编辑器界面
Flow 编辑器界面

一个具体例子:预订 Flow 怎么构成

一个餐厅预订 Flow 的步骤结构大致是:

Start → Step 1: 收集人数 → Step 2: 收集日期 → Step 3: 收集时间 
  → Step 4: 确认可用性(调用 API 或 Python 函数)
    → 可用 → Step 5: 收集姓名和电话 → Step 6: 确认 → End
    → 不可用 → 推荐替代时间 → 回到 Step 3 或结束

每个步骤之间的 Edge 有条件标签——比如 Step 4 到 Step 5 的 Edge 标签是 "table_available=true",Step 4 到替代时间推荐的 Edge 标签是 "table_available=false"。LLM 在运行时判断用户输入符合哪个条件,然后走对应的路径。

Flow 和 RAG 的协作关系

Flow 和 RAG 不是互斥的——Flow 的步骤里仍然可以调用 RAG 召回知识话题。比如预订 Flow 的 Step 3 收集时间时,用户可能问"你们周末几点开门?"——Flow 步骤内的 RAG 会召回 Store hours 话题回答这个问题,然后回到时间收集的正轨继续走。

这使得 Flow 不会显得机械——用户在多步流程中可以随时问其他问题,智能体先回答再回到主线。

Flow 的三种触发入口

一个 Flow 可以从三种地方被触发:

  1. Topic Actions(最常见):某个知识话题里配置了 /Flow: Reservation 动作,RAG 召回话题时自动触发 Flow
  2. 其他 Flow 的步骤:Flow 之间可以嵌套,一个 Flow 的某一步可以跳转到另一个 Flow
  3. 代码 / API:在 Python 函数里调用 conv.goto_flow("Reservation"),或者通过 REST API 直接启动一个 Flow

这种多入口设计让 Flow 可以灵活串联,构建复杂的多层级对话逻辑。