我们正在尝试为汽车经销商构建一个聊天机器人。当用户询问诸如"我正在寻找福特2017车型"等查询时,在向用户显示最终结果之前,我们还有一些插槽需要填补。因此,为了解决这个问题,我们创建了一个具有所需参数的意图。我们还提供一些自定义 UI 按钮来帮助用户完成插槽填充过程。但是,有时用户可以选择提供自己的输入,有时用户可以输入插槽值以外的文本。
例如:
- 用户:我正在寻找福特最新车型2017年或之后。
- 机器人:您正在寻找哪种型号:我们显示一些选项
- 用户:转义
- 机器人:您正在寻找的价格范围是什么:我们显示一些选项
- 用户:我正在寻找足够一家四口的东西。
在这里,在这种情况下,插槽填充被破坏,因为用户没有给出预期的插槽/参数。此外,如果我们能以某种方式回复这种人类的细微差别并继续填充插槽,那将是很好的用户体验。
编辑:我们已经在插槽填充期间合并了一些机制来处理用户输入某些输入而不是所需插槽值的情况。但有时此机制不起作用,有时用户可能会输入触发新意图的语句。
如何使用对话流处理此类情况?
我建议不要使用Dialogflow的内置插槽填充。我以前遇到过这个问题,现在我只是为我想从用户那里收集的每个"变量"创建不同的意图。 如果您让用户知道您希望他们以何种格式回答,您仍然可以使用插槽填充。荷航聊天机器人完美地做到这一点,您应该检查一下。
更新:以下是处理不同参数输入的方法。每当用户响应您不希望触发"question.invalidInput"的内容时,您可以提醒用户您期望的格式。
Intent: question
Trainings phrase: 'May I enter?'
Output context: 'await_olderThan21'
Response: 'Are you older than 21?'
Intent: question.yes
Training phrase: 'yes'
Input context: 'await_olderThan21'
Output context: ''
Response: 'Yes, you may enter'
Intent: question.no
Training phrase: 'no'
Input context: 'await_olderThan21'
Output context: ''
Response: 'No, you may not.'
Intent: question.invalidInput
Training phrase: @sys.any
Input context: 'await_olderThan21'
Output context: 'await_olderThan21'
Response: 'Invalid answer. Please reply with yes or no.'
例如:
User: I am looking for ford latest models 2017 or afterwards.
Bot: Which model are you looking for: We display some options
User: escape
Bot: What is the price range you are looking for: We display some options
User: I looking for something which will suffice for a family of 4.
Bot *fallback*: Please enter the maximum amount you would like to spend on a car (in dollar)
这样,用户就知道如何响应,并且您会注意到您将体验到较少的预期行为。
始终尝试引导用户朝着您想要的方向前进。
希望这有帮助!