Partilhar via


Expressões adaptativas

APLICA-SE A: SDK v4

Os bots usam expressões adaptativas para avaliar o resultado de uma condição com base nas informações de execução disponíveis na memória do diálogo ou do sistema de geração de linguagem. Essas avaliações determinam como o bot reage à entrada do usuário e outros fatores que afetam a funcionalidade do bot.

As expressões adaptáveis atendem a essa necessidade central 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, diálogos adaptáveis e modelos Adaptive Cards.

Uma expressão adaptável pode conter um ou mais valores explícitos, funções pré-criadas ou funções personalizadas. Os consumidores de expressões adaptáveis também têm a capacidade de injetar funções adicionais suportadas. 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 dentro do uso de expressões adaptáveis desse componente.

Operadores

As expressões adaptáveis suportam os seguintes tipos de operador e sintaxe de expressão:

  • aritmética
  • comparação
  • lógica
  • Sintaxe de operadores e expressões adicionais
Operador Funcionalidade Equivalente de função pré-definida
+ Adição. Exemplo: A + B adicionar
- Subtração. Exemplo: A - B sub
unário + Valor positivo. Exemplo: +1, +A N/A
unário - Valor negativo. Exemplo: -2, -B N/A
* 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 seu nome no formato ${myVariable}. Eles podem ser referenciados pelo operador seletor de propriedades na forma de myParent.myVariable ou pelo operador de seleção de índice do item, como em myParent.myList[0], ou pela função getProperty().

Existem 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 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 pré-criadas .

Compositor do Bot Framework

Bot Framework Composer é uma tela de autoria visual de código aberto 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 adaptativa.

A expressão (dialog.orderTotal + dialog.orderTax) > 50 adiciona os valores das propriedades dialog.orderTotal e dialog.orderTax, e avalia True se a soma é maior que 50 ou False se a soma é 50 ou menos.

Leia Fluxo de conversação e memória para obter mais informações sobre como as expressões são usadas na memória.

Geração linguística

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 todos os valores na recentTasks 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é-definida em variações do artigo de formato de arquivo .lg para mais informações.

Criação de modelos de cartões adaptáveis

A modelagem de Adaptive Cards pode ser usada por desenvolvedores de bots e outras tecnologias para separar dados do layout em um Adaptive Card. Os desenvolvedores podem fornecer dados em linha com a AdaptiveCard carga útil ou a 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 por JSON. Para acessar os valores dentro da cadeia de caracteres, a função pré-construída 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 modelos de cartões adaptáveis.

Recursos adicionais