Integrando LUIS.ai a Microsoft Bot Framework

👾Tutorial de Microsoft Bot Framework + LUIS.ai 💖

En un articulo anterior conocimos el Microsoft Bot Framework, y creamos un bot muy básico usando la plantilla básica de Bot Framework y conocimos el Bot Framework Emulator para probar nuestro Bot. En este post le daremos Inteligencia a nuestro Bot, para ello haremos usa de los servicios cognitivos de Microsoft.

Microsoft Cognitive Services es una colección de APIs inteligentes que permiten integrar servicios de visión, análisis de texto, reconocimiento de voz, detección de emociones y más servicios en aplicaciones de cualquier tipo (web, escritorio, móvil, etc). Una de las ventajas es que cuenta con un plan gratuito que te permitirá utilizar el servicio en tu aplicación sin problemas.

Antes de continuar debemos aclarar lo siguiente:

¿Qué es un sistema cognitivo? 
Es un sistema que comprende datos no estructurados, razona sobre esos datos y aprende de cada interacción.

Para este blog post vamos a usar de demo la API Language Understanding Intelligent Service (LUIS) la cual permite entender contextualmente el lenguaje, por lo que su aplicación se comunica con la gente en su forma de hablar.

Creando un servicio cognitivo de LUIS

Hay 2 formas de crear un servicio cognitivo usando LUIS, la primera es crear una cuenta en LUIS.ai y la segunda es contar con una suscripción de Azure, para este post usaremos la primera opción, para ello como primer requisito es contar con una cuenta en Outlook o Live/Hotmail, esto debido a que usaremos los servicios de Microsoft, así que comencemos.

  1. Ir a luis.ai y hacer log in.
Al crear una nueva cuenta en LUIS.ai se nos pedira hacer un tutorial para entender la plataforma

2. Una vez que entramos al dashboard con nuestras credenciales, procederemos a crear una nueva App.

3. En el popup, dale un nombre a la nueva App, elige la cultura/idioma y dale una descripción.

4. Una vez finalizado el proceso de creación de su nueva App, serás llevado a la página principal de tu nuevo modelo. Ahora pasaremos a entrenar a nuestro modelo de LUIS

Agregando Intents

Lo siguiente sera agregar 2 Intents a nuestra aplicación, siguiendo estos pasos.

  1. Da clic a Intents para navegar hacia la página de Intents, posteriormente hay que que darle clic al botón de agregar Intent, esto desplegará una ventana pidiendo el nombre para este nuevo Intent, para este demo le llamaremos “BookFlight”.
Sección de Intents, aquí se crean los nuevos Intents de la aplicación.

2. Una vez que lo hayamos creado el Intent, seremos enviado al control panel del Intent, donde podemos agregar las Utterances (declaraciones) , Entidades y sugerencias que usará nuestra Intent, por ejemplo vamos a escribir “ Book flight to Bologna” le daremos enter y esta se agregara a la lista de predicados de la Intent, le damos clic a Save para guardar y pasar a crear otro Intent al que llamaremos “GetWeather”. Podemos agregar los que necesitemos, para este demo he agregado unos más.

3. Para el Intent que llamaremos “GetWeather” , agregaremos la siguiente Utterance “How is the weather in Bologna”.

Definiendo Entidades Simples, Compuestas / Entidades Jerárquicas.

Para definir Entidades hay que definir la relación que habrá entre cada entidad, basado en el patrón de Entidades jerárquicas. La entidad genérica actúa como padre de la entidad y los hijos actúan como tipos específicos y subgrupos de este, compartiendo características entre ellos. Para el ejemplo vamos a crear una entidad llamada “Location”.

  1. Hay que dar clic a la pestaña de Entities y darle clic al botón “Add custom entity”.
Podemos crear nuestras entidades o usar entidades ya preconstruidas.

2. Para la entidad “Location” vamos a seleccionar una de tipo “Hierarchical”.

3. Agregaremos un Child, dando clic en “Add Child”. A este primer Child le llamaremos “ToLocation” .

4. Agregamos otro Child y a este le daremos como nombre “FromLocation”.

5. Una vez finalizado , le damos click a “Save”.

Usando Entidades pre construidas

Ya vimos como agregar una entidad genérica o propia, ahora es el turno de usar una ya creada o pre construida, para ello vamos a agregar una entidad datetime.

  1. Para agregar una entidad pre construida, damos click a “Add prebuilt entity”

2. Buscamos la entidad “datetime” en el listado de entidades y marcamos el checkbox.

3. Después le damos click en Guardar.

Entrando tu modelo

Recuerdan que en la sección de Intents agregamos una serie de mensajes en la sección de utterances, pues ahora que ya tenemos nuestro primer Intent y Entidad definida, podemos regresar al menú de Intent y entrar a nuestro Intent. Para este demo agregue algunos ejemplos más a BookFlight. Y para cada definición vamos a seleccionar el país desde donde salimos y el país destino, adicional si tenemos alguna fecha la podemos seleccionar, aunque algunas veces ya LUIS.ai reconoce el patron y manda a llamar a la entidad datetime que previamente se haya agregado.

Al final nuestra Intent tendrá las etiquetas correspondientes con las Entidades que se usaron para este, para la Intent “GetWeather” haremos lo mismo solo que no ocuparemos los hijos de la entidad “Location”.

Lo siguiente a realizar será ir a la sección “Train & Test” y dar clic al boton “Train Application” .

Al iniciar el entrenamiento la plataforma realizará una petición de este tipo, al terminar enviara un mensaje de que el entrenamiento fue exitoso.

Una vez finalizado el entrenamiento, damos clic en la sección “Publish App” , seleccionamos una Enpoint Key, en caso de no contar con una hay que crear una dando clic en la parte que dice “Add a new key to your account”.

Una vez publicado, se genera una URL única donde aparece tu Application ID y tu Subscription Key, estas las debes de mantener en algún lugar seguro, esta URL será la que usaremos posteriormente. Para la siguiente parte usaremos BotBuilder con sabor a NodeJS.

Conectando LUIS a NodeJs

Retomando el Bot básico del primer artículo , seguiremos los siguientes pasos:

  1. A nuestro `app.js` vamos a agregar el siguiente codigo

2. Ahora cuando ejecutemos nuestra aplicación, debemos agregar a las env vars la variable llamada `LUIS_MODEL` que tendrá como valor el endpoint generado cuando publicamos nuestra aplicacion en LUIS.ai

3. Asegurémonos que no existen diálogos, en dado caso que lo haya, los vamos a quitar y vamos a agregar los siguiente diálogos.

4. Es hora de ejecutar nuestro nuevo código

5. Por último abriremos Bot Emulator y probamos nuestro Bot. Cuando nosotros enviemos el mensaje relacionado a alguna de los Intents Bot Framework regresara a que Intent estamos invocando, en dado caso de que no haga match el mensaje con alguna Intent, recibiremos como respuesta la Intent “None”.

Con esto terminamos la integracion de LUIS.ai a Bot Framework, al final dejo una lista de recursos y referencias, recuerda compartir y dejar tus dudas en los comentarios.

Recursos Adicionales

Bot Framework Samples for Node and C#

Blog containing a master list of Bot Framework tutorials, samples and projects

Créditos

Créditos a los que escribieron el workshop original en C#:

  • Darren Jefford
  • Anthony Sadarangani
  • Travis Hilbert
Show your support

Clapping shows how much you appreciated Paul Arizpe’s story.