Conversando con su documentación: LLM y RAG para mejorar la recuperación de información
Introducción
¿Alguna vez has sentido que sabes que hay información útil en algún lugar de tu documentación, pero no puedes encontrarla? A mí me pasa a menudo. Es muy frustrante, pero después de leer este artículo vas a tener una idea de cómo construir un sistema que te permita a ti y a tu equipo encontrar esa información, más rápido y más cómodamente que nunca.
En Alice Biometrics, estamos constantemente buscando formas innovadoras de mejorar la recuperación de información y la gestión del conocimiento. Un enfoque emocionante es combinar Large Lenguage Models (LLMs) con Generación Aumentada por Recuperación (RAG) para crear una experiencia interactiva, similar a un chat, con tu documentación. En esta entrada de blog, exploraremos cómo puedes aprovechar los LLMs y RAG para chatear con tu documentación y revolucionar la forma en que accedes y consumes información, como lo hemos hecho en Alice Biometrics.
¿Qué son los LLMs y RAG?
Large Language Models (LLMs)
Hoy en día, muchas personas están familiarizadas con los LLMs, pero en resumen, estos son modelos de aprendizaje profundo que han sido entrenados en cantidades masivas de datos de texto (todo internet en algunos casos). Pueden entender el lenguaje natural, generar respuestas coherentes y realizar una amplia gama de tareas relacionadas con el lenguaje, como responder preguntas, resumir y traducir.
Generación Aumentada por Recuperación (RAG)
RAG es un marco que combina las fortalezas de los LLMs y las técnicas de recuperación de información. Permite al modelo generar respuestas recuperando información relevante de una fuente de conocimiento externa, como un corpus de documentos, e incorporándola en la respuesta generada.
Prepara tu Base de Conocimientos
Para empezar, necesitarás convertir tu documentación en un formato estructurado que pueda ser fácilmente indexado y buscado. En nuestro caso, elegimos usar LangChain como nuestra principal herramienta para llevar a cabo esta tarea. Los siguientes pasos describen cómo construir una base de conocimientos robusta y útil, representada por una base de datos vectorial, que te permitirá recuperar un contexto útil para ayudar al LLM a responder correctamente la pregunta del usuario.
Selecciona tu Documentación
Identifica los documentos que se utilizan con más frecuencia y contienen información valiosa relevante para el trabajo de tu equipo. Prioriza los documentos que están actualizados y cubren una amplia gama de temas dentro de tu dominio.
Prepara tus Documentos
Convierte todos tus documentos en un formato uniforme, como texto plano. Este proceso puede ser tedioso ya que algunos de los textos de diferentes fuentes (por ejemplo, páginas web) pueden necesitar un preprocesamiento extenso. Asegúrate de que el texto esté limpio, sin problemas de formato o errores que puedan afectar el proceso de recuperación. Esta tarea es muy importante, especialmente para evitar crear un contexto ruidoso o complicar los siguientes pasos en el proceso. Como siempre, LangChain ofrece Cargadores de Documentos especializados que te ayudarán a realizar esta tarea de manera más fácil.
Divide tus Documentos en Fragmentos
Una vez que hayas recopilado y procesado tus documentos, es posible que quieras dividir tus documentos en fragmentos más pequeños y manejables que puedan caber en la ventana de contexto de tu modelo, o simplemente para reducir el coste de enviar estos fragmentos como contexto de la pregunta del usuario, como veremos en las siguientes secciones. Cada fragmento debe ser una pieza de información autónoma y autocontenida. Esto facilita que el sistema RAG recupere y utilice información específica.
Diferentes tipos de documentos requieren diferentes formas de dividir su información. Por ejemplo, no es lo mismo dividir un documento en markdown que un script de python, LangChain proporciona divisores de texto útiles que se adaptan a la mayoría de las necesidades, pero siempre puedes personalizar el tuyo. Cuanto mejor sean tus divisiones, mejor será tu contexto para ayudar a responder las futuras preguntas de tus compañeros de equipo o usuarios, por lo que este paso es crucial para la calidad del sistema RAG.
Extraer Representaciones
Utiliza un modelo pre-entrenado de representaciones de texto para generar una representación numérica para cada fragmento de documento. Estos modelos de representaciones son modelos de lenguaje especialmente entrenados para producir representaciones numéricas ricas que son capaces de capturar significado semántico del texto. La extracción de estas representaciones numéricas nos permite recuperar eficientemente textos similares. Cuanto más parecidas sean las representaciones, más similar será el tema del que hablan, y mejor contexto proporcionarán a la pregunta del usuario.
Estos Embeddding Models están siendo constantemente desarrollados y mejorados. Para elegir el mejor modelo, puedes utilizar algunas de las tablas de clasificación comunes para encontrar el que mejor se adapte a tus requisitos. LangChain ofrece un extenso catálogo de integraciones de modelos de representaciones de texto para la mayoría de los proveedores y modelos.
Base de Datos Vectorial
Crea una base de datos vectorial para almacenar las incrustaciones. Esta base de datos te permitirá realizar búsquedas de similitud eficientes para encontrar los fragmentos de documento más relevantes durante la fase de recuperación. Actualmente, con la creciente popularidad de los LLMs, hay muchas bases de datos vectoriales disponibles. Las métricas clave que quieres buscar en una base de datos vectorial son precio, precisión y rapidez buscando las representaciones más similares, especialmente si la cantidad de fragmentos necesarios para tu solución es extensa.
Chatea Con Tus Datos
Ahora, vamos con la parte divertida, crear el chat y utilizar el sistema RAG para recuperar el contexto y mejorar así las respuestas del modelo.
Eligiendo el LLM
Este será el modelo que realmente chateará con el usuario del sistema. Al seleccionar un LLM para el chat de tu sistema RAG, considera factores como el tamaño del modelo, los datos de entrenamiento y el rendimiento en tareas de lenguaje relevantes para tu dominio, así como el precio. Los modelos populares incluyen GPT-3 y GPT-4 de OpenAI, Gemini de Google, y Llama2 de Meta y la reciente liberación de Llama3, y muchos más. Evalúa los modelos en función de su capacidad para entender y generar respuestas contextualmente relevantes. LangChain ofrece una gran compatibilidad con la mayoría de los proveedores.
Recuperar Contexto
La fase de recuperación es crucial en un sistema RAG. Cuando el usuario introduce una cuestión, el embedding model producirá una representación de la temática de dicho texto. Esta representación numérica se utilizará para consultar la base de datos vectorial y encontrar los fragmentos de documentos más relevantes. El sistema utiliza las representaciones para realizar una búsqueda de similitud, y recuperar los resultados más similares que proporcionan el mejor contexto para que el LLM de chat genere su respuesta.
Responder Citando la Documentación Recuperada
Una vez que se recupera el contexto relevante, se construye mensaje más complejo con una “plantilla de pregunta” como la que se muestra a continuación. Esta plantilla instruye al modelo para responder a la consulta de los usuarios con información recuperada de la documentación. Además, el sistema puede ser diseñado para citar los documentos o secciones específicas que utilizó, proporcionando transparencia y permitiendo a los usuarios profundizar en el tema si es necesario. Y lo más importante, ¡finalmente logrando encontrar la documentación que nunca podías encontrar!
"""Eres un asistente de IA para Alice Biometrics.
Tu misión es ayudar a los compañeros de trabajo de Alice a mejorar
su experiencia y ayudarles. Utiliza los siguientes fragmentos de
contexto para responder a la pregunta al final.
{contexto}
Pregunta: {pregunta}
Respuesta útil: """
Interfaz de Usuario
Por último, pero no menos importante, necesitamos que nuestro producto se vea bonito y atractivo, y dar a nuestros usuarios una forma fácil de interactuar con este sistema. Streamlit es un framework de Python de código abierto que permite a los ingenieros construir y compartir rápidamente aplicaciones web vistosas e interactivas. En Alice Biometrics, donde tenemos una cultura pythonica, normalmente usamos Streamlit para crear herramientas internas para diversos propósitos, y elegimos esta herramienta por su simplicidad y facilidad de uso. Sin embargo, también podrías considerar alguna solución basada en Gradio. Ambas plataformas permiten el despliegue rápido de modelos de aprendizaje automático y pueden integrarse con tu sistema RAG para proporcionar una experiencia de usuario fluida, puedes ver un ejemplo de la nuestra en la imagen a continuación 🚀
Conclusión
Al combinar el poder de los LLM y la Generación Aumentada por Recuperación, puedes crear una experiencia interactiva, similar a chatear con tu documentación, como lo hicimos en Alice Biometrics. Este enfoque no solo mejora el acceso a la información y la comprensión, sino que también proporciona una experiencia personalizada para tu equipo.
Recursos Útiles
- DeepLearning.AI: en este momento están ofreciendo un catálogo extenso de cursos cortos gratuitos que son realmente útiles para construir tu propio sistema, y especialmente para hacerlo funcionar. Recomiendo empezar con LangChain: Chat with Your Data, es un buen resument de cómo construir tu propio sistema usando LangChain, y a partir de ahí tienes muchos otros cursos que te ayudarán a mejorar tu sistema.
- Cookbook de LangChain de ejemplos útiles, tanto simples como más avanzados.