添加条件以构建对话的分支 - Amazon Lex

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

添加条件以构建对话的分支

您可以使用条件分支来控制客户与机器人的对话路径。您可以根据槽位值、会话属性、输入模式的内容和输入转录字段或来自 Amazon Kendra 的响应来构建对话分支。

您可以定义最多 4 个分支。每个分支均设有条件,并且必须在满足该条件的情况下,Amazon Lex V2 才能采用该分支。如果所有分支的条件均不满足,则将采用默认分支。

定义分支时,您可以定义 Amazon Lex V2 在与该分支对应的条件评估为 true 时应执行的操作。您可以定义以下任一操作:

  • 发送给用户的回应。

  • 要应用于槽位的槽位值。

  • 当前会话的会话属性值。

  • 对话的下一步。有关更多信息,请参阅 创建对话路径

您可以为条件分支选择不同的选项。

每个条件分支均设有布尔表达式,并且必须在满足该布尔表达式的情况下,Amazon Lex V2 才能采用该分支。您可以使用比较运算符、布尔运算符、函数和量词运算符来处理您的条件。例如,如果 {age} 槽位小于 24,则以下条件返回 true。

{age} < 24

如果 {toppings} 多值槽位包含“pineapple”一词,则以下条件返回 true。

{toppings} CONTAINS "pineapple"

对于更复杂的条件,您可以将多个比较运算符与布尔运算符组合使用。例如,如果 {make} 槽位值为“Honda” 且 {model} 槽位值为“Civic”,则以下条件返回 true。使用圆括号设置评估顺序。

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

以下主题提供了关于条件分支运算符和函数的详细信息。

注意

Amazon Lex V2 于 2022 年 8 月 17 日发布了对用户对话管理方式的更改。借助此更改,您可以更好地控制用户的对话路径。有关更多信息,请参阅 Amazon Lex V2 中对话流程的变化。2022 年 8 月 17 日之前创建的机器人不支持对话框代码挂钩消息、设置值、配置后续步骤和添加条件。

比较运算符

Amazon Lex V2 支持以下条件比较运算符:

  • 等于 (=)

  • 不等于 (!=)

  • 小于 (<)

  • 小于等于 (<=)

  • 大于 (>)

  • 大于等于 (>=)

使用比较运算符时,将遵循以下规则。

  • 左侧必须是引用值。例如,要引用槽位值,请使用 {slotName}。要引用会话属性值,请使用 [attribute]。对于输入模式和输入转录,请使用 $.inputMode$.inputTranscript

  • 右侧必须为常数,且类型必须与左侧相同。

  • 系统将任何引用尚未设置的属性的表达式视为无效,并且不会对其求值。

  • 比较多值槽位时,使用的值是所有解释值的逗号分隔列表。

该等比较是基于引用值的槽位类型进行的,按照以下方式进行解析:

  • 字符串:根据字符串的 ASCII 表示进行比较。比较不区分大小写。

  • 数字:将基于数字的槽位从字符串表示形式转换为数字,然后进行比较。

  • 日期/时间:根据时间序列对基于时间的槽位进行比较。较早的日期或时间即视作较小。对于持续时间,较短的时间段即视为较小。

布尔运算符

Amazon Lex V2 支持使用布尔运算符来组合比较运算符。利用布尔运算符可创建类似以下内容的语句:

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

您还可以使用以下布尔运算符:

  • AND (&&)

  • OR (||)

  • NOT (!)

量词运算符

量词运算符评估序列中的元素并确定一个或多个元素是否满足条件。

  • CONTAINS:确定指定值是否被包含在多值槽位中,如果包含在多值槽位中,则返回 true。例如,如果用户要在订购的披萨上添加菠萝,则 {toppings} CONTAINS "pineapple" 将返回 true。

函数

函数必须以字符串 fn. 为前缀。该函数的参数是对槽位、会话属性或请求属性的引用。Amazon Lex V2 提供了用于从槽位值中获取信息的两个函数,即 sessionAttribute, 或 requestAttribute。

  • fn.COUNT():计算多值槽位中的值数量。

    例如,如果槽位 {toppings} 包含值“pepperoni, pineapple”:

    fn.COUNT({toppings}) = 2

  • fn.IS_SET():如果在当前会话中设置了槽位、会话属性或请求属性,则该值为 true。

    基于上一示例:

    fn.IS_SET({toppings})

  • fn.length () — 值是在当前会话中设置的会话属性、插槽值或插槽属性的值的长度。此功能不支持多值插槽或复合槽。

    例如:

    如果插槽中{credit-card-number}包含的值为 “123456781234”:

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

示例条件表达式

以下是一些示例条件表达式。注意:$. 表示 Amazon Lex JSON 响应的入口点。$. 之后的值将在检索该值的 Amazon Lex 响应中解析。只有支持 ASR 转录分数的相同区域才支持在 Amazon Lex 响应中使用对转录块的 JSON 路径引用的条件表达式。

值类型 应用场景 条件表达式
自定义槽位 pizzaSize 槽位值等于“large” {pizzaSize} = "large"
自定义槽位 pizzaSize 等于“large”或“medium” {pizzaSize} = "large" OR {pizzaSize} = "medium"
自定义槽位 带有()AND/OR 的表达式 {pizzaType} = "pepperoni" OR {pizzaSize} = "medium" OR {pizzaSize} = "small"
自定义槽位(多值槽位) 检查其中的一种配料是否是“Onion”(洋葱) {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 dateOfBirth 槽位值在 1990 年之前 {dateOfBirth} < "1990-10-01"
AMAZON.State destinationState 槽位值等于“Washington” {destinationState} = "washington"
AMAZON.Country destinationCountry 槽位值不是“United States” {destinationCountry} != "united states"
AMAZON.FirstName firstName 槽位值是“John” {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” {city} = "Seattle"
AMAZON.Time “Time”是晚上 8 点之后 {time} > "20:00"
AMAZON.StreetName streetName 槽位值是“Boren Avenue” {streetName} = "boren avenue"
AMAZON.Duration travelDuration 槽位值小于 2 小时 {travelDuration} < P2H
输入模式 输入模式为语音 $.inputMode = "Speech"
输入转录 输入转录等于“I want a large pizza” $.inputTranscript = "I want a large pizza"
会话属性 检查 customer_subscription_type 属性 [customer_subcription_type] = "yearly"
请求属性 检查 retry_enabled 标志 ((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 指客户在构建时设置的会话属性的名称。