本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
语法插槽类型
使用语法插槽类型,您可以按照 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 序列化字符串返回。
添加语法插槽类型
要添加语法插槽类型,请执行以下操作:
-
将插槽类型的 XML 定义上传到 S3 存储桶。记下存储桶名称和文件路径。
注意
最大文件大小为 100 KB。
-
登录到 AWS Management Console,并通过以下网址打开 Amazon Lex 控制台:https://console.aws.amazon.com/lex/
。 -
从左侧菜单中选择机器人,然后选择要添加语法插槽类型的机器人。
-
选择查看语言,然后选择要添加语法插槽类型的语言。
-
选择查看插槽类型。
-
选择添加插槽类型,然后选择添加语法插槽类型。
-
指定插槽类型的名称,然后选择添加。
-
选择包含定义文件的 S3 存储桶,然后输入文件路径。选择保存插槽类型。