假设我有2个基本意图,即Set Appointment
和Cancel Appointment
。
每个意图都有自己的后续问题,依此类推。当用户处于意图Set Appointment
的跟踪链中时,如果他/她说出"cancel appointment for abc"
由于两个意图都有空的输入上下文,因此可以从Google Assistant的调用(即Tell XYZ App to set appointment for....
)中调用它们,因此这似乎使用户能够在意图中间对话之间进行切换。
如何限制这种行为?还是这里有一些最佳设计实践?
答案 0 :(得分:0)
首先,请记住,意图表示的是用户所说的内容,不是您对用户所说的内容所做的事情。
第二,请记住,用户可以随时更改对话的过程。因此,有意义的是,如果他们开始添加约会,则可能要取消该约会。
最好的方法是,如果他们在约会中试图取消,则由您决定如何处理对话中的更改。然后以这种方式答复。您可以选择更改曲目。或者,您可以选择说些类似“先添加此新约会,然后我们可以取消旧约会”之类的话。使用此方案:
在大多数(并非全部)情况下,我倾向于采用这种方法。它使我能够对逻辑进行编码,并让我根据整个状态确定最佳答复方式。
您可以使用的另一种方法是,使用输入上下文创建一个Intent,该Intent与您当前的上下文查询行匹配,该查询行与您不想匹配的Intent中的短语匹配。 (作为特定于上下文的Fallback Intent的否定训练短语的一部分,这甚至可能是合理的。)上下文匹配在无上下文匹配之前进行处理。因此,在此方案下,您将:
使用哪种方法取决于代码中如何处理其他状态管理。