【问题标题】: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 验证代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多