如何通过Amazon Lex一次添加多个相同类型的插槽?

时间:2018-09-23 08:29:53

标签: amazon-web-services chatbot amazon-lex

我正在建立一个聊天机器人,允许用户选择一项或多项服务。我想要的是用户一次说出许多相同类型的广告位。

“我的服务”插槽提供以下服务:

  • 咨询
  • 疗法
  • 医疗保健
  • 成瘾治疗...

我希望用户能够输入以下内容:

I need {Service} and {Service}
I need {Service}, {Service} and {Service}

例如我需要咨询和治疗

但是当我尝试使用这些话语构建时,会出现此错误:

  

广告位“ {Service}”无效,“我需要{Service},   {Service}和{Service}”表示意图“ FindService”。   语音的格式必须为{slotName}。

1 个答案:

答案 0 :(得分:1)

我能够重新创建您的错误:

  

插槽“ {_____}”对意图“ ___”的发音“ __________”无效。发话的广告位必须采用{slotName}的形式。

这是由于花括号旁边有任何字符引起的,并且Lex在“ {slotName}”的两边都需要空格。您将必须完全删除逗号,因为如果仅通过在,slotNames之间放置空格来解决此问题,则会出现此错误:

  意图“ ___”的话语“ ________”中的

”,“”包含不受支持的字符或单词。语音只能包含Unicode字符,空格和有效的标点符号。有效的标点符号为:缩写句号,下划线,撇号和连字符。如果您的发言中有插槽占位符,请确保其为{slotName}格式,并且两端都有空格。

此外,删除逗号后,您仍然应该收到另一个错误:

  

插槽名称“ Service”多次用于意图“ FindService”的“我需要{Service} {Service}和{Service}”。

为解决此问题,您应使用不同的slotType创建多个插槽,但所有插槽都使用相同的Service_one 。使用插槽名称,例如:Service_two Service_three I need {Service_one} and {Service_two} I need {Service_one} {Service_two} and {Service_three} 。 请注意,您不能在插槽名称中使用数字(0-9),否则会出现错误:

  

为“ slots。#。member.name”指定的值无效。成员必须满足正则表达式模式:^(A-Za-z?)+ $

在创建了这3个单独的广告位之后,您可以像这样编写新的有效发音:

def array():
    a = []
    size = int(input("Enter the size of array: "))

    for i in range(size):
        b = int(input("enter array element: "))
        a.append(b)
    return a

该设置没有错误。现在,我不知道Lex如何区分发声#2列表,特别是让两个插槽紧挨着并寻找相同的slotType值。因此,您将必须进行测试,并观察Lex如何填充插槽,然后相应地构建Lambda验证代码。