向分支對話添加條件 - Amazon Lex

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

向分支對話添加條件

您可以使用條件分支來控制客戶通過與機器人交談的路徑。您可以根據插槽值、工作階段屬性、輸入模式和輸入成績單欄位的內容,或 Amazon Kendra 的回應來分支對話。

您最多可以定義四個分支。每個分支都有必須滿足的條件,Amazon Lex V2 才能跟隨該分支。如果沒有任何分支滿足其條件,則會遵循默認分支。

定義分支時,您可以定義 Amazon Lex V2 在與該分支對應的條件評估為真時應採取的動作。您可以定義下列任何動作:

  • 傳送給使用者的回應。

  • 要套用至狹槽的槽值。

  • 目前階段作業的階段作業屬性值。

  • 交談中的下一個步驟。如需詳細資訊,請參閱 建立交談路徑

您可以為條件式分支選擇不同的選項。

每個條件分支都有一個布林運算式,Amazon Lex V2 必須滿足該分支。您可以在條件中使用比較和布林運算子、函數和量詞運算子。例如,如果 {age} 插槽小於 24,則下列條件會傳回 true。

{age} < 24

如果 {澆頭} 多值插槽包含單詞「菠蘿」,則以下條件返回 true。

{toppings} CONTAINS "pineapple"

對於更複雜的條件,您可以將多個比較運算子與布林運算子結合。例如,如果 {make} 槽值是「本田」和 {模型} 槽值是「思域」下面的條件返回 true。使用括號來設定評估順序。

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

下列主題提供有關條件式分支運算子和函數的詳細資訊。

注意

2022 年 8 月 17 日,Amazon Lex V2 發佈了與使用者對話管理方式的變更。此變更可讓您更好地控制使用者通過交談的路徑。如需詳細資訊,請參閱 Amazon Lex V2 中對話流程的變更。在 2022 年 8 月 17 日之前建立的機器人不支援對話方塊程式碼掛接訊息、設定值、設定後續步驟和新增條件。

比較運算子

Amazon Lex V2 針對條件支援下列比較運算子:

  • 等於 (=)

  • 不等於 (! =)

  • 小於 (<)

  • 小於或等於 (<=)

  • 大於 (>)

  • 大於或等於 (>=)

使用比較運算子時,會使用下列規則。

  • 左側必須是參考。例如,若要參考槽值,請使用{slotName}。若要參照工作階段屬性值,請使用[attribute]。對於輸入模式和輸入成績單,您可以使用$.inputMode$.inputTranscript

  • 右側必須是常數且與左側相同的類型。

  • 任何參考尚未設定之屬性的運算式都會被視為無效,且不會進行評估。

  • 當您比較多值插槽時,使用的值是所有解譯值的逗號分隔清單。

比較以參照的槽類型為基礎。它們解決方法如下:

  • 字串 — 字串會根據其 ASCII 表示法進行比較。比較不區分大小寫。

  • Nu@@ mbers — 以數字為基礎的槽會從字串表示轉換成數字,然後進行比較。

  • 日期/時間 — 以時間為基礎的時段會根據時間序列進行比較。較早的日期或時間被認為較小。對於持續時間,較短的週期被認為是較小的。

布林值運算子

Amazon Lex V2 支持布爾運算符結合比較運算符。它們可讓您建立類似下列內容的陳述式:

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

