【问题标题】:How to add multiple slots of the same type in one utterance with Amazon Lex?如何使用 Amazon Lex 在一个话语中添加多个相同类型的插槽?
【发布时间】:2018-09-25 23:15:49
【问题描述】:
我正在构建一个允许用户选择一项或多项服务的聊天机器人。我想要的是用户在一个话语中添加许多相同类型的插槽。
我的服务槽有如下服务:
我希望用户能够输入:
I need {Service} and {Service}
I need {Service}, {Service} and {Service}
例如我需要咨询和治疗
但是当我尝试用这些话语构建时,我得到了这个错误:
插槽“{Service}”在“我需要 {Service},
{Service} 和 {Service}" 表示意图“FindService”。
话语必须采用 {slotName} 格式。
【问题讨论】:
标签:
amazon-web-services
chatbot
amazon-lex
【解决方案1】:
我能够重现您的错误:
在意图“___”的话语“______”中,槽“{_____}”无效。话语中的空位必须采用 {slotName} 形式。
这是由大括号旁边的任何字符引起的,并且 Lex 需要在“{slotName}”的两边都有空格。您必须完全删除逗号,因为如果您只是通过在 } 和 , 之间放置一个空格来解决这个问题,那么您将收到此错误:
"," 在意图 "___" 的话语 "________" 中包含不受支持的字符或单词。话语只能由 Unicode 字符、空格和有效的标点符号组成。有效的标点符号是:缩写、下划线、撇号和连字符的句点。如果您的话语中有一个插槽占位符,请确保它采用 {slotName} 格式并且两端都有空格。
此外,删除逗号后,您应该还会收到另一个错误:
在“我需要 {Service} {Service} 和 {Service}”的意图“FindService”中多次使用插槽名称“Service”。
为了解决这个问题,您应该创建多个具有不同slotNames 但都使用相同slotType 的插槽。使用插槽名称,例如:Service_oneService_twoService_three。
请注意,您不能在插槽名称中使用数字 (0-9),否则会出错:
为“slots.#.member.name”指定的值无效。成员必须满足正则表达式模式:^(A-Za-z?)+$
创建这 3 个单独的插槽后,您可以像这样编写新的有效话语:
I need {Service_one} and {Service_two}
I need {Service_one} {Service_two} and {Service_three}
该设置没有错误。现在我不知道 Lex 将如何区分话语 #2 的列表,尤其是让两个插槽彼此相邻并寻找相同的 slotType 值。因此,您必须对其进行测试并观察 Lex 如何填充插槽,然后相应地构建您的 Lambda 验证代码。