Flow 卡住:多步对话在某个步骤走不下去的排查
问题现象
Flow 启动了,但:
- 在某个 Collect Step 上反复问同一个问题(用户说了但 Flow 没提取到)
- Route Step 走了错误的分支(比如明明"有空"却走了"没空"的 Edge)
- 用户说了 Flow 没预料到的杂项问题,Flow 直接退出或卡住
排查步骤
第一步:在 Conversations 里看完整的 Flow 轨迹
Conversations 面板里每通走了 Flow 的对话,会显示完整的 Flow 执行轨迹:
[启动 Flow: Reservation]
Step 1 (Collect people): 用户说 "4 个人" → 实体提取: people_count = 4 → 成功
Step 2 (Collect date): 用户说 "明天" → 实体提取: date = 2026-10-14 → 成功
Step 3 (Collect time): 用户说 "晚上" → 实体提取: time = ??? → 失败
系统重试 Step 3...
用户说 "8 点" → 实体提取: time = 20:00 → 成功
Step 4 (Route availability): 调用 API → 返回 "available=false" → 走 Edge: !available
Step 5 (推荐替代): 用户说 "算了" → 退出 Flow
把卡住的那段轨迹找出来,定位是哪一步出的问题。
第二步:针对三类典型故障修复
故障 A:实体提取失败(Collect Step 反复重试)
| 现象 | 原因 | 修复 |
|---|---|---|
| 数字 / 时间 / 日期提取失败 | ASR 把发音相近的词识别错(比如"3 点"→"3 店") | 给 Collect Step 配 ASR Biasing("3 点"、"三点"、"下午三点"优先匹配成 Time 实体) |
| 英文 / 多语言 Flow 提取失败 | 实体类型只配了一种语言 | 在多语言项目里给实体配多语言变体 |
| 用户用自然语言描述复杂信息 | 比如"下周六晚上 8 点,我想订一个 4 人桌" | 在 Collect Step 的 Prompt 里明确告诉 LLM 可以从一句话里提取多个实体,或用 Multi-step 方式逐步收集 |
故障 B:Route Step 走错分支
| 现象 | 原因 | 修复 |
|---|---|---|
| Edge 条件太宽泛 | 比如 Edge 条件是 response contains "yes",但用户说"嗯"、"对"也能触发 | 用更精确的 Edge 条件,或者加一个"不确定"的兜底 Edge |
| Python 转场函数返回值不对 | 函数里 API 调用出错但没有正确处理,返回了错误值 | 看 Conversations 里的 function call 日志,检查返回值 |
| Edge 标签和实际逻辑不匹配 | Edge 标签写的是"available=true"但连接的是"没空推荐替代" | Flow 编辑器里检查 Edge 连接 |
故障 C:用户问了杂项问题,Flow 跑偏
| 现象 | 原因 | 修复 |
|---|---|---|
| Flow 里没有嵌入 RAG | 用户问了 Flow 没预料到的问题,LLM 不知所措 | 开启 Flow 内的 RAG 辅助(Flow Settings 里选 "Allow knowledge retrieval within flow") |
| Step Prompt 太死板 | LLM 被限制死了只能做 Step 里的事,不能灵活回应 | 改 Step Prompt,加"如果用户问其他问题,先回答再回到当前步骤" |
| Flow 里没有 Exit Step | 用户想退出但没有路径 | 加一个 Exit Step 或 Handoff Step 作为兜底 |
第三步:验证修复
在 Sandbox 里用完全相同的对话内容重新测试(最好复制那通失败对话里用户说的每句话),看 Flow 能不能顺利走完。修改 Flow 后实时生效,不需要 Publish 就能在 Sandbox 里测试。