一般指导原则 - Amazon Lex V1

如果您使用的是 Amazon Lex V2,请改为参阅 Amazon Lex V2 指南

 

如果您使用的是 Amazon Lex V1,我们建议您将机器人升级到 Amazon Lex V2。我们不再向 V1 添加新功能,强烈建议使用 V2 以获得全新的机器人。

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

一般指导原则

本节描述了使用 Amazon Lex 时的一般准则。

  • 签名请求 — API参考 中的所有 Amazon Lex 模型构建和运行时 API 操作都使用签名 V4 来验证请求。有关验证请求的更多信息,请参阅 Amazon Web Services 一般参考 中的签名版本 4 签名流程

     

    对于 PostContent,Amazon Lex 使用《Amazon Simple Storage Service (S3) API 参考》中的 Authorization 标头签名计算:在单个数据块中传输负载(AWS 签名版本 4)中所述的无符号负载选项。

     

    当您使用无符号负载选项时,请勿在规范请求中包括有效负载的哈希。而应使用文字字符串“UNSIGNED-PAYLOAD”作为负载的哈希。还应在 PostContent 请求中包含一个名为 x-amz-content-sha256 并且值为 UNSIGNED-PAYLOAD 的标头。

     

  • 请注意以下有关 Amazon Lex 从用户言语中捕获插槽值的方式的信息:

     

    Amazon Lex 使用您在插槽类型定义中提供的枚举值来训练其机器学习模型。假设您使用以下示例表达定义了名为 GetPredictionIntent 的目的:

    "Tell me the prediction for {Sign}"

    其中 {Sign} 是自定义类型 ZodiacSign 的槽。它具有 12 个枚举值 (AriesPisces)。从用户言语“告诉我预测 ...”中,Amazon Lex 了解到接下来要表达的是星座。

     

    如果使用 PutSlotType 操作将 valueSelectionStrategy 字段设置为 ORIGINAL_VALUE,或如果在控制台中选中了扩展值,则当用户说“告诉我对地球的预测”时,Amazon Lex 将推断“地球”为 ZodiacSign 并将它传递到您的客户端应用程序或 Lambda 函数。您必须检查槽值是有效的,然后才能在完成活动中使用它们。

     

    如果您使用 PutSlotType 操作将 valueSelectionStrategy 字段设置为 TOP_RESOLUTION,或如果在控制台中选中了 Restrict to slot values and synonyms,则返回的值将限制为您为槽类型定义的值。例如,如果用户说“Tell me the prediction for earth”,则无法识别此值,因为它不是为槽类型定义的值之一。如果您定义同义词作为槽值,则会将同义词视为与槽值相同,但是,将返回槽值而不是同义词。

     

    当 Amazon Lex 调用 Lambda 函数或返回与您的客户端应用程序的语音交互的结果时,无法保证返回插槽值。例如,如果引发 AMAZON.Movie 内置插槽类型的插槽值,而用户说出或键入“Gone with the wind”,Amazon Lex 可能会返回“Gone with the Wind”、“gone with the wind”或“Gone With The Wind”。在文本交互中,是否返回槽值将与输入的文本或槽值匹配 (具体取决于 valueResolutionStrategy 字段的值)。

     

  • 定义包含首字母缩略词的插槽值时,请使用以下模式:

    • 用句点分隔的大写字母 (D.V.D.)

    • 用空格分隔的大写字母 (D V D)

     

  • Amazon Lex 不支持 AMAZON.LITERAL 内置插槽类型,但 Alexa Skills Kit 支持此类型。但是,Amazon Lex 支持创建您可用于实施此功能的自定义插槽类型。如上一要点中提到,您可捕获自定义槽类型定义外部的值。可添加更多不同的枚举值来提升自动语音识别 (ASR) 和自然语言理解 (NLU) 的准确度。

     

  • AMAZON.DATEAMAZON.TIME 内置槽类型可同时捕获绝对和相对日期和时间。相对日期和时间在 Amazon Lex 处理请求的区域中解析。

     

    对于 AMAZON.TIME 内置插槽类型,如果用户不指定是在上午还是下午,则时间是不确定的,Amazon Lex 会再次提示用户。我们建议提示引出绝对时间。例如,使用这类提示:“您希望披萨什么时候送到? 您可以说下午 6 点或晚上 6 点。”

     

  • 在机器人中提供易混淆的训练数据将减弱 Amazon Lex 理解用户输入的能力。请考虑以下示例:

     

    假设自动程序包含两个目的 (OrderPizzaOrderDrink),并且这两个目的都是使用“我需要订购”表达配置的。在构建时为机器人构建语言模型时,此言语不会映射到 Amazon Lex 可了解的特定意图。因此,当用户在运行时输入此言语时,Amazon Lex 无法高度自信地选择意图。

     

    再举个例子,您定义自定义目的 (例如,MyCustomConfirmationIntent) 以获取用户确认并使用表达“是”和“否”来配置目的。请注意,Amazon Lex 还有一个理解用户确认的语言模型。这可能会导致出现冲突。当用户回复“是”时,这意味着确认进行中的目的还是用户在请求您创建的自定义目的?

     

    通常,您提供的示例表达应映射到特定目的和 (可选) 特定槽值。

     

  • 运行时 API 操作 PostContentPostText 采用用户 ID 作为必需参数。开发人员可将此设置为满足 API 中所述约束的任何值。建议您不要使用此参数发送任何机密信息 (如用户登录名、电子邮件或身份证号)。此 ID 主要用于唯一识别与自动程序的对话 (可能有多个用户订购披萨)。

     

  • 如果您的客户端应用程序使用 Amazon Cognito 进行身份验证,您可使用 Amazon Cognito 用户 ID 作为 Amazon Lex 用户 ID。请注意,为机器人配置的任何 Lambda 函数都必须有自己的身份验证机制才能标识 Amazon Lex 代表其调用 Lambda 函数的用户。

     

  • 我们鼓励您定义捕获用户中断对话的意图的目的。例如,您可以定义具有示例言语(“我什么都不需要”、“退出”、“再见”)但没有插槽和配置为代码挂钩的 Lambda 函数的意图 (NothingIntent)。这将使用户能够正常关闭对话。