was successfully added to your cart.

Carrito

como construir un chatbot con rag

Recientemente he finalizado mis estudios del Máster en Data Science & Big Data Analytics, y como proyecto final, mi equipo y yo nos enfrentamos a un reto: mejorar la atención al cliente de MAPFRE en materia de seguros de hogar mediante un chatbot.

Chatbot y RAG

Los chatbots son una tecnología que ha cobrado mucho protagonismo en los últimos años. Hoy en día es muy común ver chatbots en diferentes sectores como la atención al cliente, la educación o la salud. Modelos avanzados como ChatGPT, Gemini o Llama han mejorado la interacción con la inteligencia artificial, pero presentan una limitación importante: no siempre ofrecen información actualizada ni precisa.

Estos modelos se entrenan con grandes cantidades de datos previamente recopilados, lo que restringe su conocimiento al momento en que fueron desarrollados. Como resultado, pueden generar respuestas erróneas o directamente inventadas, fenómeno conocido como alucinación.

Para abordar este desafío, surge RAG (Retrieval-Augmented Generation), un enfoque que combina inteligencia generativa con acceso a fuentes de información externas. Gracias a esta técnica, un chatbot puede consultar bases de datos y documentos en tiempo real, asegurando respuestas más precisas y fiables

master en data science y big data analytics

 

Cómo construir un chatbot con RAG: paso a paso

El proceso para construir un chatbot con RAG consta de 2 fases principales:

  • La creación de la base de datos y gestión de los datos
  • La recuperación de la información y construcción de la interfaz

El proyecto que desarrollamos fue utilizando LlamaIndex para la gestión de los datos y Chainlit como interfaz. 

esquema proceso chatbot

Ilustración 1. Esquema del proceso de un chatbot con RAG

 

Fase 1: Creación de base de datos

Este proceso se realiza cada vez que se actualizan o añaden nuevos documentos. Consiste en la transformación de los documentos en representaciones numéricas vectoriales, de esta manera su recuperación posterior es mucho más eficiente.

Carga de documentos

El primer paso es cargar todos los documentos que utilizará el chatbot. Para ello utilizamos la clase SimpleDirectoryReader de LlamaIndex.

 

carga de documentos chatbot

Ilustración 2. Carga de documentos

 

Generación de chunks

Los chunks son fragmentos de texto en los que los documentos se dividen, que se generan para hacer la información más manejable. Existen diferentes técnicas para dividir los documentos como por ejemplo hacerlo por número de caracteres fijo. Sin embargo, lo habitual es utilizar técnicas más avanzadas, como la clase SemanticSplitterNodeParser de LlamaIndex, que divide el texto considerando su similitud semántica.

 

generacion de chunks

Ilustración 3. Generación de chunks

 

Generación de embeddings

El siguiente paso es crear los embeddings, representaciones numéricas del texto que permiten medir la relación entre palabras en un espacio vectorial. Cuanto más similares sean dos términos, más cercanos estarán sus vectores.

Por ejemplo, en una representación simplificada, «Perro» y «Gato» aparecerían más próximos entre sí que «Londres», ya que los dos primeros comparten una categoría semántica (animales), mientras que el tercero pertenece a un concepto diferente (ciudad).

 

 

representacion vectorial palabras

Ilustración 4. Representación vectorial de palabras

 

modelo embedding gemini

Ilustración 5. Ejemplo de modelo de embeddings de Gemini

 

Almacenamiento de los embeddings

Para que el chatbot pueda recuperar información rápidamente, los embeddings deben almacenarse de forma eficiente junto con un índice que facilite su búsqueda. Esto se gestiona con la clase VectorStoreIndex de LlamaIndex.

Dependiendo del tamaño del proyecto, los embeddings pueden guardarse en una base de datos vectorial o, en casos más pequeños como este, en archivos JSON.

 

almacenamiento embeddings

Ilustración 6. Almacenamiento de embeddings

 

Fase 2: Recuperación de la información

Una vez construida la base de datos, es necesario implementar un mecanismo eficiente para recuperar la información cuando el usuario realiza una consulta. Para ello, utilizamos Chat Engine de LlamaIndex, que se encarga de:

  • Recibir la pregunta del usuario.
  • Buscar en la base de datos vectorial los fragmentos más relevantes.
  • Generar una respuesta basada en la información recuperada.

