你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

自适应表达式

适用于: 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
^ 幂。 示例:^ 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计算结果为 True :总和大于 50 或 False 等于 50 或更少。

阅读 会话流和内存 ,详细了解如何在内存中使用表达式。

语言生成

自适应表达式由语言生成 (LG) 系统用于评估 LG 模板中描述的条件。 在下面的示例中, 联接 预生成函数用于列出集合中的所有 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 文件格式文章变体部分中的 using prebuilt 函数。

自适应卡片模板化

机器人和其他技术的开发人员可以使用自适应卡片模板化 将数据与自适应卡片中的布局分开。 开发人员可以使用有效负载内联提供数据,或将数据与模板分离的更常见方法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"
}

有关详细信息和示例,请参阅自适应卡模板化文档

其他资源