Si has llegado a este post sobre el desarrollo de Banquito, un bot conversacional con Inteligencia Artificial, es que seguramente ya has leído este otro post de cómo diseñar un chatbot utilizando IBM Watson.

En caso de no haber leído ese post en el que definimos el alcance del bot, ¡te recomiendo que empieces por ahí! En este post, comparto el PASO a PASO de cómo desarrollar un chatbot con IA. Aunque podría haber utilizado cualquier sistema de inteligencia artificial y procesamiento del lenguaje natural, he utilizado IBM Watson.

Vayamos al grano: configurando Watson

Lo primero que haremos en Watson es crear un workspace para el proyecto. Lo titulo “Banquito — Mi Bot de Banca”.

Desarrollo bot conversacional - Creando un Workspace en IBM Watson
Desarrollo bot conversacional – Creando un Workspace en IBM Watson

Posteriormente creamos las intenciones que ha de reconocer nuestro bot (en el otro artículo, tienes la explicación de los conceptos que utilizaremos en este artículo, así como un esbozo del diseño funcional del bot, que es lo que ahora voy a implementar). En este caso, para demostrar cómo va fallando el bot y cómo lo solucionamos entrenándolo de más contenido, crearé las intenciones una a una, e iré entrenándolas poco a poco.

Desarrollo bot conversacional con IBM Waton — Damos de alta una intención

