本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
语法槽位类型
重要
亚马逊 Lex V2 授予每个 AWS 账户访问语法槽类型的权限。如果您的账户没有访问权限,Amazon Lex V2 会拒绝向机器人添加语法槽类型的尝试。Amazon Lex V2 还拒绝为包含语法槽类型的语言环境构建。要申请访问您的账户,请联系 AWS 支持。如果您不需要自己编写语法,则可以改用自定义插槽类型。
使用语法槽位类型,您可以按照 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" }
该对象在RecognizeText、RecognizeUtterance和StartConversation操作返回的resolvedValues对象中以 JSON-serialized 字符串形式返回。
添加语法槽位类型
要添加语法槽位类型,请执行以下操作:
-
将槽位类型的 XML 定义上传到 S3 存储桶。记下存储桶名称和文件路径。
注意
最大文件大小为 100 KB。
-
登录 AWS 管理控制台并在以下位置打开 Amazon Lex 控制台https://console.aws.amazon.com/lex/
。 -
从左侧菜单中选择机器人,然后选择要添加语法槽位类型的机器人。
-
选择查看语言,然后选择要添加语法槽位类型的语言。
-
选择查看槽位类型。
-
选择添加槽位类型,然后选择添加语法槽位类型。
-
指定槽位类型的名称,然后选择添加。
-
选择包含定义文件的 S3 存储桶,然后输入文件路径。选择保存槽位类型。