

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

# 复合槽位类型
<a name="composite-slots"></a>

复合槽位是两个或多个槽位的组合，用于在单个用户输入中捕获多条信息。例如，您可以将机器人配置为通过请求“城市和州/省/自治区或邮政编码”来引发位置。相反，如果对话配置为使用单独的槽位类型，则会导致对话体验僵硬（询问“哪个城市？”，然后紧接着询问“邮政编码是什么？”）。使用复合槽位，您可以通过单个槽位来捕获所有信息。复合槽位是称为子槽位的组合，例如城市、州/省/自治区和邮政编码。

您可以组合使用可用的 Amazon Lex 槽位类型（内置）和您自己的槽位（自定义槽位）。您可以设计逻辑表达式来捕获所需子槽位中的信息。例如：城市和州/省/自治区或邮政编码。

复合槽位类型仅适用于 en-US。

**创建复合槽位类型**

要在复合槽位中使用子槽位，必须先配置复合槽位类型。为此，请使用添加槽位类型控制台步骤或 API 操作。为复合槽位类型选择名称和描述后，必须提供子槽位的信息。有关添加槽位类型的更多信息，请参阅[添加槽位类型](add-slot-types.md) 

**子槽位**

复合槽位类型需要配置底层槽位，称为子槽位。如果要在一次请求中从客户处引发多条信息，请配置子槽位的组合。例如：城市、州/省/自治区以及邮政编码。您可以为一个复合槽位添加最多 6 个子槽位。

单一槽位类型的槽位可用于向复合槽位类型添加子槽位。但是，您无法使用复合槽位类型作为子槽位的槽位类型。

下图以复合槽位“汽车”为例，其中包括子槽位“颜色”、“燃油类型”、“制造商”、“型号”、“VIN”和“年份”。

![\[槽位类型面板显示子槽位。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-slottype.png)


![\[子槽位面板。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-subslots.png)


**表达式生成器**

为便于复合槽位的履行，您可以选择使用表达式生成器。借助表达式生成器，您可以设计逻辑槽位表达式，以按所需顺序捕获所需的子槽位值。作为布尔表达式的一部分，您可以使用诸如 AND 和 OR 等运算符。根据设计的表达式，当履行所需的子槽位时，即视为履行该复合槽位。

**使用复合槽位类型**

对于某些意图，您可能需要将不同的槽位作为单个槽位的一部分来捕获。例如，车辆保养预约安排机器人可能有以下言语的意图：

`My car is a {car}`

此意图预期 \$1car\$1 复合槽位包含一系列槽位，其中包含车辆的详细信息。例如，“2021 White Toyota Camry”（2021 款白色丰田凯美瑞）。

复合槽位不同于多值槽位。复合槽位由多个槽位组成，每个槽位都有自己的值。而多值槽位是可以包含一系列值的单一槽位。有关多值槽位的更多信息，请参阅[使用一个槽位中的多个值](multi-valued-slots.md)

对于复合槽位，Amazon Lex 会在响应 `RecognizeText` 或 `RecognizeUtterance` 操作时为每个子槽位返回一个值。以下是 CarService 机器人为言语“I want to schedule a service for my “2021 White Toyota Camry"”（我想为我的“2021 款白色丰田凯美瑞”预订保养服务）返回的槽位信息。

```
"slots": {
    "CarType": {
        "value": {
            "originalValue": "White Toyota Camry 2021",
            "interpretedValue": "White Toyota Camry 2021",
            "resolvedValues": [
                "white Toyota Camry 2021"
            ]
        },
        "subSlots": {
            "Color": {
                "value": {
                    "originalValue": "White",
                    "interpretedValue": "White",
                    "resolvedValues": [
                        "white"
                    ]
                },
                "shape": "Scalar"
            },
            "Manufacturer": {
                "value": {
                    "originalValue": "Toyota",
                    "interpretedValue": "Toyota",
                    "resolvedValues": [
                        "Toyota"
                    ]
                },
                "shape": "Scalar"
            },
            "Model": {
                "value": {
                    "originalValue": "Camry",
                    "interpretedValue": "Camry",
                    "resolvedValues": [
                       "Camry"
                    ]
                },
                "shape": "Scalar"
            },
            "Year": {
                "value": {
                    "originalValue": "2021",
                    "interpretedValue": "2021",
                    "resolvedValues": [
                        "2021"
                    ]
                },
                "shape": "Scalar"
            }
        }
    },
    ...
}
```

可以在对话的第一回合或第 n 回合中引发复合槽位。基于所提供的输入值，复合槽位可以引发其余所需的子槽位。

复合槽位总是为每个子槽位返回一个值。当言语中不包含给定子槽位的可识别值时，该特定子槽位不会返回任何响应。

复合槽位适用于文本和语音输入。

向意图中添加槽位时，复合槽位只能作为自定义槽位类型使用。

您可以在提示中使用复合槽位。例如，您可以为意图设置确认提示。

`Would you like me to schedule service for your 2021 White Toyota Camry?`

当向用户发送提示时，Amazon Lex 会发送“Would you like me to schedule service for your 2021 White Toyota Camry?”（是否需要为您的 2021 款白色丰田凯美瑞预约保养服务？）。

每个子槽位都配置为一个槽位。您可以添加槽位提示来引发子槽位和示例言语。您可以为子槽启用“等待并继续”以及默认值。有关更多信息，请参阅 [在 Lex V2 机器人的意图中使用默认槽位值](context-mgmt-default.md)。

![\[复合槽位设置面板\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-composite.png)


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

![\[复合槽位信息面板\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-slotinfo.png)


**编辑复合槽位类型**

您可以从复合槽位配置中编辑子槽位，以修改子槽位名称和槽位类型。但是，当意图正在使用复合槽位时，您需要首先编辑意图，然后才能修改子槽位。

![\[现有意图的警报面板\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-alert.png)


**删除复合槽位类型**

您可以从复合槽位配置中删除子槽位。请注意，当意图正在使用子槽位时，子槽位仍会从此意图中删除。

![\[使用子槽位删除意图\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-delete.png)


表达式生成器中的槽位表达式提供关于子槽位已被删除的警报。

![\[现有意图的槽位类型\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/cst-slottype.png)
