如何在对话框流程中验证用户表达

时间:2018-10-30 10:50:26

标签: dialogflow chatbot api-ai

我在dialogflow中创建了一个披萨机器人。情况就像..

  

机器人说:嗨,你想要什么。

     

用户说:我要披萨。

如果用户说I want watermelonI love pizza,那么dialogflow应该以错误消息响应并再次询问相同的问题。在收到用户的有效回复后,机器人应提示第二个类似

  

Bot说:您想要哪种披萨。

     

用户说:我要蘑菇(任何)披萨。

如果用户提供了诸如I want icecreamI want good pizza之类的垃圾数据,那么bot必须再次以错误进行响应,并应该问同样的问题。我已经用意图训练了机器人,但是问题是验证用户输入。  我如何才能在dialogflow中实现它? 培训数据和输出概览 traning data

2 个答案:

答案 0 :(得分:0)

如果您已经创建了不同的训练短语,则无效的短语通常会触发回退意图。如果您仅使用@sys.any作为参数类型,那么它将用任何东西填充它,因此您应该定义更窄的实体类型。

在您提供的示例Intent中,您有许多训练短语,但是Dialogflow将这些训练短语用作指南,而不是必须匹配的绝对字符串。根据您的训练,似乎应该匹配诸如“我想要。+披萨”之类的短语,因此NLU模型可能会这样读取。

为精确缩小所需范围,您可能希望创建一个实体类型来处理比萨饼口味。这将有助于缩小NLU模型如何解释用户的意见。这也使可以更轻松地了解他们要的比萨饼类型,因为您可以检查参数,而不必再次解析整个字符串。

在后备意图中如何处理此问题取决于系统其余部分的工作方式。最简单的方法是使用“实现”网络挂钩来确定您所处问题的状态,然后重复问题或提供其他指导。

还请记住,对话可能会如下所示:

  

机器人说:嗨,你想要什么。

     

用户说:我要蘑菇披萨。

他们跳过了您的一个问题(在这种情况下,这不是必需的)。这对于会话式用户界面来说是正常的,因此您需要为此做好准备。

答案 1 :(得分:0)

比萨的类型(例如蘑菇,鸡肉等)应为自定义实体。

entity for the pizza flavours

然后,您应按自己的意愿定义培训短语,但要确保已标记实体,并且还要为用户的响应添加模板:

intent

您需要在此处注意以下三点:

  1. 实体已标记
  2. 使用了模板。要创建模板,请单击培训短语中的引号,如下图所示。确保再次在此处使用您的实体
  3. 使您的披萨类型为必填参数。这样,除非提供有效答案,否则它不会前进到下一个问题。

switching from example to template and vice versa

最后的建议是在设计交互和响应时付出更多的努力。用“您想要什么”向用户打招呼并不是最好的体验。另外,您尝试使用这种方法将其强制进入一条特定的路径,但这并不是对话式应用程序应采用的方式。您可以找到有关此here的更多信息。 更好的体验是与用户打招呼,说明他们可以使用您的应用做什么,并让他们知道他们的选择。 示例 : -嗨,欢迎使用Pizza App!我在这里是为了帮助您为您找到最理想的披萨[注意:在这里,您需要添加您的机器人可以执行的其他任何操作,例如跟踪订单]!我们最受欢迎的比萨饼是蘑菇,鸡肉和玛格丽塔?您知道您想要的还是需要帮助?