A continuación, creo la intención de Consultar Saldo (#ConsultarSaldo), para ello tendremos que definir las formas en las que un cliente nos puede decir que quiere consultar su saldo.

Desarrollo bot conversacional con IBM Watson — Entrenando la primera intención

Como queremos probar que el bot reconoce esta intención cuando le hablo, me voy a la pestaña diálogo:

Desarrollo bot conversacional con IBM Waton — Pestaña de Diálogo

Como observamos, ya vienen dos nodos genéricos preestablecidos, uno de bienvenida y otro “anything_else” que saltará cuando el bot no es capaz de seguir la conversación.

Desarrollo bot conversacional con IBM Watson — Nodos por defecto

Antes de dar de alta el nodo de la intención #ConsultarSaldo, vamos a modificar las respuestas que vienen por defecto en el nodo de “Bienvenida”. Aprovecharemos ese mensaje de “Bienvenida” que damos al cliente cuando empezamos la conversación para saludar y explicarle qué es capaz de hacer nuestro bot, y así, sentar las expectativas de nuestro cliente.

Desarrollo bot conversacional con IBM Watson— Dando de alta respuestas

Además de adaptar las respuestas de estos dos nodos que traen los sistemas de IA por defecto a nuestro caso de uso, también es una buena práctica crear otros nodos por cada #intención_básica. Es decir, podremos crear, o incluso exportar, intenciones básicas como: dar las gracias, solicitar ayuda, preguntas sobre quién eres, etc. En este ejemplo, no lo abordaremos, pero es algo sencillo.

Poniendo a prueba el bot conversacional desde el minuto 0

En la pestaña diálogo podemos abrir un emulador, para ir probando on the fly el funcionamiento del bot que tenemos desarrollado. Es decir, puedo ir comprobando conforme hago el desarrollo si el bot es capaz de identificar intenciones, entidades, y lanzarnos las preguntas definidas. Al abrirlo, vemos en la parte derecha “Try it out” como al comenzar el bot en Watson, nos devuelve uno de los textos que acabamos de definir.

Por cierto, como se veía en la imagen superior y se ve en la siguiente, se puede definir más de una respuesta, para que de forma secuencial o aleatoria, el bot vaya dando uno u otro mensaje. En este ejemplo, he puesto dos formas de contestar 😊

Desarrollo bot conversacional con IBM Watson— Probando el bot

Ahora en serio, pongamos a prueba el bot

¿Qué pasa si le decimos “consultar mis movimientos”? Ya hemos definido la intención #ConsultarSaldo, ¿qué mensaje me va a devolver? Salgamos de dudas:

Desarrollo bot conversacional con IBM Watson —Probando nuestra primera intención

Como se ve en el ejemplo, si bien te identifica la intención, te devuelve la respuesta predeterminada del nodo “anything_else”¿Por qué ocurre esto? Sencillo, no hemos definido un nodo en el que le digamos que ejecute una determinada acción cuando identifique el intent #ConsultarSaldo. Así que, vamos a ello:

  1. Definimos un nuevo nodo que no depende de ningún otro,
  2. Le damos un nombre, le ponemos la condición de identificar la intención #ConsultarSaldo y le programamos una respuesta para probar que funciona, y
  3. Probamos en el diálogo, para verificar que ahora sí que funciona.

Desarrollo bot conversacional con IBM Watson — Banquito ya entiende nuestra primera intención

Definamos una nueva intención: “Sacar Dinero”

Ahora paso a definir la nueva intención #SacarDinero. Antes de hacerlo, pruebo a decirle a nuestro bot que queremos sacar dinero. ¿Qué resultados puedo esperar? Nos podrá decir que no nos entiende o vincularlo al #intent que sí conoce (#ConsultarSaldo). En este caso, no nos reconoce qué queremos decir:

Desarrollo bot conversacional con IBM Watson — Creando la nueva intención “Sacar Dinero”

Una vez comprobado que el bot no me entiende (el punto 1 de la imagen superior), paso a definir el nuevo intent #SacarDinero pero tan solo doy de alta 3 formas de que el usuario nos pueda indicar que quiere sacar dinero. Esto lo hago para comprobar más adelante, cómo podemos entrenar al bot una vez le hemos definido el intent.

Tras definir el nuevo # intent, generamos un nuevo nodo (en la pestaña Dialog) para definir qué queremos hacer cuando Watson identifique que el cliente quiere sacar dinero. He generado una respuesta de comprobación, para chequear que Watson está interpretando una de los casos con los que le hemos entrenado para este nuevo intent.

Desarrollo bot conversacional con IBM Watson — Probando un nuevo intent y nodo de diálogo

¿Qué pasa si le indicamos al bot una frase con la que aún no le hemos entrenado?

Imagina que en lugar de una frase relacionada con “sacar dinero” que era algo para lo que habíamos entrenado a Watson, le decimos “buscar cajero”. En este caso, como no hemos dado de alta “buscar cajero” como una alternativa de sugerir que el cliente tiene la intención de #SacarDinero, Watson no identifica cuál es la intención que tiene el cliente, de forma que le enruta por el nodo de “anything_else” para solicitarle que reformule lo que desea.

Desarrollo bot conversacional con IBM Watson — Le indicamos al bot algo para lo que aún no le hemos entrenado

Utilizamos entidades (@entidades o @entities) para concretar la intención del usuario: ¿de qué cajero quieres sacar dinero?

Recordemos la definición funcional de la intención #SacarDinero (estaba en este otro artículo):

  • Definíamos dos posibilidades, por un lado que le mostremos el cajero más cercano (independientemente de que le cobren o no comisiones) y por otro,
  • el cajero más cercano libre de comisiones.

En este caso, cuando nuestro bot infiera que el usuario quiere sacar dinero, le tendremos que preguntar a qué cajero quiere que le llevemos, si al más cercano o a un cajero sin comisiones. Para ello, entra en juego la variable @entity, que nos ayudará y concretar la intención del usuario y así tenerla totalmente definida.

¿Y ahora qué? Configuramos entidades en Watson

En este caso, en la pestaña Entity creo una entidad que sea @TipoCajero que tiene dos posibles valores:

  • CajeroMásCercano
  • CajeroSinComisiones.

A cada valor, le alimentamos de las diferentes formas en las que el usuario nos puede indicar cada uno de ellos. Por ejemplo, al cajero sin comisiones le entrenamos para que lo identifique con sinónimos como “sacar gratis”, “cajero gratis”, “sacar sin comisiones”, “sin comisiones”, “libre de comisiones”, etc. Así quedaría nuestro caso:

Desarrollo bot conversacional con IBM Watson — Utilizando entidades para concretar la intención del usuario

Veamos las entidades en acción: Sacar dinero de un cajero libre de comisiones

Por último, tendremos que configurar el nodo “Encontrar Cajero” para que el bot:

  • Nos pregunte por qué tipo de cajero estamos buscando (el más cercano o uno libre de comisiones) o,
  • En el caso de que el cliente ya nos diga la intención sacar dinero acompañada del valor de la entidad @tipo cajero, que le demos la solución, sin necesidad de preguntarle nada más

Para ello, vuelvo al nodo “Encontrar Cajero” y utilizo una nueva feature de IBM Watson: los slots. El slot nos permite indicarle a Watson que, una vez reconocida la #intención, chequee si reconoce la @entidad que necesitemos.

  1. En nuestro caso, debe reconocer la entidad @TipoCajero para saber si el cliente ya en su mensaje nos está indicando a qué tipo de cajero quiere ir. Además, nos permite que si no encontramos la entidad que necesitemos, que le hagamos una pregunta al cliente. Es aquí donde configuramos la pregunta “Perfecto, ¿prefieres sacar dinero del cajero más cercano o uno libre de comisiones?

Desarrollo bot conversacional con IBM Watson — Probando la funcionalidad slots para reconocer entidades
  1. Hay que pensar en Watson como una cascada (un “if” tras otro). Una vez que hemos pasado por el bloque del slot y hemos conseguido identificar tanto el #intent como la @entity pasaremos a responder al cliente.
  2. Si Watson identifica @TipoCajero como el “Cajero Más Cercano”, le contestaremos de una forma al cliente; sin embargo, si identifica el otro tipo de valor para la entidad tipo cajero, le responderemos de otra.
  3. En el recuadro tres de la imagen anterior, pongo el bot a prueba. Primero le preguntamos por un cajero. Como el bot no es capaz de reconocer la entidad Tipo de Cajero, nos hace la pregunta que le hemos configurado, para sacarnos dicha información. Una vez que le respondemos, identifica la entidad, y nos responde según hemos configurado la respuesta para dicha entidad.

Por último (y aunque no haya dado de alta todas las intenciones, nodos… inicialmente planteados), termino el tutorial diciéndole al bot “¡Hola! Busco un cajero sin comisiones” para validar que me identifique tanto la intención #SacarDinero como la entidad @TipoCajero:CajeroSinComisiones y como resultado me responde como he definido:

Desarrollo bot conversacional con IBM Watson — Reconociendo intenciones y entidades de un mismo texto

¿Y hay otras cosas que deberíamos tener en cuenta?

¡Sí, importante!

  • IBM Watson es una herramienta potentísima con la que podremos definir una conversación completa. Sin embargo, por lo general, lo utilizaremos para identificar intenciones/entidades vía diálogo, y una vez identificados, para ejecutar una acción, necesitaremos hacer llamadas a otros sistemas. Esta capa, es la capa de lógica del bot, donde definimos qué hacer, qué texto mostrar, si enseñar botones, o si pasamos el diálogo al sistema de IA… El ejemplo de Banquito es muy claro, para darle respuesta al cliente -una vez que sabemos que quiere ir a un cajero cercano donde no le cobre comisiones-, tendremos que recoger la ubicación del cliente, y proporcionarle la respuesta que espera. Para ello, haremos una consulta vía API a otro repositorio que tengamos en el que indicándole ubicación y el parámetro tipo de cajero, que nos devuelva una dirección que será la que le mostraremos al cliente.
  • Mencionaba al principio que desplegaremos el chatbot en varios canales (web, WhatsApp, Facebook Messenger), es por ello que en la lógica del bot, tendremos que tener en cuenta que en cada canal contaremos con unos elementos visuales u otros. Así que es algo igualmente a tener en la fase de diseño.

Si te ha gustado, no olvides dejar ❤️ para que todos tus seguidores puedan leerlo. 💬😍

¡Ah, y que el chocolate te acompañe!🍫🤖

Senior Chatbot Developer en Chatbot Chocolate

Por Nutella Developer

Senior Chatbot Developer en Chatbot Chocolate. 👉🏻 “Escribiendo para que disfrutes del poder del chocolate”.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *