Los chatbots son una parte fundamental de la mayoría de los proyectos de software y, por lo tanto, un elemento clave de la plataforma low-code BESSER (actualmente en desarrollo). Necesitábamos una solución que cumpliera con nuestros requisitos para la fácil definición y posterior generación y ejecución de chatbots. En este contexto, comenzamos a trabajar en el BESSER Bot Framework (BBF), ¡y nos alegra decir que ya hemos lanzado la primera versión estable!

Estos son algunos highlights de BBF:

  • BBF sigue un formalismo de máquina de estados para permitir la creación de todo tipo de bots. Las transiciones entre estados pueden ser desencadenadas por el componente de predicción de intents incorporado en el framework.
  • Utilizamos Python como lenguaje de programación. BBF es un DSL interno que se puede extender con cualquier librería de Python. Escondemos todas las complejidades del bot, no es necesario ser un experto en lenguajes de bots (ni siquiera un experto en Python) para construir tus bots. Pero, al mismo tiempo, si conoces Python, aprovecha toda tu experiencia para construir los bots.
  • Capacidades de procesamiento del lenguaje natural (NLP): El reconocimiento de intents, de entidades (y pronto el reconocimiento de voz para voicebots), el soporte multilingüe (probado con inglés, español, francés, alemán, catalán y parcialmente luxemburgués) están integrados en el core del framework, no es necesario conectarse a servicios externos de NLP.
  • Publicado como software open source y disponible en GitHub.

BBF es el resultado de todo lo que aprendimos sobre la creación de chatbots en el pasado. Todas las lecciones aprendidas se han integrado en este nuevo proyecto. Por ejemplo, con de nuestro bot framework anterior nos dimos cuenta de que necesitábamos proporcionar una fácil integración con componentes de IA, principalmente aquellos relacionados con el procesamiento del lenguaje natural (NLP). Para lograrlo, decidimos pasar a Python, ya que la comunidad de aprendizaje automático se basa principalmente allí. BBF se creó con una filosofía de fácil integración con las herramientas de IA más avanzadas. También aprendimos que, en lugar de crear un DSL externo para la definición de chatbots, es más sabio pasar a un lenguaje de programación de propósito general y aprovechar sus capacidades para evitar reinventar la rueda. Necesitábamos un lenguaje popular y con una sintaxis amigable para no restringir la cantidad de usuarios potenciales. Nuevamente, Python es el mejor candidato para nuestro DSL interno. Publicamos BBF en forma de una librería de Python, por lo que se puede instalar con pip install besser-bot-framework.

BESSER Bot Framework: Una breve introducción

La documentación de BESSER Bot Framework contiene todo lo que necesitas saber sobre la creación de chatbots con BBF. Incluye un primer tutorial para principiantes, una wiki que explica los diferentes componentes de un chatbot, algunos ejemplos completos y la documentación de la API. Aquí, haremos una breve explicación de las ideas más importantes.

Ejemplo de modelo de un bot

Ejemplo simple del modelo de un bot que saluda al usuario y responde dependiendo de su estado de ánimo.

El modelo del chatbot es una máquina de estados, compuesta por estados y transiciones entre estados. Cuando un usuario inicia una interacción, se encuentra en el estado inicial del chatbot. Las transiciones son desencadenadas por eventos, y un evento muy común en los chatbots es la coincidencia del mensaje del usuario con uno de los intents (intenciones) del bot.

Un intent se refiere al objetivo o propósito detrás de un mensaje o consulta. Al diseñar un bot, también debes definir los intents que se espera que reconozca. Necesitamos proporcionar algunas frases de ejemplo para cada intent, de modo que el bot pueda aprender cómo son los mensajes de cada uno. Además, los intents pueden incorporar parámetros que son capturados por el bot (e.g., números, fechas, nombres, etc.). El motor interno de NLP del chatbot es el encargado de predecir la intención del usuario y encontrar los parámetros incrustados en el mensaje.

¡Todo esto y más se puede hacer con Python utilizando la biblioteca BBF! Pero lo mejor de todo son los state bodies. Cada estado tiene su propio cuerpo o body, que es una función de Python que el bot ejecuta cuando un usuario se mueve a su estado. Además, los estados tienen un segundo cuerpo, llamado fallback, al que el bot recurre en situaciones de emergencia cuando ocurre algún error en el body (este es un buen lugar para consultar un LLM 😉, ver más abajo).

Ejemplo de body

Ejemplo de función body de un estado, que devuelve el tiempo de la ciudad solicitada.

