¿Qué es RAG (Retrieval-Augmented Generation) y cómo revoluciona la IA Generativa?
Los modelos de lenguaje natural (LLM) nos han abierto una enorme cantidad de posibilidades a la hora de aplicar la Inteligencia Artificial y en este área la metodología RAG permite llevar el uso de la IA a registros todavía más sorprendentes, personalizados y versátiles.
¿Qué es RAG (Retrieval-augmented generation)?
Para entender qué es RAG vamos a pensar un poco en cómo funcionan los modelos de Inteligencia Artificial conocidos como LLM (Chat-GPT y similares). A este tipo de modelos les podemos hacer preguntas y son capaces de contestar en base a su propio conocimiento. Como sabemos, ese conocimiento es enorme pero obviamente no lo saben todo, a veces porque no han sido entrenados con cierta información y a veces simplemente porque es información surgida hace poco tiempo, que no estaba disponible cuando ellos fueron entrenados.
Así pues, cuando quieres desarrollar aplicaciones que usen la IA Generativa, de modo que puedas apoyarte en LLM para interactuar con los usuarios, por medio de texto, puedes basarte en los modelos existentes y solicitarles que hagan cosas. Cuando quieres que hagan cosas bastante especializadas les tienes que dar información a través del contexto. Con ello conseguimos que procesen datos específicos sobre nuestro dominio, de modo que nos respondan de manera más específica para resolver bien nuestras necesidades.
En este marco, si tienes que pedirle a un modelo que te ofrezca una información determinada sobre un artículo o un correo, como por ejemplo un resumen, simplemente le tienes que entregar el contenido de ese artículo o ese email como contexto y conseguirás lo que necesitas.
Pero ahora imagina que no se trata de un simple artículo. Pensemos en un volumen de información mayor, como un libro. Imagina que quieres saber en qué apartado de un libro sobre el cuerpo humano se habla de cierto proceso químico que ocurre a nivel celular. Entonces le tendrías que entregar todo el libro como contexto. Sin embargo, esto no es siempre posible, porque los modelos tienen unas ventanas de contexto limitadas. Ahí es donde las técnicas de RAG entran en juego.
Así pues, RAG (acrónimo de Retrieval-Augmented Generation, que podríamos traducir como generación aumentada por recuperación) es una metodología que nos permite aplicar la Inteligencia Artificial en el procesamiento de grandes o inmensas cantidades de información propias, que desconoce el modelo. Esto lo podemos hacer sin necesidad de pasarle toda esa información al modelo a través del contexto y sin que el modelo necesite conocer los los datos de base con los que necesitan trabajar para extraer la información.
Enseguida veremos ejemplos y casos de uso concretos pero ya te adelantamos que se trata de una manera más versátil y sencilla de apoyarnos en los LLM para realizar desarrollos a medida en los ámbitos más variados. Y lo mejor, se basan en herramientas que están al alcance de cualquier empresa.
RAG vs. Fine-tuning
Como hemos dicho, los modelos están entrenados con unas cantidades inmensas de información, por lo que conocen una infinidad de temas. Sin embargo, muchas veces la información que necesitas que el modelo use para producir sus respuestas no está a su alcance, ya sea porque se basa en temas demasiado específicos de tu dominio, o simplemente porque son contenidos novedosos que no formaban parte de la base de conocimiento usada para el entrenamiento del modelo.
Así pues, si te encuentras en la necesidad de crear aplicaciones con IA, como un asistente especializado, seguramente necesitarás que el LLM sea capaz de conocer mucha información de tu dominio, aparte de la que ya conocen por sí mismo. En estos casos tenemos dos enfoques distintos uno es RAG y el otro es el Fine-tuning.
Fine tuning consiste en realizar el entrenamiento de un modelo, aunque no desde cero. Se basa en usar modelos existentes a los que les hacemos que memoricen todo lo que necesitamos que dominen de una materia en particular, necesaria para resolver tus requisitos. Al realizar este entrenamiento estaremos creando una especie de modelo nuevo, pero especializado. Para ello se requieren grandes cuotas de computación pero con ello generamos un modelo que será capaz de resolver cosas extra.
Con RAG las cosas son un poco distintas. Realmente no necesitamos crear un modelo nuevo, con lo que podemos usar los propios modelos LLM que ya existen, incluso modelos open source que están disponibles para uso libre como Llama de Meta. En vez de entrenar al modelo para permitirle conocer todos nuestros datos específicos utilizamos el contexto, pero suministrando en cada solicitud solamente aquellas partes muy concretas que el modelo necesita conocer para componer cada respuesta.
Estas técnicas son esenciales actualmente en el uso de IA ya que, como hemos dicho, el contexto tiene un límite. Si tenemos gigas o incluso teras de información, no se lo podemos pasar todo en cada simple solicitud al modelo.
Aquí es donde necesitamos proceder con las técnicas de Fine-tuning o RAG. Todo esto lo vamos a ver con un poco más en detalle a lo largo de este post, de momento es suficiente para que tengas una idea inicial de cuáles son los problemas que tienen como objetivo resolver. Ahora vamos a ver las diferencias más importantes entre fine-tuning y RAG y por qué actualmente RAG está resultando tan útil.
Conocimiento dinámico frente a conocimiento estático
Cuando utilizas RAG puedes tener información mucho más dinámica, ya que la información que proporcionas al modelo en el contexto reside en tu propia base de datos, que puede cambiar todas las veces que haga falta.
Por lo tanto, tienes mucha más libertad para actualizarla de manera rápida sin tener que hacer nuevos entrenamientos de modelos distintos.
Examen a libro abierto vs. aprendizaje de memoria
Fine tuning sería como ofrecer información a un modelo, para que la almacene en su propia memoria y la pueda utilizar siempre que la necesite.
En cambio, RAG sería más bien como si le entregamos un libro para que pueda leer las partes que necesita en cada momento, construyendo sus respuestas sin necesidad de procesar y conocerse al dedillo todo el contenido de ese libro.
Inversión en infraestructura y costes operativos
Si tenemos que fabricar nuestro propio modelo entrenado con los datos que queremos que conozca tendremos que realizar una inversión inicial bastante grande. Esta inversión muchas veces no está al alcance de cualquier tipo de empresa y requiere muchos conocimientos técnicos sobre el funcionamiento de los modelos.
Esto no ocurre con RAG, donde somos capaces de operar a costos asumibles, ya que gran parte del proceso lo podemos hacer con nuestra propia infraestructura.
Facilidad de actualización y mantenimiento
En el proceso de fine-tuning construimos un modelo que tiene una información determinada. El modelo trabajará con ella y cualquier dato extra que necesite conocer tendría que enviarse en el contexto. Esto en principio no está mal, pero conseguir actualizar el modelo requiere costes operativos bastante elevados, necesarios cada vez que queramos ampliar su conocimiento de base.
En cambio, cuando utilizamos RAG estamos optimizando también los procesos de actualización y mantenimiento, ya que nuestros datos pueden ser cocinados todas las veces que queramos y el modelo siempre puede ser el mismo. Por lo tanto, no hay un coste tan elevado cuando tenemos que añadir más información para tratar también con ella.
Precisión fáctica y trazabilidad de la información
La precisión fáctica hace referencia al grado en que la información que ofrece un modelo se corresponde con la realidad observable y comprobable. En otras palabras, mide cuán verificable y cierta pueda ser la respuesta de un modelo.
En este sentido, la precisión fáctica de RAG suele ser mejor porque la respuesta se apoya en fuentes recuperadas en el momento, que nosotros damos por buenas. Pero además eso también nos permite trazar de dónde sale cada dato.
Sin embargo, en fine-tuning no se tiene esa trazabilidad completa, ya que no sabemos de dónde el modelo está obteniendo los datos y por tanto es más difícil auditar o vincular cada afirmación a una fuente concreta de procedencia.
¿Cómo funciona el proceso RAG?
Ok, todo lo que hemos visto hasta aquí nos ha dado una información conceptual bastante básica para poder empezar a entender el funcionamiento de RAG y las diferencias con otras aproximaciones actuales a la hora de trabajar con modelos de generación por IA. Sin embargo no hemos comenzado a detallar como funciona el proceso de RAG. Vamos a ver eso ahora.
Fase de ingesta
La primera fase se denomina ingesta. En ella se prepara el contenido que queremos que el modelo disponga para realizar sus respuestas. Ese contenido puede ser enorme y venir de distintas fuentes, como documentos, hojas de cálculo, etc. Además, se debe limpiar de alguna manera, para evitar que haya duplicados o datos que no sean verdaderamente relevantes.
Durante esta fase se tiene que hacer también un proceso denominado chunking que consiste en dividir el contenido en fragmentos (chunks) manejables para los procesos de IA.
Generación de embeddings
Los embeddings son representaciones en vectores numéricos de muchas dimensiones que capturan el significado semántico de cada fragmento. La IA usa esos embeddings para representar la información, poder compararla y buscar datos, dentro de espacios numéricos.
Es importante entender que esos vectores almacenan representan el significado de la información y no la información en sí misma. Al final, los vectores se usan para mapear el contenido, de modo que se pueda luego trabajar con esos datos matemáticamente.
Bases de datos vectoriales
Las bases de datos vectoriales almacenan los embeddings y el texto original que representan, junto con otras informaciones como sus metadatos. Estas bases de datos vectoriales permiten hacer búsquedas rápidas basadas en proximidad semántica (por ejemplo, usando similitud coseno). Estas bases de datos están optimizadas para responder consultas donde se quieren extraer fragmentos más cercanos al embedding de cierta pregunta.
El proceso de recuperación (retrieval)
Luego tenemos el proceso de recuperación o retrieval. En esta fase, en base a una pregunta del usuario que el sistema la convierte en un embedding específico, se consulta la base de datos vectorial para conseguir aquellos los fragmentos más relevantes, por parecidos con el contenido que se ha preguntado.
En este proceso a menudo se combinan técnicas diversas y filtrados potentes realizados con distintos algoritmos, pero el objetivo siempre será devolver los fragmentos más adecuados a las preguntas realizadas, de modo que se los podamos entregar al modelo generativo.
La Generación final
El último paso consiste en ofrecer al modelo la información que consiste en la pregunta que el usuario había realizado, junto con el contexto enriquecido con todos los fragmentos que se habían seleccionado en pasos anteriores. De este modo, el modelo puede realizar una respuesta ajustada a la información que se dispone, lo que mejora la precisión fáctica y trazabilidad.
Componentes clave de una arquitectura RAG
Creemos que con todo lo que hemos visto hasta ahora tendrás una idea más fiel de cómo funciona RAG y el proceso que se utiliza para enriquecer el contexto, pero solo con las partes relevantes que el modelo necesita conocer en cada solicitud.
Ahora vamos a ver los componentes clave que se usan para todo este sistema de trabajo con IA.
Modelos de lenguaje (LLM) como motor de procesamiento
El primer elemento es el modelo de lenguaje LLM. Puede ser un modelo en el cloud, con un servicio como Chat-GPT o similares, pero también un modelo de IA que hayamos descargado y tenemos en local, como LLama.
El rol de los marcos de trabajo
Luego usamos distintos frameworks para poder realizar todos los procesos anteriores a la demanda final al modelo. Estos frameworks, como LangChain, LlamaIndex o Haystack, nos sirven para orquestar el flujo de trabajo en RAG, haciendo los procesos que hemos explicado en los puntos anteriores de una manera más sencilla y avanzada que si lo tuviéramos que hacer a mano.
Bases de datos de vectores populares
Como bases de datos vectoriales podríamos usar en principio cualquier base de datos normal como PostreSQL o incluso SQLite. Pero en el día a día de estos procesos ganamos ventajas si utilizamos bases de datos especializadas como Pinecone, Milvus, Chroma y otras.
El orquestador
Es el agente que se encarga de coordinar todo el flujo de trabajo descrito en RAG. No genera las respuestas directamente pero sí se encarga de dirigir los pasos para poder obtenerlas.
Ventajas de implementar RAG en entornos profesionales
Ya hemos explicado algunas de las ventajas de trabajar con RAG, sobre todo con respecto a otros mecanismos como fine tuning. Ahora vamos a ver otras ventajas un poco más generales sobre estas técnicas.
Eliminación de alucinaciones mediante el anclaje en datos reales (Grounding)
Los modelos tienen la capacidad de trabajar con una cantidad de datos limitada en su contexto. Si bien es cierto que con el paso del tiempo esta capacidad va en aumento siempre existirán unas limitaciones en la propia tecnología.
Esto es importante cuando necesitamos utilizar gigas o incluso teras de conocimiento para alimentar el contexto. Si lo hacemos a lo bruto nunca seríamos capaces de entregar todo ese enorme contexto, modo que si le preguntamos algo al modelo no podrá responder con la exactitud necesaria.
En esos casos lo que ocurre es que el modelo tendrá alucinaciones para proporcionar la respuesta, algo que se consigue eliminar gracias a estas técnicas.
Reducción drástica del Time-to-Market en soluciones de IA
Hacer todo el proceso necesario para construir el material para operar con RAG es viable en un tiempo bastante reducido, al menos comparativamente hablando con respecto a otras alternativas.
Obviamente, dependiendo de la cantidad de datos que tengamos que utilizar cambiará el tiempo para procesarlos y producir el material necesario (los embeddings). Sin embargo, ese proceso nunca será tan costoso como producir un modelo capaz de entender todos nuestros datos particulares.
Por lo tanto, hacer soluciones de Ia que utilizan RAG es viable en un corto espacio de tiempo de manera que es drásticamente mejor que otras alternativas
Control total sobre la privacidad y la soberanía del dato
Este es uno de los puntos más importantes que nos ofrece RAG. Básicamente, cuando trabajamos con esta técnica podemos conseguir que los datos se queden en nuestras instalaciones, evitando tener que depender de servicios en la nube para procesarlos.
Esto es algo muy importante si nuestra empresa tiene restricciones debidas a los datos que produce o consume, ya sea por el sector industrial al que pertenezca y las regulaciones de privacidad o protección de datos.
Incluso las soluciones de RAG se encajan muy bien con el alojamiento de los propios modelos, lo que hace que en la práctica los datos nunca necesiten salir de nuestros sistemas ni siquiera cuando el LLM los tiene que procesar.
Transparencia y auditoría
Paralelamente, al entregarle nosotros mismos los datos que necesita, el proceso se hace mucho más transparente y comprobable, lo que facilita también la auditoría.
Escalabilidad ilimitada del conocimiento organizacional
Como hemos dicho antes, cuando trabajamos con RAG podemos usar datos de cualquier magnitud. Simplemente tardaremos más en producir los materiales iniciales para poder acotar el contexto al antes de atacar el modelo. Pero podremos trabajar con cualquier cantidad de información que necesitemos.
Adaptabilidad a múltiples dominios de conocimiento con un solo modelo
Incluso, si tenemos diversos modelos de dominio con datos radicalmente distintos, podemos usarlos utilizando un mismo modelo. Con lo cual, una vez que hemos montada la infraestructura necesaria para trabajar con RAG técnicamente podemos basarnos en nuestras mismas técnicas para poder usar cualquier otra fuente de información sin necesidad de cambiar el modelo.
Optimización de costes de inferencia y desarrollo
RAG evita la necesidad de fine‑tuning o el uso de modelos muy grandes. Centraliza el conocimiento en una base externa, más barata de mantener o actualizar y eso es mucho más sencillo y económico que reentrenar el modelo.
Además consigues optimizar el coste de inferencia y desarrollo porque tus equipos pueden iterar sobre prompts, datos de contexto y bases vectoriales sin volver a pagar el coste de entrenamiento ni procesamiento tan intenso.
Casos de uso prácticos del RAG
Seguro que a medida que has ido leyendo este post te habrás imaginado diversas situaciones donde podrías sacarle partido a RAG. De todos modos ahora vamos a ver algunas típicas que pueden darte también otras ideas prácticas donde se podría usar esta metodología.
Asistentes de soporte técnico con acceso a manuales y logs en tiempo real
La más clara sería la creación de asistentes de soporte técnico que tienen acceso a todos los manuales específicos con los cuales una empresa debe trabajar. Pero no solo eso, también podemos alimentar el propio modelo con datos que se van produciendo a medida que se consumen las aplicaciones o datos introducidos en tiempo real por los usuarios.
Consultoría legal y cumplimiento (Compliance) sobre bases de datos normativas
También podemos utilizar los modelos para consultarles acerca de normativas (leyes, normas gubernamentales, reglamentos internos, políticas, jurisprudencia…), sabiendo que los datos que se están usando para las respuestas son precisos, verdaderos y fiables.
Gestión del conocimiento interno
Para las empresas puede ser una excelente manera de gestionar el conocimiento interno, ya que permite obtener respuestas certeras que nos ayuden a saber dónde están las fuentes de la información que necesitamos consultar en cada momento. Esto es algo importante sobre todo para las empresas que gestionan enormes cantidades de información que son imposibles de retener de manera global por los empleados, donde hacer consultas requeriría mucho tiempo para encontrar las cosas.
Análisis financiero y de mercado basado en reportes diarios
Técnicamente podemos usarlo también para recabar datos diarios y luego hacer análisis con ellos. Obviamente los modelos no son capaces de conocer los datos que día a día se van produciendo y con RAG se los podemos proporcionar para que el modelo nos haga informes personalizados de ellos.
Soporte al diagnóstico médico basado en literatura científica y protocolos
Mediante RAG también podemos realizar diagnósticos médicos utilizando la base de conocimiento previamente disponible, que puede incluir toda la cantidad de casos con los que se haya trabajado anteriormente, así como literatura científica sobre el tema que estemos necesitando abordar.
Desafíos y limitaciones de la Generación Aumentada por Recuperación
Aunque RAG nos aporta más beneficios que problemas también es cierto que existen algunas limitaciones en este enfoque, que derivan en retos que tendremos que afrontar. Los más importantes son los siguientes.
El problema del ruido
En RAG uno de los problemas más importantes viene por el ruido, que básicamente son fragmentos recuperados que realmente son poco relevantes para componer las respuestas.
Cuando ocurre esto podemos estar alimentando un modelo con datos buenos y no tan buenos, con lo que éste tenderá a componer respuestas mezclando datos que muchas veces contienen información útil con otros eran simplemente desechables.
Latencia en la respuesta
Todos los pasos adicionales para conseguir los fragmentos con los que alimentar el contexto del LLM llevan su tiempo, especialmente si la información es muy grande. Esto hace que el tiempo hasta obtener las respuestas aumente en comparación a si consultamos directamente con un modelo.
Complejidad en la segmentación (Chunking strategy) de documentos extensos
El paso de la segmentación que tenemos que realizar con RAG (los chunks) puede complicarse bastante cuando tenemos documentos extensos. Si bien es verdad que existen librerías enfocadas en resolver estos problemas, no deja de ser un desafío, sobre todo cuando tenemos documentos con mucha información que además es muy variopinta. En estos casos siempre podemos configurar los chunks, de modo que tengan tamaños mayores o usar separadores determinados que pueden ayudar a procesarlos mejor.