编写表达式
您可以编写 表达式 以指定独立于或派生自步骤中收集的值或存储在会话变量中的值的值。 可以使用表达式来定义步骤条件或定义会话变量的值。
在步骤条件中使用表达式
如果要根据在对话期间收集的信息对计算结果上的步骤进行条件,那么可以在步骤条件中使用表达式。
例如,假设某个客户的储蓄账户中有 200 美元,并想将 150 美元转入新的支票账户。 资金转帐费用为 3 美元,并且储蓄帐户中的余额少于 50 美元时,银行会收取相应费用。 您可以创建具有用于检查此情境的步骤条件的步骤。 步骤条件将使用类似如下的表达式:
${savings} - (${Step_232} + ${transfer_fee}) < 50
其中:
${savings}
表示用于存储客户储蓄帐户总额的会话变量。${Step_232}
表示询问客户希望转帐的金额的步骤。${transfer_fee}
表示用于指定资金转帐费用的会话变量。
如果满足步骤条件,那么步骤会警告用户,所请求的转移将使储蓄帐户余额低于最低 50 美元并产生费用,并要求在继续之前进行确认。
要在步骤条件中使用表达式,请执行以下步骤:
-
在步骤中,单击添加条件。
这将使用最可能的选项自动生成条件,这通常是在上一步中设置的任何变量。
-
单击所生成条件的第一个分段,然后向下滚动并单击表达式。
-
可选: 单击
展开 图标以打开表达式编辑器窗口。 (您还可以在不打开窗口的情况下直接在字段中输入表达式,但编辑器使编辑更长或更复杂的表达式变得更容易。)
-
键入要使用的表达式。
使用表达式为会话变量赋值
如果您希望根据其他变量计算变量的值,那么可以在向会话变量赋值时使用表达式。
例如,假设您想告诉客户购买的总成本,包括 6% 的销售税和统一的 $3.00 手续费。 要计算总成本,可以创建会话变量并使用表达式指定值:
(${price} * 1.06) + 3
然后,可以在 助手说 字段中引用此变量。
要在向会话变量赋值时使用表达式,请执行以下步骤:
-
在步骤中,单击 设置变量值。
-
单击设置新值。
-
从下拉列表中,选择要在其中存储值的会话变量。
-
在 到之后,选择 表达式。
-
输入您想要使用的表达式。
-
如果您正在使用表达式编辑器,请单击 应用 以保存更改并关闭编辑器窗口。
您还可以使用表达式将初始值赋给会话变量。 在“会话变量”窗口中,转至 初始值 字段,然后单击 使用表达式。
您还可以直接编写表达式,而无需首先选取变量:
-
在步骤中,单击 设置变量值。
-
单击设置新值。
-
从下拉列表中,选择 表达式。
-
输入您想要使用的表达式。
-
如果您正在使用表达式编辑器,请单击 应用 以保存更改并关闭编辑器窗口。
表达式语法
watsonx Assistant 表达式语言基于 Spring 表达式语言 (SpEL),但在语法上存在一些重要差异。 有关详细背景信息SpEL,看 Spring 表达语言(SpEL)。
变量
要在表达式中引用变量,请输入美元符号 ($
),然后从列表中选择变量。 引用将以正确的表示法插入到表达式中,并使用变量的变量标识而不是其显示名称 (例如,${step_773}
或 ${customer_id}
) 来引用该变量。 除非要引用其他变量并且确定其变量标识,否则请勿编辑此引用。
要在自定义客户端应用程序中引用用户定义的操作或会话变量,请使用保留关键字前缀 user_defined_
。 例如,使用 ${user_defined_my_context_var}
获取价值 my_context_var
由您的客户设置。 有关定制客户端的更多信息,请参阅 定制客户端。
标准数学
对于数字值,可以使用表达式来执行数学计算。 对于基本算术,可以使用标准运算符 (+
,-
,*
和 /
)。
您还可以使用方法来执行其他数学运算。 有关更多信息,请参阅 操作的表达式语言方法。
数组
要定义数组值,请使用方括号输入值,并使用逗号分隔各个项 (例如,[ "one", "two", "three" ]
)。
要引用数组中的项,请使用括号表示法并指定数组中项的基于零的索引。例如,${Items}[0]
表示数组中的第一个项 Items
。
您还可以使用数组方法 get()
从数组中检索项。 有关更多信息,请参阅 操作的表达式语言方法。
JSON 对象
使用 JSON 表示法来定义表达式中的复合对象。 例如,以下表达式将复杂 JSON 对象指定为变量的值:
{
"name": {
"firstname": "John",
"lastname": "Doe"
},
"age": 36
}
您可以在 JSON 中使用变量和标准数学来创建在运行时计算的动态对象。 例如,以下表达式定义了引用变量并计算平均值的 JSON 对象:
{
"temp_1": ${temp_1},
"temp_2": ${temp_2},
"avg_temp": (${temp_1} + ${temp_2}) / 2
}
要引用 JSON 值中包含的子对象,请使用点表示法来表示该对象的路径 (例如,${customer}.name.lastname
)。
如果需要引用可能定义或可能未定义的对象的子代,请使用安全导航运算符 (?
)。例如,如果 customer.name
为 null
,那么表达式 ${customer}.name?.lastname
将求值为 null
。 (如果没有安全的导航操作程序,将会产生错误。)
方法
使用表达式语言方法来处理值 (例如,格式化字符串或将项附加到数组)。 有关每种数据类型支持的方法的更多信息,请参阅 操作的表达式语言方法。