

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

# 指南和最佳实践
<a name="guidelines"></a>

请参阅以下准则和最佳实践，以优化您的机器人的行为以及与客户的互动。

**签署请求**

[API 参考](https://docs.aws.amazon.com/lexv2/latest/APIReference/welcome.html)中的所有 Amazon Lex V2 模型构建和运行时请求都使用签名 V4 进行验证。有关验证请求的更多信息，请参阅 AWS 一般参考 中的[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。

**保护机密信息**

运行时 API 操作 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 和 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 将会话 ID 作为必填参数。开发人员可将此设置为满足 API 中所述约束的任何值。建议您不要使用此参数发送任何机密信息（如用户登录名、电子邮件或身份证号）。此 ID 主要用于唯一标识与机器人的对话。

**从用户言语中获取槽位值**

Amazon Lex V2 使用您在槽位类型定义中提供的枚举值来训练其机器学习模型。假设您使用以下示例言语定义了名为 `GetPredictionIntent` 的意图：

```
"Tell me the prediction for {sign}"
```

其中 {sign} 是一个自定义类型 `ZodiacSign` 的槽位，该槽位有 12 个枚举值，从 `Aries` 到 `Pisces`。假设用户说“告诉我对 earth 的预测”：
+ 如果您执行以下某种操作，Amazon Lex V2 会推断“earth”是一个 ZodiacSign 值：
  + 通过 [CreateSlotType](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlotType.html) 操作将 `valueSelectionStrategy` 字段设置为 `ORIGINAL_VALUE`
  + 在控制台中选择**扩展值**
+ 如果您通过执行以下操作之一将识别范围限制为所定义的槽位类型的值，Amazon Lex V2 将无法识别“earth”值：
  + 通过 `CreateSlotType` 操作将 `valueSelectionStrategy` 字段设置为 `TOP_RESOLUTION`
  + 在控制台中选择**限制使用槽位值和同义词** 

当您为槽位值定义同义词时，它们会被识别为与槽位值相同。但是，返回的是槽位值而不是同义词。

由于 Amazon Lex V2 会将此值传递给您的客户端应用程序或 Lambda 函数，因此在履行活动中使用槽位值之前，您应检查这些值是否有效。

当 Amazon Lex V2 调用 Lambda 函数或返回与您的客户端应用程序的语音交互结果时，无法保证槽位值的大小写。在文本交互中，槽值的大小写将与输入的文本或槽值匹配（具体取决于 `valueResolutionStrategy` 字段的值）。

**槽位值中的首字母缩略词**

定义包含首字母缩略词的槽位值时，请使用以下模式：
+ 用句点分隔的大写字母（D.V.D.）
+ 用空格分隔的大写字母（D V D）

**日期和时间内置槽位**

[AMAZON.Date](built-in-slot-date.md) 和 [AMAZON.Time](built-in-slot-time.md) 内置槽位类型可同时捕获绝对和相对日期和时间。相对日期和时间以 Amazon Lex V2 收到请求的时间和日期以及处理请求的区域为准。

对于 `AMAZON.Time` 内置槽位类型，如果用户不指定是在上午还是下午，则时间是不确定的。在这种情况下，Amazon Lex V2 将再次提示用户。建议用户提示引发绝对时间。例如，使用这类提示：“您希望披萨什么时候送到？ 您可以说下午 6 点或晚上 6 点。”

**避免机器人的训练数据存在歧义**

在机器人中提供易混淆的训练数据将减弱 Amazon Lex V2 理解用户输入的能力。假设您的机器人中有两个意图（`OrderPizza` 和 `OrderDrink`），并将“我想订购”作为示例言语。在您构建机器人时，Amazon Lex V2 无法将这种言语映射到特定的意图。因此，当用户在运行时输入此言语时，Amazon Lex V2 无法高度自信地选择意图。

如果您有两个具有相同示例言语的意图，请通过输入上下文帮助 Amazon Lex V2 在运行时区分这两个意图。有关更多信息，请参阅[设置意图上下文](https://docs.aws.amazon.com/lexv2/latest/dg/context-mgmt-active-context.html)。

**使用 TSTALIASID 别名**
+ 您的机器人的 TSTALIASID 别名指向草稿版本，并且应仅用于手动测试。Amazon Lex 限制您向机器人的 TSTALIASID 别名发出的运行时请求数量。
+ 更新机器人的草稿版本时，Amazon Lex 将根据机器人的 TSTALIASID 别名终止任何客户端应用程序中正在进行的对话。一般而言，不应在生产环境中使用机器人的 TSTALIASID 别名，因为其草稿版本可能会更新。您应该发布一个版本和别名，然后改用它们。
+ 更新别名时，Amazon Lex 需要几分钟使更改生效。修改机器人的草稿版本时，TSTALIASID 别名会立即采用更改。