Este ejemplo de body se ejecutará después de que un usuario pregunte “¿Cómo está el clima en CIUDAD?”, siendo “CIUDAD” cualquier nombre de ciudad. Como puedes ver, los cuerpos tienen un parámetro session. Aquí es donde se almacena la información privada del usuario. Por lo tanto, los cuerpos tienen acceso de lectura/escritura a la sesión del usuario que provoca la ejecución del body. Olvídate de tener que integrar múltiples herramientas, frameworks o lenguajes. ¡Se puede hacer de todo dentro de un estado del chatbot!

Los chatbots de BBF pueden comunicarse con los usuarios a través de canales de comunicación de terceros mediante platforms. Las plataformas son otro componente clave de los chatbots. Una plataforma es un envoltorio para enviar/recibir datos del usuario al bot. Hemos implementado una plataforma para Telegram, para que puedas interactuar con tus chatbots a través de él. También hemos creado una plataforma WebSocket que permite que el chatbot sea accesible desde cualquier interfaz de usuario que implemente un protocolo WebSocket (además, BBF incluye una interfaz de usuario hecha con Streamlit para la plataforma WebSocket, pero puedes crear la tuya propia para tus chatbots). ¡Pronto lanzaremos nuevas plataformas! (puedes dejar tus solicitudes en la sección de issues de GitHub o contribuir al crecimiento de BBF, es open source 🙂)

Pero, ¿seguimos necesitando crear chatbots habiendo LLMs? ¿O los LLMs no son la cura del cáncer?

El auge de los chatbots es mayor que nunca, en parte gracias a la increíble popularidad y capacidades de los Large Language Models (LLMs). Han llegado al público mainstream, desempeñándose muy bien en un amplio abanico de tareas, open domain question answering, resumen de textos o incluso programación. Estos LLMs son enormes redes neuronales, entrenadas con millones de textos de Internet, que aprenden a predecir la mejor respuesta a los inputs del usuario. A pesar de su popularidad y rendimiento, todavía no son la solución para todos los problemas:

  • Los LLMs sufren de alucinaciones. Esto provoca que algunas respuestas sean falsas o inexactas, a menudo de manera convincente y coherente, a pesar de carecer de una base factual.
  • Para aplicaciones basadas en datos, existe el riesgo de fuga de datos. Si el modelo ha sido entrenado con datos sensibles, siempre existe la posibilidad de obtenerlos a través de las consultas adecuadas.
  • Existe un debate sobre la autoría del contenido que generan. ¿Pertenece al propietario del LLM, al autor de los datos con los que se ha entrenado, o al usuario que creó la consulta para generar el contenido?
  • Los LLMs se están volviendo gigantes. Por ejemplo, el Llama-2 de Meta con 70 mil millones de parámetros ocupa 140 GB. Si quieres integrarlo en tus proyectos, necesitarás muchos recursos computacionales o contratar servicios en la nube.
  • Los LLMs son cajas negras. Es realmente difícil entender completamente el comportamiento o el razonamiento seguido por un LLM para generar una respuesta. Incluso hay un campo científico que trabaja en resolver este problema, conocido como Explainable AI.
  • Un LLM solo genera texto. Para incluir otras funciones en tu aplicación (e.g., consultas a bases de datos, solicitudes a APIs, etc.), necesitas integrar tu LLM con otras herramientas de software (e.g., LangChain intenta resolver esto).

Estas debilidades hacen que los LLMs por sí solos no sean la solución adecuada para todas las aplicaciones. Por otro lado, BBF combate a estos problemas:

  • Tú diseñas la arquitectura del bot. Tú decides lo que hace y lo que no, lo que dice y lo que no. Así evitas alucinaciones y comportamientos de “caja negra”.
  • Tus datos pueden almacenarse de manera segura y recuperarse cuando sea necesario por los usuarios autorizados a través del chatbot. ¡Control total sobre datos y privacidad!
  • Crea chatbots pequeños (en términos de memoria), extremadamente portátiles, reutilizables y escalables.
  • Integra fácilmente cualquier herramienta, ¡incluso LLMs! Por ejemplo, cuando el bot no reconozca la consulta del usuario y se mueva al estado de fallback, puedes utilizar la API de OpenAI para preguntar a ChatGPT (¡y recuerda advertir al usuario sobre el origen de la respuesta!).

Te invitamos a consultar la documentación para aprender más sobre BBF. Si este proyecto te ha parecido útil, ¡no olvides darnos una estrella en GitHub 🌟 y estar atento a las próximas actualizaciones!

 

Imagen destacada de Catalyststuff en Freepik