Адаптивные выражения
ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4
Боты используют адаптивные выражения для оценки результата условия на основе сведений о среде выполнения, доступных в памяти для диалогового окна или системы создания языка. Эти вычисления позволяют выбрать реакцию бота на поступившие от пользователя данные с учетом других факторов, которые могут влиять на его функционирование.
Адаптивные выражения решают эту основную потребность, предоставляя язык адаптивных выражений, который можно использовать с пакетом SDK Bot Framework и другими компонентами ИИ для общения, такими как Bot Framework Composer, создание языка, адаптивные диалоги и шаблон адаптивных карточек.
Адаптивное выражение может содержать одно или несколько значений, встроенных функций или настраиваемых функций. Получателям адаптивных выражений также доступна возможность включать в них дополнительные поддерживаемые функции. Например, все шаблоны создания языков доступны как функции, а также дополнительные функции, доступные только в рамках использования адаптивных выражений этого компонента.
Операторы
Адаптивные выражения поддерживают следующие типы операторов и синтаксис выражений.
- Арифметические
- сравнение
- Логические
- другие операторы и синтаксис выражений
Оператор | Функция | Эквивалент встроенной функции |
---|---|---|
+ | Сложение. Пример: A + B | добавление |
- | Вычитание. Пример: A - B | sub |
Унарный + | Положительное значение. Пример: +1, +A | Н/П |
Унарный – | Отрицательное значение. Пример: -2, -B | Н/П |
* | Умножение. Пример: A * B | mul |
/ | Деление. Пример: A /B | div |
^ | Возведение в степень. Пример: A ^ B | exp |
% | Вычисление модуля. Пример: %B | mod (модуль) |
Переменные
Ссылки на переменные всегда содержат их имя в формате ${myVariable}
. На них можно ссылаться с помощью оператора выбора свойства вида myParent.myVariable
, оператора выбора индекса элемента (например, myParent.myList[0]
) или с помощью функции getProperty().
Существуют две специальные переменные. [] представляет пустой список, а {} представляет пустой объект.
Явные значения
Явные значения могут быть заключены в одинарные кавычки 'myExplicitValue' или двойные кавычки "myExplicitValue".
Функции
Адаптивное выражение имеет одну или несколько функций. Дополнительные сведения о функциях, поддерживаемых адаптивными выражениями, см. в справочной статье о предварительно созданных функциях .
Bot Framework Composer
Bot Framework Composer — это визуальный конструктор с открытым кодом для создания ботов, предназначенный для разработчиков и многопрофильных групп. Композитор использует адаптивные выражения для создания, вычисления и изменения значений. Адаптивные выражения можно использовать в определениях шаблонов создания языка и в качестве свойств на холсте разработки. Как показано в приведенном ниже примере, свойства в памяти также можно использовать в адаптивном выражении.
Выражение (dialog.orderTotal + dialog.orderTax) > 50
добавляет значения свойств dialog.orderTotal
и dialog.orderTax
вычисляет True
, если сумма больше 50 или False
меньше.
Дополнительные сведения о том, как выражения используются в памяти, см . в потоке беседы и памяти .
Генерирование речи
Адаптивные выражения используются системами создания языка (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-файла с помощью предварительно созданной функции.
Шаблон адаптивных карточек
Шаблон адаптивных карточек можно использовать разработчиками ботов и других технологий для разделения данных из макета в адаптивной карточке. Разработчики могут предоставлять данные вместе с 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"
}
Дополнительные сведения и примеры см. в документации по шаблону адаптивных карта.
Дополнительные ресурсы
- Пакет NuGet AdaptiveExpressions для C#.
- Пакет адаптивных выражений npm для JavaScript
- Предварительно созданные функции , поддерживаемые библиотекой адаптивных выражений
- Справочник по API C#
- Справочник по JavaScript API