话题匹配不上:RAG 召回失败的排查路径
问题现象
客户在对话里问了一个问题(比如"退款需要多久"),但智能体没有召回对应的知识话题,而是说"抱歉我没理解,请再说一遍"或者"这个问题请联系人工客服"。
排查步骤
第一步:在 Conversations 面板里看 RAG 实际匹配结果
打开 Conversations → 找到那通失败的对话 → 看每一轮的话题匹配面板:
| 情况 | 含义 | 下一步 |
|---|---|---|
| 显示"未匹配任何话题" | RAG 完全没召回 | 看第二步 |
| 匹配到了错误的话题(比如"store hours"而不是"refund") | 召回了但语义跑偏 | 看第三步 |
| 匹配到了正确话题但回答仍然不对 | 话题匹配没问题,是 LLM 生成或 Actions 的问题 | 看第四步 |
第二步:检查示例问题覆盖度
如果完全没匹配,最常见的原因是示例问题和用户真实问法差太远:
- 话题的示例问题是"退款政策是什么",但用户说"退钱多久到"——两者语义接近但字面差距大
- 话题的示例问题只有标准中文,用户用了方言、缩写、口语变体
- 话题只配了一种语言,用户用另一种语言问
修复:从 Conversations 里复制用户真实说的话,加进对应话题的 Example Queries 里。每加 5-10 个,在 Sandbox 里重新测试。
第三步:消除话题之间的歧义
如果匹配到了错误话题,原因可能是多个话题的语义范围有重叠:
- 有两个话题分别叫 "return policy"(含"可以在 30 天内退货")和 "refund process"(含"退款会原路返回")——两者都涉及退款,RAG 容易混淆
- 话题的内容本身很泛(比如一个话题叫"价格相关"涵盖 10 种不同问法),另一个话题叫"退款价格"只涵盖退款
修复:
- 合并语义重叠的话题(多个小话题合并成一个大话题)
- 给容易混淆的话题补充区分性示例问题:在 "refund process" 话题里加示例问题"退款"、"退钱",在 "return policy" 话题里加"退货"、"换货"
第四步:检查 Actions 和 LLM 行为
如果话题匹配正确但回答不对:
| 检查项 | 怎么查 |
|---|---|
话题 Actions 里配了 /Flow: XXX 但 Flow 不存在或拼写错误 | Studio → Topics → 对应话题 → Actions 字段 |
| LLM 被 Agent Settings 的 Rules 覆盖 | Agent Settings → Rules → 有没有禁止某些回答 |
| Agent Builder 最近改过 Rules 或 Agent 设置 | Deployments → Live history → 看近期发布 diff |
快速修复 vs 深度优化
| 情况 | 快速修复 | 深度优化 |
|---|---|---|
| 只有 1-2 个话题偶发匹配不上 | 给这几个话题补示例问题 | 定期从 Smart Analyst 拉 Top unmatched queries,批量优化 |
| 大量话题匹配不上 | 整体检查话题结构、合并碎片化话题 | 用 RAG 测试集做系统化评估 |
| 匹配正确但回答不对 | 检查 Actions 和 Rules | 回看 Agent Builder 最近的改动历史 |
验证修复
改完话题后不要直接 Publish 到 Live——先在 Sandbox 里用相同的问法测试。话题改动实时生效,改完就可以在 Sandbox 里测。测通了再走 Deployments 流程。