

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

槽是由使用者提供以滿足意圖的值。插槽有兩種類型：
+ **內建插槽類型** – 您可以使用內建插槽類型來擷取標準值，例如數字、名稱和城市。如需支援的內建插槽類型清單，請參閱 [內建插槽類型](built-in-slots.md)。
+ **自訂槽類型** – 您可以使用自訂槽類型來擷取特定於意圖的自訂值。例如，您可以使用自訂槽類型，將帳戶類型擷取為「檢查」或「儲存」。如需詳細資訊，請參閱[自訂槽類型](custom-slot-types.md)。

若要在意圖中定義插槽，您必須設定下列項目：
+ **槽資訊** – 此欄位包含槽的名稱和選用描述。例如，您可以提供「AccountNumber」的槽名稱來擷取帳戶號碼。如果在對話流程中需要插槽以滿足意圖，則必須將其標記為必要。
+ **槽類型** – 槽類型定義槽可接受之值的清單。您可以建立自訂插槽類型，或使用預先定義的插槽類型。
+ **槽提示** – 槽提示是對使用者提出以收集資訊的問題。您可以設定用於收集資訊的重試次數，以及每次重試所使用的提示變化。您也可以在每次重試後啟用 Lambda 函數調用，以處理擷取的輸入並嘗試解析為有效的輸入。
+ **Wait and Continue （選用）** – 透過啟用此行為，使用者可以說出「按住一秒鐘」等片語，讓機器人等待找到資訊並提供資訊。這僅適用於串流對話。如需詳細資訊，請參閱[讓 Amazon Lex V2 機器人在暫停期間等待使用者提供更多資訊](wait-and-continue.md)。
+ **槽擷取回應** – 您可以根據從使用者輸入擷取槽值的結果，設定成功回應和失敗回應。
+ **條件式分支** – 您可以在播放初始回應後套用條件。當條件評估為 true 時，會採取您定義的動作。如需詳細資訊，請參閱[將條件新增至分支對話](paths-branching.md)。
+ **對話方塊程式碼掛**鉤 – 您也可以使用 Lambda 程式碼掛鉤來驗證槽值並執行商業邏輯。如需詳細資訊，請參閱[叫用對話方塊程式碼掛勾](paths-code-hook.md)。
+ **使用者輸入類型** – 您可以設定輸入類型，讓機器人可以接受特定的模態。根據預設，音訊和 DTMF 模態都會接受。您可以選擇將其設定為僅限音訊或僅限 DTMF。
+ **音訊輸入逾時和長度** – 您可以設定音訊逾時，包括語音逾時和靜音逾時。此外，您也可以設定最大音訊長度。
+ **DTMF 輸入逾時、字元和長度** – 您可以設定 DTMF 逾時，以及刪除字元和結束字元。此外，您也可以設定最大 DTMF 長度。
+ **文字長度** – 您可以設定文字模式的最大長度。

播放槽提示後，使用者會提供槽值做為輸入。如果 Amazon Lex V2 不了解使用者提供的槽值，它會重試引出槽，直到它了解值或超過您為槽設定的重試次數上限為止。您可以使用進階重試設定來設定逾時、限制輸入類型，以及啟用或停用初始提示和重試的中斷。每次嘗試擷取輸入後，Amazon Lex V2 都可以呼叫為機器人設定的 Lambda 函數，並使用為重試提供的調用標籤。您可以使用 Lambda 函數，例如，套用您的商業邏輯，嘗試將其解析為有效的值。您可以在槽提示的**進階選項**中啟用此 Lambda 函數。

