如何防止用户在对话中跳到另一个意图?

How to prevent user from hopping to another intent in the middle of the conversation?

假设我有 2 个基本意图,即 Set AppointmentCancel Appointment

每个意图都有自己的后续问题等等。当用户处于意图 Set Appointment 的后续链中时,如果 he/she 说 [=13],我想 防止 用户跳到另一个意图=]

由于两个意图都有空的输入上下文,因此可以从 Google 助手的调用中调用它们,即 Tell XYZ App to set appointment for....,这似乎允许用户能够在对话中的意图之间跳转。

如何限制这种行为?还是这里有某种设计最佳实践?

首先,请记住 Intents 表示 用户 说的内容,不是用户说的您正在做的事情。

其次,请记住用户可以随时更改对话的进程。因此,如果他们开始添加约会,他们可能想要取消该约会,这是有道理的。

最好的方法是,如果他们试图在预约过程中取消,您可以决定如何处理对话中的这种变化。然后就这样回复。您可以选择更改曲目。或者您可以选择说 "let's add this new appointment first, and then we can cancel the old one" 之类的话。使用此方案:

  • 您有一个符合 "set the appointment for 10am"
  • 的 Intent
  • 在你的处理程序中:
    • 如果您不采取任何行动,您将开始提示他们提供额外的约会设置信息或其他信息。
    • 如果您已经在安排约会,请提示他们是否要将时间更改为上午 10 点
    • 如果您要取消约会,请告诉他们您会在完成新约会后讨论取消旧约会。

在大多数(但不是全部)情况下,我倾向于采用这种方法。它让我编写逻辑代码,并让我根据整个状态确定最佳回复方式。

您可以使用的另一种方法是使用输入上下文创建一个 Intent,该 Intent 与您当前的问题上下文行相匹配,与您不想匹配的 Intent 中的短语相匹配。 (这甚至可能作为特定于上下文的后备意图的否定训练短语的一部分是合理的。)上下文匹配在无上下文匹配之前处理。所以在这个方案下你将有:

  • 一个 Intent,没有输入上下文,匹配 "set the appointment for 10am"。此 Intent 的处理程序将设置 "set" 上下文并开始提示其他信息。
  • 一个 Intent,您的 "set" 输入上下文与 "set the appointment for 10am" 匹配。这可以做一些事情,比如重新启动提示,或者只是改变他们请求的时间。
  • 一个 Intent,您的 "cancel" 输入上下文与 "set the appointment for 10am" 匹配。此处理程序会让他们知道您将在最后询问是否取消旧约会。

您使用哪种方法取决于您如何处理代码中的其他状态管理。