您可以使用下列布林運算子:

  • 與 (&&)

  • 或者(

  • 不(!)

數量詞運算子

數量詞運算子會評估序列的項目,並判斷一或多個項目是否滿足條件。

  • 包含 — 確定指定的值是否包含在多值插槽中,如果是,則傳回 true。例如,如果用戶在他們的比薩餅上訂購了菠蘿,則{toppings} CONTAINS "pineapple"返回 true。

函數

函數必須加上字串fn.的前綴。該函數的參數是一個插槽,會話屬性,或請求屬性的引用。Amazon Lex V2 提供兩種功能,可從插槽、工作階段屬性或要求屬性的值取得資訊。

  • Fn.count () — 計算多值插槽中的值數目。

    例如,如果插槽{toppings}包含值「意大利辣香腸,菠蘿」:

    fn.COUNT({toppings}) = 2

  • Fn.is_set () — 如果在目前工作階段中設定插槽、工作階段屬性或要求屬性,則值為 true。

    根據前面的例子:

    fn.IS_SET({toppings})

  • fn.length ()-value 是在當前會話中設置的會話屬性,插槽值或插槽屬性的值的長度。此功能不支援多值插槽或複合插槽。

    範例:

    如果插槽{credit-card-number}包含值「123456781234」:

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

條件運算式範例

以下是一些條件運算式範例。注意:$.代表 Amazon Lex JSON 響應的入口點。下列值$.將在 Amazon Lex 回應中進行剖析,以擷取值。只有在支援 ASR 轉錄分數的相同語言環境中,才支援使用對 Amazon Lex 回應中轉錄區塊的 JSON 路徑參照的條件運算式。

值類型 使用案例 條件運算式
自定義插槽 pizzaSize插槽值等於大 {pizzaSize} = "large"
自定義插槽 pizzaSize等於大或中 {pizzaSize} = "large"{pizzaSize} = "medium"
自定義插槽 使用()和的表達式 AND/OR {pizzaType} = "pepperoni"{pizzaSize} = "medium"{pizzaSize} = "small"
自訂插槽 (多值插槽) 檢查其中一個澆頭是否是洋蔥 {toppings} CONTAINS "Onion"
自訂插槽 (多值插槽) 澆頭數量超過 3 fn.COUNT({topping}) > 2
AMAZON.AlphaNumeric bookingID是 ABC123 {bookingID} = "ABC123"
AMAZON.Number 年齡插槽值大於 30 {age} > 30
AMAZON.Number 年齡插槽值等於 10 {age} = 10
AMAZON.Date dateOfBirth1990 年之前的插槽值 {dateOfBirth} < "1990-10-01"
AMAZON.State destinationState插槽值等於華盛頓 {destinationState} = "washington"
AMAZON.Country destinationCountry插槽值不是美國 {destinationCountry} != "united states"
AMAZON.FirstName firstName插槽值是約翰 {firstName} = "John"
AMAZON.PhoneNumber phoneNumber插槽的值是 716767891932 {phoneNumer} = 716767891932
AMAZON.Percentage 檢查插槽百分比值是否大於或等於 78 {percentage} >= 78
AMAZON.EmailAddress emailAddress插槽值為 userA@hmail.com {emailAddress} = "userA@hmail.com"
AMAZON.LastName lastName插槽值是 Doe {lastName} = "Doe"
AMAZON.City 城市插槽值等於西雅圖 {city} = "Seattle"
AMAZON.Time 時間是晚上 8 點以後 {time} > "20:00"
AMAZON.StreetName streetName插槽值是博仁大道 {streetName} = "boren avenue"
AMAZON.Duration travelDuration插槽值小於 2 小時 {travelDuration} < P2H
輸入模式 輸入模式為語音 $.inputMode = "Speech"
輸入成績單 輸入成績單等於「我想要一個大披薩」 $.inputTranscript = "I want a large pizza"
階段屬性 檢查客戶訂閱類型屬性 [customer_subcription_type] = "yearly"
請求屬性 檢查已啟用重新嘗試的旗標 ((retry_enabled)) = "TRUE"
Kendra 回應 Kendra 響應包含常見問題 fn.IS_SET(((x-amz-lex:kendra-search-response-question_answer-question-1)))
帶有轉錄的條件表達式 使用轉錄 JSON 路徑的條件運算式 $.transcriptions[0].transcriptionConfidence < 0.8 AND $.transcriptions[1].transcriptionConfidence > 0.5
設定階段屬性 使用轉錄 JSON 路徑和插槽值設置會話屬性 [sessionAttribute] = "$.transcriptions..." AND [sessionAttribute] = "{<slotName>}"
設定插槽值 使用會話屬性和轉錄 JSON 路徑設置插槽值 {slotName} = [<sessionAttribute>] AND {slotName} = "$.transcriptions..."
注意

slotName指的是 Amazon Lex 機器人中插槽的名稱。如果插槽未解析 (null),或插槽不存在,則會在執行時間忽略指派。 sessionAttribute指的是由客戶在構建時設置的會話屬性的名稱。