![\[設定槽提示讓機器人引出資訊。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/response-slot-prompt.png)


您可以定義機器人在輸入槽值或超過重試次數上限時應傳送給使用者的回應。例如，對於排程汽車服務的機器人，您可以在輸入車輛識別碼 (VIN) 時傳送訊息給使用者：


|  | 
| --- |
| 感謝您提供汽車的 VIN 號碼。我將繼續安排預約。 | 

您可以建立兩個回應：
+ **成功回應** – 當 Amazon Lex V2 了解槽值時傳送。
+ **失敗回應** – 當 Amazon Lex V2 在重試次數上限之後無法了解使用者的槽值時傳送。

您可以設定值、設定後續步驟，並套用對應至每個回應的條件，以設計對話流程。

如果沒有條件或明確的下一個步驟，Amazon Lex V2 會依優先順序移至下一個槽。

![\[槽回應的進階選項。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/response-slot.png)


您可以使用 Lambda 函數來驗證使用者輸入的槽值，並判斷下一個動作應該是什麼。例如，您可以使用驗證函數來確保輸入的值落在正確的範圍，或格式正確。若要啟用 Lambda 函數，請選擇**對話方塊程式碼勾**點區段中的**叫用 Lambda 函數**核取方塊和**作用中**按鈕。您可以為對話方塊程式碼掛鉤指定調用標籤。此調用標籤可用於 Lambda 函數，以撰寫對應於槽引出的商業邏輯。

![\[對話方塊程式碼掛勾的選項。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/response-dialog-code-hook.png)


意圖不需要的插槽不屬於主要對話流程的一部分。不過，如果使用者表達用語包含機器人識別為對應於選用插槽的值，則可以使用該值來填入插槽。例如，如果您將商業智慧機器人設定為具有選用`City`插槽和使用者表達用語 **What is the sales for April in San Diego?**，則機器人會以 填入選用插槽**San Diego**。如果有的話，您可以將商業邏輯設定為使用選用的槽值。

無法使用後續步驟引出意圖不需要的插槽。這些步驟只能在意圖引出期間填入 （如上述範例），也可以透過在 Lambda 函數中設定對話方塊狀態來引出。如果使用 Lambda 函數引出槽，您必須在槽引出完成後使用 Lambda 函數來決定對話中的下一個步驟。若要在建置機器人時啟用下一個步驟的支援，您必須將插槽標記為意圖所需的位置。

**注意**  
2022 年 8 月 17 日，Amazon Lex V2 發佈了與使用者管理對話方式的變更。此變更可讓您進一步控制使用者在對話中採取的路徑。如需詳細資訊，請參閱[Amazon Lex V2 中對話流程的變更](understanding-new-flows.md)。在 2022 年 8 月 17 日之前建立的機器人不支援對話方塊程式碼掛接訊息、設定值、設定後續步驟，以及新增條件。

下列主題說明如何設定機器人以重新引出已填滿的槽值，以及如何建立包含多個值的槽：

**Topics**
+ [重新引出插槽](reelicit-slots.md)
+ [在槽中使用多個值](multi-valued-slots.md)

# 重新引出插槽
<a name="reelicit-slots"></a>

 您可以設定機器人以重新引出已填滿的槽，方法是將該槽值設定為 ，**null**並將對話中的下一個步驟設定為循環以引出該槽。例如，您可能想要在客戶根據額外資訊拒絕槽引出的確認後，重新引出槽，如下列對話所示：

![\[對話會引發客戶對食物訂單的肉品偏好。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/slots/order-food.png)


您可以從確認回應設定迴圈，以使用意圖編輯器或 重新引出槽[使用視覺化對話建置器](visual-conversation-builder.md)。

**注意**  
您可以回到對話中的任何時間點重新引出槽，前提是您**null**事先將該槽值設定為 。

**使用意圖編輯器重製上述範例**

1. 在意圖編輯器的**確認**區段中，選取**提示旁邊的向右箭頭，以確認展開區段的意圖**。

1. 選取底部的**進階選項**。

1. 在**拒絕回應**區段中，選取**設定值**以展開區段旁的向右箭頭。在本節中填入下列步驟，如下圖所示：

   1. 將要重新引出的槽值設定為 **null**。在此範例中，我們希望重新引出`Meat`槽，因此我們在**槽值**區段**\$1Meat\$1 = null**中輸入 。

   1. 在**對話下一步下方的下拉式選單中**，選擇**引出槽**。

   1. **插槽**區段隨即出現。在下方的下拉式選單中，選擇您要重新引出的插槽。

   1. 選取**更新選項**以確認您的變更。  
![\[對話會引發客戶對食物訂單的肉品偏好。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/slots/decline-food.png)

**使用視覺化對話建置器重現上述範例**

1. 從**確認**區塊的**無**連接埠建立連線至**取得槽值：肉**塊區塊的傳入連接埠。  
![\[從拒絕確認提示到肉品槽引出區塊的連線。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/slots/vcb-reelicit-slot-loop.png)

1. 選取**確認**區塊右上角的**編輯**圖示。  
![\[編輯確認區塊右上角的圖示。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/slots/vcb-reelicit-slot-confirmation-edit.png)

1. 在 **Decilne 回應**區段中選取機器人回應旁的齒輪圖示。  
![\[拒絕回應區段中機器人回應旁的齒輪圖示\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/slots/vcb-reelicit-slot-confirmation.png)

1. 在**設定值**區段中，在**槽值**方塊中新增「\$1Meat\$1 = null」。  
![\[在設定值區段的槽值方塊中，將要重新引出的槽值設定為 null。\]](http://docs.aws.amazon.com/zh_tw/lexv2/latest/dg/images/slots/vcb-reelicit-slot-set-slot-null.png)

1. 選取**儲存意圖。**

# 在槽中使用多個值
<a name="multi-valued-slots"></a>

**注意**  
只有英文 （美國） 語言支援多個值插槽。

對於某些意圖，您可能想要擷取單一插槽的多個值。例如，比薩訂購機器人可能有以下表達用語的意圖：

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

意圖預期`{toppings}`槽包含客戶在比薩上想要的配料清單，例如「pepperoni 和 pineapple」。

若要設定插槽以擷取多個值，請將插槽上的 `allowMultipleValues` 欄位設定為 true。您可以使用主控台或 [CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html) 或 [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html) 操作來設定 欄位。

您只能將具有自訂插槽類型的插槽標記為多值插槽。

對於多值槽，Amazon Lex V2 會將回應中的槽值清單傳回至 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 或 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 操作。以下是針對來自 OrderPizza 機器人的表達用語「我想要含Pestoni 和 Pineapple 的比薩」而傳回的槽資訊。

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

多值插槽一律會傳回值清單。當表達用語只包含一個值時，傳回的值清單只包含一個回應。

Amazon Lex V2 會辨識以空格、逗號 (、) 和結合 "and" 分隔的多個值。多值插槽可同時使用文字和語音輸入。

您可以在提示中使用多值插槽。例如，您可以將意圖的確認提示設定為

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

當 Amazon Lex V2 傳送提示給使用者時，它會傳送「您希望我訂購您的自助式和鳳梨比薩嗎？」

多值插槽支援單一預設值。如果提供多個預設值，Amazon Lex V2 只會在插槽中填入第一個可用的值。如需詳細資訊，請參閱[在 Lex V2 機器人的意圖中使用預設槽值](context-mgmt-default.md)。

您可以使用槽混淆來遮罩對話日誌中多值槽的值。當您混淆槽值時，每個槽值的值都會取代為槽的名稱。如需詳細資訊，請參閱[從 Lex V2 遮蔽對話日誌中的槽值](monitoring-obfuscate.md)。