Para que el sistema funcione correctamente, es fundamental configurarlo con:

  • Un modelo de lenguaje (LLM), responsable de formular las respuestas.
  • Un modelo de embeddings, utilizado para realizar búsquedas en el índice. Debe coincidir con el modelo empleado en la creación de los embeddings.
  • Un historial de conversación, gestionado mediante la clase ChatMemoryBuffer, que permite al chatbot mantener el contexto en la interacción.
  • Un prompt personalizado, donde se establecen reglas y restricciones sobre su comportamiento.

 

recuperacion informacion

Ilustración 7. Recuperación de la información

 

Integración con la interfaz de usuario

Con el Chat Engine configurado, el siguiente paso es integrarlo en la interfaz de Chainlit, lo que permite al usuario interactuar con el chatbot de manera fluida e intuitiva.

Gracias a esta arquitectura, obtenemos un chatbot con RAG que:

  • Responde únicamente sobre seguros de hogar, garantizando información relevante.
  • Accede a documentos indexados y actualizables, asegurando respuestas basadas en datos recientes.
  • Mantiene el contexto de la conversación, proporcionando interacciones más coherentes y naturales.

 

Evaluación del modelo

Para garantizar que el chatbot proporciona respuestas precisas y útiles, es fundamental evaluar su desempeño mediante diferentes métricas. No todos los proyectos requieren medirlas todas, pero conocerlas permite seleccionar las más adecuadas según el caso de uso.

Tabla 1. Métricas de evaluación de un modelo de RAG

Métrica ¿Qué evalúa?
Correctness  Grado de precisión de la respuesta en comparación con la realidad.
Faithfulness  Uso exclusivo de la información proporcionada sin generar datos falsos o inventados.
Relevance  Adecuación de la respuesta a la pregunta formulada, evitando respuestas demasiado genéricas.
Conciseness Claridad y brevedad de la respuesta, eliminando información innecesaria.
Groundedness  Dependencia de los documentos indexados como base de la respuesta, en lugar de conocimiento previo del modelo.
Coherence  Correcta construcción gramatical y fluidez en la respuesta.
Consistency  Mantención de un discurso coherente a lo largo de la conversación sin contradicciones.
Latency  Velocidad con la que el chatbot genera y entrega la respuesta.

 

No todos los proyectos requieren medir todas estas métricas, pero conocerlas permite seleccionar las más adecuadas según el caso de uso.

 

Conclusión

Desarrollar un chatbot basado en RAG es un proceso en el que hay que considerar muchas variables para que sea exitoso y requiere de  una evaluación exhaustiva y continua para asegurar la calidad del producto.

Algunos de los aprendizajes más importantes que me llevo de este proyecto son:

  • La importancia de evaluar el chatbot con métricas específicas, que nos permitan ir ajustando los diferentes parámetros en cada fase del proyecto.
  • Definir un prompt personalizado adecuado que limite efectivamente el comportamiento del chatbot es muy importante para evitar que nuestro chatbot por ejemplo recomiende productos de la competencia.
  • La segmentación semántica mejora la calidad de la recuperación de información, pero hay que controlar la longitud de los chunks para evitar respuestas demasiado largas o imprecisas.
  • Elegir un modelo de embeddings adecuado tiene un gran impacto en la recuperación de las respuestas, puesto que con modelos demasiado sencillos probablemente perderemos la capacidad de capturar significado contextual y relaciones semánticas profundas.

Desarrollar este proyecto y haber cursado el Máster en Data Science en The Valley ha sido una experiencia altamente enriquecedora, que me ha permitido profundizar en técnicas avanzadas de inteligencia artificial y gestión de datos. Durante la formación, he adquirido no solo conocimientos teóricos, sino también la capacidad de aplicar soluciones innovadoras en proyectos reales y desafiantes.

No tengo duda de que la base sólida y la visión estratégica que proporciona este máster serán fundamentales para mi desarrollo profesional, permitiéndome afrontar con confianza los retos futuros del mundo de los datos y la inteligencia artificial.

Autor

Imagen del autor

Inés Azuara

Consultora de datos Senior en Orange Business

Inés es consultora de datos senior en Orange Business, y está principalmente enfocada en visualización de datos y desarrollo de dashboards avanzados para clientes de toda Europa. Estudió Ingeniería Ambiental, y recientemente finalizó sus estudios en el máster en Data Science & Big Data Analytics de The Valley para potenciar su perfil multidisciplinar en el ámbito de la gestión y el análisis de datos, y poder aportar soluciones integrales a nivel empresarial.