Expressões adaptáveis
APLICA-SE A: SDK v4
Os bots usam expressões adaptáveis para avaliar o resultado de uma condição com base nas informações de tempo de execução disponíveis na memória para a caixa de diálogo ou o sistema de geração de linguagem. Essas avaliações determinam como o bot reage à entrada do usuário e a outros fatores que afetam a funcionalidade de bot.
As expressões adaptáveis atendem a essa necessidade principal fornecendo uma linguagem de expressão adaptável que pode ser usada com o SDK do Bot Framework e outros componentes de IA conversacional, como Bot Framework Composer, Language Generation, Adaptive dialogs e Adaptive Cards.
Uma expressão adaptável pode conter um ou mais valores explícitos, funções predefinidas ou funções personalizadas. Os consumidores de expressões adaptáveis também podem injetar funções adicionais compatíveis. Por exemplo, todos os modelos de geração de linguagem estão disponíveis como funções, bem como funções adicionais que só estão disponíveis no uso de expressões adaptáveis desse componente.
Operadores
As expressões adaptáveis dão suporte aos seguintes tipos de operadores e à seguinte sintaxe de expressão:
- aritmético
- comparação
- lógico
- Sintaxe de outros operadores e expressões
Operador | Funcionalidade | Equivalente da função predefinida |
---|---|---|
+ | Adição. Exemplo: A + B | add |
- | Subtração. Exemplo: A - B | sub |
unário + | Valor positivo. Exemplo: +1, +A | N/D |
unário - | Valor negativo. Exemplo: -2, -B | N/D |
* | Multiplicação. Exemplo: A * B | mul |
/ | Divisão. Exemplo: A / B | div |
^ | Exponenciação. Exemplo: A ^ B | exp |
% | Módulo. Exemplo: A % B | mod |
Variáveis
As variáveis são sempre referenciadas pelo nome no formato ${myVariable}
. Elas podem ser referenciadas pelo operador de seletor de propriedade na forma de myParent.myVariable
, usando o operador de seleção de índice de item, como em myParent.myList[0]
, ou pela função getProperty().
Há duas variáveis especiais. [] representa uma lista vazia e {} representa um objeto vazio.
Valores explícitos
Os valores explícitos podem ser colocados entre aspas simples 'myExplicitValue' ou entre aspas duplas "myExplicitValue".
Funções
Uma expressão adaptativa tem uma ou mais funções. Para obter mais informações sobre funções suportadas por expressões adaptáveis, consulte o artigo de referência de funções precriadas.
Bot Framework Composer
O Bot Framework Composer é uma tela de criação visual open-source para desenvolvedores e equipes multidisciplinares criarem bots. O Composer usa expressões adaptáveis para criar, calcular e modificar valores. As expressões adaptáveis podem ser usadas em definições de modelo de geração de linguagem e como propriedades na tela de criação. Como visto no exemplo abaixo, as propriedades na memória também podem ser usadas em uma expressão adaptável.
A expressão (dialog.orderTotal + dialog.orderTax) > 50
adiciona os valores das propriedades dialog.orderTotal
e , e dialog.orderTax
avalia se True
a soma é maior que 50 ou se a soma é 50 ou False
menos.
Geração de linguagem
As expressões adaptativas são usadas por sistemas de geração de linguagem (LG) para avaliar as condições descritas nos modelos LG. No exemplo abaixo, a função join prebuilt é usada para listar recentTasks
todos os valores na coleção.
# 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.
Leia a seção Usando a função pré-criada em variações do artigo Formato de arquivo .lg para obter mais informações.
Modelagem de cartões adaptáveis
A modelagem de Cartões Adaptáveis pode ser usada por desenvolvedores de bots e outras tecnologias para separar dados do layout em um Cartão Adaptável. Os desenvolvedores podem fornecer dados alinhados com a carga útil ou a AdaptiveCard
abordagem mais comum de separar os dados do modelo.
Por exemplo, digamos que você tenha os seguintes dados:
{
"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"
}
A message
propriedade é uma cadeia de caracteres serializada em JSON. Para acessar os valores dentro da cadeia de caracteres, a função pré-criada json pode ser chamada:
{
"type": "TextBlock",
"text": "${json(message).releaseName}"
}
E resultará no seguinte objeto:
{
"type": "TextBlock",
"text": "Release-104"
}
Para obter mais informações e exemplos, consulte a documentação de modelagem de cartões adaptáveis.
Recursos adicionais
- Pacote NuGet AdaptiveExpressions para C#
- pacote de expressões adaptativas npm para JavaScript
- Funções pré-criadas suportadas pela biblioteca de expressões adaptáveis
- Referência da API C#
- Referência de API JavaScript