Integración de LUIS y QnA Maker con Bot Framework V3

Yudner Tayson Paredes Flores
My Bots Latam
Published in
7 min readNov 12, 2018

En el tiempo que llevo compartiendo material acerca de desarrollo de Bots con tecnología Microsoft, uno de los principales pedidos ha sido: integrar los servicios cognitivos LUIS y QnA Maker con Bot Framework; y bueno, me tomé el tiempo de preparar este material. 😄 así que ………go go go 🔋 🔋 🔋

Crear un proyecto Bot Application

File> New> Project> Bot Application

Actualizar Microsoft.Bot.Builder

💣 💣 Importante…!!

Para integrar LUIS y QnA Maker en la misma aplicación, necesariamente tenemos que consumir QnA Maker como un servicio REST.
¿Y cómo lo hago ⛔ ⛔ ⛔……?
Aquí puedes ver el paso a paso de su implementación. Y al final quedará como en la siguiente imagen. 👇

Ya que tenemos listo el servicio QnA Maker, dediquémonos a LUIS. En la carpeta Dialogs, modificamos la clase “RootDialog”.
1. Eliminamos el contenido de la clase “RootDialog”
2. Cambiamos IDialog<object> por LuisDialog<string>
3. Agregamos LuisModel para la integración con LUIS, y como parámetro ingresamos:

modelID: Es el ID de la aplicación creada en el portal de LUIS.

subscriptionKey: Es la clave de suscripción del servicio cognitivo LUIS, obtenido desde el portal de Azure.

domain: Es el dominio o región donde se aloja el servicio LUIS.

threshold: Es la probabilidad de certeza de la frase ingresada por el usuario frente a una intención de LUIS, recomendado 0.5 (50%).

Y quedará como la imagen. 👇
modelID, subscriptionKey y domain lo obtendremos desde el portal LUIS y desde el portal Azure, que veremos más adelante”

Crear y configurar el servicio LUIS en el Portal Azure

  • En nuestro grupo de recursos, selección a la opción “Add”.
  • En el buscador agregamos “LUIS”, seleccionamos el servicio Language Understanding y seleccionamos “create”.
  • Ingresamos los campos necesario y creamos el servicio.

Crear una aplicación en el Portal LUIS

  • Accedemos a luis.ai
  • En “My apps”, creamos una nueva aplicación “Create new app”
  • Ingresamos los campos: Nombre, Cultura, opcionalmente una descripción y damos en “Done”

Una vez dentro de la aplicación creada, observaremos por defecto la intención “None”, es la intención que manejará el Bot cuando no entienda una palabra o frase.
Accedemos a la opción “MANAGE”. 👇

Luego vamos a la opción “Keys and Endpoints” para configurar la aplicación con el servicio LUIS que se creó en el Portal Azure.

Asignamos el recurso LUIS de Azure con la opción “+Assign resource”
- Seleccionamos nuestro directorio.
- Seleccionamos nuestra suscripción.
- Seleccionamos el servicio LUIS creado en Azure y finalmente en la opción “Assign resource”

Finalmente quedará integrado el servicio LUIS de Azure y la aplicación creada. 👇

Crear Intenciones

Crearemos dos intenciones “Saludos” y “CentroContacto”.
-
Click en la opción “Create new intent”

Creamos la intención “Saludos”, es una intención bastante básica con el objetivo de reconocer frases del contexto saludar.

Alimentamos la intención “Saludos” con frases de tipo Saludos.

Creamos la intención “CentroContacto”, es una intención para mostrar el número de contacto de la empresa a la que pertenece el Bot.

Alimentamos la intención “CentroContacto” con frases que manejen un contexto de querer comunicare con el centro de contacto de la empresa.

💣 💣 💣 Importante!!
El núcleo principal de la integración entre LUIS y QnA Maker es saber que el Bot manejará dos fuentes de conocimientos.
1. Frases o preguntas entrenadas en el Portal LUIS.
2. Frases o preguntas entrenadas en la base de conocimiento de QnA Maker.

El comportamiento del Bot frente a una consulta o pregunta del usuario debe ser:
Primero:
Consultar al servicio LUIS.
Si no entiende (Intención None)…
Segundo: Consultar al servicio QnA Maker
Si no entiende…. Mostrar un mensaje personalizado indicando que el Bot no entiende la consulta del usuario.

Para que el servicio LUIS rechace frases que no estén en su fuente de conocimiento, hay que entrenar en la intención “None”. En base a eso, las preguntas registradas en QnA Maker tienen que estar registradas en la intención “None” de LUIS para que las rechace y luego vaya a consultar a QnA Maker. Tal cual se muestra en la siguiente imagen. 👇

Base de conocimiento QnA Maker
Entrenamiento de la frases de QnA Maker en la intención “None” de LUIS.

Entrenamiento y Publicación de la aplicación LUIS

Copiar las credenciales en código fuente

En la opción “MANAGE”, copiamos Application ID, que es el modelID en código fuente.

En el servicio LUIS del Portal Azure, seleccionamos la opción “Keys” y copiamos la “KEY 1” y pegamos en subscriptionKey del código. 👇

En el servicio LUIS del Portal Azure, seleccionamos la opción “Quick start” y copiamos el “endpoint” y pegamos en el código. 👇

Agregar las intenciones en código fuente

Agregamos las intenciones creadas en el Portal LUIS:
- None
- Saludos
- CentroContacto

Agregamos su respectiva respuesta para las intenciones: Saludos y CentroContacto.

La intención None es invocada cuando el servicio LUIS no tiene respuesta alguna, es ahí cuando se dice que el Bot no entiende la palabra o frase del usuario. En base a esto, crearemos un método para para consumir el servicio REST de QnA Maker y obtener información de su base de conocimiento.

Creamos el método “QnaMakerMessage”, instanciamos el servicio creado anteriormente para consumir y recibir una respuesta.
Condicionamos que, si retorna una respuesta inválida, mostramos una respuesta personalizada indicando que el Bot no puede entender la solicitud del usuario, en caso contrario mostramos la respuesta que devuelve el servicio QnA Maker. 👇

Y el método “QnaMakerMessage” será llamado en la intención “None” que pasará por parámetro la consulta o frase del usuario, obtenidas desde result.Query 👇

Probar en el Emulador Bot Framework

Y finalmente verificamos la respuesta en la base de conocimiento de QnA Maker.

Código fuente: https://github.com/Yudner/ChatBotDeveloper (Ejemplo 10)

Vídeo del desarrollo: https://www.youtube.com/watch?v=lmhIENAseIM&list=PL4QAOIojsrfAnLP2LuAh0FWG4D7QqJu06&index=14

Documentación LUIS: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis

Documentación QnA Maker: https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview

--

--

Yudner Tayson Paredes Flores
My Bots Latam

Software Developer 💻 | Cognitive Services Specialist 🚀 | Soccer⚽ | Game 🎮