

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

# 添加意图
<a name="add-intents"></a>

意图是您的用户想要实现的目标，例如订购鲜花或预订酒店。您的机器人必须有至少一个意图。

默认情况下，所有机器人均包含一个内置意图，即回退意图。当 Amazon Lex V2 无法识别任何其他意图时，就会使用此意图。例如，如果用户对酒店预订意图说“我想订购鲜花”，则会触发回退意图。

**要添加意图，请执行以下操作：**

1. 登录 AWS 管理控制台，然后在以下网址打开 Amazon Lex 控制台[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 从机器人列表中，选择要添加意图的机器人，然后在**添加语言**中选择**查看语言**。

1. 选择要添加意图的语言，然后选择**意图**。

1. 选择**添加意图**，指定意图的名称，然后选择**添加**。

1. 在意图编辑器中，添加意图的详细信息。
   + **对话流程**：使用对话流程图查看与您的机器人的对话。您可以选择对话的不同部分以在意图编辑器中跳转到该部分。
   + **意图详情**：指定意图的名称和描述，以帮助确定意图的目的。您还可以查看 Amazon Lex V2 指定给此意图的唯一标识符。
   + **上下文**：设置意图的输入和输出上下文。上下文是与意图相关联的状态变量。输出上下文在履行意图时设置。只有当上下文处于活动状态时，才能识别带有输入上下文的意图。始终可以识别没有输入上下文的意图。
   + **示例言语**：您应提供预期将被用户用于发起某个意图的 10 个或更多个短语。Amazon Lex V2 对这些短语进行归纳，以识别出用户想要发起此意图。
   + **初始响应**：调用意图后发送给用户的初始消息。您可以提供响应、初始化值，并在意图开始时定义 Amazon Lex V2 为响应用户而采取的下一步操作。
   + **槽位**：定义履行此意图所需的槽位或参数。每个槽位均设有相应的类型，该类型用于定义可以在该槽位中输入的值。您可以从自定义槽位类型中进行选择，也可以选择内置槽位类型。
   + **确认**：这些提示和响应用于确认或拒绝意图的履行。该确认提示会提示用户对槽位值进行检查。例如，“我已经预订了周五的酒店。是否确认？” 当用户拒绝确认时，会将拒绝响应发送给用户。您可以提供响应、设置值并定义 Amazon Lex V2 在接收到来自用户的确认或拒绝响应后采取的下一步操作。
   + **履行**：在履行过程中向用户发送的响应。您可以设置在履行过程开始时的履行进度更新消息，以及在履行过程中的履行进度更新消息。例如，“正在更改您的密码。该过程可能需要几分钟”以及“您的请求仍在处理中”。履行更新消息仅适用于流式传输对话。您还可以设置履行后成功消息、失败消息和超时消息。可以为流式传输和常规对话发送履行后消息。例如，如果履行成功，您可以发送“您的密码已更改”。如果履行失败，您可以发送包含更多信息的回复，例如“您的密码无法更改，请联系帮助中心寻求帮助”。如果履行时间超过所配置的超时时间，您可以向用户发送消息通知，例如“服务器繁忙。请稍后重试。” 您可以提供响应、设置值，并定义 Amazon Lex V2 为响应用户而采取的下一步操作。
   + **关闭响应**：在意图履行并播放所有其他消息后向用户发送的响应。例如，感谢您预订酒店房间。或者可以提示用户发起不同的意图，例如，“感谢您预订酒店，是否需要预订租车？” 您可以提供响应并配置在履行意图并以关闭响应做出响应后的后续操作。
   + **代码挂钩**：指明您是否使用 AWS Lambda 函数来初始化意图并验证用户输入。您可以在用于运行机器人的别名中指定 Lambda 函数。

1. 选择**保存意图**以保存此意图。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

## 按特定顺序配置提示
<a name="configuring-prompts"></a>

选中**按顺序播放消息**复选框，即可将机器人配置为按预定义顺序播放消息。否则，机器人会按随机顺序播放消息和变体。

按顺序执行的提示可在多次重试的过程中按顺序播放消息组中的消息和变体。当用户对提示的响应无效时，或者用于确认意图时，您可以使用该消息的不同措辞。每个槽位中最多可以设置两种原始消息的变体。您可以选择是按顺序播放消息还是随机播放消息。

按顺序执行的提示支持所有四种类型的消息，即文本消息、自定义负载响应、SSML 和卡组。响应将按顺序排列在同一个消息组中。不同的消息组是各自独立的。

**Topics**
+ [按特定顺序配置提示](#configuring-prompts)
+ [示例言语](sample-utterances.md)
+ [目的结构](intent-structure.md)
+ [创建对话路径](building-paths.md)
+ [使用可视化对话生成器](visual-conversation-builder.md)
+ [内置意图](built-in-intents.md)

# 示例言语
<a name="sample-utterances"></a>

您可以创建示例言语，这些言语是您预期用户用于发起意图的短语的变体。例如，对于 **BookFlight** 意图，您可以包括以下言语：

1. 我想预订航班

1. 帮我预定航班

1. 我需要预定航班机票

1. 从 \$1*DepartureCity*\$1 到 \$1*DestinationCity*\$1 的航班

您应提供 10 个或更多示例言语。提供相应的示例以表示用户可能说出的各种句子结构和单词。也可以考虑不完整的句子，例如以上的示例 3 和示例 4。您也可以使用您在示例言语中为意图定义的槽位，方法是在槽位名称前后添加花括号，如示例 4 中的 \$1*DepartureCity*\$1 所示。如果您在示例言语中包含槽位名称，Amazon Lex V2 会使用用户在言语中提供的值来填充意图的槽位。

各种示例言语可帮助 Amazon Lex V2 进行归纳，从而有效地识别出用户想要发起意图。

您可以在意图编辑器、可视化对话生成器中或通过 [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 或 [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) API 操作来添加示例言语。您还可以利用 Amazon Bedrock 的生成式人工智能功能自动生成示例言语。有关更多信息，请参阅 [使用言语生成功能生成用于意图识别的示例言语](utterance-generation.md)。

**使用意图编辑器或可视化对话生成器**

1. 在意图编辑器中，导航到**示例言语**部分。在可视化对话生成器中，在**开始**块中找到**示例言语**部分。

1. 在带有透明文本 **I want to book a flight** 的框中，键入示例言语。选择**添加话语**以添加言语。

1. 查看您在**预览**或**纯文本**模式下添加的示例言语。在**纯文本**中，每行都是单独的言语。在**预览模式下**，将鼠标悬停在言语上可显示以下选项：
   + 选择文本框以编辑该言语。
   + 选择文本框右侧的 x 按钮可删除该言语。
   + 拖动文本框左侧的按钮可更改示例言语的顺序。

1. 使用顶部的搜索栏搜索您的示例言语，使用旁边的下拉菜单按您添加言语的顺序或者按字母顺序进行排序。

**使用 API 操作**

1. 使用 [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 操作创建新意图，或者使用 [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) 操作更新现有意图。

1. API 请求包含一个 `sampleUtterances` 字段，该字段映射到 [SampleUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SampleUtterance.html) 对象数组。

1. 对于每个要添加的示例言语，请向该数组添加 `SampleUtterance` 对象。将示例言语添加为 `utterance` 字段的值。

1. 要编辑和删除示例言语，请发送 `UpdateIntent` 请求。您在 `sampleUtterances` 字段中提供的言语列表将替换现有的言语。
**重要**  
您在 `UpdateIntent` 请求中留空的任何字段都将导致意图中的现有配置被删除。使用 [DescribeIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeIntent.html) 操作返回机器人配置，并将您不想删除的所有配置复制到 `UpdateIntent` 请求中。

# 目的结构
<a name="intent-structure"></a>

意图是您的用户想要实现的目标，例如订购鲜花或预订酒店。您的机器人必须有至少一个意图。意图由以下组件组成
+ **初始响应**：调用意图后发送给用户的初始消息。您可以设置响应、初始化值，并在意图开始时定义您的机器人为响应用户而采取的下一步操作。
+ **槽位**：履行意图所需的参数。每个槽位均设有相应的类型，该类型用于定义可以在该槽位中输入的值。您可以从自定义槽位类型中进行选择，也可以选择内置槽位类型。
+ **确认**：在与用户的对话完成并填充意图的槽位值后，您可以设置确认提示以询问用户槽位值是否正确。
+ **履行**：在履行过程中向用户发送的响应。您可以设置在履行过程开始时的履行进度更新，并在履行过程中继续发送定期更新。您还可以设置履行后成功消息、失败消息和超时消息。
+ **关闭响应**：该关闭响应将在用户的意图履行后发送给用户。您可以设置关闭响应来结束对话，也可以设置关闭响应来提示用户继续发起其他意图。

**Topics**
+ [初始回应](intent-initial.md)
+ [槽值](intent-slots.md)
+ [确认](intent-confirm.md)
+ [执行](intent-fulfillment.md)
+ [关闭响应](intent-closing.md)

# 初始回应
<a name="intent-initial"></a>

Amazon Lex V2 在确定意图之后并且在开始引发槽位值之前，会向用户发送初始响应。您可以使用此响应告知用户已识别的意图，并提示用户您需要收集相关信息，以便履行此意图。

例如，如果意图是预约汽车保养服务，则最初响应可能是：


|  | 
| --- |
| 我可以帮您安排预约。烦请您提供您爱车的品牌、型号和购车年份。 | 

初始响应消息不是必需的。如果您不提供回复，Amazon Lex V2 将继续按照初始响应的下一步进行操作。

您可以在初始响应中配置以下选项：
+ **配置下一步**：您可以提供对话的下一步，例如跳转到特定的对话框操作、引发特定的槽位或跳转到不同的意图。有关更多信息，请参阅 [配置对话中的后续步骤](paths-nextstep.md)。
+ **设定值**：您可以设置槽位和会话属性的值。有关更多信息，请参阅 [在对话期间设定值](paths-setting-values.md)。
+ **添加条件分支**：您可以在播放初始响应后应用条件。当条件计算为 true 时，将执行您定义的操作。有关更多信息，请参阅 [添加条件以构建对话的分支](paths-branching.md)。
+ **执行对话框代码挂钩**：您可以定义 Lambda 代码挂钩来初始化数据并执行业务逻辑。有关更多信息，请参阅 [调用对话框代码挂钩](paths-code-hook.md)。如果为意图启用了执行 Lambda 函数的选项，则默认情况下会执行对话框代码挂钩。您可以通过切换**活动**按钮来禁用对话框代码挂钩。

如果未设置条件或明确的下一步操作，Amazon Lex V2 将按优先级继续执行下一个槽位。

![\[对用户请求的初始响应的高级选项。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-initial.png)


**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 槽值
<a name="intent-slots"></a>

槽位是用户为履行意图而提供的值。有两种类型的槽位：
+ **内置槽位类型**：您可以使用内置的槽位类型来捕获标准值，例如数字、名称和城市。有关系统支持的内置槽位类型的列表，请参阅[内置槽位类型](built-in-slots.md)。
+ **自定义槽位类型**：您可以使用自定义槽位类型来捕获特定于意图的自定义值。例如，您可以使用自定义槽位类型来捕获账户类型，例如“信用账户”或“储蓄账户”。有关更多信息，请参阅 [自定义槽位类型](custom-slot-types.md)。

要在意图中定义槽位，您必须配置以下内容：
+ **槽位信息**：该字段包含槽位的名称和描述（可选）。例如，您可以将插槽名称设为 “AccountNumber” 以获取账号。如果槽位作为履行意图的对话流程的一部分是必需的，则必须将其标记为必填项。
+ **槽位类型**：定义可以接受的槽位值列表的槽位类型。您可以创建自定义槽位类型或使用预定义的槽位类型。
+ **槽位提示**：向用户提出的收集信息的问题。您可以配置用于收集信息的重试次数以及每次重试时使用的提示的变体。您还可以在每次重试后启用 Lambda 函数调用，以处理所捕获的输入并尝试解析为有效的输入。
+ **等待并继续（可选）**：通过启用此行为，用户可以说出“稍等片刻”等短语，机器人即等待用户查找并提供信息。仅对流式传输对话启用此功能。有关更多信息，请参阅 [允许 Amazon Lex V2 机器人在暂停期间等待用户提供更多信息](wait-and-continue.md)。
+ **槽位捕获响应**：您可以根据从用户输入中捕获槽位值的结果来配置成功响应和失败响应。
+ **条件分支**：您可以在播放初始响应后应用条件。当条件计算为 true 时，将执行您定义的操作。有关更多信息，请参阅 [添加条件以构建对话的分支](paths-branching.md)。
+ **对话框代码挂钩**：您还可以使用 Lambda 代码挂钩来验证槽位值并执行业务逻辑。有关更多信息，请参阅 [调用对话框代码挂钩](paths-code-hook.md)。
+ **用户输入类型**：您可以配置输入类型，以便机器人可以接受特定的模式。默认情况下，音频和 DTMF 模式均是支持的。您可以选择将其设置为仅音频或仅限 DTMF。
+ **音频输入超时和长度**：您可以配置音频超时，包括语音超时和静默超时。此外，您还可以设置最大音频长度。
+ **DTMF 输入超时、字符和长度**：您可以设置 DTMF 超时以及删除字符和结尾字符。此外，您还可以设置最大 DTMF 长度。
+ **文本长度**：您可以设置文本模式的最大长度。

播放槽位提示后，用户提供槽位值作为输入。如果 Amazon Lex V2 无法理解用户提供的槽位值，则将重新尝试引发该槽位，直到理解某个值或超过您为该槽位配置的最大重试次数。使用高级重试设置，您可以配置超时、限制输入类型，以及启用或禁用初始提示和重试的中断。每次尝试捕获输入后，Amazon Lex V2 都可以利用为重试提供的调用标签来调用为机器人配置的 Lambda 函数。例如，您可以使用 Lambda 函数来应用您的业务逻辑来尝试将其解析为有效值。可以在槽位提示的**高级选项**中启用此 Lambda 函数。

![\[设置槽位提示，以便机器人引发信息。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-slot-prompt.png)


您可以定义在输入槽位值或超过最大重试次数后，机器人应向用户发送的响应。例如，对于用于安排汽车服务的机器人，您可以在输入车辆识别码（VIN）时向用户发送消息：


|  | 
| --- |
| 感谢您提供车辆的 VIN 号码。现在将开始安排预约。 | 

您可以创建两个响应：
+ **成功响应**：当 Amazon Lex V2 了解槽位值时发送。
+ **失败响应**：当 Amazon Lex V2 在达到最大重试次数后仍无法理解用户的槽位值时发送。

您可以设置值、配置后续步骤，并应用与每个响应相对应的条件以设计对话流程。

如果未设置条件或明确的下一步操作，Amazon Lex V2 将按优先级继续执行下一个槽位。

![\[槽位响应的高级选项。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-slot.png)


您可以使用 Lambda 函数来验证用户输入的槽位值并确定下一步应执行的操作。例如，您可以使用验证功能来确保输入的值位于正确的范围内，或者格式正确。要激活 Lambda 函数，请在**对话框代码挂钩**部分中选择**调用 Lambda 函数**复选框和**活动**按钮。您可以为对话框代码挂钩指定调用标签。此调用标签可以在 Lambda 函数中用于编写与槽位引发相对应的业务逻辑。

![\[对话框代码挂钩的选项。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-dialog-code-hook.png)


此意图不需要的槽位不是主对话流程的一部分。但是，如果用户言语包含您的机器人识别为对应于可选槽位的值，则可以用该值填充该槽位。例如，如果您将业务智能机器人配置为具有可选 `City` 槽位和用户言语 **What is the sales for April in San Diego?**，则该机器人将该可选槽位填充为 **San Diego**。您可以将业务逻辑配置为使用可选的槽位值（如果存在）。

使用后续步骤无法引发此意图所不需要的槽位。这些步骤只能在意图引发期间填充（如上一个示例所示），也可以通过在 Lambda 函数中设置对话状态来被引发。如果该槽位是使用 Lambda 函数引发的，则必须使用 Lambda 函数在槽位引发完成后决定对话的下一步操作。要在构建机器人时启用对下一步的支持，您必须将该槽位标记为意图所必需的。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

以下主题介绍如何配置机器人以重新引发已填充的槽位值，以及如何创建由多个值组成的槽位：

**Topics**
+ [重新引发机器人](reelicit-slots.md)
+ [使用一个槽位中的多个值](multi-valued-slots.md)

# 重新引发机器人
<a name="reelicit-slots"></a>

 您可以将机器人配置以重新引发一个已填充的槽位，方法是将该槽位值设置为 **null**，然后将对话的下一步设置为循环返回该槽位。例如，在客户拒绝确认基于额外信息的槽位引发后，您可能需要重新引发该槽位，如以下对话所示：

![\[引发客户偏好订购肉类食品的对话。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/slots/order-food.png)


您可以使用意图编辑器或[使用可视化对话生成器](visual-conversation-builder.md)配置从确认响应返回重新引发该槽位的循环。

**注意**  
只要您事先将某个槽位值设置为 **null**，即可在对话中的任何时候循环回到重新引发该槽位。

**使用意图编辑器重现以上示例**

1. 在意图编辑器的**确认**部分，选择**确认意图提示**旁边的右箭头以展开该部分。

1. 选择底部的**高级选项**。

1. 在**拒绝响应**部分中，选择**设置值**旁边的右箭头以展开该部分。按照以下步骤填写此部分，如下图所示：

   1. 将您要重新引发的槽位值设置为 **null**。在本示例中，需要重新引发槽位 `Meat`，因此在**槽位值**部分中输入 **\$1Meat\$1 = null**。

   1. 在**对话的下一步**下的下拉菜单中，选择**引发槽位**

   1. 将出现**槽位**部分。在其下方的下拉菜单中，选择您要重新引发的槽位。

   1. 选择**更新选项**以确认您的更改。  
![\[引发客户偏好订购肉类食品的对话。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/slots/decline-food.png)

**使用可视化对话生成器重现上述示例**

1. 创建从**确认**块的**否**端口到**获取槽位值：Meat** 块的传入端口的连接。  
![\[从确认提示的偏角到“Meat”槽位引发块的连接。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/slots/vcb-reelicit-slot-loop.png)

1. 选择**确认**块右上角的**编辑**图标。  
![\[确认块右上角的编辑图标。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/slots/vcb-reelicit-slot-confirmation-edit.png)

1. 在**拒绝响应**部分中，选择机器人响应旁边的齿轮图标。  
![\[在拒绝响应部分中，机器人响应旁边的齿轮图标。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/slots/vcb-reelicit-slot-confirmation.png)

1. 在**设置值**部分，在**槽位值**框中添加“\$1Meat\$1 = null”。  
![\[在设置值部分的槽位值框中将要重新引发的槽位值设置为 null。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/slots/vcb-reelicit-slot-set-slot-null.png)

1. 选择**保存意图**。

# 使用一个槽位中的多个值
<a name="multi-valued-slots"></a>

**注意**  
多值槽位仅适用于英语（美国）。

对于某些意图，您可能需要为单个槽位捕获多个值。例如，披萨订购机器人可能有以下言语的意图：

```
I want a pizza with {toppings}
```

此意图预期该 `{toppings}` 槽位包含客户想要加在所订购披萨上的一系列配料，例如“pepperoni and pineapple”（意大利辣香肠和菠萝）。

要将槽位配置为捕获多个值，请将槽位上的 `allowMultipleValues` 字段设置为 true。您可以使用控制台或使用[CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)或[UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html)操作来设置该字段。

您只能将具有自定义槽位类型的槽位标记为多值槽位。

对于多值插槽，Amazon Lex V2 会在响应[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)操作时返回插槽值列表。以下是机器人回答 “我想吃意大利辣香肠和菠萝披萨” 时返回的插槽信息。 OrderPizza 

```
    "slots": {
        "toppings": {
            "shape": "List",
            "value": {
                "interpretedValue": "pepperoni and pineapple",
                "originalValue": "pepperoni and pineapple",
                "resolvedValues": [
                    "pepperoni and pineapple"
                ]
            },
            "values": [
                {
                    "shape": "Scalar",
                    "value": {
                        "interpretedValue": "pepperoni",
                        "originalValue": "pepperoni",
                        "resolvedValues": [
                            "pepperoni"
                        ]
                    }
                },
                {
                    "shape": "Scalar",
                    "value:": {
                        "interpretedValue": "pineapple",
                        "originalValue": "pineapple",
                        "resolvedValues": [
                            "pineapple"
                        ]
                    }
                }
            ]
        }
    }
```

多值槽位始终返回一系列的值。当言语只包含一个值时，返回的值列表仅包含一个响应。

Amazon Lex V2 可识别由空格、逗号（,）和连词 “and” 分隔的多个值。多值槽位支持使用文本和语音输入。

您可以在提示中使用多个值的槽位。例如，您可以将意图的确认提示设置为

```
Would you like me to order your {toppings} pizza?
```

当 Amazon Lex V2 将向用户发送提示时，将发送“Would you like me to order your pepperoni and pineapple pizza?”（是否需要为您预定意大利辣香肠和菠萝披萨？）

多值槽位支持单个默认值。如果提供了多个默认值，Amazon Lex V2 将仅使用第一个可用值来填充槽位。有关更多信息，请参阅 [在 Lex V2 机器人的意图中使用默认槽位值](context-mgmt-default.md)。

您可以使用槽位模糊处理来掩盖对话日志中多值槽位的值。当您对槽位值进行模糊处理时，每个槽位值将被替换为槽位的名称。有关更多信息，请参阅 [从 Lex V2 掩盖对话日志中的槽位值](monitoring-obfuscate.md)。

# 确认
<a name="intent-confirm"></a>

在与用户的对话完成并填充意图的槽位值后，您可以配置确认提示以询问用户槽位值是否正确。例如，安排车辆保养预约的机器人可能会提示用户以下内容：


|  | 
| --- |
| 已帮您为 2017 年款本田思域车辆预约 3 月 25 日下午 3:00 的保养服务。请确认是否正确？ | 

您可以定义 3 种类型的确认提示响应：
+ **确认响应**：当用户确认意图时，将向用户发送此响应。例如，在用户对提示“是否确认下单？”回答“是”之后。
+ **拒绝响应**：当用户拒绝此意图时，将向用户发送此响应。例如，在用户对提示“是否确认下单？”回答“否”之后。
+ **失败响应**：当无法处理确认提示时，将向用户发送此响应。例如，如果用户的回复无法理解或无法解析为“是”或“否”。

![\[流程图显示了确认和拒绝回复的 3 种响应类型。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/conditional-confirmation-flow.png)


如果您未指定确认提示，Amazon Lex V2 将进入履行步骤或结束响应。

您可以设置值、配置后续步骤，并应用与每个响应相对应的条件以设计对话流程。如果未设置条件或明确的下一步操作，Amazon Lex V2 将继续执行履行步骤。

您也可以启用对话框代码挂钩，以便在发送要履行的意图之前验证意图中捕获的信息。要使用代码挂钩，请在确认提示高级选项中启用对话框代码挂钩。此外，配置上一个状态的下一步以执行对话框代码挂钩。有关更多信息，请参阅 [调用对话框代码挂钩](paths-code-hook.md)。

**注意**  
 如果您使用代码挂钩在运行时触发确认步骤，则必须在构建时将确认步骤标记为**活动**。

![\[显示确认提示的高级选项的Amazon Lex V2 控制台。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-confirm.png)


**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

## 使用 Lambda 函数来验证意图。
<a name="intent-confirm-codehook"></a>

您可以定义 Lambda 代码挂钩以验证意图，然后再发送此意图以进行履行。要使用代码挂钩，请在确认提示高级选项中启用对话框代码挂钩。

使用代码挂钩时，您可以定义 Amazon Lex V2 在代码挂钩运行后执行的操作。您可以创建三种类型的响应：
+ **成功响应**：当代码挂钩成功完成时发送给用户。
+ **失败响应**：当代码挂钩未成功运行或代码挂钩在响应中返回 `Failure` 时，发送给用户。
+ **超时响应**：当代码挂钩未在其配置的超时时间内完成时发送给用户。

# 执行
<a name="intent-fulfillment"></a>

在用户为意图提供所有槽位值后，Amazon Lex V2 会履行用户的请求。您可以配置以下履行选项：
+ **履行代码挂钩**：您可以使用此选项来控制履行 Lambda 调用。如果禁用该选项，将在不调用 Lambda 函数的情况下成功完成该履行。
+ **履行更新**：您可以为需要超过几秒钟才能完成的 Lambda 函数启用履行更新，以便用户知道流程正在进行中。有关更多信息，请参阅 [为 Lex V2 机器人配置履行进度更新](streaming-progress.md)。此功能仅适用于流式传输对话。
+ **履行响应**：您可以配置成功响应、失败响应和超时响应。系统会根据履行 Lambda 调用的状态向用户返回相应的响应。

可能的履行响应有以下三种：
+ **成功响应**：履行 Lambda 成功完成时发送的消息。
+ **失败响应**：如果履行失败或 Lambda 由于某种原因无法完成，则发送的消息。
+ **超时响应**：如果履行 Lambda 函数未在配置的超时时间内完成，则发送的消息。

您可以设置值、配置后续步骤，并应用与每个响应相对应的条件以设计对话流程。如果未设置条件或明确的下一步操作，Amazon Lex V2 将执行结束响应。

![\[显示了履行代码挂钩的响应选项的 Amazon Lex V2 控制台。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-fulfillment.png)


**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 关闭响应
<a name="intent-closing"></a>

该关闭响应将在您用户的意图履行后发送给用户。您可以使用关闭响应来结束对话，也可以使用关闭响应来提示用户继续发起其他意图。例如，在旅行预订机器人中，您可以将预订酒店房间的关闭响应设置为：


|  | 
| --- |
| 现已成功预订酒店房间。请问您是否需要其他帮助？  | 

您可以设置值、配置后续步骤，并在关闭响应之后应用条件以设计对话流程。如果未设置条件或明确的下一步操作，Amazon Lex V2 将结束对话。

如果您没有提供关闭响应，或者如果没有一个条件计算为 true，Amazon Lex V2 将结束与您的机器人的对话。

![\[显示了关闭响应选项的 Amazon Lex V2 控制台。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/response-closing.png)


**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 创建对话路径
<a name="building-paths"></a>

通常，Amazon Lex V2 会管理与您用户的对话流程。对于简单的机器人，利用默认流程即足以产生良好的用户体验。但是，对于更复杂的机器人，您可能需要控制对话并在对话流程中实现更复杂对话路径的引导。

例如，在预订租车的机器人中，您可能需要不将车辆租给年轻驾驶人。在这种情况下，您可以创建一个条件来检查驾驶人是否低于指定年龄，如果是，则跳转到结束响应。

![\[不将车辆租给 24 岁以下驾驶人的租车机器人的对话流程图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/conditional-flowchart.png)


要设计这样的交互，您可以配置对话中每个时刻的下一步，评估条件，设置值并调用代码挂钩。

条件分支可帮助您创建用户进行复杂交互的对话路径。您可以在任何时间节点使用条件分支，将对话的控制权移交给机器人。例如，您可以在机器人引发第一个槽位值之前创建一个条件，您可以在引发每个槽位值之间创建一个条件，或者您可以在机器人关闭对话之前创建一个条件。有关可以添加条件的节点列表，请参阅[添加意图](add-intents.md)。

当您创建机器人时，Amazon Lex V2 会根据各个槽位的优先级来创建默认的对话路径。要自定义对话路径，可以修改对话中任何节点的下一步。有关更多信息，请参阅 [配置对话中的后续步骤](paths-nextstep.md)。

要创建基于条件的替代路径，可以在对话中的任何节点使用条件分支。例如，您可以在机器人引发第一个槽位值之前创建一个条件。您可以在引发每个槽位值之间创建一个条件，也可以在机器人关闭对话之前创建一个条件。有关允许您添加条件的节点列表，请参阅[添加条件以构建对话的分支](paths-branching.md)。

您可以根据槽位值、会话属性、输入模式和输入转录或来自 Amazon Kendra 的响应来设置条件。

您可以在对话中的每个节点处设置槽位和会话属性值。有关更多信息，请参阅 [在对话期间设定值](paths-setting-values.md)。

您也可以将下一个操作设置为对话框代码挂钩以运行 Lambda 函数。有关更多信息，请参阅 [调用对话框代码挂钩](paths-code-hook.md)。

下图是在控制台中为某个槽位创建路径的过程。在此示例中，Amazon Lex V2 将引发槽位“age”。如果插槽的值小于 24，Amazon Lex V2 将跳转到关闭响应，否则 Amazon Lex V2 将遵循默认路径。

![\[显示插槽条件编辑器的 Amazon Lex V2 控制台。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/conditional-slot.png)


**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 配置对话中的后续步骤
<a name="paths-nextstep"></a>

您可以配置对话中每个阶段的下一步以设计对话。通常，Amazon Lex V2 会按照以下顺序自动为对话的每个阶段配置默认的后续步骤。

 初始回应 → 槽位引发 → 确认（如果处于活动状态）→ 履行（如果处于活动状态）→ 结束响应（如果处于活动状态）→ 结束对话

您可以修改默认的后续步骤，并根据预期的用户体验来设计对话。可以在对话的每个阶段配置以下后续步骤：

**跳转到**
+ **初始响应**：从意图开始时重新开始对话。在配置下一步时，您可以选择跳过初始响应。
+ **引发槽位**：您可以引发意图中的任何槽位。
+ **评估条件**：您可以评估对话中任何步骤处的条件并且构建对话的分支。
+ **调用对话框代码挂钩**：您可以在任何步骤调用业务逻辑。
+ **确认意图**：将提示用户确认意图。
+ **履行意图**：将在下一步开始履行意图。
+ **结束响应**：该结束响应将返回给用户。

**切换到**
+ **意图**：您可以过渡到不同的意图并继续就此意图进行对话。您可以选择在执行过渡的同时跳过此意图的初始响应。
+ **意图：特定槽位**：如果您已经在当前意图中捕获了一些槽位值，则可以直接在不同的意图中引发特定的槽位。

**等待用户输入**：机器人等待用户提供输入以识别任何新意图。你可以配置相关提示，例如“还有什么我可以帮你的吗？”，然后再设置下一步。机器人将处于 `ElicitIntent` 对话框状态。

**结束对话**：结束与机器人的对话。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 在对话期间设定值
<a name="paths-setting-values"></a>

Amazon Lex V2 提供了在对话的每个步骤中设置槽位值和会话属性值的功能。然后，您可以在对话期间使用这些值来评估条件，或者在履行意图期间使用这些值。

您可以为当前意图设置槽位值。如果对话的下一步是调用另一个意图，则可以设置新意图的槽位值。

如果被分配的槽位未填，或者无法解析 JSON 路径，则该属性将设置为 `null`。

使用槽位值和会话属性时，请使用以下句法：
+ **槽位值**：用大括号（“\$1\$1”）将槽位名称括起来。对于当前意图中的槽位值，您只需要使用槽位名称即可。例如 `{slot}`。如果要在下一个意图中设置值，则必须同时使用意图名称和槽位名称来标识该槽位。例如 `{intent.slot}`。

  示例：
  +  `{PhoneNumber} = "1234567890"` 
  +  `{CheckBalance.AccountNumber} = "99999999"` 
  +  `{BookingID} = "ABC123"` 
  +  `{FirstName} = "John"` 

  槽位的值可能为以下任一值：
  + 常量字符串
  + 引用 Amazon Lex 响应中的转录块的 JSON 路径（适用于 en-US 和 en-GB）
  + 会话属性

  示例：
  +  `{username} = "john.doe" ` 
  +  `{username_confidence} = $.transcriptions[0].transcriptionConfidence ` 
  +  `{username_slot_value} = [username] ` 
**注意**  
槽位值也可以设置为 `null`。如果您需要重新引发某个已填槽位值，则必须先将该值设置为 `null`，然后再提示客户输入槽位值。如果被分配的槽位未填，或者无法解析 JSON 路径，则该属性将设置为 `null`。
+ **会话属性**：用方括号（“[]”）将属性名称括起来。例如 `[sessionAttribute]`。

  示例：
  +  ` [username] = "john.doe" ` 
  +  ` [username_confidence] = $.transcriptions[0].transcriptionConfidence ` 
  +  ` [username_slot_value] = {username} ` 

  会话属性的值可能为以下任一值：
  + 常量字符串
  + 引用 Amazon Lex 响应中的转录块的 JSON 路径（适用于 en-US 和 en-GB）
  + 槽位值参考
**注意**  
如果被分配的槽位未填，或者无法解析 JSON 路径，则该属性将设置为 `null`。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 添加条件以构建对话的分支
<a name="paths-branching"></a>

您可以使用*条件分支*来控制客户与机器人的对话路径。您可以根据槽位值、会话属性、输入模式的内容和输入转录字段或来自 Amazon Kendra 的响应来构建对话分支。

您可以定义最多 4 个分支。每个分支均设有条件，并且必须在满足该条件的情况下，Amazon Lex V2 才能采用该分支。如果所有分支的条件均不满足，则将采用默认分支。

定义分支时，您可以定义 Amazon Lex V2 在与该分支对应的条件评估为 true 时应执行的操作。您可以定义以下任一操作：
+ 发送给用户的回应。
+ 要应用于槽位的槽位值。
+ 当前会话的会话属性值。
+ 对话的下一步。有关更多信息，请参阅 [创建对话路径](building-paths.md)。

![\[您可以为条件分支选择不同的选项。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/conditional-choose.png)


每个条件分支均设有布尔表达式，并且必须在满足该布尔表达式的情况下，Amazon Lex V2 才能采用该分支。您可以使用比较运算符、布尔运算符、函数和量词运算符来处理您的条件。例如，如果 \$1age\$1 槽位小于 24，则以下条件返回 true。

```
{age} < 24
```

如果 \$1toppings\$1 多值槽位包含“pineapple”一词，则以下条件返回 true。

```
{toppings} CONTAINS "pineapple"
```

对于更复杂的条件，您可以将多个比较运算符与布尔运算符组合使用。例如，如果 \$1make\$1 槽位值为“Honda” 且 \$1model\$1 槽位值为“Civic”，则以下条件返回 true。使用圆括号设置评估顺序。

```
({make} = "Honda") AND ({model} = "Civic")
```

以下主题提供了关于条件分支运算符和函数的详细信息。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

**Topics**
+ [比较运算符](#branching-comparison)
+ [布尔运算符](#branching-boolean)
+ [量词运算符](#branching-quentifier)
+ [函数](#branching-function)
+ [示例条件表达式](#sample-conditional-expressions)

## 比较运算符
<a name="branching-comparison"></a>

Amazon Lex V2 支持以下条件比较运算符：
+ 等于（=）
+ 不等于（\$1=）
+ 小于（<）
+ 小于等于（<=）
+ 大于（>）
+ 大于等于（>=）

使用比较运算符时，将遵循以下规则。
+ 左侧必须是引用值。例如，要引用槽位值，请使用 `{slotName}`。要引用会话属性值，请使用 `[attribute]`。对于输入模式和输入转录，请使用 `$.inputMode` 和 `$.inputTranscript`。
+ 右侧必须为常数，且类型必须与左侧相同。
+ 系统将任何引用尚未设置的属性的表达式视为无效，并且不会对其求值。
+ 比较多值槽位时，使用的值是所有解释值的逗号分隔列表。

该等比较是基于引用值的槽位类型进行的，按照以下方式进行解析：
+ **字符串**：根据字符串的 ASCII 表示进行比较。比较不区分大小写。
+ **数字**：将基于数字的槽位从字符串表示形式转换为数字，然后进行比较。
+ **日期/时间**：根据时间序列对基于时间的槽位进行比较。较早的日期或时间即视作较小。对于持续时间，较短的时间段即视为较小。

## 布尔运算符
<a name="branching-boolean"></a>

Amazon Lex V2 支持使用布尔运算符来组合比较运算符。利用布尔运算符可创建类似以下内容的语句：

```
({number} >= 5) AND ({number} <= 10)
```

您还可以使用以下布尔运算符：
+ AND（&&）
+ OR（\$1\$1）
+ NOT（\$1）

## 量词运算符
<a name="branching-quentifier"></a>

量词运算符评估序列中的元素并确定一个或多个元素是否满足条件。
+ **CONTAINS**：确定指定值是否被包含在多值槽位中，如果包含在多值槽位中，则返回 true。例如，如果用户要在订购的披萨上添加菠萝，则 `{toppings} CONTAINS "pineapple"` 将返回 true。

## 函数
<a name="branching-function"></a>

函数必须以字符串 `fn.` 为前缀。该函数的参数是对槽位、会话属性或请求属性的引用。Amazon Lex V2 提供了用于从槽位值中获取信息的两个函数，即 sessionAttribute, 或 requestAttribute。
+ **fn.COUNT（）**：计算多值槽位中的值数量。

  例如，如果槽位 `{toppings}` 包含值“pepperoni, pineapple”：

  `fn.COUNT({toppings}) = 2`
+ **fn.IS\$1SET（）**：如果在当前会话中设置了槽位、会话属性或请求属性，则该值为 true。

  基于上一示例：

  `fn.IS_SET({toppings})`
+ **fn.LENGTH（）**：该值是当前会话中设置的会话属性、槽位值或槽位属性的值长度。此函数不支持多值槽位或复合槽位。

  示例：

  如果槽位 `{credit-card-number}` 包含值“123456781234”：

  `fn.LENGTH({credit-card-number}) = 12`

## 示例条件表达式
<a name="sample-conditional-expressions"></a>

以下是一些示例条件表达式。注意：`$.`代表 Amazon Lex V2 JSON 响应的入口点。以下值`$.`将在 Amazon Lex V2 响应中进行解析以检索该值。只有支持 ASR 转录分数的相同区域才支持在 Amazon Lex V2 响应中使用转录块的 JSON 路径引用的条件表达式。


| 值类型 | 使用案例 | 条件表达式 | 
| --- | --- | --- | 
| 自定义槽位 | pizzaSize 槽位值等于“large” | \$1pizzaSize\$1 = "large" | 
| 自定义槽位 | pizzaSize 等于“large”或“medium” | \$1pizzaSize\$1 = "large" OR \$1pizzaSize\$1 = "medium"  | 
| 自定义槽位 | 带有() 和 AND/OR 的表达式 | \$1pizzaType\$1 = "pepperoni" OR \$1pizzaSize\$1 = "medium" OR \$1pizzaSize\$1 = "small"  | 
| 自定义槽位（多值槽位） | 检查其中的一种配料是否是“Onion”（洋葱） | \$1toppings\$1 CONTAINS "Onion" | 
| 自定义槽位（多值槽位） | 配料的数量超过 3 | fn.COUNT(\$1topping\$1) > 2 | 
| AMAZON.AlphaNumeric | bookingID是 ABC123 | \$1bookingID\$1 = "ABC123" | 
| AMAZON.Number | 年龄槽位值大于 30 | \$1age\$1 > 30 | 
| AMAZON.Number | 年龄槽位值等于 10 | \$1age\$1 = 10 | 
| AMAZON.Date | dateOfBirth 槽位值在 1990 年之前 | \$1dateOfBirth\$1 < "1990-10-01" | 
| AMAZON.State | destinationState 槽位值等于“Washington” | \$1destinationState\$1 = "washington" | 
| AMAZON.Country | destinationCountry 槽位值不是“United States” | \$1destinationCountry\$1 \$1= "united states" | 
| AMAZON.FirstName | firstName 槽位值是“John” | \$1firstName\$1 = "John" | 
| AMAZON.PhoneNumber | phoneNumber 槽位值是“716767891932” | \$1phoneNumer\$1 = 716767891932 | 
| AMAZON.Percentage | 检查百分比槽位值是否大于等于 78 | \$1percentage\$1 >= 78 | 
| AMAZON.EmailAddress | emailAddress 槽位值为“userA@hmail.com” | \$1emailAddress\$1 = "userA@hmail.com" | 
| AMAZON.LastName | lastName 槽位值是“Doe” | \$1lastName\$1 = "Doe" | 
| AMAZON.City | “City”槽位值等于“Seattle” | \$1city\$1 = "Seattle" | 
| AMAZON.Time | “Time”是晚上 8 点之后 | \$1time\$1 > "20:00" | 
| AMAZON.StreetName | streetName 槽位值是“Boren Avenue” | \$1streetName\$1 = "boren avenue" | 
| AMAZON.Duration | travelDuration 槽位值小于 2 小时 | \$1travelDuration\$1 < P2H | 
| 输入模式 | 输入模式为语音 | \$1.inputMode = "Speech" | 
| 输入转录 | 输入转录等于“I want a large pizza” | \$1.inputTranscript = "I want a large pizza" | 
| 会话属性 | 检查 customer\$1subscription\$1type 属性 | [customer\$1subcription\$1type] = "yearly" | 
| 请求属性 | 检查 retry\$1enabled 标志 | ((retry\$1enabled)) = "TRUE" | 
| Kendra 响应 | Kendra 响应包含常见问题 | fn.IS\$1SET(((x-amz-lex:kendra-search-response-question\$1answer-question-1))) | 
| 带转录的条件表达式 | 使用转录 JSON 路径的条件表达式 | \$1.transcriptions[0].transcriptionConfidence < 0.8 AND \$1.transcriptions[1].transcriptionConfidence > 0.5 | 
| 设置会话属性 | 使用转录 JSON 路径和槽位值设置会话属性 | [sessionAttribute] = "\$1.transcriptions..." AND [sessionAttribute] = "\$1<slotName>\$1" | 
| 设置槽位值 | 使用会话属性和转录 JSON 路径设置槽位值 | \$1slotName\$1 = [<sessionAttribute>] AND \$1slotName\$1 = "\$1.transcriptions..." | 

**注意**  
`slotName`指的是 Amazon Lex V2 机器人中插槽的名称。如果该槽位未解析（null），或者该槽位不存在，则运行时会忽略这些指定。`sessionAttribute` 指客户在构建时设置的会话属性的名称。

# 调用对话框代码挂钩
<a name="paths-code-hook"></a>

当 Amazon Lex V2 向用户发送消息时，在对话的每一步中，您都可以使用 Lambda 函数作为对话的下一步。您可以使用该函数，根据对话的当前状态来实现业务逻辑。

运行的 Lambda 函数与您正在使用的机器人别名相关联。要在意图中的所有对话框代码挂钩中调用 Lambda 函数，您必须针对此意图选择**使用 Lambda 函数来初始化和验证**。有关选择 Lambda 函数的更多信息，请参阅[为你的 Amazon Lex V2 机器人创建AWS Lambda函数](lambda-attach.md)。

使用 Lambda 函数需要两个步骤。首先，您需要在对话中的任何节点激活对话框代码挂钩。接下来，您需要将对话的下一步设置为使用对话框代码挂钩。

下图显示了已激活的对话框代码挂钩。

![\[显示条件响应代码挂钩处于活动状态。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/code-hook-active.png)


接下来，将代码挂钩设置为对话步骤的下一个操作。为此，您可以将对话的下一步配置为“调用对话框代码挂钩”。请参见下图中所示的条件分支，在该条件分支中，调用对话框代码挂钩是对话默认路径的下一步。

![\[将代码挂钩显示为对话的下一步的条件分支。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/code-hook-choose.png)


当代码挂钩处于活动状态时，您可以设置返回给用户的以下三个响应：
+ **成功**：在 Lambda 函数成功完成时发送该响应。
+ **失败**：如果运行 Lambda 函数时出现问题，或者 Lambda 函数返回的 `intent.state` 值为 `Failed`，则发送该响应。
+ **超时**：如果 Lambda 函数未在其配置的超时时间内完成，则发送该响应。

![\[显示 Lambda 函数运行后的可用消息选项的流程图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/conditional-code-hook.png)


选择 **Lambda 对话框代码挂钩**，然后选择**高级选项**以查看与 Lambda 函数调用相对应的三个响应选项。您可以设置值、配置后续步骤，并应用与每个响应相对应的条件以设计对话流程。如果没有条件或明确的下一步操作，Amazon Lex V2 将根据对话的当前状态决定下一步操作。

您还可以在**高级选项**页面上选择启用或禁用 Lambda 函数调用。启用该函数后，将通过 Lambda 调用来调用对话框代码挂钩，然后根据 Lambda 调用结果显示成功、失败或超时消息。禁用该功能后，Amazon Lex V2 不运行 Lambda 函数，而是将对话代码挂钩视作成功并继续运行。

您还可以设置调用标签，该标签将在被该消息调用时发送到 Lambda 函数。您可以使用该调用标签来帮助识别要运行的 Lambda 函数的部分。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 使用可视化对话生成器
<a name="visual-conversation-builder"></a>

可视化对话生成器是一个拖放式对话生成器，可在丰富的视觉环境中利用意图来轻松设计并可视化对话路径。

**要访问可视化对话生成器，请执行以下操作：**

1. 在 Amazon Lex V2 控制台的左侧导航窗格中，选择机器人，然后选择**意图**。

1. 通过以下方式中的任一种打开意图编辑器：
   + 选择**意图**部分右上角的**添加意图**，然后选择添加空意图或内置意图。
   + **意图**部分中选择意图的名称。

1. 在意图编辑器中，在屏幕底部的窗格中选择**可视化生成器**以打开可视化对话生成器。

1. 要返回菜单意图编辑器界面，请选择**编辑器**。

![\[使用可视化对话生成器的对话流程示例。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-sample.png)


可视化对话生成器采用更直观的用户界面，能够帮助您直观地查看和修改对话流程。您可以拖放对应的数据块，以便扩展现有流程或重新排列对话步骤的顺序。您无需编写任何 Lambda 代码即可开发具有复杂分支的对话流程。

此更改有助于将对话流程设计与 Lambda 中的其他业务逻辑分开。可视化对话生成器可以与现有的意图编辑器配合使用，并可用于构建对话流程。但是，对于更复杂的对话流程，建议使用可视化编辑器视图。

当您保存意图时，Amazon Lex V2 可以在确定连接断开、Amazon Lex V2 建议连接时自动连接意图，或者您可以针对该块选择自己的连接。


| 操作 | 示例 | 
| --- | --- | 
|  向工作区添加数据块  |  ![\[向工作区添加数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-addblock.gif)  | 
|  建立数据块之间的连接  |  ![\[建立数据块之间的连接\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-connectionblock.gif)  | 
|  在块上打开配置面板  |  ![\[打开某个块的配置面板\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-openpanelblock.gif)  | 
|  缩放以适合  |  ![\[缩放以适合\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-zoomtofit.gif)  | 
|  从对话流程中删除数据块  |  ![\[从对话流程中删除数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-deleteblock.gif)  | 
|  自动清理工作区  |  ![\[自动清理工作区\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-autoclean.gif)  | 

**术语：**

**数据块**：对话流的基本构成单元。每个数据块都有特定的功能，可以处理对话的不同用例。

**端口**：每个数据块均包含可用于将一个数据块连接到另一个数据块的端口。数据块可以包含输入端口和输出端口。每个输出端口代表对应数据块的特定功能变体（例如错误、超时或成功）。

**边缘**：边缘是指一个数据块的输出端口与另一个数据块的输入端口之间的连接。它是对话流程中分支的一部分。

**对话流程**：一组由边缘连接的数据块，用于描述与客户的意图层面的交互。

**数据块**

数据块是对话流程设计的构成元素。这些数据块代表意图中的不同状态，从意图开始到用户输入，再到结束。

根据数据块的类型，每个数据块均有一个入口点以及一个或多个出口点。当对话通过出口点时，可以为每个出口点配置相应的消息。对于具有多个出口点的数据块，出口点与对应于该节点的状态相关。对于条件节点，出口点代表不同的条件。

每个数据块都设有配置面板，点击数据块右上角的**编辑**图标即可打开该面板。配置面板包含可以配置为与每个数据块相对应的详细字段。

可以通过拖动新的数据块直接在该节点上配置机器人提示和消息，也可以在右侧面板中修改该等机器人提示和消息以及数据块的其他属性。

**数据块类型**：以下是可视化对话生成器中可以使用的数据块类型。


| 数据块类型 | 数据块 | 
| --- | --- | 
|  **开始**：对话流中的根数据块或第一个数据块。也可以对此数据块进行配置，以便机器人可以发送初始响应（意图已被识别的消息）。有关更多信息，请参阅 [初始回应](intent-initial.md)。  |  ![\[可视化对话生成器中的起始数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-start.png)  | 
|  **获取槽位值**：此数据块尝试引发单个槽位的值。此数据块的设置是等待客户对槽位引发提示做出响应。有关更多信息，请参阅 [槽值](intent-slots.md)。  |  ![\[可视化对话生成器中的获取槽位值数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-getslotvalue.png)  | 
|  **条件**：此数据块包含条件。其中最多包含 4 个自定义分支（带条件）以及一个默认分支。有关更多信息，请参阅 [添加条件以构建对话的分支](paths-branching.md)。  |  ![\[可视化对话生成器中的条件数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-condition.png)  | 
|  **对话框代码挂钩**：此数据块处理对话框 Lambda 函数的调用。此数据块包含基于对话框 Lambda 函数成功、失败或超时的机器人响应。有关更多信息，请参阅 [调用对话框代码挂钩](paths-code-hook.md)。  |  ![\[可视化对话生成器中的代码挂钩数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-codehook.png)  | 
|  **确认**：此数据块会在意图履行之前向客户进行查询。其中包含基于客户对确认提示做出“是”或“否”回复的机器人响应。有关更多信息，请参阅 [确认](intent-confirm.md)。  |  ![\[可视化对话生成器中的确认数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-confirmation.png)  | 
|  **履行**：此数据块处理意图的履行，通常在槽位引发之后。可以将其配置为在履行成功或失败时调用 Lambda 函数并使用消息进行响应。有关更多信息，请参阅 [执行](intent-fulfillment.md)。  |  ![\[可视化对话生成器中的履行数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-fulfillment.png)  | 
|  **关闭响应**：依据此数据块，机器人将回复一条消息，然后再结束对话。有关更多信息，请参阅 [关闭响应](intent-closing.md)。  |  ![\[可视化对话生成器中的关闭数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-closing.png)  | 
|  **结束对话**：此数据块指示对话流程的结束。  |  ![\[可视化对话生成器中的结束数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-end.png)  | 
|  **等待用户输入**：此数据块可用于捕获客户的输入并根据言语切换到其他意图。  |  ![\[可视化对话生成器中的等待数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-wait.png)  | 
|  **转到意图**：该数据块可以用于转到一个新的意图，或者直接引发此意图的特定槽位。  |  ![\[可视化对话生成器中的跳转意图数据块\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/vcb-gotointent.png)  | 

**端口类型**

所有数据块都包含一个输入端口，用于连接其父数据块。对话只能从其父数据块的输出端口流向特定数据块的输入端口。但是，数据块可能包含零个、一个或多个输出端口。如果数据块没有任何输出端口，则表示当前意图中对话流程的结束（`GoToIntent`、`EndConversation`、`WaitForUserInput`）。

**意图设计规则：**
+ 意图中的所有流程均始于起始数据块。
+ 与每个出口点对应的消息是可选的。
+ 您可以将数据块配置为在配置面板中设置与每个出口点相对应的值。
+ 一个意图中的单个流程中只能存在一个开始、确认、履行和关闭数据块。可能存在多个条件、对话框代码挂钩、获取槽位值、结束对话、转移和等待用户输入数据块。
+ 条件数据块无法与条件数据块直接连接。对话框代码挂钩也是如此。
+ 循环流允许使用三个数据块，但不允许使用指向“开始意图”的传入连接器。
+ 可选槽位没有传入连接器或传出连接，主要用于捕获意图引发期间存在的任何数据。对话路径中的所有其他槽位都必须是必填的槽位。

数据块：
+ 起始数据块必须具有传出边缘。
+ 如果槽位是必需的，则每个获取槽位值数据块都必须具有从成功端口输出的传出边缘。
+ 如果处于活动状态，则每个条件数据块都必须具有从每个分支输出的传出边缘。
+ 一个条件数据块无法具有多个父项。
+ 活动的条件数据块必须具有传入边缘。
+ 每个活动代码挂钩数据块必须具有从成功、失败和超时中的每个端口输出的传出边缘。
+ 活动的代码挂钩数据块必须具有传入边缘。
+ 活动的确认数据块必须具有传入边缘。
+ 活动的履行数据块必须具有传入边缘。
+ 活动的关闭数据块必须具有传入边缘。
+ 一个条件数据块必须至少具有一个非默认分支。
+ 跳转意图数据块必须指定意图。

边缘：
+ 条件数据块无法与另一个条件数据块直接连接。
+ 代码挂钩数据块无法与另一个代码挂钩数据块直接连接。
+ 条件数据块只能连接到零个或一个代码挂钩数据块。
+ 连接（代码挂钩 -> 条件 -> 代码挂钩）无效。
+ 履行数据块无法具有代码挂钩数据块子项。
+ 作为履行数据块的子项的条件数据块无法具有代码挂钩数据块子项。
+ 关闭数据块无法具有代码挂钩数据块子项。
+ 作为关闭数据块的子项的条件数据块无法具有代码挂钩数据块子项。
+ 一个包含开始、确认或获取槽位值数据块的关联链中只能有一个代码挂钩数据块。

**注意**  
Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改，您可以更好地控制用户的对话路径。有关更多信息，请参阅 [Amazon Lex V2 中的对话流更改](understanding-new-flows.md)。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

# 内置意图
<a name="built-in-intents"></a>

对于常见操作，您可以使用标准内置意图库。要基于内置意图创建意图，请在控制台中选择一个内置意图，为其指定新名称。新意图将具有基础意图的配置，例如示例言语。

在当前实现中，不能执行以下操作：
+ 向基础意图添加示例言语，或从基础意图中删除示例言语
+ 为内置意图配置槽

**向机器人添加内置意图**

1. 登录 AWS 管理控制台并通过以下网址打开 Amazon Lex 控制台[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 选择要添加内置意图的机器人。

1. 在左侧菜单中，选择语言，然后选择**意图**。

1. 选择**添加意图**，然后选择**使用内置意图**。

1. 在**内置意图**中，选择要使用的意图。

1. 指定意图的名称，然后选择**添加**。

1. 使用意图编辑器，根据需要为您的机器人配置意图。

**Topics**
+ [AMAZON.BedrockAgentIntent](built-in-intent-bedrockagent.md)
+ [AMAZON.CancelIntent](built-in-intent-cancel.md)
+ [AMAZON.FallbackIntent](built-in-intent-fallback.md)
+ [AMAZON.HelpIntent](built-in-intent-help.md)
+ [AMAZON.KendraSearchIntent](built-in-intent-kendra-search.md)
+ [AMAZON.PauseIntent](built-in-intent-pause.md)
+ [AMAZON.QnAIntent](built-in-intent-qna.md)
+ [AMAZON.QnAIntent (multiple use support)](built-in-intent-qna-multi.md)
+ [AMAZON.QinConnectIntent](built-in-intent-qinconnect.md)
+ [AMAZON.RepeatIntent](built-in-intent-repeat.md)
+ [AMAZON.ResumeIntent](built-in-intent-resume.md)
+ [AMAZON.StartOverIntent](built-in-intent-start-over.md)
+ [AMAZON.StopIntent](built-in-intent-stop.md)

# AMAZON.BedrockAgentIntent
<a name="built-in-intent-bedrockagent"></a>

**注意**  
在利用生成式人工智能功能之前，您必须满足以下先决条件  
有关使用 Amazon Bedrock 的定价信息，请参阅 [Amazon Bedrock 定价](https://aws.amazon.com/bedrock/pricing/)。
为机器人区域设置开启生成式人工智能功能。为此，请按照[利用生成式人工智能优化 Lex V2 机器人的创建和性能](generative-features.md)中的步骤进行操作。

激活在意图中定义的 Amazon Bedrock 代理，以便响应客户请求并激活代理式工作流来完成指定的任务。此功能适用于 Amazon Lex V2 支持的所有区域设置以及同时存在 Amazon Lex V2 和 Amazon Bedrock 代理的所有商业区域。

如果此意图覆盖 `FallbackIntent`，则此意图会在某话语未归类为机器人中的任何其他意图时激活，否则此意图将仅在某话语归类为此意图时激活。有一点需要注意：引发插槽值时，此意图不会对错过的话语激活。

在您的 Amazon Lex V2 机器人识别 `AMAZON.BedrockAgentIntent` 后，它将激活定义的 `BedrockAgent` 或 `BedrockKnowledgeBase` 来响应客户。如果您使用的是 Amazon Bedrock 代理，则对话将限定在 `BedrockAgentIntent` 范围内，并且用户请求将被中继到代理，直至 Amazon Bedrock 代理确定此对话已标记为 `FINISH`。只有在那之后，Amazon Lex V2 才会接管此对话，并遵循 `AMAZON.BedrockAgentIntent` 中定义的后续步骤操作。

使用 Amazon Bedrock 代理和知识库来回答客户问题并提供详细回复。

**警告**  
您不能在没有样例话语的情况下使用 `AMAZON.BedrockAgentIntent` 和 `AMAZON.QnAIntent`，也不能在同一机器人区域设置下使用 `AMAZON.KendraSearchIntent`。

如果选择此意图，则需要配置以下字段，然后选择添加以添加此意图。
+ Amazon Bedrock 代理 ID - Amazon Bedrock 代理的标识符。选择要使用的 Bedrock 代理。
+ Amazon Bedrock 代理别名 ID - Amazon Bedrock 代理的别名标识符。

**重要**  
在创建与 Amazon Lex V2 一起使用的 Amazon Bedrock 代理时，请确认**其他设置**下的**用户输入**设置为 `ENABLED`。此设置非常重要，它可以使代理询问澄清问题或跟进问题，并让 Amazon Lex V2 能够将对话控制权重新委派给代理以完成相应的任务。

（可选）您也可以 BedrockAgentIntent 使用以下选项添加：
+ Amazon Bedrock 模型 - 选择要用于此意图的提供程序和基础模型。目前，支持部分 Anthropic Claude 模型。
+ Amazon Bedrock 知识库 - 如果选择此选项，请指定 Amazon Bedrock 知识库的 ID。您可以通过在控制台中查看 Amazon Bedrock 知识库的详细信息页面或通过发送 `GetKnowledgeBase` 请求来找到该 ID。

来自的响应 BedrockAgentIntent 将存储到会话和请求属性中，如下所示：
+ `x-amz-lex:bedrock-agent-search-response` - Amazon Bedrock 代理对问题或话语的回复。
+ `x-amz-lex:bedrock-knowledge-base-search-response-source` - 如果使用 Amazon Bedrock 知识库配置，则指向用于生成回复的文档或文档列表。
+ `x-amz-lex:bedrock-agent-action-group-invocation-input` - 包含代理操作组收集的输入值的对象。有关代理操作组的更多信息，请参阅 ActionGroupInvocationInput。
+ `x-amz-lex:bedrock-agent-knowledge-base-lookup-input` - 包含 Amazon Bedrock 知识库查找相关详细信息的对象。
+ `x-amz-lex:bedrock-agent-agent-collaborator-details` - 一个对象，包含了在多代理协作调用中调用的子代理的输入和输出的详细信息。

有关更多信息，请参阅[在 Amazon Lex 中使用基岩代理](https://docs.aws.amazon.com/lexv2/latest/dg/bedrock-agent-intent.html)。 BedrockAgentIntent 

# AMAZON.CancelIntent
<a name="built-in-intent-cancel"></a>

对表示用户要取消当前交互的单词和短语的响应。在结束与用户的交互之前，您的应用程序可以使用此意图来删除插槽类型值和其他属性。

常见言语：
+ 取消
+ 没关系
+ 算了

# AMAZON.FallbackIntent
<a name="built-in-intent-fallback"></a>

当意图的用户输入与机器人的预期不符时，您可以配置 Amazon Lex V2 以调用*回退意图*。例如，如果用户输入“我想要订购糖果”，与 `OrderFlowers` 机器人中的意图不匹配，Amazon Lex V2 会调用回退意图来处理该响应。

当您使用控制台创建机器人或使用[CreateBotLocale](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotLocale.html)操作向机器人添加区域时，内置`AMAZON.FallbackIntent`意图类型会自动添加到您的机器人中。

调用回退意图分两步。在第一步中，基于用户的输入来匹配回退意图。匹配回退意图时，自动程序的行为方式取决于为提示配置的重试次数。

在以下情况下，Amazon Lex V2 与回退意图匹配：
+ 用户输入到意图的内容不符合自动程序的预期
+ 音频输入为噪声，或文本输入未被识别为单词。
+ 用户的输入不明确且 Amazon Lex V2 无法确定要调用的意图。

在以下情况下调用回退意图：
+ 经过配置的尝试次数后，意图无法将用户输入识别为槽位值。
+ 经过配置的尝试次数后，意图无法将用户输入识别为对确认提示的响应。

您不能将以下内容添加到回退意图：
+ 言语
+ 槽值
+ 确认提示

## 将 Lambda 函数用于回退意图
<a name="invoke-fallback"></a>

调用回退目的时，响应取决于 [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 操作的 `fulfillmentCodeHook` 参数设置。自动程序执行下列操作之一：
+ 将意图信息返回给客户端应用程序。
+ 调用别名的验证和履行 Lambda 函数。它通过为会话设置的会话变量调用该函数。

有关设置在调用回退目的时的响应的更多信息，请参见 [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) 操作的 `fulfillmentCodeHook` 参数。

如果将 Lambda 函数与回退意图配合使用，则可以使用此函数来调用另一个意图或与用户进行某种形式的通信，例如收集回呼号码或开启与客户服务代表的会话。

回退意图可以在同一会话中多次调用。例如，假设您的 Lambda 函数使用 `ElicitIntent` 对话框操作来提示用户输入一个不同的意图。如果 Amazon Lex V2 在配置的尝试次数后无法推断用户的意图，将再次调用回退意图。当用户在配置的尝试次数后未使用有效的槽位值进行响应时，它也会调用回退意图。

您可以配置 Lambda 函数以跟踪使用会话变量调用回退意图的次数。如果此意图的调用次数超过了 Lambda 函数中设置的阈值，则该函数可以采取不同的操作。有关会话变量的更多信息，请参阅[设置 Lex V2 机器人的会话属性](context-mgmt-session-attribs.md)。

# AMAZON.HelpIntent
<a name="built-in-intent-help"></a>

对表示用户在与机器人交互时需要帮助的词语或短语的响应。调用此意图时，您可以对您的 Lambda 函数或应用程序进行配置，以便提供有关机器人功能的信息、询问有关需要帮助的方面的后续问题，或者将交互移交给人工客服。

常见言语：
+ help
+ 我需要帮助
+ 可以帮帮我吗

# AMAZON.KendraSearchIntent
<a name="built-in-intent-kendra-search"></a>

要搜索已使用 Amazon Kendra 编制索引的文档，请使用 `AMAZON.KendraSearchIntent` 意图。在与用户进行的对话中，如果 Amazon Lex V2 无法确定下一个操作，则会触发搜索意图。

`AMAZON.KendraSearchIntent` 仅适用于英语（美国）区域以及美国东部（弗吉尼亚州北部）、美国西部（俄勒冈州）和欧洲地区（爱尔兰）。

Amazon Kendra 是一项 machine-learning-based搜索服务，用于索引 PDF 文档或微软 Word 文件等自然语言文档。它可以搜索已编制索引的文档并为问题返回以下类型的响应：
+ 答案 
+ 可能是问题答案的常见问题解答条目
+ 与问题相关的文档

有关使用 `AMAZON.KendraSearchIntent` 的示例，请参阅[示例：为 Amazon Kendra 索引创建常见问题机器人](faq-bot-kendra-search.md)。

如果您为机器人配置了 `AMAZON.KendraSearchIntent` 意图，则 Amazon Lex V2 在无法确定某个意图的用户言语时，会调用此意图。如果没有来自 Amazon Kendra 的响应，则对话将按照机器人中的配置继续进行。

**注意**  
 目前在槽位引发期间，Amazon Lex V2 不支持 `AMAZON.KendraSearchIntent`。如果 Amazon Lex V2 无法确定某个槽位的用户言语，即调用 `AMAZON.FallbackIntent`。

当您在同一机器人中将 `AMAZON.KendraSearchIntent` 与 `AMAZON.FallbackIntent` 配合使用时，Amazon Lex V2 将按照以下方式使用意图：

1. Amazon Lex V2 调用 `AMAZON.KendraSearchIntent`。此意图调用 Amazon Kendra `Query` 操作。

1. 如果 Amazon Kendra 返回响应，则 Amazon Lex V2 向用户显示该结果。

1. 如果没有来自 Amazon Kendra 的响应，则 Amazon Lex V2 将重新提示用户。下一个操作取决于用户的响应。
   + 如果用户的响应包含 Amazon Lex V2 可识别的言语（例如填充槽位值或确认意图），则与用户的对话将按照机器人的配置继续进行。
   + 如果用户的响应未包含 Amazon Lex V2 可识别的言语，则 Amazon Lex V2 将再次调用 `Query` 操作。

1. 如果在配置的重试次数之后没有响应，Amazon Lex V2 将调用 `AMAZON.FallbackIntent` 并结束与用户的对话。

有三种方法可以使用 `AMAZON.KendraSearchIntent` 向 Amazon Kendra 发出请求：
+ 让搜索意图为您提出请求。Amazon Lex V2 以用户的言语作为搜索字符串调用 Amazon Kendra。在创建意图时，您可以定义限制 Amazon Kendra 返回的响应数的查询筛选条件字符串。Amazon Lex V2 使用查询请求中的筛选条件。
+ 使用您的 Lambda 函数向请求添加其他查询参数以缩小搜索结果范围。您将包含 Amazon Kendra 查询参数的 `kendraQueryFilterString` 字段添加到 `delegate` 对话框操作。使用 Lambda 函数向请求添加查询参数时，这些查询参数将优先于您在创建意图时定义的查询筛选条件。
+ 使用 Lambda 函数创建新查询。您可以创建 Amazon Lex V2 发送的完整 Amazon Kendra 查询请求。您可以在 `delegate` 对话操作的 `kendraQueryRequestPayload` 字段中指定查询。`kendraQueryRequestPayload` 字段优先于 `kendraQueryFilterString` 字段。

要在创建机器人时指定 `queryFilterString` 参数，或者在对话 Lambda 函数中调用 `delegate` 操作时指定 `kendraQueryFilterString` 字段，请指定用作 Amazon Kendra 查询的属性筛选条件的字符串。如果字符串不是有效的属性筛选器，您将在运行时收到 `InvalidBotConfigException` 异常。有关属性筛选条件的更多信息，请参阅《Amazon Kendra 开发人员指南》**中的[使用文档属性筛选查询](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。

要控制 Amazon Lex V2 发送到 Amazon Kendra 的查询，您可以在 Lambda 函数的 `kendraQueryRequestPayload` 字段中指定查询。如果查询无效，则 Amazon Lex V2 返回 `InvalidLambdaResponseException` 异常。有关更多信息，请参阅《Amazon Kendra 开发人员指南》**中的[查询操作](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html)。

有关如何使用 `AMAZON.KendraSearchIntent` 的示例，请参阅[示例：为 Amazon Kendra 索引创建常见问题机器人](faq-bot-kendra-search.md)。

## Amazon Kendra 搜索的 IAM 策略
<a name="kendra-search-iam"></a>

要使用该`AMAZON.KendraSearchIntent`意图，您必须使用一个提供 AWS 身份和访问管理 (IAM) 策略的角色，该策略允许 Amazon Lex V2 担任有权调用 Amazon `Query` Kendra 意图的运行时角色。您使用的 IAM 设置取决于您是使用 Amazon Lex V2 控制台创建，还是使用 AWS 开发工具包或 AWS Command Line Interface (AWS CLI) 创建。`AMAZON.KendraSearchIntent`使用控制台时，您可以选择向 Amazon Lex V2 服务相关角色添加调用 Amazon Kendra 的权限，或使用专门用于调用 Amazon Kendra `Query` 操作的角色。当您使用 AWS CLI 或软件开发工具包创建意图时，必须使用专门用于调用`Query`操作的角色。

### 附加权限
<a name="kendra-iam-attach"></a>

您可以使用控制台将访问 Amazon Kendra `Query` 操作的权限附加到默认 Amazon Lex V2 服务相关角色。当您将权限附加到服务相关角色时，无需专门创建和管理运行时角色即可连接到 Amazon Kendra 索引。

用于访问 Amazon Lex V2 控制台的用户、角色或组必须有权限管理角色策略。将以下 IAM 策略附加到控制台访问角色。当您授予这些权限时，角色将有权更改现有服务相关角色策略。

------
#### [ JSON ]

****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iam:AttachRolePolicy",
            "iam:PutRolePolicy",
            "iam:GetRolePolicy"
        ],
        "Resource": "arn:aws:iam::*:role/aws-service-role/lexv2.amazonaws.com/AWSServiceRoleForLexBots*"
    },
    {
        "Effect": "Allow",
        "Action": "iam:ListRoles",
        "Resource": "*"
    }
]
}
```

------

### 指定角色
<a name="kendra-iam-role"></a>

您可以使用控制台、AWS CLI 或 API 来指定在调用 Amazon Kendra `Query` 操作时要使用的运行时角色。

用于指定运行时角色的用户、角色或组必须具有 `iam:PassRole` 权限。以下策略定义权限。您可以使用 `iam:AssociatedResourceArn` 和 `iam:PassedToService` 条件上下文键进一步限制权限的范围。有关更多信息，请参阅 [A *WS Identity and Access Management 用户指南中的 IAM 和 AWS STS *条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/role"
        }
    ]
}
```

------

Amazon Lex V2 调用 Amazon Kendra 时所需使用的运行时角色必须具有 `kendra:Query` 权限。当您使用现有 IAM 角色获取调用 Amazon Kendra `Query` 操作的权限时，该角色必须附加以下策略。

您可以使用 IAM 控制台、IAM API 或 AWS CLI 来创建策略并将其附加到角色。这些说明使用 AWS CLI 创建角色和策略。

**注意**  
以下代码针对 Linux 和 macOS 编排了格式。对于 Windows，将 Linux 行继续符（\$1）替换为脱字号（^）。

**向角色添加 Query 操作权限**

1. 在当前目录中创建一个名为 **KendraQueryPolicy.json** 的文档，向其中添加以下代码并保存

1. 在 AWS CLI 中，运行以下命令来创建用于运行 Amazon Kendra `Query` 操作的 IAM 策略。

   ```
   aws iam create-policy \
   --policy-name query-policy-name \
   --policy-document file://KendraQueryPolicy.json
   ```

1. 将该策略附加到用于调用 `Query` 操作的 IAM 角色。

   ```
   aws iam attach-role-policy \
   --policy-arn arn:aws:iam::account-id:policy/query-policy-name
   --role-name role-name
   ```

您可以选择更新 Amazon Lex V2 服务相关角色或使用您在为机器人创建 `AMAZON.KendraSearchIntent` 时所创建的角色。以下过程演示如何选择要使用的 IAM 角色。

**为 AMAZON.KendraSearchIntent 指定运行时角色**

1. 登录 AWS 管理控制台并通过以下网址打开 Amazon Lex 控制台[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 选择要向其添加 `AMAZON.KendraSearchIntent` 的自动程序。

1. 选择**意图**旁边的加号（\$1）。

1. 在**添加意图**中，选择**搜索现有意图**。

1. 在**搜索意图**中，输入 **AMAZON.KendraSearchIntent**，然后选择**添加**。

1. 在**复制内置意图**中，输入意图的名称，如 **KendraSearchIntent**，然后选择**添加**。

1. 打开 **Amazon Kendra 查询**部分。

1. 对于 **IAM 角色**，选择下列选项之一：
   + 要更新 Amazon Lex V2 服务相关角色以便机器人能够查询 Amazon Kendra 索引，请选择**添加 Amazon Kendra 权限**。
   + 要使用有权调用 Amazon Kendra `Query` 操作的角色，请选择**使用现有角色**。

## 使用请求和会话属性作为筛选器
<a name="kendra-search-filter"></a>

要从来自 Amazon Kendra 的响应中筛选出与当前对话相关的项目，请在创建机器人时添加 `queryFilterString` 参数以使用会话和请求属性作为筛选条件。您可以在创建意图时指定属性的占位符，以便 Amazon Lex V2 在调用 Amazon Kendra 之前将其替换为值。有关请求属性的更多信息，请参阅[设置 Lex V2 机器人的请求属性](context-mgmt-request-attribs.md)。有关会话属性的更多信息，请参阅 [设置 Lex V2 机器人的会话属性](context-mgmt-session-attribs.md)。

以下是使用字符串来筛选 Amazon Kendra 查询的 `queryFilterString` 参数示例。

```
"{"equalsTo": {"key": "City", "value": {"stringValue": "Seattle"}}}"
```

以下是使用名为 `"SourceURI"` 的会话属性来筛选 Amazon Kendra 查询的 `queryFilterString` 参数示例。

```
"{"equalsTo": {"key": "SourceURI","value": {"stringValue": "[FileURL]"}}}"
```

以下是使用名为 `"DepartmentName"` 的请求属性来筛选 Amazon Kendra 查询的 `queryFilterString` 参数示例。

```
"{"equalsTo": {"key": "Department","value": {"stringValue": "((DepartmentName))"}}}"
```

`AMAZON.KendraSearchInteng` 筛选条件使用的格式与 Amazon Kendra 搜索筛选条件的格式相同。有关更多信息，请参阅《Amazon Kendra 开发人员指南》**中的[使用文档属性筛选搜索结果](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。

与 `AMAZON.KendraSearchIntent` 一起使用的查询筛选条件字符串必须确保每个筛选条件的首字母为小写字母。例如，以下是 `AMAZON.KendraSearchIntent` 的有效查询筛选条件。

```
{
"andAllFilters": [
    {
        "equalsTo": {
            "key": "City",
            "value": {
                "stringValue": "Seattle"
            }
        }
    },
    {
        "equalsTo": {
            "key": "State",
            "value": {
                "stringValue": "Washington"
            }
        }
    }
]
}
```

## 使用搜索响应
<a name="kendra-search-response"></a>

Amazon Kendra 在意图 `IntentClosingSetting` 语句的响应中返回对搜索的响应。除非 Lambda 函数生成结束响应消息，否则意图必须具有 `closingResponse` 语句。

Amazon Kendra 有五种类型的响应。
+ 以下两个响应需要您为 Amazon Kendra 索引设置常见问题。有关更多详细信息，请参阅[直接向索引添加问题和答案](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html)。
  +  `x-amz-lex:kendra-search-response-question_answer-question-<N>`：与搜索匹配的常见问题中的问题。
  +  `x-amz-lex:kendra-search-response-question_answer-answer-<N>`：与搜索匹配的常见问题中的答案。
+ 以下三个响应需要您为 Amazon Kendra 索引设置数据来源。有关更多详细信息，请参阅[创建数据来源](https://docs.aws.amazon.com/kendra/latest/dg/data-source.html)。
  + `x-amz-lex:kendra-search-response-document-<N>`：索引中与言语文本相关的文档摘录。
  + `x-amz-lex:kendra-search-response-document-link-<N>` — 索引中与言语文本相关的文档的 URL。
  + `x-amz-lex:kendra-search-response-answer-<N>` — 索引中能作为问题答案的文档摘录。

在 `request` 属性中返回响应。每个属性最多可以具有五个响应，编号为 1 到 5。有关响应的更多信息，请参阅《Amazon Kendra 开发人员指南》**中的[响应类型](https://docs.aws.amazon.com/kendra/latest/dg/response-types.html)。

`closingResponse` 语句必须具有一个或多个消息组。每个消息组都包含一条或多条消息。每条消息均可以包含一个或多个占位符变量，这些变量替换为来自 Amazon Kendra 的响应中的请求属性。消息组中必须至少有一条消息的所有变量都由运行时响应中的请求属性值替换，或者组中必须有一条没有占位符变量的消息。请求属性使用双括号（“（（”“））”）进行设置。以下消息组消息与来自 Amazon Kendra 的任何响应匹配：
+ “我为你找到了一个常见问题解答问题：((x-amz-lex: kendra-search-response-question \$1answer-question-1))，答案是 ((: \$1answer-answer-answer-1))” x-amz-lex kendra-search-response-question
+ “我找到了一份有用的文档的摘录：((x-amz-lex: kendra-search-response-document -1))”
+ “我想你的问题的答案是 ((x-amz-lex: kendra-search-response-answer -1))”

## 使用 Lambda 函数管理请求和响应
<a name="kendra-search-lambda"></a>

`AMAZON.KendraSearchIntent` 意图可以使用您的对话代码挂钩和履行代码挂钩来管理对 Amazon Kendra 的请求和响应。当您想要修改发送到 Amazon Kendra 的查询时，请使用对话代码挂钩 Lambda 函数；当您想要修改响应时，请使用履行代码挂钩 Lambda 函数。

### 使用对话代码挂钩创建查询
<a name="kendra-search-lambda-dialog"></a>

您可以使用对话代码挂钩创建要发送到 Amazon Kendra 的查询。使用对话代码挂钩是可选的。如果您未指定对话框代码挂钩，则 Amazon Lex V2 会根据用户言语来构造查询并使用您在配置意图时提供的 `queryFilterString`（如有）。

您可以在对话框代码挂钩响应中使用两个字段来修改对 Amazon Kendra 的请求：
+ `kendraQueryFilterString` — 使用此字符串为 Amazon Kendra 请求指定属性筛选条件。您可以使用索引中定义的任何索引字段筛选查询。有关筛选字符串的结构，请参阅《Amazon Kendra 开发人员指南》**中的[使用文档属性筛选查询](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。如果指定的筛选器字符串无效，则会出现 `InvalidLambdaResponseException` 异常。`kendraQueryFilterString` 字符串将覆盖为意图配置的 `queryFilterString` 中指定的任何查询字符串。
+ `kendraQueryRequestPayload` — 使用此字符串指定 Amazon Kendra 查询。您的查询可以使用 Amazon Kendra 的任何功能。如果您没有指定有效的查询，则会出现 `InvalidLambdaResponseException` 异常。有关更多信息，请参阅《Amazon Kendra 开发人员指南》**中的[查询](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html)。

创建筛选条件或查询字符串后，将响应发送到 Amazon Lex V2，并将响应的 `dialogAction` 字段设置为 `delegate`。Amazon Lex V2 将查询发送到 Amazon Kendra，然后将查询响应返回给履行代码挂钩。

### 对响应使用实现代码挂钩
<a name="kendra-search-lambda-fulfillment"></a>

在 Amazon Lex V2 将查询发送到 Amazon Kendra 后，查询响应将返回到 `AMAZON.KendraSearchIntent` 履行 Lambda 函数。代码挂钩的输入事件包含来自 Amazon Kendra 的完整响应。查询数据与 Amazon Kendra `Query` 操作返回的结构相同。有关更多信息，请参阅《Amazon Kendra 开发人员指南》**中的[查询响应语法](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax)。

实现代码挂钩是可选的。如果代码挂钩不存在，或者代码挂钩未在响应中返回消息，则 Amazon Lex V2 将对响应使用 `closingResponse` 语句。

# 示例：为 Amazon Kendra 索引创建常见问题机器人
<a name="faq-bot-kendra-search"></a>

此示例创建一个使用 Amazon Kendra 索引为用户的问题提供答案的 Amazon Lex V2 机器人。常见问题解答自动程序为用户管理对话。它使用 `AMAZON.KendraSearchIntent` 意图查询索引并向用户提供响应。以下将简要地介绍使用 Amazon Kendra 索引创建常见问题机器人的方法：

1. 创建一个自动程序，您的客户将与其交互以从其获取答案。

1. 创建自定义意图。由于 `AMAZON.KendraSearchIntent` 和 `AMAZON.FallbackIntent` 是替代意图，因此您的机器人需要至少一个其他意图，该至少一个其他意图中必须包含至少一个言语。此意图使您能够构建自动程序，但不用于其他方面。因此，您的常见问题机器人将包含至少三个意图，如下图所示：  
![\[具有三个意图的 Kendra 常见问题机器人\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/kendra-faqbot/kendra-intents.png)

1. 将 `AMAZON.KendraSearchIntent` 意图添加到机器人中，并将其配置为与 [Amazon Kendra 索引](https://docs.aws.amazon.com/kendra/latest/dg/create-index.html)配合使用。

1. 测试该机器人，即执行查询并验证您的 Amazon Kendra 索引的结果是否为回答查询的文档。

**先决条件**

在使用此示例之前，您需要创建 Amazon Kendra 索引。有关更多信息，请参阅《Amazon Kendra 开发人员指南》**中的 [Amazon Kendra 控制台入门](https://docs.aws.amazon.com/kendra/latest/dg/gs-console.html)。在本示例中，选择示例数据集（**AWS 示例文档**）作为您的数据来源。

**要创建常见问题机器人，请执行以下操作：**

1. 登录 AWS 管理控制台并通过以下网址打开 Amazon Lex 控制台[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 在导航窗格中，选择**自动程序**。

1. 选择**创建机器人**。

   1.  对于**创建方法**，请选择**创建空白机器人**。

   1.  在**机器人配置**部分中，指定指示机器人用途的机器人名称（例如 **KendraTestBot**），并且指定描述（可选）。该名称在您的账户中必须是唯一的。

   1.  在 **IAM 权限**部分中，选择**使用基本 Amazon Lex 权限创建角色**。这将创建一个 [AWS 身份和访问管理 (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 角色，该角色具有 Amazon Lex V2 运行您的机器人所需的权限。

   1.  在**儿童在线隐私保护法（COPPA）**部分中，选择**否**。

   1.  在**空闲会话超时**和**高级设置**部分中，保留默认值并且选择**下一步**。

   1.  此时，系统将转至**为机器人添加语言**部分。在**语音交互**下的菜单中，选择**无。这只是一个基于文本的应用程序。**对于其余字段保留默认设置。

   1.  选择**完成**。Amazon Lex V2 会创建您的机器人和一个名为的默认意图 **NewIntent**，然后将您带到配置此意图的页面 

要成功构建机器人，您必须创建独立于 `AMAZON.FallbackIntent` 和 `AMAZON.KendraSearchIntent` 的至少一个意图。此意图是构建 Amazon Lex V2 机器人所必需的，但不用于常见问题响应。此意图必须包含至少一个示例言语，并且该言语不得适用于客户提出的任何问题。

**要创建所需的意图，请执行以下操作：**

1.  在**意图详细信息**部分中，指定意图的名称，例如 **RequiredIntent**。

1.  在**示例言语**部分，在**添加言语**旁边的框中键入言语，例如 **Required utterance**。然后选择**添加言语**。

1. 选择**保存意图**。

创建搜索 Amazon Kendra 索引的意图以及此意图应返回的响应消息。

**创建亚马逊。 KendraSearchIntent 意图和响应消息：**

1.  在导航窗格中选择**返回意图列表**，以返回到机器人的**意图**页面。选择**添加意图**，然后从下拉菜单中选择**使用内置意图**。

1.  在弹出的框中，选择**内置意图**下的菜单。在搜索栏中输入 **AMAZON.KendraSearchIntent**，然后在列表中将其选中。

1.  指定此意图的名称，例如 **KendraSearchIntent**。

1.  从 **Amazon Kendra 索引**下拉菜单中，选择您需要通过此意图搜索的索引。您在**先决条件**部分中创建的索引应为可用状态。

1.  选择**添加**。

1. 在意图编辑器中，向下滚动至**履行**部分，选择向右箭头展开该部分，然后在**成功履行时**下的框中添加以下消息：

   ```
   I found a link to a document that could help you: ((x-amz-lex:kendra-search-response-document-link-1)).
   ```  
![\[添加履行响应\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/kendra-faqbot/kendra-fulfillment-response.gif)

    有关 Amazon Kendra 搜索响应的更多信息，请参阅[使用搜索响应](https://docs.aws.amazon.com/lexv2/latest/dg/built-in-intent-kendra-search.html#kendra-search-response)。

1. 选择**保存意图**，然后选择**构建**以构建自动程序。机器人准备就绪后，屏幕顶部的横幅会变为绿色并显示成功消息。

最后，使用控制台测试窗口来测试来自自动程序的响应。

**要测试常见问题机器人，请执行以下操作：**

1.  成功构建机器人后，选择**测试**。

1.  在控制台测试窗口中输入 **What is Amazon Kendra?**。验证机器人是否使用链接进行响应。

1.  有关配置的更多信息`AMAZON.KendraSearchIntent`，请参阅[https://docs.aws.amazon.com/lexv2/latest/dg/built-in-intent-kendra-search.html](https://docs.aws.amazon.com/lexv2/latest/dg/built-in-intent-kendra-search.html)和[KendraConfiguration](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_KendraConfiguration.html)。

# AMAZON.PauseIntent
<a name="built-in-intent-pause"></a>

对允许用户暂停与机器人的交互以便稍后返回到该交互的词语和短语的响应。您的 Lambda 函数或应用程序需要将意图数据保存在会话变量中，或者在恢复当前意图时，您需要使用 [GetSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_GetSession.html) 操作来检索意图数据。

常见言语：
+ 暂停
+ 暂停一下

# AMAZON.QnAIntent
<a name="built-in-intent-qna"></a>

**注意**  
在利用生成式人工智能功能之前，您必须满足以下先决条件  
有关使用 Amazon Bedrock 的定价信息，请参阅 [Amazon Bedrock 定价](https://aws.amazon.com/bedrock/pricing/)。
为机器人区域设置开启生成式人工智能功能。为此，请按照[利用生成式人工智能优化 Lex V2 机器人的创建和性能](generative-features.md)中的步骤进行操作。

通过使用 Amazon Bedrock FM 搜索和汇总常见问题回复来回答客户问题。当某个言语未被归类为机器人中存在的任何其他意图时，就会激活该意图。请注意，引发槽位值时，不会因为错过的言语而激活此意图。识别 `AMAZON.QnAIntent` 后，它将使用指定的 Amazon Bedrock 模型搜索已配置的 Amazon Bedrock 知识库并回答客户的问题。

**警告**  
不能在同一个机器人区域设置中使用 `AMAZON.QnAIntent` 和 `AMAZON.KendraSearchIntent`。

可使用以下知识库选项。您必须已创建该知识库并为其中的文档编制了索引。
+ OpenSearch 服务域-包含已编入索引的文档。要创建域名，请按照[创建和管理亚马逊 OpenSearch 服务域中的](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html)步骤进行操作。
+ Amazon Kendra 索引 – 包含已编入索引的常见问题文档。要创建 Amazon Kendra 索引，请按照[创建索引](https://docs.aws.amazon.com/kendra/latest/dg/create-index.html)中的步骤进行操作。
+ Amazon Bedrock 知识库 - 包含已编入索引的数据来源。要设置 Amazon Bedrock 知识库，请按照[构建知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)中的步骤进行操作。

如果选择此意图，则需要配置以下字段，然后选择**添加**以添加此意图。
+ **Bedrock 模型** – 选择要用于此意图的提供商和基础模型。请务必查看最新的可用模型和弃用时间表，并相应地计划迁移。有关更多信息，请参阅[模型生命周期](https://docs.aws.amazon.com/bedrock/latest/userguide/model-lifecycle.html#versions-for-eol)。
+ **知识库** – 选择您希望模型从中提取信息以回答客户问题的来源。以下是可用的来源。
  + **OpenSearch**— 配置以下字段。
    + **域端点** – 提供您为域创建的域端点或在创建域之后提供给您的域端点。
    + **索引名称** – 提供要搜索的索引。有关更多信息，请参阅[在 Amazon OpenSearch 服务中为数据编制索引](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/indexing.html)。
    + 选择向客户返回响应的方式。
      + **确切响应** – 启用此选项后，“答案”字段中的值将按原样用于机器人响应。配置的 Amazon Bedrock 基础模型用于按原样选择确切的答案内容，无需进行任何内容合成或总结。指定在 OpenSearch 数据库中配置的问答字段的名称。
      + **包含字段**：返回模型使用您指定的字段生成的答案。最多指定在 OpenSearch 数据库中配置的五个字段的名称。使用分号（;）分隔字段。
  + **Amazon Kendra**：配置以下字段。
    + **Amazon Kendra 索引**：选择您希望机器人搜索的 Amazon Kendra 索引。
    + **Amazon Kendra 筛选条件**：要创建筛选条件，请选中此复选框。有关 Amazon Kendra 搜索筛选条件 JSON 格式的更多信息，请参阅 [Using document attributes to filter search results](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。
    + **确切响应**：要让您的机器人返回 Amazon Kendra 返回的确切响应，请选中此复选框。否则，您选择的 Amazon Bedrock 模型会根据结果生成响应。
**注意**  
要使用此功能，您必须先按照向索引添加常见问题 [(FAQs) 中的步骤将常见问题添加到索引](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html)中。
  + **Amazon Bedrock 知识库** - 如果选择此选项，请指定 Amazon Bedrock 知识库的 ID。您可以通过在控制台中查看 Amazon Bedrock 知识库的详细信息页面或通过发送 [GetKnowledgeBase](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetKnowledgeBase.html) 请求来找到该 ID。
    + **确切响应** – 启用此选项后，“答案”字段中的值将按原样用于机器人响应。配置的 Amazon Bedrock 基础模型用于按原样选择确切的答案内容，无需进行任何内容合成或总结。要对 Amazon Bedrock 知识库使用确切的响应，需要执行以下操作：
      + 创建单独的 JSON 文件，每个文件都包含一个答案字段，其中包含需要返回给最终用户的确切响应。
      + 在 Bedrock 知识库中为这些文档编制索引时，对于**分块策略**，请选择**不分块**。
      + 将 Amazon Lex V2 中的答案字段定义为 Bedrock 知识库中的答案字段。

来自 Qn 的响应AIntent 将存储到请求属性中，如下所示：
+ `x-amz-lex:qnA-search-response`— Qn AIntent 对问题或话语的回应。
+ `x-amz-lex:qnA-search-response-source`：指向用于生成响应的文档或文档列表。
+ `x-amz-lex:qna-additional-context`— Qn AIntent 生成响应时使用的额外上下文。

**其他模型配置**

调AIntent 用 Amazon.qn 时，它使用默认的提示模板，该模板将说明和上下文与用户查询相结合，以构造发送到模型以生成响应的提示。您也可以提供自定义提示或更新默认提示以满足您的要求。

您可以使用以下工具设计提示模板：

**提示占位符** — Amazon.qn 中AIntent 适用于 Amazon Bedrock 的预定义变量，这些变量在基岩调用期间在运行时动态填充。在系统提示中，可以看到这些占位符两边都有 `$` 符号。以下列表介绍了可以使用的占位符：


| 变量 | 已替换为 | 模型 | 必填？ | 
| --- | --- | --- | --- | 
| \$1query\$1results\$1 | 从知识库检索到的用户查询结果 | 精选基岩模型 | 是 | 
| \$1output\$1instruction\$1 | 用于格式化响应生成和引文的底层指令。因模型而异。如果您定义了自己的格式化指令，建议您删除此占位符。 | 精选基岩模型 | 否 | 
| \$1adtical\$1context\$1 | Qn AIntent 用来生成响应的额外上下文 | 精选基岩模型 | 否 | 
| \$1locale\$1 | 机器人回答客户查询时使用的语言 | 精选基岩模型 | 否 | 

使用的**默认提示**为：

```
$query_results$

$additional_context$

Please only follow the instructions in <instruction> tags below.
<instruction>
Given the conversation history, <additional_context> and <Context>:
(1) first, identify the user query intent and classify it as one of the categories: FAQ_QUERY, OTHER_QUERY, GIBBERISH, GREETINGS, AFFIRMATION, CHITCHAT, or MISC;
(2) second, if the intent is FAQ_QUERY, predict the most relevant grounding passage(s) by providing the passage id(s) or output CANNOTANSWER;
(3) then, generate a concise, to-the-point FAQ-style response in $locale$ locale ONLY USING the grounding content in <Context> and <additional_context>; or output CANNOTANSWER if the user query/request cannot be directly answered with the grounding content. DO NOT mention about the grounding passages such as ids or other meta data; do not create new content not presented in <Context>. Do NOT respond to query that is ill-intented or off-topic;
(4) lastly, provide the confidence level of the above prediction as LOW, MID or HIGH.
</instruction>

$output_instruction$
```

**\$1output\$1instruction\$1** 替换为：

```
Give your final response in the following form:
<answer>
<intent>FAQ_QUERY or OTHER_QUERY or GIBBERISH or GREETINGS or AFFIRMATION or CHITCHAT or MISC</intent>
<text>a concise FAQ-style response or CANNOTANSWER</text>
<passage_id>passage_id or CANNOTANSWER</passage_id>
<confidence>LOW or MID or HIGH</confidence>
</answer>
```

**注意**  
如果您决定不使用默认指令，则 LLM 提供的任何输出都将按原样返回给最终用户。  
输出指令需要包含 <text></text> 和 <passageId></passageId> 标签和指令，LLM 才能返回 passageId 以提供响应和来源归因。

**通过会话属性提供额外的上下文支持**

您可以通过会话属性`AMAZON.QnAIntent`在运行时将其他上下文传递给`x-amz-lex:qna-additional-context`。这允许您提供补充信息，模型在生成响应时可以将这些信息与知识库结果一起使用。通过`$additional_context$`占位符将其他上下文插入到提示模板中。

**示例**：

```
{"sessionAttributes": {"x-amz-lex:qna-additional-context":"Our support hours are Monday through Friday, 8AM-8PM EST"}}
```

**Amazon Bedrock 知识库支持通过会话属性筛选元数据**

您可以将 Amazon Bedrock 知识库元数据筛选条件作为会话属性 `x-amz-lex:bkb-retrieval-filter` 的一部分进行传递。

```
             {"sessionAttributes":{"x-amz-lex:bkb-retrieval-filter":"{\"equals\":{\"key\":\"insurancetype\",\"value\":\"farmers\"}}      
```

**注意**  
要使用此筛选器，您需要使用 Amazon Bedrock 知识库作AIntent 为 Qn 的数据存储。有关更多信息，请参阅 [https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html#:~:text=Metadata%20and%20filtering](https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html#:~:text=Metadata%20and%20filtering)。

**推理配置**

您可以使用会话属性来定义在调用 LLM 时将使用的推理配置：
+ 温度：整数类型
+ topP
+ maxTokens

**示例**：

```
         {"sessionAttributes":{"x-amz-lex:llm-text-inference-config":"{\"temperature\":0,\"topP\":1,\"maxTokens\":200}"}}      
```

**Bedrock Guardrails 通过构建时和会话属性提供支持**
+ 通过在构建时使用控制台—提供 GuardrailsIdentifier 和. GuardrailsVersion 请参阅“其他模型配置”部分了解更多信息。
+ 通过使用会话属性：您还可以使用会话属性（`x-amz-lex:bedrock-guardrails-identifier` 和 `x-amz-lex:bedrock-guardrails-version`）定义 Guardrails 配置。

有关使用 Bedrock Guardrails 的更多信息，请参阅 [Guardrails](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html)。

# AMAZON.QnAIntent (multiple use support)
<a name="built-in-intent-qna-multi"></a>

您可以选择在一个区域AIntents 中拥有多个 Amazon.qn。Amazon Lex V2 AIntents 在一个机器人区域中最多支持 5 个 Amazon.qn。

如果以下情况之一属实，则AIntent 可以触发 Amazon.qn：
+ 如果机器人语言环境仅包含 1 个 Amazon.qn AIntent 并且该意图不包含示例话语，则当某句话未被归类为机器人中存在的任何其他意图时，它就会被激活。当某个言语未被归类为机器人中存在的任何其他意图时，就会激活此意图。请注意，引发槽位值时，不会因为错过的言语而激活此意图。
**注意**  
如果 FM 的响应不令人满意，或者调用 FM 失败，Amazon Lex V2 就会调用 `AMAZON.FallbackIntent`。
+ 如果 Amazon.qn AIntent 确实包含语句示例，则只有在 Amazon Lex V2 识别出用户想要根据用户输入发起该意图时，它才会被激活。
**注意**  
如果 FM 的响应不令人满意，或者调用 FM 失败，Amazon Lex V2 就会调用履行数据块中定义的失败下一步。

**注意**  
如果`botLocale`有 1 个 Amazon.qn 以上AIntent，则每个 Amazon.qn 都AIntent 需要至少有 1 句话样本。

# AMAZON.QinConnectIntent
<a name="built-in-intent-qinconnect"></a>

**注意**  
要通过 Amazon Q In Connect 使用生成式人工智能功能，必须满足以下先决条件：  
导航到 Amazon Connect 控制台并创建您的实例（如果您还没有实例），请参阅 [Amazon Connect 入门](https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-get-started.html)。
要为您的实例启用 Amazon Q in Connect，请参阅[为您的实例启用 Amazon Q in Connect](https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html)。

亚马逊。 QinConnectIntent 使用 Amazon Connect Wisdom 的 LLM 增强版回复客户的问题，该版本可提供实时建议，帮助联络中心的客户和客服人员快速准确地解决客户问题。当某个言语未被归类为机器人中存在的任何其他意图时，就会激活此意图。请注意，引发槽位值时，不会因为错过的言语而激活此意图。一旦被识别，亚马逊。 QinConnectIntent，使用指定的 Q in Connect 域搜索已配置的 Amazon Bedrock 知识库并回答客户的问题。

**注意**  
您不能使用亚马逊。 QinConnectIntent 以及 Amazon.qn AIntent 位于同一个机器人区域中。
如果您选择除美国英语之外的另一种语言，则必须自定义自助服务提示（`SELF_SERVICE_PRE_PROCESSING` 和 `SELF_SERVICE_ANSWER_GENERATION`），以指定语言来回复。有关如何自定义提示的更多信息，请参阅[自定义 Amazon Q in Connect](https://docs.aws.amazon.com/connect/latest/adminguide/customize-q.html#ai-prompts-customize-q)。

如果选择此意图，则需要配置以下字段，然后选择**保存意图**以将意图添加到机器人。
+ Amazon Q In Connect 配置 - 提供 Amazon Q In Connect 助手的 Amazon 资源名称（ARN）。助手 ARN 模式：`^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}$>`。

来自的响应 QinConnectIntent 将存储到请求属性中，如下所示：
+ `x-amz-lex:q-in-connect-response`— 对问题或话语的回应。 QinConnectIntent 

**返回的会话属性来自 QinConnectIntent**

与 QinConnect 意图的交互通过会话属性提供有关对话的其他数据。

1. `x-amz-lex:q-in-connect:session-arn` - 对话期间使用 Amazon Q In Connect 创建的会话的唯一标识符。

1. `x-amz-lex:q-in-connect:conversation-status`— 与 QinConnect 助手或域名对话的当前状态。此状态可能存在以下三种值：
   + `CLOSED`
   + `READY`
   + `PROCESSING`

1. `x-amz-lex:q-in-connect:conversation-status-reason` - 为使用上述属性报告的当前状态提供原因。可能的原因如下：
   + `SUCCESS` - 表示客户已没有其他问题要问，且其问题已成功解答。
   + `FAILED` - 表示回答客户问题时遇到错误。这主要是由于未能理解客户的问题所致。
   + `REJECTED` - 表示助手拒绝回答客户的问题，并建议在机器人交互之外处理问题，例如与人或座席交谈，以获取更多信息。

**注意**  
当在 Amazon Connect 实例驱动的客户互动期间调用 QinConnectIntent 机器人时，需要从 Amazon Connect 实例创建并传递您的会话 arn。要创建会话，可以在 Amazon Q in Connect 步骤中配置 Amazon Connect 流。

**限制**
+ 您不能使用亚马逊。 QinConnectIntent 以及没有具体言论的意图，例如 Amazon.qn、亚马逊AIntent。 BedrockAgentIntent 在同一个机器人区域中。
+ 在由 Amazon Connect 实例驱动的客户互动期间调用 QinConnectIntent 机器人时，需要从 Amazon Connect 实例创建并传递您的会话 arn。要创建会话，可以在 Amazon Q In Connect 步骤中配置 Amazon Connect 流。
+ 亚马逊不能超过一个。 QinConnectIntent 按机器人区域划分。
+ 与亚马逊一起使用的 Amazon Q in Connect 域名。 QinConnectIntent 必须与 Amazon Lex V2 机器人位于相同的 AWS 区域。

**权限**

如果在 Amazon Lex V2 机器人中使用 QinConnect 意图，而该机器人使用的是服务关联角色 (SLR)，则 Amazon Lex V2 服务有权更新该角色的相应策略，使其与 Q in Connect 助手集成。如果机器人使用自定义 IAM 角色，则用户需要手动将这些权限添加到其 IAM 角色。

如果添加了 QinConnect Intent，则服务关联角色将使用以下权限进行更新。将添加新的 QinConnect 访问策略：

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "QInConnectAssistantPolicy",
            "Action": [
                "wisdom:CreateSession",
                "wisdom:GetAssistant"
            ],
            "Resource": [
                "arn:aws:wisdom:*:accountId:assistant/assistantId",
                "arn:aws:wisdom:*:accountId:assistant/assistantId/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "QInConnectSessionsPolicy",
            "Action": [
                "wisdom:SendMessage",
                "wisdom:GetNextMessage"
            ],
            "Resource": [
                "arn:aws:wisdom:*:accountId:session/assistantId/*"
            ]
        },
        {
            "Sid": "QInConnectKmsCMKPolicy",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:region:accountId:key/keyId"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "accountId",
                    "kms:ViaService": "wisdom.region.amazonaws.com",
                    "kms:EncryptionContext:aws:wisdom:assistant:arn": ["arn:aws:wisdom:region:accountId:assistant/assistantId"]
                }
            }
        }
    ]
}
```

**注意**  
只有当您将客户管理的 KMS 密钥与 Amazon Q in Connect 助手一起使用时，才需要该`QInConnectKmsCMKPolicy`声明。

**信任政策**

```
{
    "Effect": "Allow",
    "Sid": "LexV2InternalTrustPolicy",
    "Principal": {
        "Service": "lexv2.aws.internal"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "accountId"
        },
        "ArnLike": {
            "aws:SourceArn": "arn:aws:lex:*:accountId:bot-alias/botId/*"
        }
    }
}
```

# AMAZON.RepeatIntent
<a name="built-in-intent-repeat"></a>

对允许用户重复上一条消息的词语和短语的响应。您的应用程序需要使用 Lambda 函数将之前的意图信息保存在会话变量中，或者您需要使用 [GetSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_GetSession.html) 操作来获取之前的意图信息。

常见言语：
+ 重复
+ 再说一遍
+ 重复一遍

# AMAZON.ResumeIntent
<a name="built-in-intent-resume"></a>

对允许用户恢复上一个已暂停意图的词语和短语的响应。您的 Lambda 函数或应用程序必须管理恢复上一个意图所需的信息。

常见言语：
+ 继续
+ 继续
+ 继续下去

# AMAZON.StartOverIntent
<a name="built-in-intent-start-over"></a>

对允许用户停止处理当前意图并从头开始的词语和短语的响应。您可以使用 Lambda 函数或 `PutSession` 操作再次引发第一个插槽。

常见言语：
+ 从头开始
+ 重新开始
+ 再次开始

# AMAZON.StopIntent
<a name="built-in-intent-stop"></a>

对表示用户想要停止处理当前意图并结束与机器人的交互的词语和短语的响应。您的 Lambda 函数或应用程序应清除所有现有属性和插槽类型值，然后结束该交互。

常见言语：
+ stop
+ off
+ 闭嘴