

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

# 为 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*。