3, 2, 1 ¡ACCIÓN! Saca las palomitas y programa un Bot experto en cine – Parte II
En la Parte I del Blog Desarrollé una API en Node.js que extrae información de las películas disponibles en Filmaffinity a partir de unos parámetros de entrada. Además, expliqué el proceso mediante el cual se puede desplegar la API de forma rápida y sencilla en IBM Cloud, que ayuda a llevar a cabo una metodología de DevOps basada en desplegar con alta frecuencia pequeños incrementos de software.
Hoy quiero explicar cómo he creado el bot de cine de Slack: @cognitive_film_bot con el que el usuario puede interactuar para preguntar información acerca de una película concreta y este le devuelva la información requerida (i.e. Título original, año, duración, calificación, director, sinopsis, guión, género, etc).
Para desarrollar @cognitive_film_bot he utilizado:
- El servicio de Watson Conversation (IBM Cloud)
- El middleware botkit-middleware-watson (Github)
- El servicio de Watson Natural Language Classifier (IBM Cloud)
- El servicio de Watson Knowledge Studio (IBM Cloud)
Watson Conversation (IBM Cloud)
El servicio conversation permite a las aplicaciones añadir una interfaz de lenguaje natural y automatizar la interacción con el usuario. En el desarrollo de @cognitive_film_bot, lo he utilizado para crear el flujo de conversación natural entre el bot y los usuarios siguiendo los siguientes pasos.
Paso 1: Iniciar la herramienta
- Crear una instancia del servicio en: https://console.bluemix.net/catalog/services/conversation
- Ir al panel de control de la instancia e iniciar la herramienta Conversation.
Paso 2: Crear un espacio de trabajo
- En la herramienta de Conversación pulsar Crear.
- Asignar un nombre al espacio de trabajo (i.e. watson_film_bot)
- En los detalles del espacio de trabajo se puede visualizar Workspace ID que será necesario para conectar la aplicación a dicho espacio de trabajo.
Paso 3: Crear las intenciones
Una intención representa la acción que pueden desear llevar a cabo los usuarios con la aplicación.
Para @congitive_film_bot he definido solo dos intenciones: una para saludar al bot y otra para preguntar al bot información acerca de una película.
Para la intención #película he definido distintos ejemplos de entrada del usuario.
Paso 3: Crear un diálogo
Un diálogo define el flujo de la conversación en forma de árbol lógico. Cada nodo del árbol tiene una condición que lo activa, en función de la entrada de usuario.
El diálogo de @cognitive_film_bot es muy sencillo y consta de los siguientes nodos.
- Lista de películas: se activa cuando se ha presentado al usuario una lista de películas que coincide con su consulta (i.e. La aplicación activa la correspondiente variable de contexto cuando quiere ejecutar este nodo). El nodo espera a que el usuario seleccione una de las películas de la lista y continuación ejecuta a la acción de la aplicación que consulta la API de Filmaffinity /api/film/byId.
- Saludo: se activa cuando salta la intención #hello correspondiente a un saludo del usuario. Sirve para inicializar la aplicación y el valor de las variables de contexto.
- Película: se activa cuando salta la intención #película correspondiente a una consulta acerca de una película por parte del usuario. Ejecuta la acción de la aplicación que consulta la API de Filmaffinity /api/film/byTitle.
- Información Película: se activa al haberse activado la correspondiente variable de contexto al haberse encontrado información de la película solicitada. Espera a que el usuario especifique que información desea saber de la película y a continuación le da la información requerida.
Integración con slack: botkit-middleware-watson
Para la integración de @cognitive_film_bot y Slack he utilizado el middleware botkit-middleware-watson disponible en Github. El middleware con Botkit, permite integrar de forma sencilla el espacio de trabajo de Watson conversation con diferentes canales: Slack, Facebook, y Twilio.
Para que pueda llevarse a cabo la integración con slack, es necesario crear un usuario bot según las instrucciones proporcionadas por Slack: https://api.slack.com/bot-users. Una vez creado el bot hay que utilizar el Token generado en la aplicación con la que se quiere integrar.
Natural Language Understanding – IBM Cloud
El servicio Natural Language Classifier de IBM Cloud analiza un texto para extraer metadatos de contenido como por ejemplo conceptos, entidades, palabras clave, categorías, sentimiento, relaciones y roles.
En @cognitive_film_bot se necesita para extraer de la consulta del usuario la entidad referente a la película sobre la que desea saber información.
He seguido los siguientes pasos para poder extraer la entidad película a partir de un texto de entrada.
Paso 1: Iniciar la herramienta
Crear una instancia del servicio en: https://console.bluemix.net/catalog/services/natural-language-classifier
Paso 2: Creación de un modelo customizado con IBM Knowledge studio
He generado un modelo personalizado mediante IBM Knowledge Studio y así poder identificar la entidad película dentro de un texto.
Paso 3: Llamada a la API de Natural Lenguaje Understanding
Un ejemplo de la llamada a la API de Natural Language Classifier que ejecuta la aplicación cuando identifica la intención #película es:
Donde:
Como se observa en la respuesta de la consulta se ha identificado “Avatar” como entidad película:
¡Cognitive Film bot en Acción!
Una vez terminada la aplicación, se puede iniciar una conversación con el bot para solicitar información de cualquier película.
Ejemplos de consulta:
- Dame información de la película El Padrino
- Dime info de la película Avatar
- Peli info El silencio de los corderos
El proyecto está disponible en GitHub. Prueba cognitive_film_bot añadiéndolo a tu espacio de trabajo.
La API de FilmAffinity esta desplegada en IBM Cloud.
¿Quieres saber más? ¡Echa un vistazo a la web para desarrolladores!
Crea tu cuenta IBM Cloud Lite sin tarjeta de crédito y sin tiempo limitado.