本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
添加条件以构建对话的分支
您可以使用条件分支来控制客户与机器人的对话路径。您可以根据槽位值、会话属性、输入模式的内容和输入转录字段或来自 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
指客户在构建时设置的会话属性的名称。