

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

# 在 Lex V2 中监控机器人性能
<a name="monitoring-bot-performance"></a>

要维护 Amazon Lex V2 聊天机器人的可靠性、可用性和性能，实施监控非常重要。本主题介绍如何使用对话日志来监控用户与聊天机器人之间的对话，使用话语统计数据来确定机器人检测到和错过的话语，以及如何使用 Amazon Lo CloudWatch gs 和监控 AWS CloudTrail Amazon Lex V2。此外还说明了 Amazon Lex V2 运行时和频道关联指标。

利用这些工具和指标，您可以了解自己需要采取哪些策略和措施来提高机器人的性能。

**Topics**
+ [使用 Analytics 衡量业务绩效](analytics.md)
+ [为 Lex V2 机器人启用对话日志](enabling-logs.md)
+ [在 Lex V2 中使用错误日志记录错误](error-logs.md)
+ [在 Lex V2 中监控运营指标](monitoring-operational-metrics.md)
+ [使用 Test Workbench 评估 Lex V2 机器人性能](test-workbench.md)

# 使用 Analytics 衡量业务绩效
<a name="analytics"></a>

借助 Analytics，您可以评估机器人与客户交互的成功率和失败率相关指标，以此来评估机器人的性能。您还可以直观地查看机器人与客户之间的对话流程模式。Analytics 以图形和图表的形式来汇总这些指标，从而简化使用体验。Analytics 中的相关工具可用于筛选结果，从而帮助您辨别出涉及意图、槽位、言语和对话的问题。您可以使用这些数据对机器人进行迭代和改进，从而创造更好的客户体验。

**注意**  
要访问 Analytics，用户的 IAM 角色 中需要附有 [AWS 托管策略： AmazonLexFullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonLexFullAccess) 或者包含分析 API 权限的自定义策略。有关如何使用自定义策略处理用户权限的详细信息，请参阅[管理分析的访问权限](analytics-permissions.md)。如果将 [AWS 托管策略： AmazonLexReadOnly](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonLexReadOnly) 附加到客户的 IAM 角色中，则系统将显示错误消息，以提示您需要添加到用户 IAM 角色中的权限，以便用户能够访问 Analytics 控制面板。

**要访问 Analytics，请执行以下操作：**

