在用户可能尝试传递不止一条信息的情况下,应该如何处理对话轮次?

How should one handle conversational turns where the user could try to pass more than one piece of information?

在用户可能希望一次提供多条信息的情况下,例如一个地点,一个日期和一天中的一个时间,Dialogflow 应该相应地为这三个插槽的每个可能子集匹配一个意图,或者最好的做法是用一个意图来处理它,该意图将短语与所有可能的组合相匹配并分开Webhook 中的案例?

无论哪种方式,我假设所需参数的插槽填充应该由 webhook 处理,而不是由 Dialogflow 中设置的提示处理? 我对 Dialogflow 的意图匹配背后的确切过程几乎没有经验,所以我不确定最可靠的方法是什么。

或者从一开始就允许用户一次填充多个插槽(从应用程序 development/maintainability 的角度来看)通常不是一个好主意吗?

一般来说,为用户可能说的每件事设定意图是一种很好的方法。许多人认为意图就像流程中的一个步骤,但这不是处理它们的正确方法。您可以将它们视为用户短语的类别,它们描述了您的用户试图说的话。例如:

  • “我要点菜。”
  • “给我一个汉堡包和薯条”
  • 我想用我的信用卡支付

您可以将这三个短语视为订单流程中的 3 个步骤,但如果尝试将这些短语归类为不同的意图,您会得到 2 个可以彼此独立工作的意图。

  1. 订购意图(“我要订购”、“给我一个汉堡包和薯条”)
  2. 结帐意图(“我想用我的信用卡付款”)

通过分离意图,您可以保持对话的灵活性,并且可以更轻松地 re-use 响应和编码。

如您所料,插槽填充用于从用户短语中获取特定信息。在订单意图的情况下,它将是一个订单。在我提供的示例短语中,您可能已经注意到一个短语缺少实际顺序。这很好,因为如果我告诉你“我想点菜”,你知道我想做什么,我想买东西,当我告诉你“给我一个汉堡包”时,这两个短语都是属于同一类别。

如果你想创造最好的体验和动态对话,我必须建议通过代码进行插槽填充。 Dialogflow 工具非常适合快速完成基本操作,但如果您想根据用户是否提及产品来询问不同的问题,则必须通过 .[=12 进行槽位填充或检查参数=]

简而言之,我将为每种类型的用户短语使用 1 个意图,处理该意图中的参数,并使用 slot filling and context 通过 webhook 进行插槽填充或变体响应。如果缺少任何信息,请将当前信息保存在上下文中并提示用户输入您需要的信息。

例如:“好的,你想要汉堡和薯条,你也想喝一杯吗?”。