Expresiones adaptadas
SE APLICA A: SDK v4
Los bots usan expresiones adaptables para evaluar el resultado de una condición en función de la información en tiempo de ejecución disponible en la memoria para el cuadro de diálogo o el sistema de generación de lenguajes. Estas evaluaciones determinan el modo en que el bot reacciona a las entradas de usuario y otros factores que afectan a la funcionalidad del bot.
Las expresiones adaptables abordan esta necesidad principal proporcionando un lenguaje de expresiones adaptables que se puede usar con bot Framework SDK y otros componentes de inteligencia artificial conversacional, como Bot Framework Composer, Language Generation, cuadros de diálogo adaptables y plantillas de tarjetas adaptables.
Una expresión adaptable puede contener uno o varios valores explícitos, funciones precompiladas o funciones personalizadas. Los consumidores de expresiones adaptables también tienen la capacidad de insertar funciones compatibles adicionales. Por ejemplo, todas las plantillas de generación de lenguaje están disponibles como funciones, así como funciones adicionales que solo están disponibles en el uso de expresiones adaptables de ese componente.
Operadores
Las expresiones adaptables admiten los siguientes tipos de operador y sintaxis de expresiones:
- aritméticos
- de comparación
- lógicos
- otros operadores y sintaxis de expresiones
Operador | Funcionalidad | Función precompilada equivalente |
---|---|---|
+ | Suma. Ejemplo: A + B | agregar |
- | Resta. Ejemplo: A - B | sub |
unario + | Valor positivo. Ejemplo: +1, +A | N/D |
unario - | Valor negativo. Ejemplo: -2, -B | N/D |
* | Multiplicación. Ejemplo: A * B | mul |
/ | División. Ejemplo: A /B | div |
^ | Exponenciación. Ejemplo: A ^ B | exp |
% | Valor absoluto. Ejemplo: un % B | mod |
Variables
Siempre se hace referencia a las variables por su nombre en el formato ${myVariable}
. Se puede hacer referencia a ellas mediante el operador de selector de propiedad en forma de myParent.myVariable
, mediante el operador de selección de índice de elemento como en myParent.myList[0]
, o mediante la función getProperty().
Hay dos variables especiales. [] representa una lista vacía y {} representa un objeto vacío.
Valores explícitos
Los valores explícitos se pueden incluir entre comillas simples 'myExplicitValue' o dobles "myExplicitValue".
Funciones
Una expresión adaptable tiene una o varias funciones. Para obtener más información sobre las funciones admitidas por expresiones adaptables, consulte el artículo de referencia de funciones precompiladas.
Bot Framework Composer
Bot Framework Composer es un lienzo de creación visual de código abierto para que desarrolladores y equipos multidisciplinares puedan crear bots. Composer usa expresiones adaptables para crear, calcular y modificar valores. Las expresiones adaptables se pueden usar en definiciones de plantilla de generación de lenguaje y como propiedades en el lienzo de creación. Como se muestra en el ejemplo siguiente, las propiedades en memoria también se pueden usar en una expresión adaptable.
La expresión (dialog.orderTotal + dialog.orderTax) > 50
agrega los valores de las propiedades dialog.orderTotal
y dialog.orderTax
, y se evalúa True
como si la suma es mayor que 50 o False
si la suma es 50 o menor.
Lea Flujo de conversación y memoria para obtener más información sobre cómo se usan las expresiones en la memoria.
Generación de lenguaje
Los sistemas de generación de lenguajes (LG) usan expresiones adaptables para evaluar las condiciones descritas en plantillas LG. En el ejemplo siguiente, la función precompilada de combinación se usa para enumerar todos los valores de la recentTasks
colección.
# 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.
Lea la sección uso de la función precompilada en variantes del artículo formato de archivo .lg para obtener más información.
Plantillas de tarjetas adaptables
Los desarrolladores de bots y otras tecnologías pueden usar plantillas de tarjetas adaptables para separar los datos del diseño en una tarjeta adaptable. Los desarrolladores pueden proporcionar datos alineados con la AdaptiveCard
carga o el enfoque más común de separar los datos de la plantilla.
Por ejemplo, supongamos que tiene los datos siguientes:
{
"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"
}
La message
propiedad es una cadena serializada por JSON. Para acceder a los valores de la cadena, se puede llamar a la función precompilada json :
{
"type": "TextBlock",
"text": "${json(message).releaseName}"
}
Y dará como resultado el siguiente objeto:
{
"type": "TextBlock",
"text": "Release-104"
}
Para obtener más información y ejemplos, consulte la documentación sobre plantillas de tarjetas adaptables.
Recursos adicionales
- Paquete NuGet AdaptiveExpressions para C#
- Paquete de expresiones adaptables de npm para JavaScript
- Funciones precompiladas compatibles con la biblioteca de expresiones adaptables
- Referencia de api de C#
- Referencia de API de JavaScript