1. 登录 AWS 管理控制台并在[https://console.aws.amazon.com/lexv2/家](https://console.aws.amazon.com/lexv2/home)中打开 Amazon Lex V2 控制台。

1. 在**机器人**下的导航窗格中，选择要在分析中查看的机器人。

1. 在**分析**下选择要查看的部分。

**Topics**
+ [关键定义](analytics-key-definitions.md)
+ [筛选结果](analytics-filter.md)
+ [概述：机器人性能总览](analytics-overview.md)
+ [对话控制面板：机器人对话概览](conversation-dashboard.md)
+ [性能控制面板：机器人意图和言语指标概览](performance-dashboard.md)
+ [APIs 用于分析](analytics-api.md)
+ [管理分析的访问权限](analytics-permissions.md)

# 关键定义
<a name="analytics-key-definitions"></a>

本主题提供了关键定义，以帮助您更好地理解机器人分析。这些定义涉及机器人的以下性能方面：**意图**、**槽位**、**对话**和**言语**。以下字段与许多性能指标相关：
+ `Intent` 对象的 [https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_Intent.html#lexv2-Type-runtime_Intent-state](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_Intent.html#lexv2-Type-runtime_Intent-state) 字段。
+ [`dialogAction`对象内对象的`type`字段](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DialogAction.html#lexv2-Type-runtime_DialogAction-type)。[SessionState](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_SessionState.html)

## 意图
<a name="analytics-key-definitions-intents"></a>

Amazon Lex V2 通过以下方式对意图分类：
+ **成功**：机器人成功履行了意图。满足以下条件之一：
  + 意图 `state` 是 `ReadyForFulfillment`，并且 `dialogAction` 的 `type` 是 `Close`。
  + 意图 `state` 是 `Fulfilled`，并且 `dialogAction` 的 `type` 是 `Close`。
+ **失败**：机器人未能履行意图。意图状态。满足以下条件之一：
  + 意图 `state` 是 `Failed`，并且 `dialogAction` 的 `type` 是 `Close`（例如，用户拒绝了确认提示）。
  + 机器会在意图完成之前切换到 `AMAZON.FallbackIntent`。
+ **已切换**：在最初的意图被归类为*成功*或*失败*之前，机器人识别出另一个不同意图并且切换到此意图。
+ **已删除**：在此意图被归类为*成功*或*失败*之前，客户没有做出回应。

## 槽值
<a name="analytics-key-definitions-slots"></a>

Amazon Lex V2 通过以下方式对槽位分类：
+ **成功**：机器人已填充该槽位并且成功过渡到另一个槽位或确认步骤。
+ **失败**：即使达到最大重试次数，机器人也无法填充该槽位。
+ **已删除**：在将槽位归类为*成功*或*失败*之前，客户没有做出回应或切换到其他意图。

## 对话
<a name="analytics-key-definitions-conversations"></a>

当客户在对 Amazon Lex V2 进行运行时调用时提供 [https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html#lexv2-runtime_PutSession-request-sessionId](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html#lexv2-runtime_PutSession-request-sessionId)，然后 Amazon Lex V2 会生成 [https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_SessionState.html#lexv2-Type-runtime_SessionState-originatingRequestId](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_SessionState.html#lexv2-Type-runtime_SessionState-originatingRequestId)。如果客户未在您为机器人设置的会话超时（[https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html#lexv2-CreateBot-request-idleSessionTTLInSeconds](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html#lexv2-CreateBot-request-idleSessionTTLInSeconds)）内做出响应，则会话将过期。如果客户使用相同的 `sessionId` 返回会话，Amazon Lex V2 将生成新的 `originatingRequestId`。

对于分析而言，*对话*是指由 `sessionId` 与 `originatingRequestId` 构成的唯一组合。Amazon Lex V2 通过以下方式将对话进行分类：
+ **成功**：对话的最终意图被归类为*成功*。
+ **失败**：对话的最终意图*失败*。如果 Amazon Lex V2 默认设置为 [AMAZON.FallbackIntent](built-in-intent-fallback.md)，则对话也被归类为*失败*。
+ **已删除**：在该对话被归类为*成功*或*失败*之前，客户没有做出回应。

## 言语
<a name="analytics-key-definitions-utterances"></a>

Amazon Lex V2 通过以下方式对言语分类：
+ **检测到**：Amazon Lex V2 将该言语识别为试图调用为机器人配置的意图。
+ **遗漏**：Amazon Lex V2 未能识别出该言语。

# 筛选结果
<a name="analytics-filter"></a>

您可以在各页面的顶部筛选机器人分析的结果。

您可以使用以下参数作为筛选条件：
+ **时间**：您可以按相对或绝对时间范围来筛选结果。您选择开始和结束时间之后，Amazon Lex V2 将检索于开始时间*之后*开始并且在结束时间*之前*结束的对话。
  + **相对范围**：选择 **1d** 可查看过去一天的结果，选择 **1w** 可查看过去一周的结果，或者选择 **1m** 可查看过去一个月的结果。

    如需更多选项，请选择**自定义**，然后在**相对范围**菜单中选择一个持续时间。如需设置持续时间的更多参数，请选择**自定义范围**，在**持续时间**字段中输入相应的数字，然后从下拉菜单中选择**时间单位**。
  + **绝对范围**：选择**自定义**，然后选择**绝对范围**菜单，以筛选指定时间范围内的对话。您可以在日历上选择开始和结束日期，也可以按YYYY/MM/DD格式输入。
**注意**  
分析时间范围具有以下限制：  
开始日期必须在当前日期之前的 365 天内。
结束日期在开始日期之后，且距离开始日期不得超过 1 个月。
+ **机器人筛选**：要按机器人的区域设置、别名和版本进行筛选，请选择标有**所有区域设置**、**所有别名**和**所有版本**的下拉菜单。
+ **模式**：选中齿轮图标，然后在**模式**下拉菜单中选择显示**语音**或**文本**结果。
+ **频道**：选中齿轮图标，然后在**频道**下拉菜单中选择要显示结果的频道。有关频道集成的更多信息，请参阅[将 Amazon Lex V2 机器人与消息收发平台集成](deploying-messaging-platform.md)和 [Amazon Connect 联络中心](https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-contact-centers.html) 

# 概述：机器人性能总览
<a name="analytics-overview"></a>

概述页面对机器人在对话、言语识别和意图使用方面的性能进行汇总。该页面包含以下部分：
+ [对话性能](#conversations-performance)
+ [言语识别率](#utterance-recognition-rate)
+ [对话性能历史数据](#conversation-performance-history)
+ [最常被使用的 5 个意图](#top-five-used-intents)
+ [最常失败的 5 个意图](#top-five-failed-intents)

## 对话性能
<a name="conversations-performance"></a>

使用此图表来跟踪归类为*成功*、*失败*和*已删除*的对话的数量和百分比。要访问对话列表，请选择**查看所有对话**以展开下拉菜单。您可以选择查看用户与机器人的所有对话的列表，也可以筛选出特定结果（*成功*、*失败*或*已删除*）的对话。点击这些链接可跳转到**对话控制面板**的**对话**子部分。有关更多信息，请参阅 [对话](conversation-dashboard.md#conversations)。

要查看图表中某一部分的对话数量和百分比，请将鼠标悬停在该部分上，如下图所示。

![\[对话性能的圆环图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/conversation-performance.png)




## 言语识别率
<a name="utterance-recognition-rate"></a>

使用此图表来跟踪机器人**检测到**和**遗漏**的言语的数量和百分比。要访问言语列表，请选择**查看言语**以展开下拉菜单。您可以选择查看所有用户言语的列表，也可以筛选出特定结果（*遗漏*或*检测到*）的言语。点击这些链接可跳转到**性能控制面板**的**言语识别**子部分。有关更多信息，请参阅**查看言语**以导航至[言语识别](performance-dashboard.md#utterance-recognition)。

要查看图表中某一部分的言语数量和百分比，请将鼠标悬停在该部分上，如下图所示。

![\[圆环图，用于展示机器人的言语识别性能。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/utterance-recognition-rate.png)


## 对话性能历史数据
<a name="conversation-performance-history"></a>

使用此图表可以在筛选条件中设置的时间范围内跟踪被归类为*成功*、*失败*和*已删除*的对话的百分比。要查看某一时间间隔内特定结果的对话的百分比，请将鼠标悬停在该间隔上，如下图所示。

![\[线图，用以跟踪机器人在一段时间内的对话性能。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/conversation-performance-history.png)


## 最常被使用的 5 个意图
<a name="top-five-used-intents"></a>

使用此图表来确定机器人中最常被客户使用的五大意图。将鼠标悬停在某个条形上可查看机器人识别出此意图的次数，如下图所示。

![\[机器人中最常被客户使用的五大意图的条形图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/top-five-intents.png)


选择**查看所有意图**，导航至**性能控制面板**的**意图性能**子部分，可查看机器人在履行意图方面的性能指标。有关更多信息，请参阅 [意图性能](performance-dashboard.md#intent-performance)。

## 最常失败的 5 个意图
<a name="top-five-failed-intents"></a>

使用此图表来确定机器人未能履行的前五个意图（有关失败意图的定义，请参阅[意图](analytics-key-definitions.md#analytics-key-definitions-intents)）。将鼠标悬停在某个条形上可查看机器人未能履行此意图的次数，如下图所示。

![\[条形图，用以展示机器人中未能履行的五大意图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/top-five-failed-intents.png)


选择**查看失败的意图**，导航至**性能控制面板**的**意图性能**子部分，可查看机器人未能履行的意图的指标。有关更多信息，请参阅 [意图性能](performance-dashboard.md#intent-performance)。

# 对话控制面板：机器人对话概览
<a name="conversation-dashboard"></a>

对话控制面板用以直观地展示客户与机器人之间对话的相关指标（有关*对话*的定义，请参阅[对话](analytics-key-definitions.md#analytics-key-definitions-conversations)）。

**摘要**部分展示关于用户与机器人之间对话的以下信息。这些数字是根据筛选设置计算得出的。
+ **对话总数**：与机器人的对话的总数。
+ **对话平均持续时间**：用户与机器人之间对话的平均时间（以分钟和秒为单位）。格式为 mm:ss。
+ **每次对话的平均回合数**：对话的平均回合数。

**对话计数**和**消息计数**部分中均以图表形式分别显示在筛选条件中指定的时间范围内的对话和消息数量。将鼠标悬停在某个时间段上，即可查看该时间段内的对话或消息数量。时间段的长短取决于您所指定的时间范围：
+ 1 周内：显示每小时的计数。
+ 1 周或更长时间：显示每天的计数。

关于将鼠标悬停在某个时间段上的显示效果，请参见下图。

![\[线图，用以显示给定时间范围内每小时的对话数量。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/conversation-count.png)


**对话时间**部分基于您在筛选条件中所指定的时间范围，以每两小时的时间间隔展示在一周中的每一天中，机器人与客户进行的对话数量。阴影较深的单元格表示发生较多对话的时间。将鼠标悬停在某个单元格上可查看从该时间段开始 2 小时内的对话数量。例如，下图中的操作显示了下午 4:00 至下午 6:00（UTC）之间发生的对话数量。

![\[热度图，用于以每两小时的时间间隔直观地展示一周中每天的对话数量。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/time-of-conversations.png)


**对话控制面板**包含两个工具，即**对话流程**和**对话**。要访问某个工具，请在左侧导航窗格的**对话控制面板**下选择该工具。

## 对话流
<a name="conversation-flows"></a>

使用**对话流**可直观地了解客户在与机器人对话中所采用的意图顺序。每个意图下方将给出在对话当时调用此意图的对话的百分比和数量。在顶部选择**对话百分比**和**对话计数**可切换所显示的数据。默认情况下，对话当时最常用的五大意图将按频率降序显示。选择 **\$1其他**可显示所有意图。

选择某个意图可展开一个新的分支列，其中汇总了在对话当时的一系列意图，按频率降序排序。

选中对话流程中的某个节点后，系统将在下方展开一个窗口，以显示遵循此意图顺序的对话列表。选择与某个对话对应的**会话 ID** 可查看有关该对话的详细信息。下图显示了对话流程以及底部展开的**对话**窗口。

![\[流程图，用以直观地展示客户在与机器人对话中采用的不同意图顺序。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/conversation-flow.png)


## 对话
<a name="conversations"></a>

**对话**工具会显机器人的对话列表。您可以选中一列，以便按该列以升序或降序排序。

要按结果筛选对话，请选择**所有结果**，然后选择**成功**、**失败**或**已删除**。

**要按持续时间筛选对话，请执行以下操作：**

1. 选择标有**按持续时间筛选对话**的搜索栏。

1. 通过以下方式之一定义筛选条件：
   + 使用预定义的选项。

     1. 选择**持续时间**。

     1. 设置运算符为 =（等于）、>（大于）或 <（小于）。

     1. 选择时间长度。
   + 以 “Duration \$1operator\$1 \$1number\$1 sec”的格式输入。例如，要搜索持续时间在 30 秒以上的所有对话，请输入 **Duration > 30 sec**。指定时间长度（以秒为单位）。

要查看关于该会话的详细信息（包括元数据、意图使用率和转录），请选择对话的**会话 ID**。

**注意**  
由于对话是 `sessionId` 和 `originatingRequestId` 的唯一组合，因此相同的 `sessionId` 可能会在表格中多次出现。

**详细信息**部分包含以下元数据：
+ **时间戳**：指定对话的日期和开始时间。时间采用 hh: mm: ss 格式。
+ **持续时间**：以 mm: ss 格式指定对话的持续时间。该持续时间不包括会话超时持续时间（`idleSessionTTLInSeconds`）。
+ **结果**：指定对话是被归类为*成功*、*失败*还是*已删除*。有关这些结果的详细信息，请参阅[对话](analytics-key-definitions.md#analytics-key-definitions-conversations)。
+ **模式**：指定对话是 `Speech`、`Text` 或 `DTMF`（按键键盘输入）。由多种模式组成的对话是 `Multimode`。
+ **频道**：指定进行对话的频道（如果适用）。请参阅[将 Amazon Lex V2 机器人与消息收发平台集成](deploying-messaging-platform.md)。
+ **语言**：指定机器人的语言。

**详细信息**下方将给出机器人在对话中所引发的意图。选择**转到意图**，可打开意图编辑器并跳转此意图。选择**转到转录**可自动滚动**转录**以跳转到机器人引发此意图的第一个实例。

选择意图名称旁边的右箭头可查看有关针对此意图所引发的槽位的详细信息，包括槽位名称、机器人为每个槽位引发的值以及机器人尝试引发每个槽位的次数。

您可在**转录**部分中查看对话言语以及机器人在引发意图和槽位时的行为。左侧显示的是用户的言语，右侧显示的是机器人的言语。使用标有**筛选此会话中的转录**的搜索栏可在转录中查找相应文本。在**显示：**旁边，每个对话回合下方均会显示以下三种信息（可选择是否显示）：
+ **时间戳**：指定言语的时间。
+ **意图状态**：指定机器人在言语期间引发的意图以及意图的结果（如果适用）。可能的意图状态如下：
  + 调用的意图：*intent name*— 机器人已识别出客户正在调用的意图。
  + 已切换意图：*intent name*— 机器人已根据话语切换到不同的意图。
  + *intent name*: 成功 — 机器人已实现意图。
+ **槽位状态**：指定机器人在言语期间引发的槽位（如果适用）以及客户提供的值。

# 性能控制面板：机器人意图和言语指标概览
<a name="performance-dashboard"></a>

您可以在性能控制面板中查看机器人在意图履行和言语识别方面的性能的详细信息。

**意图性能细分**部分中展示机器人调用意图的总次数，并且按照*成功*、*失败*、*已删除*和*已切换*的分类来分别展示各个类别的意图的次数和百分比。有关这些定义的解释，请参阅[意图](analytics-key-definitions.md#analytics-key-definitions-intents)。将鼠标悬停在图表中的某一个部分上可展开一个方框，以查看该结果的对话的数量和百分比，如下图所示。

![\[圆环图，用以展示机器人履行意图的不同结果。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/intent-performance-breakdowns.png)


选择**查看所有意图**可显示一个下拉菜单，以便从中选择查看机器人所引发的各个意图。您也可以选择查看特定结果（*成功*、*失败*、*已删除*或*已切换*）的意图。点击这些链接可跳转到**性能控制面板**的**意图性能**子部分。有关更多信息，请参阅 [意图性能](#intent-performance)。

**话语识别**部分汇总了*遗漏*和*检测到*的言语的数量。选择**查看详细信息**以导航到该机器人的言语列表。选择**遗漏的言语**下的数字可查看遗漏言语的列表，并且选择**检测到的言语**下的数字可查看机器人所检测到的言语的列表。有关更多信息，请参阅 [言语识别](#utterance-recognition)。

在左侧边栏中选择**性能控制面板**下的**意图性能**和**言语识别**，可查看关于机器人中的意图和言语的详细信息。

## 意图性能
<a name="intent-performance"></a>

此控制面板按频率降序汇总了机器人使用的意图的性能。每个意图旁边的条形用以直观地展示此意图被归类为*成功*、*失败*、*已删除*和*已切换*的次数。有关这些定义的解释，请参阅[意图](analytics-key-definitions.md#analytics-key-definitions-intents)。将鼠标悬停在栏的某个条形上，即可查看使用此意图并获得该结果的对话数量，如下图所示：

![\[条形图，用以展示机器人履行意图的不同结果。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/analytics/intent-performance.png)


**注意**  
该控制面板中展示一组筛选条件设置的前 1,000 个结果。要获得更有针对性的结果，请配置更精细的筛选条件设置。

您可以在图表顶部选中**成功**、**失败**、**已删除**或**已切换**复选框，以设置要查看的意图状态。

使用**显示**右侧的下拉菜单可调整要显示的意图数量以及这些意图的排序，即按频率的升序还是降序显示。

选择某个意图名称可导航至此意图的页面，其中显示三个图表：**意图性能明细**、**槽位性能**和**意图切换**。

**意图性能明细**部分显示机器人使用此意图的总次数，并且按照*成功*、*失败*、*已删除*和*已切换*来分类展示各个类别的意图履行次数和百分比。有关这些定义的解释，请参阅[意图](analytics-key-definitions.md#analytics-key-definitions-intents)。将鼠标悬停在图表的某一部分上，即可查看意图履行产生该结果的次数和百分比。

**槽位性能**部分展示属于当前意图的槽位的指标。要按某一列排序，可选中该列以便按升序排序，再次选中该列则按降序排序。您可以使用搜索栏查找特定的槽位，也可以使用页码按钮来导航至不同的槽位。

**注意**  
该控制面板中展示一组筛选条件设置的前 1,000 个结果。要获得更有针对性的结果，请配置更精细的筛选条件设置。

**意图切换**部分列出机器人从当前意图切换到另一个意图的实例，其中包含以下信息：
+ **阶段**：机器人切换此意图的对话阶段。
+ **意图切换到**：机器人对当前意图执行切换的目标意图。
+ **会话计数**：**阶段**和**意图切换到**组合的会话数。

**注意**  
该控制面板中展示一组筛选条件设置的前 1,000 个结果。要获得更有针对性的结果，请配置更精细的筛选条件设置。

## 言语识别
<a name="utterance-recognition"></a>

该页面列出机器人*遗漏*和*检测到*的所有言语，同时还提供了相应工具，以便向意图中添加示例言语以帮助训练机器人。有关这些定义的解释，请参阅[言语](analytics-key-definitions.md#analytics-key-definitions-utterances)。要切换**遗漏的言语**与**检测到的言语**，可点击顶部的选项卡。

**注意**  
该控制面板中展示一组筛选条件设置的前 1,000 个结果。要获得更有针对性的结果，请配置更精细的筛选条件设置。

要在意图中添加言语，请执行以下操作：

1. 找到要为此意图添加的示例言语，选中该言语旁边的复选框。

1. 选择**添加到意图**，然后打开**意图**下的下拉菜单以选择要向其添加言语的意图。

1. 选择**添加**。

# APIs 用于分析
<a name="analytics-api"></a>

本节介绍用于检索机器人分析的 API 操作。

**注意**  
要使用[ListUtteranceMetrics](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListUtteranceMetrics.html)和 [ListUtteranceAnalyticsData](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListUtteranceAnalyticsData.html)，您的 IAM 角色必须具有执行操作的权限，该[ListAggregatedUtterances](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListAggregatedUtterances.html)操作允许访问与话语相关的分析。有关详细信息以及适用于 IAM 角色的 IAM 策略，请参阅[查看 Lex V2 对话中的言语统计数据](#monitoring-utterances)。
+ 以下 API 操作可检索机器人的摘要指标：
  + [ListSessionMetrics](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListSessionMetrics.html)
  + [ListIntentMetrics](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListIntentMetrics.html)
  + [ListIntentStageMetrics](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListIntentStageMetrics.html)
  + [ListUtteranceMetrics](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListUtteranceMetrics.html)
+ 以下 API 操作可检索会话和言语的元数据列表：
  + [ListSessionAnalyticsData](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListSessionAnalyticsData.html)
  + [ListUtteranceAnalyticsData](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListUtteranceAnalyticsData.html)
+ 该[ListIntentPaths](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListIntentPaths.html)操作会检索有关客户在与机器人对话时所采用的意图顺序的指标。

## 筛选结果
<a name="analytics-api-filters"></a>

您需要针对 Analytics API 请求来指定 `startTime` 和 `endTime`。API 将返回在 `startTime` *之后*开始并在 `endTime` *之前*结束的会话、意图、意图阶段或言语。

`filters` 是 Analytics API 请求中的可选字段。它映射到[AnalyticsSessionFilter](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionFilter.html)、[AnalyticsIntentFilter[AnalyticsIntentStageFilter](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageFilter.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentFilter.html)、或[AnalyticsUtteranceFilter](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceFilter.html)对象的列表。在每个对象中，使用字段创建表达式以作为筛选条件。例如，如果您将以下筛选条件添加到列表中，则机器人将搜索时长超过 30 秒的对话。

```
{
    "name": "Duration",
    "operator": "GT",
    "value": "30 sec",
}
```

## 检索机器人的指标
<a name="analytics-api-metrics"></a>

使用 `ListSessionMetrics`、`ListIntentMetrics`、`ListIntentStageMetrics` 和 `ListUtteranceMetrics` 操作来检索*会话*、*意图*、*意图阶段*和*言语*的摘要指标。

对于这些操作，请填写以下必填字段：
+ 提供 `startTime` 和 `endTime` 以定义要检索结果的时间范围。
+ 指定要计算的指标`metrics`、[AnalyticsSessionMetric[AnalyticsIntentMetric[AnalyticsIntentStageMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageMetric.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentMetric.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionMetric.html)、或[AnalyticsUtteranceMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceMetric.html)对象的列表。在每个对象中，使用 `name` 字段指定要计算的指标，使用 `statistic` 字段指定计算的是 `Sum`、`Average` 或 `Max` 数，并且使用 `order` 字段指定结果的排序方式是 `Ascending` 还是 `Descending`。
**注意**  
`metrics` 和 `binBy` 对象均包含 `order` 字段。您只能在这两个对象中的一个对象中指定排序 `order`。

该请求中的其余字段为可选字段。您可以通过以下方式筛选和整理结果：
+ **筛选结果**：使用 `filters` 字段来筛选结果。有关更多信息，请参阅[筛选结果](#analytics-api-filters)。
+ **按类别对结果进行分组**-指定`groupBy`字段、包含单个[AnalyticsSessionResult](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionResult.html)、[AnalyticsIntentResult[AnalyticsIntentStageResult](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageResult.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentResult.html)、或[AnalyticsUtteranceResult](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceResult.html)对象的列表。在对象中，指定要以其为基础对结果进行分组的类别的 `name` 字段。

  如果您在请求中指定一个`groupBy`字段，则响应中的`results`对象将包含`groupByKeys`、[AnalyticsSessionGroupByKey[AnalyticsIntentGroupByKey[AnalyticsIntentStageGroupByKey](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageGroupByKey.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentGroupByKey.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionGroupByKey.html)、或[AnalyticsUtteranceGroupByKey](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceGroupByKey.html)多个对象的列表，每个对象都`name`包含您在请求中指定的，`value`字段中包含该类别的成员。
+ **按时间对结果进行分**箱-指定`binBy`字段，即包含单个[AnalyticsBinBySpecification](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsBinBySpecification.html)对象的列表。在对象中，将 `name` 字段指定为 `ConversationStartTime` 以便按对话开始的时间对结果进行分箱，或者指定为 `UtteranceTimestamp` 以便按言语发生的时间对结果进行分箱。在 `interval` 字段中指定要对结果进行分箱的时间间隔，并且在 `order` 字段中指定排序是 `Ascending` 还是 `Descending`。

  如果您在请求中指定一个`binBy`字段，则响应中的`results`对象将包含`binKeys`一个[AnalyticsBinKey](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsBinKey.html)对象列表，每个对象都`name`包含您在请求中指定的对象以及`value`字段中定义该数据桶的时间间隔。
**注意**  
`metrics` 和 `binBy` 对象均包含 `order` 字段。您只能在这两个对象中的一个对象中指定排序 `order`。

使用以下字段来处理响应的显示：
+ 在 `maxResults` 字段中指定一个介于 1 到 1,000 之间的数字，以限制单个响应中返回的结果数。
+ 如果结果数大于您在 `maxResults` 字段中指定的数字，则响应中包含 `nextToken`。再次发出请求，但使用 `nextToken` 字段中的值以便返回下一批结果。

如果使用 `ListUtteranceMetrics`，则可以在 `attributes` 字段中指定要返回的属性。此字段映射到包含单个[AnalyticsUtteranceAttribute](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceAttribute.html)对象的列表。在 `name` 字段中指定 `LastUsedIntent`，以返回 Amazon Lex V2 在言语时使用的意图。

在响应中，该`results`字段映射到[AnalyticsSessionResult](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionResult.html)、[AnalyticsIntentResult[AnalyticsIntentStageResult](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageResult.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentResult.html)、或[AnalyticsUtteranceResult](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceResult.html)对象的列表。每个对象均包含 `metrics` 字段，以返回您所请求的指标的汇总统计数据以及使用您指定的方法创建的任何数据分箱或组。

## 在机器人中检索会话和言语的元数据
<a name="analytics-api-metadata"></a>

使用[ListSessionAnalyticsData](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListSessionAnalyticsData.html)和[ListUtteranceAnalyticsData](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListUtteranceAnalyticsData.html)操作检索有关各个会话和话语的元数据。

填写必填的 `startTime` 和 `endTime` 字段以定义要检索结果的时间范围。

该请求中的其余字段为可选字段。要对结果进行筛选和排序，请执行以下操作：
+ **筛选结果**：使用 `filters` 字段来筛选结果。有关更多信息，请参阅[筛选结果](#analytics-api-filters)。
+ 对@@ **结果**进行排序-使用包含[SessionDataSortBy](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SessionDataSortBy.html)或[UtteranceDataSortBy](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UtteranceDataSortBy.html)对象的`sortBy`字段对结果进行排序。在字段 `name` 中指定要作为排序依据的值，并且在 `order` 字段中指定以 `Ascending` 还是 `Descending` 进行排序。

使用以下字段来处理响应的显示：
+ 在 `maxResults` 字段中指定一个介于 1 到 1,000 之间的数字，以限制单个响应中返回的结果数。
+ 如果结果数大于您在 `maxResults` 字段中指定的数字，则响应中包含 `nextToken`。再次发出请求，但使用 `nextToken` 字段中的值以便返回下一批结果。

在响应中，`sessions`或`utterances`字段映射到[SessionSpecification](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SessionSpecification.html)或[UtteranceSpecification](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UtteranceSpecification.html)对象的列表。每个对象均包含单个会话或言语的元数据。

## 检索意图路径分析数据
<a name="analytics-api-paths"></a>

使用该[ListIntentPaths](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListIntentPaths.html)操作来检索有关客户在与机器人对话时所采用的意图顺序的指标。

对于这些操作，请填写以下必填字段：
+ 提供 `startTime` 和 `endTime` 以定义要检索结果的时间范围。
+ 提供 `intentPath` 以定义检索指标的意图顺序。路径中的意图用正斜杠隔开。例如，将 `intentPath` 字段填充为 **/BookCar/BookHotel**，以查看关于用户以该顺序调用 `BookCar` 和 `BookHotel` 意图的次数的详细信息。

使用可选的 `filters` 字段来筛选结果。有关更多详细信息，请参阅[筛选结果](#analytics-api-filters)。

## 查看 Lex V2 对话中的言语统计数据
<a name="monitoring-utterances"></a>



您可以使用言语统计数据来确定您的用户向机器人发送的言语。系统将统计 Amazon Lex V2 成功检测到的言语以及未成功检测到的言语。您可以使用此信息来优化机器人。

例如，如果您发现用户正在发送 Amazon Lex V2 遗漏的言语，则可以将该言语添加到意图中。系统将使用新的言语来更新此意图的 Draft 版本，以便您在将其部署到机器人之前对其进行测试。

当 Amazon Lex V2 将某个言语识别为试图调用为机器人配置的意图时，该言语即被检测到。当 Amazon Lex V2 未能识别某个言语而是调用 `AMAZON.FallbackIntent` 时，将错过该言语。

可以使用 `ListUtteranceMetrics` API 和 `ListAggregatedUtterance` API 来查看言语统计信息。

以下条件下，系统不会使用 `ListUtteranceMetrics` API 生成言语统计数据：
+ 当使用控制台创建机器人时，“儿童在线隐私保护法案”设置被设置为**是**，或者在使用 `CreateBot` 操作创建机器人时，`childDirected` 字段被设置为 true。

该 `ListUtteranceMetrics` API 还提供其他功能，包括：
+ 更多可用信息，例如检测到言语的被映射意图。
+ 更多筛选功能（包括频道和模式）。
+ 更长的保留日期范围（30 天）。
+ 即使您已选择退出数据存储，也可以使用该 API。控制台依赖于 `ListUtteranceMetrics` API 来实现对遗漏和检测到的言语的功能。

以下条件下，系统不会使用 `ListAggregatedUtterance` API 生成言语统计数据：
+ 当使用控制台创建机器人时，“儿童在线隐私保护法案”设置被设置为**是**，或者在使用 `CreateBot` 操作创建机器人时，`childDirected` 字段被设置为 true。
+ 您正在对一个或多个槽位使用槽位模糊处理。
+ 您已选择退出 Amazon Lex 改进计划。

该 `ListAggregatedUtterance` API 所提供的功能包括：
+ 可用的详细信息较少（不存在言语的被映射意图）。
+ 有限的筛选功能（不包括频道和模式）。
+ 较短的保留日期范围（15 天）。

您可以使用言语统计信息来查看是否检测到或遗漏了特定的话语，以及机器人交互中上次使用该言语的时间。

当用户与您的机器人交互时，Amazon Lex V2 会持续不断地存储言语。您可以使用控制台或 `ListAggregatedUtterances` 操作来查询统计数据。数据保留期为 15 天。如果用户选择退出数据存储，则不可用。您可以使用 `DeleteUtterances` 操作或选择退出数据存储来删除言语。如果您关闭您的 AWS 账户，则所有话语都将被删除。所存储的言语使用服务器管理的密钥进行加密。

如果使用 `ListUtteranceMetrics` 删除机器人版本，则该版本的言语统计数据最多可用 30 天，而如果使用 `ListAggregatedUtterances` 删除机器人版本，则该版本的言语统计数据最多可用 15 天。您无法在 Amazon Lex V2 控制台中查看已删除版本的统计数据。要查看已删除版本的统计数据，可以使用 `ListAggregatedUtterances` 和 `ListUtteranceMetrics` 操作。

如果同时使用`ListAggregatedUtterances`和 `ListUtteranceMetrics` APIs，则话语按话语的文本汇总。例如，客户发出“我想订购披萨”的话语的所有实例均会在回复中汇总到同一行中。使用该[RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html)操作时，使用的文本是输入脚本。

要使用`ListAggregatedUtterances`和 `ListUtteranceMetrics` APIs，请将以下策略应用于角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListAggregatedUtterancesPolicy",
            "Effect": "Allow",
            "Action": "lex:ListAggregatedUtterances",
            "Resource": "*"
        }
    ]
}
```

------

# 管理分析的访问权限
<a name="analytics-permissions"></a>

要为用户提供分析访问权限，请将允许其调用 API 操作进行分析的策略附加到该用户的 IAM 角色中。您可以将 [AWS 托管策略： AmazonLexFullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonLexFullAccess) 附加到 IAM 角色以提供对 Amazon Lex API 操作的完全访问权限，也可以创建仅授予分析权限的自定义策略并将其附加到 IAM 角色中。

**要创建包含分析权限的自定义策略，请执行以下操作：**

1. 如果您需要首先创建 IAM 角色，请执行[创建角色以向 IAM 用户委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)中所述的步骤。

1. 按照[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)中的步骤来使用以下 JSON 对象创建策略。要为 IAM 角色启用对特定机器人的分析访问权限，请将每个机器人的 ARN 添加到 `Resource` 字段。将*region*、和*account-id*，替换为*BOTID*与机器人对应的值。您也可以用您选择的名称替换语句标识符。*AnalyticsActions*

1. 按照[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)中的步骤，将您创建的策略附加到要授予分析权限的角色。

1. 现在，该角色即有权查看您指定的机器人的分析数据。

# 为 Lex V2 机器人启用对话日志
<a name="enabling-logs"></a>

使用对话日志来存储用户与机器人的对话。查看这些日志，找出机器人与用户交互中的问题，并利用这些洞察来修改机器人的行为。本节还介绍如何对槽位值进行模糊处理以保护用户的隐私。

**Topics**
+ [在 Lex V2 中使用对话日志记录对话](conversation-logs.md)
+ [从 Lex V2 掩盖对话日志中的槽位值](monitoring-obfuscate.md)
+ [Lex V2 中的选择性对话日志捕获](monitoring-selective-logging.md)

# 在 Lex V2 中使用对话日志记录对话
<a name="conversation-logs"></a>

您可以启用*对话日志* 来存储自动程序的交互。您可以使用这些日志查看机器人的性能，并解决与对话相关的问题。您可以记录 [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。您可以使用此 ID 获取对话的记录，包括用户话语和相应的自动程序响应。您还可以获取元数据，例如话语的意图名称和槽位值。

**注意**  
您不能将对话日志用于受儿童在线隐私保护法案（COPPA）约束的自动程序。

对话日志是为别名配置的。每个别名的文本日志和音频日志都可以有不同的设置。您可以为每个别名启用文本日志和/或音频日志。文本日志在 CloudWatch 日志中存储文本输入、音频输入脚本和相关元数据。音频日志将音频输入存储在 Amazon S3 中。您可以使用 AWS KMS 客户管理功能启用文本和音频日志的加密 CMKs。

要配置日志记录，请使用控制台或[CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html)或[UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html)操作。为别名启用对话日志后，对该别名使用[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)操作将文本或音频语句记录在已配置的 CloudWatch 日志日志组或 S3 存储桶中。

**Topics**
+ [用于对话日志的 IAM 策略](conversation-logs-policies.md)
+ [为 Lex V2 机器人配置对话日志](conversation-logs-configure.md)
+ [从 Lex V2 中查看亚马逊 CloudWatch 日志中的文本日志](conversation-logs-cw.md)
+ [访问 Amazon S3 中的音频日志](conversation-logs-s3.md)
+ [使用 CloudWatch 指标监控对话日志状态](conversation-logs-monitoring.md)

# 用于对话日志的 IAM 策略
<a name="conversation-logs-policies"></a>

根据您选择的日志类型，Amazon Lex V2 需要权限才能使用亚马逊 CloudWatch 日志和亚马逊简单存储服务 (S3) 存储桶来存储您的日志。您必须创建 AWS Identity and Access Management 角色和权限才能让 Amazon Lex V2 访问这些资源。

## 为对话日志创建 IAM 角色和策略
<a name="conversation-logs-role-and-policy"></a>

要启用对话日志，您必须授予 CloudWatch 日志和 Amazon S3 的写入权限。如果您为 S3 对象启用对象加密，则需要向用于加密对象的 AWS KMS 密钥授予访问权限。

您可以使用 IAM 控制台、IAM API 或 AWS Command Line Interface 来创建角色和策略。这些说明使用 AWS CLI 创建角色和策略。

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



**为对话日志创建 IAM 角色**

1. 在名为 **LexConversationLogsAssumeRolePolicyDocument.json** 的当前目录中创建一个文档，向其中添加以下代码并保存。此策略文档将 Amazon Lex V2 作为受信任实体添加到角色中。这允许 Amazon Lex V2 担任向为对话日志配置的资源传送日志的角色。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lexv2.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 在 AWS CLI 中，运行以下命令为对话日志创建 IAM 角色。

   ```
   aws iam create-role \
       --role-name role-name \
       --assume-role-policy-document file://LexConversationLogsAssumeRolePolicyDocument.json
   ```

接下来，创建策略并将其附加到该角色以允许 Amazon Lex V2 写入 CloudWatch 日志。

**创建用于将对话文本记录到 Log CloudWatch s 的 IAM 策略**

1. 在名为 **LexConversationLogsCloudWatchLogsPolicy.json** 的当前目录中创建一个文档，向其中添加 IAM 策略并保存。

1. 在 AWS CLI 中，创建向 CloudWatch 日志组授予写入权限的 IAM 策略。

   ```
   aws iam create-policy \
       --policy-name cloudwatch-policy-name \
       --policy-document file://LexConversationLogsCloudWatchLogsPolicy.json
   ```

1. 将该策略附加到您为对话日志创建的 IAM 角色中。

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

如果要将音频日志记录到 S3 存储桶，请创建允许 Amazon Lex V2 写入存储桶的策略。

**要创建用于将音频日志记录到 S3 存储桶中的 IAM 策略，请执行以下操作：**

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

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::bucket-name/*"
         }
     ]
   }
   ```

------

1. 在 AWS CLI 中，创建授予您的 S3 存储桶写入权限的 IAM 策略。

   ```
   aws iam create-policy \
       --policy-name s3-policy-name \
       --policy-document file://LexConversationLogsS3Policy.json
   ```

1. 将该策略附加到您为对话日志创建的角色。

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

## 授予传递 IAM 角色的权限
<a name="conversation-logs-pass-role"></a>

当您使用控制台 AWS Command Line Interface、或 AWS 开发工具包指定用于对话日志的 IAM 角色时，指定对话日志 IAM 角色的用户必须有权将该角色传递给 Amazon Lex V2。要允许用户将角色传递给 Amazon Lex V2，您必须向该用户的 IAM 用户、角色或组授予 `PassRole` 权限。

以下策略定义要授予用户、角色或组的权限。您可以使用 `iam:AssociatedResourceArn` 和 `iam:PassedToService` 条件键来限制权限的范围。有关更多信息，请参阅 AWS Identity and [Access Management 用户指南中的授予用户向 AWS 服务传递角色的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)*以及 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-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "lexv2.amazonaws.com"
                },
                "StringLike": {
                    "iam:AssociatedResourceARN": "arn:aws:lex:region:123456789012:bot:bot-name:bot-alias"
                }
            }
        }
    ]
}
```

------

# 为 Lex V2 机器人配置对话日志
<a name="conversation-logs-configure"></a>

您可以使用控制台或 `CreateBotAlias` 和 `UpdateBotAlias` 操作的 `conversationLogSettings` 字段来启用和禁用对话日志。您可以启用或禁用音频日志和/或文本日志。日志记录将在新自动程序会话上启动。对日志设置的更改不会体现在活动会话中。

要存储文本日志，请使用您的 AWS 账户中的 Amazon CloudWatch 日志组。您可以使用任何有效的日志组。日志组必须与 Amazon Lex V2 机器人位于同一区域中。有关创建 CloudWatch 日志组的更多信息，请参阅 *Amazon 日志用户指南中的使用日志组和 CloudWatch 日志*[流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

要存储音频日志，请在您的 AWS 账户中使用一个 Amazon S3 存储桶。您可以使用任何有效的 S3 存储桶。该存储桶必须与 Amazon Lex V2 机器人位于同一区域。有关创建 S3 存储桶的更多信息，请参阅《Amazon Simple Storage Service 入门指南》中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)。

当您使用控制台管理对话日志时，控制台会更新您的服务角色，以便拥有访问日志组和 S3 存储桶的权限。

如果您不使用控制台，则必须为 IAM 角色提供策略，以便 Amazon Lex V2 拥有写入所配置的日志组或存储桶的权限。如果您使用创建服务相关角色 AWS Command Line Interface，则必须使用`custom-suffix`选项为该角色添加自定义后缀，如下例所示。有关更多信息，请参阅 [为对话日志创建 IAM 角色和策略](conversation-logs-policies.md#conversation-logs-role-and-policy)。

```
aws iam create-service-linked-role \
    --aws-service-name lexv2.amazon.aws.com \
    --custom-suffix suffix
```

您用于启用对话日志的 IAM 角色必须具有 `iam:PassRole` 权限。应将以下策略附加到角色：

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

****  

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

------

## 启用对话日志
<a name="conversation-logs-enable"></a>

**使用控制台启用日志**

1. 打开 Amazon Lex V2 控制台 [https://console.aws.amazon.com/](https://console.aws.amazon.com/lexv2)lexv2。

1. 从列表中，选择一个机器人。

1. 在左侧菜单中选择**别名**。

1. 在别名列表中，选择要为其配置对话日志的别名。

1. 在**对话日志**部分，选择**管理对话日志**。

1. 对于文本日志，请选择**启用**，然后输入 Amazon Log CloudWatch s 日志组名称。

1. 对于音频日志，请选择**启用**，然后输入 S3 存储桶信息。

1. 可选。要加密音频日志，请选择用于加密的密 AWS KMS 钥。

1. 选择 **Save（保存）**以开始记录对话。如有必要，Amazon Lex V2 将更新您的服务角色，使其具有访问 CloudWatch 日志日志组和所选 S3 存储桶的权限。

## 在 Lex V2 中禁用对话日志
<a name="conversation-logs-disable"></a>

**使用控制台禁用日志**

1. 打开 Amazon Lex V2 控制台 [https://console.aws.amazon.com/](https://console.aws.amazon.com/lexv2)lexv2。

1. 从列表中，选择一个机器人。

1. 在左侧菜单中选择**别名**。

1. 在别名列表中，选择要为其配置对话日志的别名。

1. 在**对话日志**部分，选择**管理对话日志**。

1. 禁用文本日志记录、音频日志记录或这两者，以关闭日志记录。

1. 选择 **Save（保存）**以停止记录对话。

# 从 Lex V2 中查看亚马逊 CloudWatch 日志中的文本日志
<a name="conversation-logs-cw"></a>

Amazon Lex V2 将您的对话文本日志存储在亚马逊 CloudWatch 日志中。要查看日志，请使用 CloudWatch 日志控制台或 API。有关更多信息，请参阅 *Amazon Logs 用户指南中的[使用筛选模式搜索CloudWatch 日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html)和 CloudWatch 日志*[见解查询语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)。

**要使用 Amazon Lex V2 控制台查看日志，请执行以下操作：**

1. 打开 Amazon Lex V2 控制台 [https://console.aws.amazon.com/](https://console.aws.amazon.com/lexv2)lexv2。

1. 从列表中，选择一个机器人。

1. 从左侧菜单中选择 “**分析**”，然后选择 “**CloudWatch 指标**”。

1. 在指标页面上查看您的机器人的**CloudWatch 指标**。

您也可以使用 CloudWatch 控制台或 API 来查看日志条目。要查找日志条目，请导航到为该别名配置的日志组。您可以在 Amazon Lex V2 控制台中或使用[DescribeBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeBotAlias.html)操作来找到日志的日志流前缀。

用户言语的日志条目位于多个日志流中。对话中的一个话语在一个日志流中具有一个带指定前缀的条目。日志流中的条目包含以下信息：

message-version  
消息架构版本。

自动程序  
有关客户正在与之交互的机器人的详细信息。

消息  
机器人发回给用户的响应。

utteranceContext  
有关处理该言语的信息。  
+ `runtimeHints`：用于转录和解释用户输入的运行时上下文。有关更多信息，请参阅 [在对话中使用运行时提示改善对槽位值的识别](using-hints.md)。
+ `slotElicitationStyle`：用于解释用户输入的槽位引发样式。有关更多信息，请参阅 [在对话期间使用拼写样式捕获槽位值](spelling-styles.md)。

sessionState  
用户与机器人之间对话的当前状态。有关更多信息，请参阅 [了解 Amazon Lex V2 机器人对话](managing-conversations.md)。

interpretations  
Amazon Lex V2 确定可以满足用户言语的意图列表。[使用置信度分数提高对话的准确性](confidence-scores.md)。

interpretationSource  
表示插槽是由亚马逊 Lex V2 还是由 Amazon Bedrock 解析的。值：Lex \$1 Bedrock

sessionId  
正在进行对话的用户会话的标识符。

inputTranscript  
用户输入的转录。  
+ 对于文本输入，表示用户键入的文本。对于 DTMF 输入，表示用户输入的密钥。
+ 对于语音输入，这是 Amazon Lex V2 将用户言语转换成的文本，以便调用意图或填补槽位。

rawInputTranscript  
应用任何文本处理之前的用户输入原始转录。注意：文本处理仅适用于 en-US 和 en-GB 区域设置。

transcriptions  
用户输入的潜在转录列表。有关更多信息，请参阅 [使用语音转录置信度分数来改善与 Lex V2 机器人的对话](using-transcript-confidence-scores.md)。

rawTranscription  
使用语音转录置信度分数。有关更多信息，请参阅 [使用语音转录置信度分数来改善与 Lex V2 机器人的对话](using-transcript-confidence-scores.md)。

missedUtterance  
指示 Amazon Lex V2 是否能够识别用户的言语。

requestId  
Amazon Lex V2 为用户输入生成的请求 ID。

timestamp  
用户输入的时间戳。

developerOverride  
指示是否使用对话代码挂钩更新了对话流程。有关使用对话代码挂钩的更多信息，请参阅[将AWS Lambda功能集成到您的 Amazon Lex V2 机器人中](lambda.md)。

inputMode  
指示输入的类型。可以是音频、DTMF 或文本。

requestAttributes  
处理用户输入时使用的请求属性。

audioProperties  
如果启用了音频对话日志，并且用户输入是音频格式，则包括音频输入的总时长、语音持续时间以及音频中的静默持续时间。它还包括一个指向音频文件的链接。

bargeIn  
指示用户输入是否中断了之前的机器人响应。

responseReason  
生成响应的原因。可以是以下值之一：  
+ `UtteranceResponse`：对用户输入的响应
+ `StartTimeout`：当用户未提供输入时，服务器生成的响应
+ `StillWaitingResponse`：当用户请求机器人等待时，服务器生成的响应
+ `FulfillmentInitiated`：服务器生成的指示即将触发履行的响应
+ `FulfillmentStartedResponse`：服务器生成的指示履行已开始的响应
+ `FulfillmentUpdateResponse`：在履行过程中，服务器定期生成的响应
+ `FulfillmentCompletedResponse`：履行完成后，服务器生成的响应。

operationName  
用于与机器人交互的 API。可以为以下值之一：`PutSession`、`RecognizeText`、`RecognizeUtterance` 或 `StartConversation`。

```
{
    "message-version": "2.0",
    "bot": {
        "id": "string",
        "name": "string",
        "aliasId": "string",
        "aliasName": "string",
        "localeId": "string",
        "version": "string"
    },
    "messages": [
        {
            "contentType": "PlainText | SSML | CustomPayload | ImageResponseCard",
            "content": "string",
            "imageResponseCard": {
                "title": "string",
                "subtitle": "string",
                "imageUrl": "string",
                "buttonsList": [
                    {
                        "text": "string",
                        "value": "string"
                    }
                ]
            }
        }
    ],
    "utteranceContext": {
        "activeRuntimeHints": {
            "slotHints": {
                "string": {
                    "string": {
                        "runtimeHintValues": [
                            {
                                "phrase": "string"
                            },
                            {
                                "phrase": "string"
                            }
                        ]
                    }
                }
            }
        },
        "slotElicitationStyle": "string"
    },
    "sessionState": {
        "dialogAction": {
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot",
            "slotToElicit": "string"
        },
        "intent": {
            "name": "string",
            "slots": {
                "string": { 
                    "value": { 
                       "interpretedValue": "string",
                       "originalValue": "string",
                       "resolvedValues": [ "string" ]
                    }
                 },  
                "string": {
                    "shape": "List",
                    "value": {
                        "originalValue": "string",
                        "interpretedValue": "string",
                        "resolvedValues": [ "string" ]
                    },
                    "values": [
                        {
                            "shape": "Scalar",
                            "value": {
                                "originalValue": "string",
                                "interpretedValue": "string",
                                "resolvedValues": [ "string" ]
                            }
                        },
                        {
                            "shape": "Scalar",
                            "value": {
                                "originalValue": "string",
                                "interpretedValue": "string",
                                "resolvedValues": [ "string" ]
                            }
                        }
                    ]
                }
            },
            "kendraResponse": {
                // Only present when intent is KendraSearchIntent. For details, see 
                // https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax
                },
            "state": "InProgress | ReadyForFulfillment | Fulfilled | Failed",
            "confirmationState": "Confirmed | Denied | None"
        },
        "originatingRequestId": "string",
        "sessionAttributes": {
            "string": "string"
        },
        "runtimeHints": {
            "slotHints": {
                "string": {
                    "string": {
                        "runtimeHintValues": [
                            {
                                "phrase": "string"
                            },
                            {
                                "phrase": "string"
                            }
                        ]
                    }
                }
            }
        }
    },
   "dialogEventLogs": [
        {
	  // only for conditional
     "conditionalEvaluationResult":[
      // all the branches until true

     {
     "conditionalBranchName": "string",
     "expressionString": "string",
     "evaluatedExpression": "string",
     "evaluationResult": "true | false"
     }
    ],
  "dialogCodeHookInvocationLabel": "string",
  "response": "string",
  "nextStep": {
        "dialogAction": {
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot",
            "slotToElicit": "string"
        },
	      "intent": {
                          "name": "string",
           "slots": {
               }
        }
       }
    ]
    "interpretations": [
        {
            "interpretationSource": "Bedrock | Lex",
            "nluConfidence": "string",
            "intent": {
                "name": "string",
                "slots": {
                    "string": {
                        "value": {
                            "originalValue": "string",
                            "interpretedValue": "string",
                            "resolvedValues": [ "string" ]
                        }
                    },
                    "string": {
                        "shape": "List",
                        "value": {
                            "interpretedValue": "string",
                            "originalValue": "string",
                            "resolvedValues": [ "string" ]
                        },
                        "values": [
                            {
                                "shape": "Scalar",
                                "value": {
                                    "interpretedValue": "string",
                                    "originalValue": "string",
                                    "resolvedValues": [ "string" ]
                                }
                            },
                            {
                                "shape": "Scalar",
                                "value": {
                                    "interpretedValue": "string",
                                    "originalValue": "string",
                                    "resolvedValues": [ "string" ]
                                }

                            }
                        ]
                    }
                },
                "kendraResponse": {
                    // Only present when intent is KendraSearchIntent. For details, see 
                    // https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax
                    },
                "state": "InProgress | ReadyForFulfillment | Fulfilled | Failed",
                "confirmationState": "Confirmed | Denied | None"
                },
            "sentimentResponse": {
                "sentiment": "string",
                "sentimentScore": {
                    "positive": "string",
                    "negative": "string",
                    "neutral": "string",
                    "mixed": "string"
                }
            }
        }
    ],
    "sessionId": "string",
    "inputTranscript": "string",
    "rawInputTranscript": "string",
    "transcriptions": [
        {
            "transcription": "string",
            "rawTranscription": "string",
            "transcriptionConfidence": "number",
            },
            "resolvedContext": {
                "intent": "string"
            },
            "resolvedSlots": {
                "string": {
                    "name": "slotName",
                    "shape": "List",
                    "value": { 
                        "originalValue": "string",
                        "resolvedValues": [
                            "string"
                        ]
                    }
                }
            }
        }
    ],
    "missedUtterance": "bool",
    "requestId": "string",
    "timestamp": "string",
    "developerOverride": "bool",
    "inputMode": "DTMF | Speech | Text",
    "requestAttributes": {
        "string": "string"
    },
    "audioProperties": {
        "contentType": "string",
        "s3Path": "string",
        "duration": {
            "total": "integer",
            "voice": "integer",
            "silence": "integer"
        }
    },
    "bargeIn": "string",
    "responseReason": "string",
    "operationName": "string"
}
```

日志条目的内容取决于事务的结果以及机器人和请求的配置。
+ 如果 `missedUtterance` 字段为 `true`，则 `intent`、`slots` 和 `slotToElicit` 字段不会显示在条目中。
+ 如果音频日志已禁用或者 `inputDialogMode` 字段为 `Text`，则不显示 `s3PathForAudio` 字段。
+ 仅当您为自动程序定义了响应卡时，才会显示 `responseCard` 字段。
+ 仅当您在请求中指定了请求属性时，才会显示 `requestAttributes` 映射。
+ 只有在 `AMAZON.KendraSearchIntent` 请求搜索 Amazon Kendra 索引时，`kendraResponse` 字段才会出现。
+ 当在机器人的 Lambda 函数中指定了替代意图时，`developerOverride` 字段的值为 True。
+ 仅当在请求中指定了会话属性时，才会显示 `sessionAttributes` 映射。
+ 仅当将自动程序配置为返回情绪值时，才会显示 `sentimentResponse` 映射。

**注意**  
输入格式可以更改，但不必对 `messageVersion` 做出相应更改。您的代码不应在有新字段时引发错误。

# 访问 Amazon S3 中的音频日志
<a name="conversation-logs-s3"></a>

Amazon Lex V2 将对话的音频日志存储在 S3 存储桶中。

您也可以使用 Amazon S3 控制台或 API 来访问音频日志。您可以在 Amazon Lex V2 控制台或 `DescribeBotAlias` 操作响应的 `conversationLogSettings` 字段中查看音频文件的 S3 对象键前缀。

# 使用 CloudWatch 指标监控对话日志状态
<a name="conversation-logs-monitoring"></a>

使用 Amazon CloudWatch 监控您的对话日志的交付指标。您可以在指标上设置警报，以便在日志记录发生问题时获取通知。

Amazon Lex V2 在 `AWS/Lex` 命名空间中为对话日志提供了四个指标：
+ `ConversationLogsAudioDeliverySuccess`
+ `ConversationLogsAudioDeliveryFailure`
+ `ConversationLogsTextDeliverySuccess`
+ `ConversationLogsTextDeliveryFailure`

成功指标表明 Amazon Lex V2 已成功将音频或文本日志写入其目标。

失败指标表明 Amazon Lex V2 无法将音频或文本日志传输到指定目标。这通常是配置错误。当您的失败指标大于零时，请检查以下内容：
+ 确保 Amazon Lex V2 是 IAM 角色的可信实体。
+ 对于文本记录，请确保 CloudWatch 日志组存在。对于音频日志记录，请确保 S3 存储桶存在。
+ 确保 Amazon Lex V2 用于访问 CloudWatch 日志日志组或 S3 存储桶的 IAM 角色具有日志组或存储桶的写入权限。
+ 确保 S3 存储桶与 Amazon Lex V2 机器人位于相同的区域，并且属于您的账户。

# 从 Lex V2 掩盖对话日志中的槽位值
<a name="monitoring-obfuscate"></a>

Amazon Lex V2 能够模糊处理（即隐藏）槽位的内容，使其内容不可见。为了保护作为槽值捕获的敏感数据，可以启用槽模糊处理，为日志记录掩蔽这些值。

当您选择模糊处理槽位值时，Amazon Lex V2 在对话日志中将槽位的值替换为槽位的名称。对于名为 `full_name` 的槽，该槽的值将被模糊处理，如下所示：

```
Before:
    My name is John Stiles
After:
    My name is {full_name}
```

如果言语中包含括号字符（\$1\$1），Amazon Lex V2 将用两个反斜杠（\$1\$1）转义括号字符。例如，文本 `{John Stiles}` 的模糊处理如下所示：

```
Before:
    My name is {John Stiles}
After:
    My name is \\{{full_name}\\}
```

对话日志中的槽值会被模糊处理。槽位值在 `RecognizeText` 和 `RecognizeUtterance` 操作的响应中仍然可用，并且槽位值可用于验证和实现 Lambda 函数。如果您在提示或响应中使用槽值，则对话日志中不会对这些槽值进行模糊处理。

在第一轮对话中，如果 Amazon Lex V2 能够识别出言语中的槽位和槽位值，则会对槽位值进行模糊处理。如果没有识别出槽位值，Amazon Lex V2 不对言语进行模糊处理。

在第二轮和接下来的轮次中，Amazon Lex V2 知晓要引发的槽位以及是否需要对槽位值进行模糊处理。如果 Amazon Lex V2 识别到该槽位值，则会对该值进行模糊处理。如果 Amazon Lex V2 未识别出值，则对整个言语进行模糊处理。无法理解的话语中的任何槽值都不会被模糊处理。

Amazon Lex V2 也不会对您存储在请求或会话属性中的槽位值进行模糊处理。如果您将应模糊处理的槽值作为属性存储，则必须加密该值，或者以其他方式对该值进行模糊处理。

Amazon Lex V2 不会对音频中的槽位值进行模糊处理。它会对音频转录中的槽值进行模糊处理。

您可以使用控制台或使用 Amazon Lex V2 API 选择需要对哪些槽位进行模糊处理。在控制台中，在槽的设置中选择 **Slot obfuscation（槽模糊处理）**。如果您使用的是 API，请在调用[CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)或[UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html)操作`DEFAULT_OBFUSCATION`时将插槽的`obfuscationSetting`字段设置为。

# Lex V2 中的选择性对话日志捕获
<a name="monitoring-selective-logging"></a>

用户可利用选择性对话日志捕获来选择如何使用实时对话中的文本和音频数据捕获对话日志。

要启用和捕获选择性对话日志捕获功能的输出，需要在 Amazon Lex V2 控制台中激活该功能，并在 API 设置中启用必要的会话属性，以捕获日志中的选定输出。

您可以对选择性对话日志捕获选择以下选项：
+ 仅文本
+ 仅音频
+ 文本和音频

您可以捕获对话的特定部分，并选择为对话日志捕获音频、文本，还是这两者均捕获。

**注意**  
选择性对话日志捕获仅适用于 Amazon Lex V2。

**Topics**
+ [管理选择性对话日志捕获](manage-selective-logging.md)
+ [选择性对话日志捕获示例](example-selective-logging.md)

# 管理选择性对话日志捕获
<a name="manage-selective-logging"></a>

使用 Lex 控制台，您可以启用选择性对话日志捕获设置，并选择要为哪些槽位启用选择性对话日志捕获功能。

**在 Amazon Lex V2 控制台中激活选择性对话日志捕获：**

1. 登录 AWS 管理控制台并在[https://console.aws.amazon.com/lexv2/家](https://console.aws.amazon.com/lexv2/home)中打开 Amazon Lex V2 控制台。

1. 从左侧面板中选择**机器人**，然后选择要启用选择性对话日志捕获的机器人。选择一个现有机器人，或创建一个新的机器人。

1. 在左侧面板的**部署**部分下为所选机器人选择**别名**。

1. 选择你的机器人的别名，然后选择**管理对话日志**。

1. 在**管理对话日志**面板中，对于**文本日志**，点击单选按钮以选择是启用还是禁用文本日志。如果选择**启用**文本日志，则需要输入**日志组名称**或从下拉菜单中选择现有的日志组名称。如果您选择性地对文本文件进行日志记录，请选中**选择性地对言语进行日志记录**复选框。
**注意**  
通过在构建**时间设置中的对话日志设置（文本 and/or 音频）中选中选择性****记录话语复选框来启用文本 and/or 音频日志**。**BotAlias**您必须配置 CloudWatch 日志组和 Amazon S3 存储桶才能选择此选项。

1. 在**音频日志**部分中，点击单选按钮以选择是启用还是禁用音频日志。如果您选择**启用**音频日志，则需要指定 Amazon S3 存储桶位置以及（可选）用于加密音频数据的 KMS 密钥。如果您选择性地对音频文件进行日志记录，请选中**选择性地对言语进行日志记录**复选框。  
![\[用于管理对话日志的面板。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/logging/selective-manage-logs.png)

1. 选择面板右下角的**保存**以保存您的选择性对话日志捕获设置。

**在 Amazon Lex V2 控制台中激活选择性对话日志捕获：**

1. 转到**意图**，选择**意图名称**、**初始响应**、**高级设置**、**设置值**、**会话属性**。

1. 根据要为其启用选择性对话日志捕获的意图和槽位，完成以下属性设置：
   + `x-amz-lex:enable-audio-logging:intent:slot = "true"`
   + `x-amz-lex:enable-text-logging:intent:slot = "true"`  
![\[用于添加选择性会话属性的面板。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/logging/selective-session-attributes.png)
**注意**  
设置 `x-amz-lex:enable-audio-logging:intent:slot = "true"` 以捕获对话中仅包含特定槽位的言语。记录话语的操作取决于对以下内容的评估*intent *：*slot*在话语中、与会话属性表达式的比较以及相应的标志值。要对言语进行日志记录，会话属性中必须有至少一个表达式允许该日志记录操作，并且启用日志记录标志需要设置为 `true`。*intent*和的值*slot*也可以`"*"`是。如果插槽 and/or 意图值为`"*"`，则表示任何插槽 and/or 意图值都`"*"`将与其匹配。与 `x-amz-lex:enable-audio-logging` 类似，名为 `x-amz-lex:enable-text-logging` 的新会话属性将用于控制文本日志。

1. 选择**更新选项**，然后构建机器人以包含更新的设置。

**注意**  
您的 IAM 角色必须具有访问权限，才能允许您向 Amazon S3 存储桶写入数据并使用 KMS 密钥加密数据。Lex 将更新您的 IAM 角色，使其具有 Lex 访问 CloudWatch 日志组和选定的 Amazon S3 存储桶的权限。

**选择性对话日志捕获的使用指南：**

只有在对话日志**设置中启用了文本 and/or 音频日志后，才能为文本 and/or 音频日志启用选择性对话日志**捕获。通过为文本 and/or 音频日志启用选择性对话日志捕获，可以禁用对话中所有意图和时段的日志记录。要为特定意图和插槽生成文本 and/or 音频日志，必须将这些意图和插槽的文本 or/and 音频选择性对话日志捕获会话属性设置为 “true”。
+ 如果启用了选择性对话日志捕获，并且不存在带前缀 x-amz-lex:的会话属性，enable-audio-logging 则默认情况下，所有话语的日志记录都将处于禁用状态。这种情况在 x-amz-lex以下方面也是如此:enable-text-logging.
+ 如果会话属性中至少有一个表达式允许，则将专门存储文本 and/or 音频对话片段的话语日志。
+ 只有在机器人别名的 “对话日志设置” 中启用文本 and/or 音频的选择性对话日志捕获时，会话属性中定义的文本 and/or 音频选择性对话日志捕获配置才会生效；否则，会话属性将被忽略。
+ 启用选择性对话日志捕获后，“解释” 和 “转录” 中 SessionState未使用会话属性启用日志记录的任何时隙值都将在生成的文本日志中进行模糊处理。
+ 生成音频 and/or 文本日志的决定是通过将机器人引发的时段与选择性对话日志捕获会话属性进行匹配来评估的，但意图诱发回合除外，在该回合中，用户可以提供插槽值以及意图引发。在意图引发回合中，将当前回合中被填充的槽位与选择性对话日志捕获会话属性进行匹配 
+ 被认为已填充的槽位来自回合结束时的会话状态。因此，Dialog Codehook Lambda 对处于会话状态的槽位所做的任何更改都将影响选择性对话日志捕获的行为。
+ 在意图诱发回合中，如果用户给出了多个插槽值，则只有当会 text/audio 话属性允许记录该回合中填充的所有插槽时，才会生成文本 and/or 音频日志。
+ 推荐的操作方法是在会话开始时设置选择性对话日志捕获会话属性，并且避免在会话期间对其进行修改。
+ 如果任何槽位包含敏感数据，则应始终启用槽位模糊处理。

# 选择性对话日志捕获示例
<a name="example-selective-logging"></a>

以下是选择性对话日志捕获的业务使用案例示例。

**使用案例：**

一家金融科技公司利用 Amazon Lex V2 机器人来为其账单支付系统 IVR 提供支持。为满足合规和审计要求，系统中必须保留用户进行授权同意的录音。但是，启用通用音频日志是不可行的，因为这会使它们不合规，因为无法混淆音频日志中的敏感插槽 CardNumber，例如 CVV 和其他信息。基于此，该公司可以选择为音频日志启用选择性对话日志捕获，并将会话属性设置为仅为包含授权同意的言语生成音频日志。

**BotAlias 设置**：
+ 已启用文本日志：true 
+ 已启用文本日志选择性记录：false
+ 已启用音频日志：true 
+ 已启用音频日志选择性记录：true 

**会话属性：**

`x-amz-lex:enable-audio-logging:PayBill:AuthorizationConsent = "true"`

**对话示例：**
+ 用户（音频输入）：“我想用账单编号为 35 的账单付款XU68。”
+ 机器人：“请问您的应付金额是多少美元？”
+ 用户（音频输入）：“235。”
+ 机器人：“请问您的信用卡号是多少？”
+ 用户（音频输入）：“9239829722200348。”
+ 机器人：“您即将使用尾号 0348 的信用卡支付 235 美元。请说‘我授权支付 235 美元。’”
+ 用户（音频输入）：“我授权支付 235 美元。”
+ 机器人：“您的账单已经成功支付。”

**对话日志输出：**

在这种情况下，将生成所有回合的文本日志。但是，只有在引出**PayBill**意图中的**AuthorizationConsent**槽位时，才会录制特定回合的音频日志，而不会为任何其他回合生成音频日志。

# 在 Lex V2 中使用错误日志记录错误
<a name="error-logs"></a>

您可以启用*错误日志*来存储机器人交互。您可以使用这些错误日志查看机器人的性能，并解决与对话相关的错误。

为某个版本配置错误日志。每个版本的错误日志具有不同的设置。文本日志将输入的文本存储在 CloudWatch 日志中。您可以使用 AWS KMS 客户管理功能启用文本日志的加密 CMKs。

## 用于错误日志的 IAM 策略
<a name="error-logs-policies"></a>

根据您选择的日志类型，Amazon Lex V2 需要权限才能使用亚马逊 CloudWatch 日志和亚马逊简单存储服务 (S3) 存储桶来存储您的日志。您必须创建 AWS Identity and Access Management 角色和权限才能让 Amazon Lex V2 访问这些资源。

### 为错误日志创建 IAM 角色和策略
<a name="error-logs-role-and-policy"></a>

要启用对话日志，您必须授予 CloudWatch 日志和 Amazon S3 的写入权限。如果您为 S3 对象启用对象加密，则需要向用于加密对象的 AWS KMS 密钥授予访问权限。

您可以使用 IAM 控制台、IAM API 或 AWS Command Line Interface 来创建角色和策略。这些说明使用 AWS CLI 创建角色和策略。

****为错误日志创建 IAM 角色

用于启用对话日志的 IAM 角色必须具有 iam: PassRole 权限。应将以下策略附加到角色：

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

****  

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

------

## 在 Lex V2 中启用错误日志
<a name="enabling-error-logs"></a>

要使用 Amazon Lex V2 控制台打开错误日志，请执行以下操作：

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

1. 从**机器人**列表中，选择要为错误日志启用的机器人。

1. 在左侧菜单上，选择**版本**。

1. 在**版本**列表中，选择要为其配置错误日志的版本。

1. 在**版本详细信息**部分，选择**启用**。

1. 选择 **Save（保存）**以开始记录对话。如有必要，Amazon Lex V2 将更新您的服务角色，使其具有访问 CloudWatch 日志组的权限。

## 在 Lex V2 中禁用错误日志
<a name="disabling-error-logs"></a>

要使用 Amazon Lex V2 控制台关闭错误日志，请执行以下操作：

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

1. 从**机器人**列表中，选择要为错误日志启用的机器人。

1. 在左侧菜单上，选择**版本**。

1. 在**版本**列表中，选择要为其配置错误日志的版本。

1. 在**版本详细信息**部分，选择**禁用**。

1. 选择 **Save（保存）**以停止记录对话。

# 在 Lex V2 中监控运营指标
<a name="monitoring-operational-metrics"></a>

亚马逊 CloudWatch 和 AWS CloudTrail 是两个 AWS 服务，它们与 Amazon Lex V2 集成，可帮助您监控用户与机器人的互动。使用这些服务来录制操作、发送近乎实时的数据，并设置在满足条件时的通知和自动操作。

**Topics**
+ [使用 Amazon 衡量运营指标 CloudWatch](monitoring-cloudwatch.md)
+ [使用 Lex V AWS CloudTrail 2 查看事件](logging-using-cloudtrail.md)

# 使用 Amazon 衡量运营指标 CloudWatch
<a name="monitoring-cloudwatch"></a>

您可以使用监控 Amazon Lex V2 CloudWatch，它会收集原始数据并将其处理为可读的近乎实时的指标。这些统计数据会保存 15 个月，从而使您能够访问历史信息，并能够更好地了解您的 Web 应用程序或服务的执行情况。此外，可以设置用于监测特定阈值的警报，并在达到相应阈值时发送通知或执行操作。有关更多信息，请参阅 [Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)。

Amazon Lex V2 服务在 `AWS/Lex` 命名空间内报告以下指标。


| 指标 | 说明 | 
| --- | --- | 
|  `AssistedSlotResolutionModelAccessDeniedErrorCount`  |  Amazon Lex V2 被拒绝访问 Amazon Bedrock 的次数 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) `RecognizeText` 的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `AssistedSlotResolutionModelInvocationCount`  |  调用 Amazon Bedrock 的次数。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) `RecognizeText` 的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `AssistedSlotResolutionModelSystemErrorCount`  |  调用 Amazon Bedrock 时出现 5xx 的次数。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) `RecognizeText` 的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `AssistedSlotResolutionModelThrottlingErrorCount`  |  Amazon Lex 被 Amazon Bedrock 节流的次数。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) `RecognizeText` 的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `AssistedSlotResolutionResolvedSlotCount`  |  Amazon Bedrock 返回槽位值的次数。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) `RecognizeText` 的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `KendraIndexAccessError`  |  Amazon Lex V2 无法访问您的 Amazon Kendra 索引的次数。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `KendraLatency`  |  Amazon Kendra 对来自 `AMAZON.KendraSearchIntent` 的请求做出响应所花费的时间。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：毫秒  | 
|  `KendraSuccess`  |  Amazon Lex V2 无法访问您的 Amazon Kendra 索引的次数。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `KendraSystemErrors`  |  Amazon Lex V2 无法查询 Amazon Kendra 索引的次数。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `KendraThrottledEvents`  |  Amazon Kendra 限制来自 `AMAZON.KendraSearchIntent` 的请求的次数。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimeConcurrency`  |  指定时间段内的并发连接数。`RuntimeConcurrency` 将被报告为 `StatisticSet`。 `RecognizeUtterance` 或 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 其他操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimeInvalidLambdaResponses`  |  指定时间段内无效 AWS Lambda 响应的数量。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimeLambdaErrors`  |  指定时间段内的 Lambda 运行时错误数量。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimePollyErrors`  |  在指定时段内的无效 Amazon Polly 响应的数量。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimeRequestCount`  |  指定时间段内的运行时请求数。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 其他操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
| `RuntimeRequestLength` | 与 Amazon Lex V2 机器人对话的总时长。仅适用于该[StartConversation](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_StartConversation.html)操作。 有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：毫秒 | 
|  `RuntimeSucessfulRequestLatency`  该指标是 `RuntimeSucessfulRequestLatency`，而不是 `RuntimeSuccessfulRequestLatency`。   |  从发送请求到传回响应的时间段内的成功请求的延迟。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 其他操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：毫秒  | 
|  `RuntimeSystemErrors`  |  指定时间段内的系统错误的数量。系统错误的响应代码范围为 500 到 599。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 其他操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimeThrottledEvents`  |  受限事件的数目。当 Amazon Lex V2 接收的请求数超出为账户设置的每秒事务数限制时，将对事件进行限制。如果经常超出为账户设置的限制，您可以请求提高限制。要请求提高限制，请参阅 [AWS 服务限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 其他操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 
|  `RuntimeUserErrors`  |  指定时间段内的用户错误的数量。用户错误的响应代码范围为 400 到 499。 `RecognizeUtterance` 和 `StartConversation` 操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 其他操作的有效维度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/monitoring-cloudwatch.html) 单位：个  | 

Amazon Lex V2 指标支持以下维度。


|  维度  |  说明  | 
| --- | --- | 
|  Operation  |  生成该条目的 Amazon Lex V2 操作的名称，即 `RecognizeText`、`RecognizeUtterance`、`StartConversation`、`GetSession`、`PutSession`、`DeleteSession`。  | 
|  BotId  |  机器人的唯一字母数字标识符。  | 
|  BotAliasId  |  机器人别名的唯一字母数字标识符。  | 
|  BotVersion  |  机器人的数字版本。  | 
|  InputMode  |  机器人输入的类型，即语音、文本或 DTMF。  | 
|  LocaleId  |  机器人区域设置的标识符，例如 en-US 或 fr-CA。  | 
|  Model  |  表示 Amazon Bedrock 大型语言模型的模型 ID。  | 
|  ModelType  |  表示从 Amazon Bedrock 调用的大型语言模型的类型。  | 

# 使用 Lex V AWS CloudTrail 2 查看事件
<a name="logging-using-cloudtrail"></a>

Amazon Lex V2 与 AWS CloudTrail一项服务集成，该服务提供用户、角色或 AWS 服务在 Amazon Lex V2 中采取的操作的记录。 CloudTrail 将 Amazon Lex V2 的 API 调用捕获为事件。被捕获的调用中包括通过 Amazon Lex V2 控制台的调用以及对 Amazon Lex V2 API 操作的代码调用。如果您创建了跟踪，则可以允许将 CloudTrail 事件持续传输到 Amazon S3 存储桶，包括 Amazon Lex V2 的事件。如果您不配置跟踪记录，则仍可在 CloudTrail 控制台的 **Event history**（事件历史记录）中查看最新事件。使用收集的信息 CloudTrail，您可以确定向 Amazon Lex V2 发出的请求、发出请求的 IP 地址、谁提出了请求、何时提出请求以及其他详细信息。

要了解更多信息 CloudTrail，请参阅[AWS CloudTrail 用户指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。

## Amazon Lex V2 中的信息 CloudTrail
<a name="lex-info-in-cloudtrail"></a>

CloudTrail 在您的 AWS 账户上创建账户时已启用。当 Amazon Lex V2 中发生活动时，该活动会与其他 AWS 服务 CloudTrail事件一起记录在**事件历史**记录中。您可以在亚马逊云科技 账户中查看、搜索和下载最新事件。有关更多信息，请参阅[使用事件历史记录查看 CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录您的 AWS 账户中的事件，包括 Amazon Lex V2 的事件，请创建跟踪。*跟踪*允许 CloudTrail 将日志文件传输到 Amazon S3 存储桶。默认情况下，在控制台中创建跟踪记录时，此跟踪记录应用于所有 AWS 区域。该跟踪记录来自 AWS 分区中所有区域的事件，并将日志文件传送到您指定的 Amazon S3 存储桶。此外，您可以配置其他 AWS 服务，以进一步分析和处理 CloudTrail 日志中收集的事件数据。有关更多信息，请参阅下列内容：
+ [创建跟踪记录概述](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html)
+ [为 CloudTrail 配置 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/configure-sns-notifications-for-cloudtrail.html)
+ [接收来自多个区域的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[接收来自多个账户的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

Amazon Lex V2 支持记录[模型构建 API V2](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_Operations_Amazon_Lex_Model_Building_V2.html) 中列出的所有操作。

每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容：
+ 请求是使用根用户证书还是 AWS Identity and Access Management 的 IAM 用户凭证发出。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他亚马逊云科技 服务发出。

有关更多信息，请参阅 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 了解 Amazon Lex V2 日志文件条目
<a name="understanding-service-name-entries"></a>

跟踪是一种配置，允许将事件作为日志文件传输到您指定的 Amazon S3 存储桶。 CloudTrail 日志文件包含一个或多个日志条目。事件代表来自任何来源的单个请求，包括有关请求的操作、操作的日期和时间、请求参数等的信息。 CloudTrail 日志文件不是公共 API 调用的有序堆栈跟踪，因此它们不会按任何特定的顺序出现。

以下示例显示了演示该[CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html)操作的 CloudTrail 日志条目。

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "ID of caller:temporary credentials",
        "arn": "arn:aws:sts::111122223333:assumed-role/role name/role ARN",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "ID of caller",
                "arn": "arn:aws:iam::111122223333:role/role name",
                "accountId": "111122223333",
                "userName": "role name"
            },
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "creation date"
            }
        }
    },
    "eventTime": "event timestamp",
    "eventSource": "lex.amazonaws.com",
    "eventName": "CreateBotAlias",
    "awsRegion": "Region",
    "sourceIPAddress": "192.0.2.0",
    "userAgent": "user agent",
    "requestParameters": {
        "botAliasLocaleSettingsMap": {
            "en_US": {
                "enabled": true
            }
        },
        "botId": "bot ID",
        "botAliasName": "bot aliase name",
        "botVersion": "1"
    },
    "responseElements": {
        "botAliasLocaleSettingsMap": {
            "en_US": {
                "enabled": true
            }
        },
        "botAliasId": "bot alias ID",
        "botAliasName": "bot alias name",
        "botId": "bot ID",
        "botVersion": "1",
        "creationDateTime": creation timestamp
    },
    "requestID": "unique request ID",
    "eventID": "unique event ID",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

# 使用 Test Workbench 评估 Lex V2 机器人性能
<a name="test-workbench"></a>

为提高机器人性能，您可以大规模评估机器人的性能。您的测试评估结果将以简单表格和图表的形式展示。

您可以使用 Test Workbench 创建使用现有转录数据的参考测试集。您可以在部署之前大规模地测试机器人，从而评估性能并查看测试结果细分。

![\[使用 Test Workbench 提高机器人准确性的工作流程图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/testworkbench-workflow.png)


用户可以使用 Test Workbench 来确定机器人的基准性能。该基准性能包括以单一输入或对话形式出现的言语的意图和槽位性能。成功加载测试集后，您可以针对现有的预生产或生产机器人运行该测试集。Test Workbench 可帮助您辨别存在改进空间的槽位填充和意图分类。

**Topics**
+ [为 Test Workbench 生成测试集](test-sets.md)
+ [管理测试集](manage-test-sets.md)
+ [执行测试](execute-test-set.md)
+ [Test Workbench 中的测试集覆盖范围](validation-test-set.md)
+ [查看测试结果](test-results-test-set.md)
+ [Test Workbench 中的测试结果详细信息](test-results-details-test-set.md)

# 为 Test Workbench 生成测试集
<a name="test-sets"></a>

您可以创建测试集来评估机器人的性能。要生成测试机，可上传 CSV 文件格式的测试集或使用[对话日志](https://docs.aws.amazon.com/lexv2/latest/dg/conversation-logs.html)来生成测试集。测试集可以包含音频或文本输入。

![\[使用 Test Workbench 创建测试集。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-create.png)


如果测试集产生了验证错误，请删除该测试集并将其替换为另一个测试集数据列表，或者使用电子表格编辑程序编辑 CSV 文件中的数据。

**要创建测试数据集，请执行以下操作：**

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

1. 从左侧面板中选择 **Test workbench**。

1. 从 Test workbench 下的选项中选择**测试集**。

1. 点击控制台上的**创建测试集**按钮。

1. 在**详细信息**中，输入测试集名称和描述（可选）。

1. 选择**生成基准测试集**。

1. 选择**从对话日志生成**。

1. 从下拉菜单中选择**机器人名称**、**机器人别名**和**语言**。

1. 要从对话日志生成基准测试，请根据需要选择**时间范围**和 **IAM 角色**。您可以使用现有角色，也可以创建基础 Amazon Lex V2 权限的角色。

1. 为您正在创建的测试集选择**音频**或**文本**模式。注意：Test Workbench 支持导入的文本文件不得超出 50k，音频文件不得超过 5 小时。

1. 选择用以存储测试结果的 Amazon S3 位置，并视情况添加 KMS 密钥以对输出转录进行加密。

1. 选择**创建**。

**要以 CSV 文件格式上传现有测试集或更新测试集，请执行以下操作：**

1. 从左侧面板中选择 **Test workbench**。

1. 从 Test workbench 下的选项中选择**测试集**。

1. 在控制台上选择**将文件上传到该测试集**。

1. 选择**从 Amazon S3 存储桶上传**或**从计算机上传**。注意：您可以上传根据模板创建的 CSV 文件。单击 **CSV 模板**下载包含模板的 ZIP 文件。

1. 选择**创建基础 Amazon Lex 权限的角色**或者**使用角色 ARN 的现有角色**。

1. 为您正在创建的测试集选择**音频**或**文本**模式。注意：Test Workbench 支持导入的文本文件不得超出 50k，音频文件不得超过 5 小时。

1. 选择用以存储测试结果的 Amazon S3 位置，并视情况添加 KMS 密钥以对输出转录进行加密。

1. 选择**创建**。

如果操作成功，系统将显示确认消息，表明测试集已准备好进行测试，并且状态将显示为**准备进行测试**。

# 成功创建测试集的提示
<a name="tips-create-test-set"></a>
+ 您可以在控制台中为测试工作台创建 IAM 角色，也可以配置您的 IAM 角色 step-by-step。有关更多信息，请参阅[为 Test Workbench 创建 IAM 角色](https://docs.aws.amazon.com/lexv2/latest/dg/create-iam-test-set.html)。
+ 在执行测试之前，点击**验证差异**按钮验证测试集和机器人定义中是否存在任何不一致之处。如果测试集中使用的意图和槽位命名约定与机器人一致，请继续执行测试。如果发现任何异常，请修改测试集，更新测试集，然后选择**验证差异**。再次重复此流程，直到没有发现任何不一致之处，然后执行测试。
+ Test Workbench 可以使用**预期输出槽位**列中的不同槽位值格式进行测试。对于任何内置槽位，您可以选择用户输入中提供的值（例如，日期 = 明天），或者提供其绝对解析值（例如，日期 = 2023-03-21）。有关内置槽位及其绝对值的更多信息，请参阅[内置槽位](https://docs.aws.amazon.com/lexv2/latest/dg/howitworks-builtins-slots.html)。
+  为了 “**预期输出槽**” 列的一致性和可读性，请遵循 “SlotName = SlotValue”（例如， AppointmentType = cleaning）的惯例，在等号前后留一个空格。
+ 如果机器人包含复合槽位，则在**预期输出槽位**中定义槽位名称的子槽位，以句点隔开（例如，“Car.Color”）。任何其他句法和标点符号均无效。
+ 如果机器人包含多值插槽，则在 “**预期输出槽**” 中提供多个插槽值，用逗号分隔（” FlowerType = roses，lilies”）。任何其他句法和标点符号均无效。
+ 确保测试集是根据有效的对话日志创建的。
+ Slot:slot 值将位于 CSV 格式的意图列之后的同一列中。
+ 来自用户回合的 DTMF 输入被解释为预期的转录，不会列出 Amazon S3 的位置。

# 使用 Test Workbench 在测试集中创建测试用例
<a name="create-test-case"></a>

Test Workbench 结果取决于机器人定义及其相应的测试集。您可以使用机器人定义中的信息生成测试集，以查明需要改进的方面。您可以基于当前机器人的设计以及您对客户对话的了解来创建一个测试数据集，其中包含您认为（或确定）机器人难以正确解释的示例。

 定期根据从生产机器人中了解到的信息来审查意图。继续添加和调整机器人的示例言语和值。考虑使用运行时提示等可用选项来提高槽位分辨率。机器人的设计和开发是一个连续迭代的过程。

 以下是关于优化测试集的其他一些提示：
+ 在测试集中选择常用意图和槽位的最常见用例。
+ 探索客户可能用到您的意图和槽位的不同方式。这可能包括以长短不一的陈述、问题和命令形式进行的用户输入。
+ 包括具有不同数量的槽位的用户输入。
+ 包括机器人支持的自定义槽位值的常用同义词或缩写（例如，“根管”、“管” 或“RC”）。
+ 包括内置槽位值的变体（例如，“明天”、“尽快” 或“第二天”）。
+ 通过收集可能被误解的用户输入（例如“墨水”、“脚踝”或“锚点”），检查机器人在对话语模式下的稳健性。

# 通过 CSV 文件为 Test Workbench 创建测试集
<a name="create-test-set-from-CSV"></a>

您可以使用 CSV 电子表格编辑器在 Amazon Lex V2 控制台中提供的 CSV 文件模板中直接输入值，以此来创建测试集。测试集是一个逗号分隔值（CSV）文件，其中包括记录了单用户言语和多回合对话的以下列：
+ **行号**：该列逐个递增，以跟踪要测试的已填行总数。
+ **对话编号**：该列用于跟踪某个对话中的回合数。对于单个输入，此列可以留空，填入“-”或“N/A”。对于对话，对话中的每个回合都将被分配相同的对话编号。
+ **来源**：该列被设置为“用户”或“代理”。对于单个输入，该列始终被设置为“用户”。
+ **输入**：该列包括用户言语或机器人提示。
+ **预期输出意图**：该列用于捕获输入中履行的意图。
+ **意图预期输出槽位 1**：该列用于捕获用户输入中引发的第一个槽位。测试集应为用户输入中的每个槽位包含一个名为“预期输出槽位 X”的列。

单个输入的测试集示例：


| 行号 | 对话编号 | 来源 | Input | 预期输出意图 | 预期输出槽位 1 | 预期输出槽位 2 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  1  |    | 用户 | 预约明天的清洁服务 | MakeAppointment | AppointmentType = 清洁 | Date = 明天 | 
|  2  |  不适用  | 用户 | 预约 4 月 15 日的清洁服务 | MakeAppointment | AppointmentType = 清洁 | Date = 4/15/23 | 
|  3  |  不适用  | 用户 | 预约 12 月 1 日 | MakeAppointment | 日期 = 12 月 1 日 |  | 
|  4  |  不适用  | 用户 | 预约清洁服务 | MakeAppointment | AppointmentType = 清洁 |  | 
|  1  |    | 用户 | 能否帮我预约？ | MakeAppointment |  |  | 

对话的测试集示例


| 行号 | 对话编号 | 来源 | Input | 预期输出意图 | 预期输出槽位 1 | 预期输出槽位 2 | 预期输出槽位 3 | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  1  |  1  | 用户 | 预约 | MakeAppointment |  |  |  | 
|  2  |  1  | 座席 | 您想要安排哪种类型的预约？ | MakeAppointment |  |  |  | 
|  3  |  1  | 用户 | 清洁 | MakeAppointment | AppointmentType = 清洁 |  |  | 
|  4  |  1  | 座席 | 您需要预约到什么时候？ | MakeAppointment |  |  |  | 
|  5  |  1  | 用户 | tomorrow | MakeAppointment |  | Date = 明天 |  | 
|  6  |  2  | 用户 | 预约今天的根管治疗 | MakeAppointment | AppointmentType = 根管 | Date = 今天 |  | 
|  7  |  2  | 座席 | 您需要预约到什么时候？ | MakeAppointment |  |  |  | 
|  8  |  2  | 用户 | 上午十一点 | MakeAppointment |  |  | Time = 上午十一点 | 

# 为 Test Workbench 创建 IAM 角色
<a name="create-iam-test-set"></a>

**为 Test Workbench 创建 IAM 角色，请执行以下操作：**

1. 按照[创建 IAM 用户](https://docs.aws.amazon.com/lexv2/latest/dg/gs-account.html#gs-account-user)中的步骤创建可用于访问 Test Workbench 控制台的 IAM 用户。

1. 选择 **Create role** 按钮。  
![\[IAM 控制台中的角色屏幕。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/testworkbench-iam1.png)

1. 选择**自定义信任策略**选项。  
![\[选择信任的实体\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/testworkbench-iam2.png)

1. 输入以下信任策略，然后单击**下一步**。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "sid4",
         "Effect": "Allow",
         "Principal": {
           "Service": "lexv2.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 点击**创建策略**按钮。

1. 浏览器中将打开一个新标签页，请在该页面上输入以下政策，然后单击**下一步：标签**按钮。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:*"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "logs:FilterLogEvents"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lex:*"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 输入策略名称，例如 “LexTestWorkbenchPolicy”，然后单击 “**创建策略**”。

1. 返回浏览器中的上一个标签页，然后单击**刷新**按钮以刷新策略列表，如下所示。  
![\[刷新屏幕以查看新策略。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/testworkbench-iam3.png)

1. 在策略列表中输入您在第 6 步中使用的策略名称以搜索该策略，然后选择该策略。

1. 点击**下一步**按钮。

1. 输入角色名称，然后单击**创建角色**按钮。

1. 在 Amazon Lex V2 控制台中显示 Test Workbench 提示时，请选择您的新 IAM 角色。

# 为测试工作台创建 IAM 角色 - 高级功能
<a name="create-iam-test-set-features"></a>

**测试工作台 IAM 角色的权限设置**

本节展示了几个基于身份的 AWS Identity and Access Management (IAM) 基于身份的策略示例，这些策略用于对测试工作台权限实施最低权限访问控制。

1. **测试工作台在 S3 中读取音频文件的策略** – 此策略可以使测试工作台读取测试集中使用的音频文件。应相应修改以下政策，使其更新*S3BucketName*并指*S3Path*向测试集中音频文件的 Amazon S3 位置。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "TestWorkbenchS3AudioFilesReadOnly",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion"
         ],
         "Resource": [
           "arn:aws:s3:::S3BucketName/S3Path/*"
         ]
       }
     ]
   }
   ```

------

1. **测试工作台将测试集和结果读写到 Amazon S3 存储桶中的策略** – 此策略可以使测试工作台存储测试集输入和结果。应修改以下政策，以更新*S3BucketName*到存储测试集数据的 Amazon S3 存储桶。测试工作台仅会将这些数据存储在您的 Amazon S3 存储桶中，而不会存储在 Lex 服务基础设施中。出于此原因，测试工作台需要访问您的 Amazon S3 存储桶才能正常工作。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "TestSetDataUploadWithEncryptionOnly",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject"
         ],
         "Resource": [
           "arn:aws:s3:::S3BucketName/*/lex_testworkbench/test_set/*",
           "arn:aws:s3:::S3BucketName/*/lex_testworkbench/test_execution/*",
           "arn:aws:s3:::S3BucketName/*/lex_testworkbench/test_set_discrepancy_report/*"
         ],
         "Condition": {
           "StringEquals": {
             "s3:x-amz-server-side-encryption": "aws:kms"
           }
         }
       },
       {
         "Sid": "TestSetDataGetObject",
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion"
         ],
         "Resource": [
           "arn:aws:s3:::S3BucketName/*/lex_testworkbench/test_set/*",
           "arn:aws:s3:::S3BucketName/*/lex_testworkbench/test_execution/*",
           "arn:aws:s3:::S3BucketName/*/lex_testworkbench/test_set_discrepancy_report/*"
         ]
       },
       {
         "Sid": "TestSetListS3Objects",
         "Effect": "Allow",
         "Action": [
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::S3BucketName"
         ]
       }
     ]
   }
   ```

------

1. **测试工作台读取 CloudWatch日志的策略** — 此策略允许测试工作台根据存储在 Amazon Logs 中的 Lex 对话文本日志生成测试集。 CloudWatch 应修改以下政策以更新*Region*、*AwsAccountId*、*LogGroupName*。

1. **测试工作台调用 Lex 运行时的策略** - 此策略可以使测试工作台对 Lex 机器人执行测试集。应修改以下政策以更新*Region*、*AwsAccountId*、*BotId*。由于 Test Workbench 可以测试您的 Lex 环境中的任何机器人，因此您可以将资源替换为 “arn: aws:: lex:: bot *Region*-alias/\$1”，*AwsAccountId*以允许 Test Workbench 访问账户中的所有 Amazon Lex V2 机器人。

1. **（可选）测试工作台加密和解密测试集数据的策略** - 如果将测试工作台配置为使用客户托管的 KMS 密钥将测试集输入和结果存储在 Amazon S3 存储桶中，则测试工作台需要对 KMS 密钥具有加密和解密权限。应修改以下政策以更新*Region*、*AwsAccountId*、以及客户托管*KmsKeyId*的 KMS 密钥的 ID *KmsKeyId* 在哪里。

1. **（可选）测试工作台解密音频文件的策略** - 如果使用客户托管的 KMS 密钥将音频文件存储在 S3 存储桶中，则测试工作台需要对 KMS 密钥具有解密权限。应修改以下政策以更新*Region*、*AwsAccountId*、以及用于加密音频文件的客户托管 KMS 密钥的 ID 在*KmsKeyId*哪里*KmsKeyId*。

# 管理测试集
<a name="manage-test-sets"></a>

您可以从测试集窗口下载、更新和删除测试集，也可以使用可用测试集列表来编辑或手动注释您的测试集文件。然后，由于错误或其他输入问题，请再次上传以重试验证。

**要从测试集记录下载测试集文件，请执行以下操作：**

1. 从测试集列表中选择测试集的名称。

1. 在测试集记录窗口中，请在屏幕右侧**测试输入**部分中点击**下载**按钮。

1. 如果窗口顶部有关于测试集的任何验证错误详细信息，请点击**下载**按钮。该文件将保存到“下载”文件夹中。您可以通过测试集 CSV 文件中的错误消息来修复测试集中的验证错误。找到在验证步骤中发现的错误，修复该行或将其删除，然后上传文件以重试验证步骤。

1. 如果您成功下载了测试集，则会显示一条绿色横幅消息。

**要从测试集列表中下载测试集，请执行以下操作：**

1. 在测试集列表中选中要下载的测试集项目旁边的单选按钮。

1. 在右上角的“操作”菜单中选择**下载**。

1. 如果您成功下载了测试集，则会显示一条绿色横幅消息。该文件将保存到“下载”文件夹中。

# 测试工作台支持的测试集列
<a name="file-input-test-sets"></a>

以下是测试工作台支持的测试集列的完整列表以及如何在 Amazon Lex V2 中使用这些列的说明。


| 列名称 | 测试集类型 | 值类型 | 多列支持 | 说明 | 
| --- | --- | --- | --- | --- | 
|  行号  |  文本和音频  | 数字 | 否 | 这是一个 Amazon Lex V2 会忽略的用户列。测试集编写者可以通过此列对测试集行进行排序和筛选。“行号”可用作备用列名。 | 
|  对话编号  |  文本和音频  | 数字 | 否 | 此列可以让您将对话中的行放在一起。“Conversation \$1”可用作备用列名。 | 
|  来源  |  文本和音频  | 枚举（“用户”、“代理”） | 否 | 此列中的值表示该行是针对用户还是代理。“Conversation Participant”可用作备用列名。 | 
|  Input  |  文本  | 字符串 | 否 | 此列用于添加文本测试集的转录文本。应在用户行中使用文本输入。应在代理行中使用代理提示。 | 
|  预期转录文本  |  音频  | 字符串 | 否 | 此列用于添加音频测试集的转录文本。应在带有音频输入的用户行中使用音频文件的预期转录文本。可以在带有 DTMF 输入的用户行中使用 DTMF 输入。应在代理行中使用代理提示。 | 
|  S3 音频位置  |  音频  | 字符串 | 否 | 此列用于添加音频文件位置，并且仅适用于音频测试集。应在带有音频输入的用户行中使用 S3 路径。在带有 DTMF 输入的用户行中，此字段应留空。在代理行中，此字段应留空。 | 
|  输入上下文标签  |  文本和音频  | 字符串 | 是 | 此列用于提供输入上下文的名称，该上下文将在执行测试集中的行时用于 Lex 的输入。这指的是[为 Lex V2 机器人设置意图上下文](https://docs.aws.amazon.com/lexv2/latest/dg/context-mgmt-active-context.html)中的输入上下文。请注意，测试工作台仅支持上下文的名称。它不支持上下文中的参数。可以使用多个列，分别名为“输入上下文标签 1”、“输入上下文标签 2”等。 | 
|  请求属性  |  文本和音频  | 字符串 | 是 | 此列用于提供请求属性，该属性将在执行测试集中的行时用于 Lex 的输入。列中的值应以 `< request-attribute-name > = < request-attribute-value >` 的格式提供。为了增加可读性，可以在“=”两边添加空格。例如： request-attribute-foo= 这是一个虚拟响应 request-attribute-foo = '这是 “虚拟响应” ' request-attribute-foo= “这是'虚拟响应'”。可以使用多个列，分别名为“请求属性 1”、“请求属性 2”等。 | 
|  会话属性  |  文本和音频  | 字符串 | 是 | 此列用于提供会话属性，该属性将在执行测试集中的行时用于 Lex 的输入。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/file-input-test-sets.html)  | 
|  RunTime 提示  |  文本和音频  | 字符串 | 是 | 此列用于为意图内的插槽提供运行时提示，该上下文将在执行测试集中的行时用于 Lex 的输入。下面是示例： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/file-input-test-sets.html)  | 
|  插入  |  音频  | 布尔值 | 否 | 此列用于指定在将测试集中该行的音频文件发送到 Lex 运行时的时候，测试工作台是否应插入。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/file-input-test-sets.html)  | 
|  预期输出意图  |  文本和音频  | 字符串 | 否 | 此列用于为测试集中的行指定 Lex 输出中预期的意图名称。 | 
|  预期输出插槽  |  文本和音频  | 字符串 | 是 | 此列用于提供在执行测试集中的行时 Lex 输出中预期的插槽值。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/file-input-test-sets.html)  | 
|  预期输出上下文标签  |  文本和音频  | 字符串 | 是 | 此列用于为测试集中的行指定 Lex 输出中预期的输出上下文名称。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/file-input-test-sets.html)  | 

# 在 Test Workbench 中查看测试验证错误
<a name="view-errors-test-sets"></a>

您可以对报告验证错误的测试集进行更正。如果测试集尚未准备好进行测试，就会生成这些验证错误。Test Workbench 可以显示测试集输入 CSV 文件中哪些必填列不存在预期格式的值。

**要查看测试验证错误，请执行以下操作：**

1. 在测试集列表中选择要查看的报告状态为**验证错误**的测试集的名称。测试集的名称是有效链接，点击该链接可跳转至相关页面以查看有关测试集的详细信息。

1. 测试集记录在屏幕顶部显示验证错误的详细信息。选择**查看详细信息**以查看验证错误报告。

1. 在错误报告窗口中，依据行号和错误类型来确定发生错误的位置。对于一长串错误，您可以选择**下载**错误报告。

1. 将测试集输入 CSV 文件中列出的错误与原始测试文件进行比较，以更正所有问题并重新上传测试集。

下表列出了输入 CSV 验证错误消息及对应场景。


| 场景 | 错误消息 | 注意 | 
| --- | --- | --- | 
|  超出测试集文件大小限制  |  测试集文件大于 200 MB. Provide smaller file and try your request again.  |  | 
| 测试集超过最大记录数 | Input file had records more than supported maximum number of 200,000. |  | 
| 上传的测试集为空 | Imported test set is empty. Provide non-empty test set and try your request again. |  | 
| 列标题名称为空 | Column Headers Row: found empty column name in column number 5. |  | 
| 列标题名称无法识别 | Column Headers Row: could not recognize column name 'dummy' in column number 2. |  | 
| 列标题名称重复 | Column Headers Row: found multiple columns 'S3 audio link' and 'S3 audio link' that are same or equivalent. Remove or rename one of those columns. |  | 
| 多值列名超出限制 | Column Headers Row: count of columns for 'Expected Output Slot' exceeded maximum supported count: 6. Remove some columns for 'Expected Output Slot' and try again. | 多值列支持的最大列数为 6。  | 
| 文本或音频相关的列标题不存在 | Could not find columns for text or audio conversations. For text conversations, use \$1'Text input'\$1 columns. For audio conversations, use \$1'S3 audio link', 'Expected transcription'\$1 columns. | 必填音频列：\$1'S3 audio link', 'Expected transcription'\$1，必填文本列：\$1'Text input'\$1 | 
| 存在与文本和音频均相关的列标题  | Found columns for both text and audio conversations. You can either use \$1'Text input'\$1 columns for text conversations, or \$1'S3 audio link', 'Expected transcription'\$1 columns for audio conversations. | 必填音频列：\$1'S3 audio link', 'Expected transcription'\$1，必填文本列：\$1'Text input'\$1 | 
| 缺少必填列 | Could not find mandatory columns ["Expected Output Intent"]. | 必填列：\$1"Line \$1", "Source", "Expected Output Intent"\$1 | 
| 存在有数据但无标题的列 | Found data in column number 8 for row number 6, but corresponding column did not have a column header. |  | 
| 必填列无数据 | Row=12: no values found for mandatory columns: \$1"Source", "Expected Output Intent"\$1 |  | 
| 对话 ID 重复 | conversation number '19' was seen for previous conversation at row number 39." Make sure that same conversation number has not been provided for two conversations, you can do this by ensuring that all rows for a conversation number are grouped together. |  | 
| 提供的对话 ID 无效 | Found invalid value 'test\$1conversation' in 'Conversation \$1' column. 对于用户行，此列的值必须为数字或 N/A （即 “不适用”）。 |  | 
| 行号列的值为非数字 | Found non-numeric value 'test\$1line' in 'Line \$1' column. Its value must be numeric. |  | 
| 代理行中无会话 ID | No value found for 'Conversation \$1' column. It must be provided for an agent row. |  | 
| 代理行中无数值会话 ID | Found non-numeric value 'test\$1conversation' in 'Conversation \$1' column. Its value must be numeric for an agent row. |  | 
| S3 位置无效 | Invalid value 'bucket/folder' was provided. Valid format is S3://<bucketName>/<keyName>. |  | 
| S3 存储桶名称无效 | Invalid s3 bucket name 'test\$1bucket' was provided. Check the bucket name. |  | 
| S3 音频位置为文件夹 | Provided audio location 'S3://bucket/folder' is invalid. It points to an S3 folder. |  | 
| 意图名称无效 | Invalid characters were present in intent 'intent@name'. Check the intent name. | 正则表达式检查：^（[0-9a-zA-Z][\$1-]?）\$1\$1 | 
| 槽名称无效 | Invalid characters were present in slot 'Slot@Name'. Check the slot name. | 正则表达式：^（[0-9a-zA-Z][\$1-]?）\$1\$1，开头或结尾不得为点（.） | 
| 槽位值被赋予父槽位 | Slot values were provided for subslot 'Address.City' as well as parent slot 'Address'. Values should be only provided for the subslot. | CST 中的父槽位不得有槽位值 | 
| 上下文名称中的字符无效 | Invalid characters were present in context name 'context@1'. Check the context name. | 正则表达式：^（[A-Za-z]\$1?）\$1\$1 | 
| 槽位拼写样式无效 | Invalid value 'test' was provided. Make sure that they are all upper case. 有效值为 ["默认”、SpellByLetter “”、SpellByWord “]。 | 支持的值 ["默认”、SpellByLetter “”、“SpellByWord” | 
| 参与者或来源必须是代理或用户 | Invalid value 'bot' was provided. Valid values are ["Agent", "User"]. | 支持的枚举：“代理”、“用户” | 
| 行号不得为小数 | Invalid value '10.1' was provided. It should be a valid number without any fractions. |  | 
| 对话编号不得为小数 | Invalid value '10.1' was provided. It should be a valid number without any fractions. |  | 
| 行号应在限定范围内 | Invalid value '92233720368547758071' was provided. It should be greater than or equal to 1 and less than or equal to 9223372036854775807. |  | 
| 插入列只能为布尔值 | Invalid value 'test' was provided. It should be a valid boolean value such as 'true' or 'false'. Alternatively 'yes' and 'no' can be used. | 可能的值：“True”、“true”、“T”、“Yes”、“yEs”、“Y”、“1”、“1.0”、“False”、“false”、“F”、“No”、“no”、“N”、“0”、“0.0” | 
| 预期槽位、会话属性、请求属性应以等于号（=）隔开 | Value 'slotName:slotValue' does not have '='. Such value should be provided as a key-value pair in format '<key>=<value>'. | 例如：slotName = slotType | 
| 预期槽位、会话属性、请求属性应为密钥值对 | '=slotValue' does not have a key before '='. Such value should be provided as a key-value pair in format '<key>=<value>'. | 例如：slotName = slotType | 
| 结尾处的引号无效  | 在 'Foo's item'“ 中发现了不正确的引号使用。It starts with quote character `"` but does not end with same quote character. | 例如：`"Foo's item", KFC` | 
| 中间的引号无效 | 在 `"Foo's" Burger, etc.` 中发现了不正确的引号使用。It contains quote character `"` inside its content. Values containing single quotes should be wrapped within double quotes and vice-versa. | 例如，正确格式应为：`"Foo's item", KFC` | 
| 缺少引号 | `key = Foo's item` 包含单引号或双引号，但未用引号括起来。Values containing single quotes should be wrapped inside double quotes and vice-versa. |  | 
| 列中多处存在重复密钥  | Key `key1` was repeated in two columns: `Session Attribute 3` and `Session Attribute 1`. |  | 
| 运行时提示中的格式无效 | 密钥无效 `BookFlight.Car。 “`为运行时提示提供。对于运行时提示，密钥应采用格式 <intentName>.<slotName>。 | 如果 '.' 必须出现在密钥中间，则无法从该密钥中提取意图名称和插槽名称。格式错误的示例：BookFlight“，”。 BookFlight.Car”、“BookFlight.Car。” | 
| 运行时提示键中的意图名称无效 | Found invalid intent `intent@name` for Runtime Hints. Check intent name. | 正则表达式检查：^（[0-9a-zA-Z][\$1-]?）\$1\$1 | 
| 运行时提示键中的槽位名称无效 | Found invalid slot name in `Slot@Name` for Runtime Hints. Check slot name. | 正则表达式：^（[0-9a-zA-Z][\$1-]?）\$1\$1，开头或结尾不得为点（.） | 

# 在 Test Workbench 中删除测试集
<a name="delete-test-sets"></a>

您可以轻松地从测试集列表中删除测试集。

**要删除测试集，请执行以下操作：**

1. 从左侧菜单转到**测试集**列表以查看测试集。

1. 在测试集列表中选择要删除的测试集。

1. 点击右上角的**操作**下拉菜单，然后选择**删除**。

1. 系统将显示一条消息，确认测试集已删除。

# 编辑测试集详细信息
<a name="edit-details-test-sets"></a>

您可以在测试集列表中编辑测试集名称和详细信息。测试集的名称或详细信息可以在后期添加或更新。但是，在使用机器人或转录数据运行测试之前，必须更新测试集。

**要编辑测试集详细信息，请执行以下操作：**

1. 从左侧菜单转到测试集列表以查看测试集。

1. 在测试集列表中，选中要编辑测试集的复选框。

1. 点击右上角的**操作**下拉菜单，然后选择**编辑详细信息**。

1. 系统将显示一条消息，确认测试集的编辑已成功保存。

# 更新测试集
<a name="update-test-sets"></a>

您可以更新、更正、修改或删除测试集中的项目，以优化基准结果，或者更正测试集中可能出现的其他错误

您可以先下载测试集并修复验证错误，然后再上传更正后的测试集。请参见[查看测试验证错误](https://docs.aws.amazon.com/lexv2/latest/dg/view-errors-test-sets.html)。

**要更新测试集，请执行以下操作：**

1. 在测试集记录中，点击右上角的**更新测试集**按钮。

1. 选择要从您的 Amazon S3 账户上传的文件，或者从您的计算机上传 CSV 测试文件。注意：更新测试集将覆盖现有数据。

1. 点击**更新**按钮。

1. 系统将显示一条消息，确认测试集已成功更新。注意：该操作可能需要几分钟完成，具体取决于测试集的复杂性和大小。

1. 系统将显示一条消息，确认测试集已成功更新，同时**状态**将变为**准备进行测试**。

# 执行测试
<a name="execute-test-set"></a>

要执行测试集，必须选择相应的机器人来针对该测试集运行测试。您可以从 “测试集” 下的下拉菜单中从 AWS 账户中选择一个机器人。该操作将根据经过验证的测试数据测试您选择的机器人，以根据测试集中的基准数据报告性能指标。

![\[在 Test Workbench 中执行测试的屏幕。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-extest.png)


**要在 Test Workbench 中执行测试，请执行以下操作：**

1. 在测试集记录页中，选择**执行测试**。

1. 选择要在测试中使用的测试集。

1. 从**机器人**下拉菜单中选择要在测试中使用的机器人的名称。

1. 在**机器人别名**下拉菜单中选择机器人别名（如果适用）。

1. 在**语言**下选择英语版本。

1. 在“模态”下选择**文本**或**音频**。

1. 选择您的 Amazon S3 位置。（仅限音频）

1. 选择机器人的**端点选择**。（仅限流式传输）

1. 点击**验证覆盖范围**按钮以确认测试已准备就绪。如果验证步骤中存在任何错误，请检查之前的参数并进行更正。

1. 选择**执行**以运行测试。

1. 系统将显示一条消息，确认已成功执行该测试。

# Test Workbench 中的测试集覆盖范围
<a name="validation-test-set"></a>

可通过测试集与机器人之间意图和槽位的有限覆盖范围来产生预期的性能测量值。我们建议您在运行测试之前检查测试集覆盖范围。

![\[使用 Test Workbench 检查验证步骤中的意图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-discr1.png)


**要检查验证覆盖范围，请执行以下操作：**

1. 在测试集记录中，点击**验证覆盖范围**按钮。

1. 系统将显示消息，以指示正在验证测试集与所选机器人之间的覆盖范围。

1. 操作完成后，系统将显示消息，以指示**覆盖范围验证成功**。

1. 点击窗口底部的**查看详细信息**按钮。

1. 选择“意图”或“槽位”选项卡以查看对应的测试集差异。您可以点击**下载**按钮以便以 CSV 格式的文件下载该数据。

1. 查看您的测试集数据、机器人意图和槽位的验证结果。找出问题并相应地更改您的机器人测试集架构以改善结果。更改 CSV 文件后，上传编辑后的测试集和机器人以运行测试。注意：覆盖范围的验证不是针对机器人，而是针对测试集运行的。因此将不涉及机器人中存在、但测试集中不存在的意图。

# 查看测试结果
<a name="test-results-test-set"></a>

解读 Test Workbench 的测试结果，以确定机器人与客户之间的对话可能失败的场景，或者需要客户多次尝试才能履行意图的场景。

通过在测试结果中找到这些问题，您可以使用与实时机器人转录值更一致的不同训练数据或言语来提高意图性能，从而优化机器人的性能。

您可以详细了解存在性能差异的意图和槽位。一旦确定了存在差异的意图或槽位，即可进一步深入研究和检查言语和对话流。

![\[使用 Test Workbench 完成的测试列表。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-testresults.png)


**要查看测试结果，请执行以下操作：**

1. 通过左侧的菜单转到测试集列表，选择 Test Workbench 下的**测试结果**选项。注意：如果测试结果为成功，即表明**状态为**“完成”。

1. 选择要查看测试结果的**测试结果 ID**。

# Test Workbench 中的测试结果详细信息
<a name="test-results-details-test-set"></a>

测试结果显示了测试集的详细信息、所使用的意图以及所使用的槽位。其中还提供了总体测试集输入明细，包括总体结果、对话结果、意图和槽位结果。

测试结果包括与测试相关的所有信息，例如：
+ 测试详细信息元数据
+ 总体结果
+ 对话结果
+ 意图和槽位结果
+ 详细结果

**“总体结果”选项卡：**

![\[使用 Test Workbench 的测试结果中的测试集输入细分图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results1.png)


**测试集输入细分**：该图中细分地展示了测试集中的对话数量和单一输入言语数量。

![\[使用 Test Workbench 的测试结果中的单一输入细分图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results2.png)


**单一输入细分**-显示两个图表，其中包括 end-to-end对话和语音转录。每幅图中均分别展示了通过的输入数量以及失败的输入数量。注意：话语转录图仅适用于音频测试集。

![\[使用 Test Workbench 的测试结果中的对话细分图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results3.png)


**对话细分**-显示两个图表，其中包括 end-to-end对话和语音转录。每幅图中均分别展示了通过的输入数量以及失败的输入数量。注意：话语转录图仅适用于音频测试集。

**“对话结果”选项卡：**

![\[使用 Test Workbench 的测试结果中的对话通过率图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results4.png)


**对话通过率**：您可在对话通过率表中查看测试集中的每个对话中所使用的意图和槽位。通过查看失败的意图和槽位以及每个意图和槽位的通过百分比，您可以直观地看到对话失败的地方。

![\[使用 Test Workbench 的测试结果中的对话意图失败指标图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results5.png)


**对话意图失败指标**：该指标显示了测试集中性能最差的 5 个意图。该面板基于机器人的对话日志或转录，以图表的形式展示成功或失败意图的百分比或数量。成功的意图并不意味着整个对话是成功的。这些指标仅适用于意图的值，与意图出现的先后顺序无关。

![\[使用 Test Workbench 的测试结果中的对话槽位失败指标图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results6.png)


**对话槽位失败指标**：该指标显示了测试集中性能最差的 5 个槽位。其中会指示意图中每个槽位的成功率。条形图显示意图中每个时段的语音转录和 end-to-end对话。

**“意图和槽位结果”选项卡：**

![\[使用 Test Workbench 的测试结果中的意图识别指标图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results7.png)


**意图识别指标**：以表格形式展示成功识别的意图数量。显示语音转录和 end-to-end对话的通过率。

![\[使用 Test Workbench 的测试结果中的槽位分辨率指标图。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results8.png)


**槽位分辨率指标**：分别展示意图和槽位，以及对话或单一输入中所使用的每个意图中每个槽位的成功率和失败率。显示语音转录和 end-to-end对话的通过率。

**“详细结果”选项卡：**

![\[使用 Test Workbench 的测试结果中的详细结果。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/testworkbench/test-workbench-results9.png)


**详细结果**：展示对话日志的详细表格，其中包括用户和代理的言语以及每个槽位的预期输出和预期转录。您可以通过点击**下载**按钮来下载此报告。

下表列出了结果失败错误消息及对应场景。


| 场景 | 错误消息 | Action | 
| --- | --- | --- | 
| 意图不匹配 | 预期的 BookFlight 意图，但这是 BookHotel 故意的。 | 跳过对话中的其他回合 | 
| 槽位引发不匹配 | Expected departureDate slot to be elicited but it was cabinType. | 跳过对话中的其他回合 | 
| 槽位值不匹配 | Mismatch between expected and actual slot value. | 继续对话中的其他回合 | 
| Back-to-back 缺少代理提示符 | Expected bot to return an agent prompt in this turn but it was not received. | 跳过对话中的其他回合 | 
| 转录不匹配 | Expected transcription didn't match actual transcription. | 继续对话中的其他回合 | 
| 未引发可选槽位 | Expected to elicit cabinType slot in next turn, however current intent fulfilled before that. | 跳过对话中的其他回合 | 
| 槽位无法识别 | Expected departureDate slot was not recognized in this turn. | 跳过对话中的其他回合 | 
| 额外的 back-to-back代理提示 | Expected a user turn but it was agent prompt | 跳过对话中的其他回合 | 