Dialogflow中“意图优先级(Intention Priority)”失效问题排查
我之前也碰过类似的坑,结合你的场景来看,大概率是上下文配置缺失或者对优先级规则理解有误导致的,下面给你拆解问题和解决方案:
先复盘你的场景
预期流程:
用户:我准备好了。
系统:提问开始。
用户:我不知道。
系统:给你个小提示:TRIangle
用户:我不知道。
系统:哦,你太笨了。三角形有三个角,蠢货。
实际问题是第二次说“我不知道”时,没有触发第二个嘲讽意图——这说明Dialogflow没区分开两次“我不知道”的触发时机。
核心原因&解决办法
1. 没通过上下文区分触发时机(最常见)
Dialogflow的意图匹配不是只看优先级,还会结合当前会话的上下文(Context)。如果两个“我不知道”意图没有上下文限制,即使优先级设了,Dialogflow也不知道该在什么时候触发哪一个。
具体操作:
- 给第一个「提示意图」加一个输出上下文(比如叫
after_first_hint),生命周期设为1轮(意思是这个上下文会在用户下一次回复后消失,刚好匹配第二次触发的场景)。 - 给第二个「嘲讽意图」加输入上下文为
after_first_hint——这样只有在第一个意图触发后,这个上下文存在的情况下,第二个意图才会被纳入匹配范围。 - 同时把第二个意图的优先级设得比第一个更高(划重点:Dialogflow里优先级数值越小,优先级越高!比如第一个设为10,第二个设为0)。
2. 搞反了优先级的数值规则
很多人会误以为数值越大优先级越高,但Dialogflow刚好相反:0级优先级最高,数值越大优先级越低。如果你把嘲讽意图的优先级设得比提示意图大,那肯定轮不到它触发。
检查方法:
进入两个意图的设置页,找到「Priority」选项,确认嘲讽意图的数值比提示意图小就行。
3. ML分类干扰了优先级匹配
如果你的意图开启了ML Classification(意图训练短语下方的选项),Dialogflow的机器学习模型可能会根据训练数据的分布来选意图,而不是严格按优先级。当两个意图有完全一样的训练短语时,ML可能优先选训练数据多的那个。
解决办法:
- 暂时关闭这两个意图的「ML Classification」,强制Dialogflow按优先级+上下文匹配。
- 或者给两个意图的训练短语加一点差异化内容:比如提示意图加「我不会」「我不懂」,嘲讽意图保留「我不知道」,但靠上下文来触发。
4. 测试时会话上下文丢失
有时候在测试控制台刷新页面、或者换了会话ID,会导致上下文被清空,第二个意图自然触发不了。
验证方法:
在Dialogflow测试控制台的右侧「Contexts」面板里,看第一个意图触发后,你设置的after_first_hint上下文是否存在——如果不存在,说明上下文配置有问题。
验证流程
改完配置后重新测试,应该就能按预期触发了。如果还是不行,再检查:
- 上下文的输入/输出是否对应正确
- 优先级数值是不是真的第二个更小
- 有没有不小心给两个意图加了相同的输入上下文
内容的提问来源于stack exchange,提问作者Colibri

