En el último post sobre chatbots repasamos la utilidad de las variables de contexto y de los slots como estrategias conversacionales para recopilar y gestionar información relevante. Sobre todo, vimos ejemplos de cómo se gestionan los slots obligatorios, que buscan almacenar información importante para la conversación. Hasta que el usuario aporte esa información y quede guardada en las variables de contexto, el chatbot continuará preguntando por la misma y no avanzará con el diálogo.
Esta estrategia, sin duda, es interesante para que el chatbot sea capaz de dirigir la conversación, pero se puede dar un diálogo muy poco fluido si el usuario introduce digresiones o cambios de tema. Por ello, en este post vamos a tratar cómo gestionar las digresiones conversacionales en un bot: qué son estas digresiones, cómo afectan a los chatbots y cómo dar soluciones que generen un diálogo más natural ante estas situaciones.
Qué son las digresiones conversacionales
Las digresiones conversacionales forman parte de los diálogos que normalmente tenemos y, por tanto, se pueden dar en la interacción con un chatbot. Se trata de introducir un tema cuando la conversación está centrada en otro diferente y después volver al tema principal. Dicho de manera sencilla, se trata de hacer un inciso en el asunto que se está tratando con un tema que, en principio, nada tiene que ver. Para entenderlo mejor, vamos a considerar el siguiente diálogo:
Cliente: Buenos días, me gustaría hacer un pedido.
Floristero: Buenos días. Claro, dime qué necesitas.
Cliente: Quisiera un ramo de flores.
Floristero: Perfecto. ¿Qué tipo de flores quieres para el ramo?
Cliente: Un momento, ¿me puedes decir qué horario tenéis para saber si me daría tiempo recogerlo al salir del trabajo?
Floristero: Sí, claro, estamos abiertos de 9:00 a 20:00 ininterrumpidamente de lunes a viernes. Y los sábados abrimos de 9:00 a 14:00.
Cliente: Genial, entonces me da tiempo de sobra. Sobre las flores, me gustaría que el ramo llevase margaritas y claveles.
Floristero: Apuntado queda: un ramo de margaritas y claveles.
Lo que ocurre en la tercera intervención del cliente es una digresión de la conversación: se está gestionando un pedido y, entre medias, el usuario necesita saber el horario de la tienda. En una conversación humana, esta desviación del diálogo se resuelve de manera ágil y natural. Sin embargo, para los asistentes conversacionales puede resultar un reto importante.
Porque estás leyendo este post, te interesa leer también
Digresiones en un chatbot con slots obligatorios
Para ver un ejemplo de cómo un chatbot puede responder ante las digresiones y el problema que se genera si no está preparado para ello, recuperemos el que ya diseñamos en el anterior post para una floristería. Este se basa en cuatro nodos y uno de ellos, el que salta con la intención #pedido , contiene slots obligatorios para almacenar la información sobre el producto y el tipo de flor que le interesa al usuario (Figura 1).
Con este chatbot, la conversación con digresiones que antes se planteaba, se desarrolla de manera diferente, tal y como se muestra en la Figura 2. El asistente detecta la intención #pedido en la primera petición del usuario y pasa a evaluar los slots.
Como en el slot 1 no encuentra el tipo de producto, pregunta por ello, guarda que el usuario solicita un ramo en la variable $producto y pregunta por el tipo de flores. Sin embargo, la respuesta del cliente no es la esperada por el chatbot, pues en ella no se encuentra la entidad @flor y, por tanto, el asistente vuelve a preguntar por el tipo de flor para almacenar la información del slot 2. De esta manera, se entra en un bucle en el que el usuario no encuentra la respuesta que desea y el chatbot sigue preguntando infinitamente por la información que le falta por almacenar: la variable de contexto $flor del slot 2.
Casi con toda seguridad, esta conversación terminaría mal, pues el usuario se sentiría frustrado por un asistente poco flexible que no le resuelve sus dudas. En definitiva, el cliente abandonaría la conversación y el chatbot no conseguiría cumplir su función por ser incapaz de responder a las digresiones en el diálogo.
Gestionar las digresiones con Watson Assistant
Para solucionar el problema que presentan las digresiones para los asistentes conversacionales, existen diferentes estrategias, más o menos complejas y posibles, según la plataforma que se utilice. Con Watson Assistant es posible el manejo de este fenómeno conversacional mediante la configuración de los nodos que ofrece la propia plataforma. Primero de todo, hay que entender que las digresiones pueden ser de entrada y salida:
- La digresión de entrada se produce en el nodo al que se redirige el diálogo cuando el usuario cambia de tema de conversación.
- La digresión de salida se produce en el nodo desde el que se redirige el diálogo cuando el usuario cambia de tema de conversación.
Poniendo un ejemplo práctico, si un usuario está en un nodo con slots para confirmar la compra de un producto y, de repente, pregunta por el horario del comercio, se produce una digresión de salida en el nodo de la compra y una de entrada en el nodo de horarios.
Con Watson también es posible decidir si, tras ir al nodo de horarios y resolver la duda, se vuelve al nodo de la compra. Distinguir estos dos tipos de digresiones y saber que existe la opción de volver al nodo de salida es importante, puesto que es posible configurar cada nodo según interese.
Sin embargo, es necesario tener en cuenta que no todos los nodos permiten digresiones. Por ejemplo, en los nodos que no tienen slots o subnodos (como en #horario y #dirección del ejemplo de la floristería), las digresiones no son posibles porque, al detectar esa intención y entrar a ese nodo, se va a dar una única respuesta al usuario y, después, se va a salir de ese nodo.
Para verlo mejor, en la Figura 3 se muestra cómo funcionarían las digresiones de salida y de entrada del chatbot de la floristería si se diseñara con Watson Assistant. Como se ve, todos los nodos aceptan digresiones de entrada por defecto (si quisiéramos cambiarlo en alguno, sería posible). Por otro lado, ningún nodo, excepto el tercero, es configurable para que acepte digresiones de salida porque no tienen subnodos o slots. Por último, el tercer nodo se ha configurado para que acepte digresiones de salida. De esta manera, se evita que el diálogo se quede estancado en uno de los slots si el usuario no aporta la información requerida y cambia de tema, redirigiéndolo a otro nodo si detecta una intención diferente a #pedido.
El recorrido que se haría por esos nodos con el ejemplo de diálogo que se planteaba al inicio se plasma en la Figura 4. Como el nodo #pedido tiene permitidas las digresiones de entrada y de salida (y también la vuelta al nodo tras la digresión) y el nodo #horario acepta digresiones de entrada, cuando el usuario pregunta por los horarios, se le contesta a esto y se vuelve a los slots del nodo 3 para terminar con el pedido.
Como hemos visto, en el momento en el que el asistente conversacional es un poco complejo y existen subnodos o slots es importante que maneje las digresiones conversacionales, pues se pueden producir con frecuencia, tal y como ocurrirían en una conversación con un interlocutor humano. Poder gestionar estos giros conversacionales es casi imprescindible para que el chatbot pueda cumplir con su función sin que el usuario se canse o se hastíe de una conversación no natural y muy estricta. Aunque existen diversas maneras de tratar las digresiones, sin duda, resulta muy útil poder gestionarlas si la plataforma para diseñar el chatbot te ofrece esta posibilidad, como es el caso de Watson Assistant.