自适应表达式
适用于: SDK v4
机器人使用自适应表达式,根据内存对于对话或语言生成系统提供的运行时信息,来计算条件结果。 这些评估决定了机器人如何响应用户输入和其他影响机器人功能的因素。
自适应表达式通过提供可与 Bot Framework SDK 和其他对话 AI 组件(如 Bot Framework Composer、语言生成、自适应对话和自适应卡片模板化)一起使用的自适应表达式语言满足了这一核心需求。
自适应表达式可以包含一个或多个显式值、预生成函数或自定义函数。 自适应表达式的使用者还可以注入其他支持的函数。 例如,所有语言生成模板都可以作为函数使用,也可以作为附加函数使用,这些函数只在组件使用自适应表达式时可用。
运算符
自适应表达式支持以下运算符类型和表达式语法:
- 算术
- 比较
- 逻辑
- 其他运算符和表达式语法
操作员 | 功能 | 预生成函数等效项 |
---|---|---|
+ | 加。 示例:A + B | add |
- | 减。 示例:A - B | sub |
一元 + | 正值。 示例:+1, +A | 空值 |
一元 - | 负值。 示例:-2,-B | 空值 |
* | 乘。 示例:A * B | mul |
/ | 除。 示例:A / B | div |
^ | 幂。 示例:A ^ B | exp |
% | 取模。 示例:A % B | mod |
变量
变量始终按其名称以格式 ${myVariable}
引用。 它们可以通过 myParent.myVariable
形式(使用如 myParent.myList[0]
中的项目索引选择运算符)的属性选择器运算符或 getProperty() 函数进行引用。
有两个特殊变量。 [] 表示空列表,而 {} 表示空对象。
显式值
显式值可用单引号‘myExplicitValue’或双引号“myExplicitValue”括起来。
函数
自适应表达式有一个或多个函数。 有关自适应表达式支持的函数的详细信息,请参阅预生成函数参考文章。
Bot Framework Composer
Bot Framework Composer 是一个开源可视化创作画布,供开发人员和多学科团队构建机器人。 Composer 使用自适应表达式来创建、计算和修改值。 自适应表达式可在语言生成模板定义中使用,也可作为创作画布的属性使用。 如下例所示,内存中的属性也可以在自适应表达式中使用。
表达式 (dialog.orderTotal + dialog.orderTax) > 50
将属性 dialog.orderTotal
和 dialog.orderTax
的值相加,如果总和大于 50,则计算结果为 True
,如果总和小于 50,则计算结果为 False
。
有关如何在内存中使用表达式的详细信息,请参阅对话流和内存。
语言生成
语言生成 (LG) 系统使用自适应表达式来计算 LG 模板中描述的条件。 在下面的示例中,join 预生成函数用于列出 recentTasks
集合中的所有值。
# RecentTasks
- IF: ${count(recentTasks) == 1}
- Your most recent task is ${recentTasks[0]}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) == 2}
- Your most recent tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSEIF: ${count(recentTasks) > 2}
- Your most recent ${count(recentTasks)} tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task.
- ELSE:
- You don't have any tasks.
有关详细信息,请参阅 .lg 文件格式一文中的在变体中使用预生成函数部分。
自适应卡片模板化
通过使用自适应卡片模板化,机器人和其他技术的开发人员可以将数据从自适应卡片的布局中分离出来。 开发人员可以在 AdaptiveCard
有效负载中以内联方式提供数据,也可以采用更常见的方法,将数据与模板分离。
例如,假设有以下数据:
{
"id": "1291525457129548",
"status": 4,
"author": "Matt Hidinger",
"message": "{\"type\":\"Deployment\",\"buildId\":\"9542982\",\"releaseId\":\"129\",\"buildNumber\":\"20180504.3\",\"releaseName\":\"Release-104\",\"repoProvider\":\"GitHub\"}",
"start_time": "2018-05-04T18:05:33.3087147Z",
"end_time": "2018-05-04T18:05:33.3087147Z"
}
message
属性是一个 JSON 序列化字符串。 要访问字符串中的值,可以调用 json 预生成函数:
{
"type": "TextBlock",
"text": "${json(message).releaseName}"
}
将生成以下对象:
{
"type": "TextBlock",
"text": "Release-104"
}
有关详细信息和示例,请参阅自适应卡片模板化文档。
其他资源
- 适用于 C# 的 NuGet AdaptiveExpressions 包
- 适用于 JavaScript 的 npm adaptive-expressions 包
- 自适应表达式库支持的预生成函数
- C# API 参考
- JavaScript API 参考