RAG (Retrieval-augmented generation) es un enfoque pragmático y eficaz para utilizar grandes modelos lingüísticos en la empresa. Aprenda cómo funciona, por qué lo necesita y cómo implementarlo con OpenAI y LangChain.
Normalmente, el uso de grandes modelos lingüísticos (LLM) en la empresa se divide en dos grandes categorías. La primera es cuando el LLM automatiza una tarea relacionada con el lenguaje, como escribir una entrada en un blog, redactar un correo electrónico o mejorar la gramática o el tono de un correo electrónico ya redactado. La mayoría de las veces este tipo de tareas no implican información confidencial de la empresa.
La segunda categoría consiste en procesar información interna de la empresa, como una colección de documentos (PDF, hojas de cálculo, presentaciones, etc.) que deben analizarse, resumirse, consultarse o utilizarse de otro modo en una tarea lingüística. Tales tareas incluyen hacer preguntas detalladas sobre las implicaciones de una cláusula de un contrato, por ejemplo, o crear una visualización de las previsiones de ventas para el lanzamiento de un próximo proyecto.
Hay dos razones por las que utilizar un LLM de acceso público como ChatGPT puede no ser apropiado para procesar documentos internos. La confidencialidad es la primera y obvia. Pero la segunda razón, también importante, es que los datos de entrenamiento de un LLM público no incluyen información interna de su empresa. Por lo tanto, es poco probable que ese LLM dé respuestas útiles cuando se le pregunte por esa información.
Introduzca la generación aumentada por recuperación, o RAG. RAG es una técnica utilizada para aumentar un LLM con datos externos, como los documentos de su empresa, que proporcionan al modelo el conocimiento y el contexto que necesita para producir resultados precisos y útiles para su caso de uso específico. RAG es un enfoque pragmático y eficaz para utilizar LLM en la empresa.
En este artículo, explicaré brevemente cómo funciona RAG, enumeraré algunos ejemplos de cómo se utiliza RAG y proporcionaré un ejemplo de código para configurar un marco RAG sencillo.
Cómo funciona la generación aumentada por recuperación
Como su nombre indica, la RAG consta de dos partes: una de recuperación y otra de generación. Pero eso no aclara mucho. Es más útil pensar en la RAG como un proceso de cuatro pasos. La primera se realiza una vez y las otras tres tantas veces como sea necesario.
Las cuatro etapas de la generación aumentada por recuperación:
Introducción de los documentos internos en una base de datos vectorial. Este paso puede requerir una gran cantidad de limpieza de datos, formateo y fragmentación, pero se trata de un coste inicial único. (Para una introducción rápida a las bases de datos vectoriales, véase este artículo).
Una consulta en lenguaje natural, es decir, la pregunta que un humano quiere hacer al LLM.
Aumento de la consulta con datos recuperados mediante la búsqueda de similitudes en la base de datos vectorial. En este paso se añade a la consulta el contexto del almacén de documentos antes de enviarla al LLM. La consulta indica al LLM que responda en el contexto del contenido adicional. El marco RAG realiza este trabajo entre bastidores mediante un componente denominado recuperador, que ejecuta la búsqueda y añade el contexto pertinente.
Generación de la respuesta a la consulta aumentada por parte del LLM.
Al centrar el LLM en el corpus de documentos, RAG ayuda a garantizar que el modelo produzca respuestas relevantes y precisas. Al mismo tiempo, la RAG ayuda a evitar respuestas arbitrarias o sin sentido, a las que se suele hacer referencia en la literatura como «alucinaciones».
Desde el punto de vista del usuario, la generación aumentada por recuperación no parecerá diferente de hacer una pregunta a cualquier LLM con una interfaz de chat, salvo que el sistema sabrá mucho más sobre el contenido en cuestión y dará mejores respuestas.
El proceso GAR desde el punto de vista del usuario:
Un humano formula una pregunta al LLM.
El sistema GAR busca en el almacén de documentos (base de datos vectorial) y extrae contenido que pueda ser relevante.
El sistema RAG pasa la pregunta del usuario, más el contenido adicional recuperado del almacén de documentos, al LLM.
Ahora el LLM «sabe» proporcionar una respuesta que tiene sentido en el contexto del contenido recuperado del almacén de documentos (base de datos vectorial).
El sistema RAG devuelve la respuesta del LLM. El sistema RAG también puede proporcionar enlaces a los documentos utilizados para responder a la consulta.
Casos de uso de la generación aumentada por recuperación
Los casos de uso de la RAG son variados y crecen rápidamente. Estos son sólo algunos ejemplos de cómo y dónde se utiliza la GAR.
Motores de búsqueda
Los motores de búsqueda han implementado la RAG para proporcionar fragmentos destacados más precisos y actualizados en sus resultados de búsqueda. Cualquier aplicación de LLM que deba mantenerse al día con información constantemente actualizada es una buena candidata para la RAG.
Sistemas de respuesta a preguntas
RAG se ha utilizado para mejorar la calidad de las respuestas en los sistemas de respuesta a preguntas. El modelo, basado en la recuperación, encuentra los pasajes o documentos pertinentes que contienen la respuesta (mediante búsqueda por similitud) y, a continuación, genera una respuesta concisa y pertinente basada en esa información.
Comercio electrónico
La GAR puede utilizarse para mejorar la experiencia del usuario en el comercio electrónico proporcionando recomendaciones de productos más pertinentes y personalizadas. Al recuperar e incorporar información sobre las preferencias del usuario y los detalles del producto, RAG puede generar recomendaciones más precisas y útiles para los clientes.
Sanidad
RAG tiene un gran potencial en el sector sanitario, donde el acceso a información precisa y oportuna es crucial. Al recuperar e incorporar información médica relevante de fuentes externas, la GAR puede ayudar a proporcionar respuestas más precisas y contextualizadas en aplicaciones sanitarias. Estas aplicaciones aumentan la información a la que puede acceder un médico humano, que en última instancia es quien realiza la llamada y no el modelo.
Legal
La GAR puede aplicarse eficazmente en situaciones jurídicas, como las fusiones y adquisiciones, en las que complejos documentos jurídicos proporcionan contexto para las consultas, permitiendo una navegación rápida a través de un laberinto de cuestiones normativas.
Introducción de tokens e incrustaciones
Antes de sumergirnos en nuestro ejemplo de código, necesitamos echar un vistazo más de cerca al proceso de ingestión de documentos. Para poder ingerir documentos en una base de datos vectorial para su uso en RAG, tenemos que pre-procesarlos de la siguiente manera:
Extraer el texto.
Tokenizar el texto.
Crear vectores a partir de los tokens.
Guardar los vectores en una base de datos.
¿Qué significa esto?
Un documento puede ser PDF o HTML o cualquier otro formato, y no nos importa el marcado o el formato. Lo único que queremos es el contenido, el texto en bruto.
Después de extraer el texto, tenemos que dividirlo en trozos, llamados «tokens», y luego asignar estos tokens a vectores de alta dimensión de números de coma flotante, normalmente de 768 o 1024, o incluso más grandes. Estos vectores se denominan incrustaciones, aparentemente porque estamos incrustando una representación numérica de un trozo de texto en un espacio vectorial.
Hay muchas formas de convertir texto en incrustaciones vectoriales. Normalmente esto se hace utilizando una herramienta llamada modelo de incrustación, que puede ser un LLM o un modelo codificador independiente. En nuestro ejemplo RAG, utilizaremos el modelo de incrustación de OpenAI.
Una nota sobre LangChain
LangChain es un framework para Python y TypeScript/JavaScript que facilita la creación de aplicaciones basadas en modelos lingüísticos. Esencialmente, LangChain te permite encadenar agentes o tareas para interactuar con modelos, conectar con fuentes de datos (incluyendo almacenes de datos vectoriales), y trabajar con tus datos y respuestas de modelos.
LangChain es muy útil para saltar a la exploración de LLM, pero está cambiando rápidamente. Como resultado, requiere cierto esfuerzo mantener todas las librerías sincronizadas, especialmente si tu aplicación tiene muchas partes móviles con diferentes librerías Python en diferentes etapas de evolución. También ha surgido un marco más reciente, LlamaIndex. LlamaIndex fue diseñado específicamente para aplicaciones de datos LLM, por lo que tiene más de una inclinación empresarial.
Tanto LangChain como LlamaIndex disponen de amplias bibliotecas para la ingesta, el análisis sintáctico y la extracción de datos a partir de una amplia gama de fuentes de datos, desde texto, PDF y correo electrónico hasta sistemas de mensajería y bases de datos. El uso de estas librerías elimina la molestia de analizar cada tipo de datos y extraer el contenido del formato. Esto ya vale el precio de entrada.
Fuente: https://www.computerworld.es/tecnologia/generacion-aumentada-por-recuperacion-paso-a-paso