为什么Dialogflow两次询问相同的后续意图?

时间:2018-09-25 18:31:41

标签: dialogflow

我第一次创建了一个非常简单的Dialogflow项目,但我的后续意图中有一个问题。它两次询问相同的后续问题。

enter image description here

在此处输入图片说明 enter image description here

enter image description here

enter image description here

我正在Dialogflow中对此进行测试。您有什么建议可以尝试吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

问题归结为跟进意图的工作原理以及Dialogflow用于实施它们的机制。

之所以起作用,是因为基本意图将设置输出上下文,并且仅针对相同的输入上下文触发有效的后续意图。因此,lst= ['1 5','1 12','1 55','2 95', '2 66', '3 45'] result = {} for i in lst: k, v = i.split() k = int(k) v = 'doc{}'.format(v.zfill(4)) if k in result: result[k].add(v) else: result[k] = {v} print(result) #{1: {'doc0005', 'doc0012', 'doc0055'}, 2: {'doc0095', 'doc0066'}, 3: {'doc0045'}} 意图设置了check上下文,而check-followup意图取决于所设置的check-no意图。同样,check-followup意向设置check-no上下文,而check-no-followup意向期望设置check-no-no上下文。

但是,这些上下文的生存期最初设置为2,并且每次处理Intent时都会减少。因此,在处理check-no-followup意向后,我们将设置两个上下文:check-no check-followup

当用户再次说“否”时,这成为一个难题。匹配两个Intent,并且两个Intent都具有当时有效的Context:check-no-followup(因为check-no上下文仍处于活动状态)和check-followup(因为{{1 }}上下文刚刚被激活)。由于一个以上的Intent可能是有效的-不确定将调用哪个Intent。这就是为什么它可以在您尝试过的其他测试用例中使用的原因。

在您的情况下,一种合理的解决方案是确保您希望这时这两个上下文中的哪个上下文是有效的。在这种情况下,您应该在希望与它们匹配的Intent之后关闭Context。因此,这意味着如果触发check-no-no上下文,则需要将check-no-followup设置为输出上下文,并具有一个重要的区别-您应将其生命周期显式设置为0 。这将删除该上下文,因此不会混淆可用于处理用户的下一个答复的Intent。