语法插槽类型 - Amazon Lex

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

语法插槽类型

使用语法插槽类型,您可以按照 SRGS 规范以 XML 格式编写自己的语法,以便在对话中收集信息。Amazon Lex V2 可以识别符合语法中指定规则的言语。您还可以在语法文件中使用 ECMAScript 标签提供语义解释规则。然后,当出现匹配时,Amazon Lex 会将标签中设置的属性作为已解析值返回。

您只能在英语(澳大利亚)、英语(英国)和英语(美国)区域设置中创建语法插槽类型。

语法插槽类型分为两个部分。首先是使用 SRGS 规范格式编写的语法本身。该语法解释用户的言语。如果该言语被语法所接收,该言语是匹配的,否则就会被拒绝。如果匹配了某个言语,则该言语将传递给脚本(如有)。

第二个是语法插槽类型的一部分,是用 ECMAScript 编写的可选脚本,将输入转换为插槽类型返回的解析值。例如,您可以使用脚本将口述数字转换为数字值。ECMAScript 语句的前后以 <tag> 元素标记。

以下示例依据 SRGS 规范采用 XML 格式,其中显示了 Amazon Lex V2 接受的有效语法。该语法定义了一种接受卡号,并确定这些卡号是用于普通账户还是高级账户的语法插槽类型。有关可接受句法的更多信息,请参阅以下主题:语法定义脚本格式

<grammar version="1.0" xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" tag-format="semantics/1.0" root="card_number"> <rule id="card_number" scope="public"> <item repeat="0-1"> card number </item> <item> seven <tag>out.value = "7";</tag> </item> <item> <one-of> <item> two four one <tag> out.value = out.value + "241"; out.card_type = "premium"; </tag> </item> <item> zero zero one <tag> out.value = out.value + "001"; out.card_type = "regular";</tag> </item> </one-of> </item> </rule> </grammar>

上述语法仅接受两种类型的卡号:7241 或 7001。这两者都可以选择以“卡号”为前缀。它还包含可用于语义解释的 ECMAScript 标签。通过语义解释,言语“卡号七二四一”将返回以下对象:

{ "value": "7241", "card_type": "premium" }

此对象在 RecognizeTextRecognizeUtteranceStartConversation 操作返回的 resolvedValues 对象中作为 JSON 序列化字符串返回。

添加语法插槽类型

要添加语法插槽类型,请执行以下操作:
  1. 将插槽类型的 XML 定义上传到 S3 存储桶。记下存储桶名称和文件路径。

    注意

    最大文件大小为 100 KB。

  2. 登录到 AWS Management Console,并通过以下网址打开 Amazon Lex 控制台:https://console.aws.amazon.com/lex/

  3. 从左侧菜单中选择机器人,然后选择要添加语法插槽类型的机器人。

  4. 选择查看语言,然后选择要添加语法插槽类型的语言。

  5. 选择查看插槽类型

  6. 选择添加插槽类型,然后选择添加语法插槽类型

  7. 指定插槽类型的名称,然后选择添加

  8. 选择包含定义文件的 S3 存储桶,然后输入文件路径。选择保存插槽类型