Cómo funciona un sistema RAG por dentro
Troceado, búsqueda, reordenación y respuesta con fuentes: las piezas de la técnica más usada para que un modelo responda con documentos propios, con demostraciones de dónde falla cada una.
Páginas de este taller
En esta página
RAG (retrieval-augmented generation, generación aumentada por recuperación) es la técnica que permite a un modelo de lenguaje responder sobre documentos que no vio al entrenarse: la normativa interna de una empresa, un catálogo o un archivo histórico. La idea cabe en una frase: antes de responder, buscar los fragmentos relevantes y dárselos al modelo. Casi todos los fallos tienen un origen localizable, y esta pieza enseña a encontrarlo.
1. La idea: un examen con apuntes
Un modelo de lenguaje sin RAG es como un estudiante en un examen sin apuntes: responde con lo que recuerda, y si no lo sabe, a menudo improvisa algo plausible. RAG le permite consultar los apuntes antes de contestar, con una condición: tiene que encontrar la página correcta.
Por eso un sistema RAG tiene dos partes que pueden fallar por separado: buscar y responder. Pruébalo con una tienda en línea y su política de devoluciones:
Míralo
Buscar antes de responder
¿Puedo devolver una camiseta con mi nombre bordado?
La idea: Si la respuesta es mala, mira primero qué se recuperó. Cambiar de modelo no arregla una búsqueda que no encuentra el fragmento.
Fíjate en el segundo escenario: el modelo responde con total fidelidad a lo que recibió, y aun así se equivoca. El error se produjo antes, en la búsqueda.
2. El esquema completo
El sistema tiene dos fases. Una se hace una sola vez, al preparar los documentos; la otra, cada vez que alguien pregunta.
Míralo
Las dos fases de un sistema RAG
- Paso 1: Preparación 1: trocear (actual)
- Paso 2: Preparación 2: vectorizar e indexar
- Paso 3: Consulta 1: buscar
- Paso 4: Consulta 2: reordenar
- Paso 5: Consulta 3: responder con fuentes
Paso 1 de 5
Preparación 1: trocear
Veamos cada pieza con más detalle.
3. Trocear los documentos
Los documentos se dividen en fragmentos (chunks) de unos cientos de palabras, por dos motivos: el modelo no puede leerlo todo a la vez, y buscar en fragmentos pequeños es más preciso.
Cómo se corta importa mucho. Prueba a trocear este reglamento de devoluciones y busca la palabra «personalizados»:
Interactivo
Trocear: dónde se corta importa
- [1]Artículo 1. Plazo. El cliente puede devolver cualquier producto en un plazo de 30 días naturales desde la entrega, sin n
- [2]ecesidad de justificar el motivo. Artículo 2. Excepciones. Lo dispuesto en el artículo anterior no se aplica a los produ
- [3]ctos personalizados ni a los precintados que se hayan abierto. Artículo 3. Reembolso. El importe se devolverá por el mis
- [4]mo medio de pago en un plazo máximo de 14 días.
La búsqueda de «personalizados» recupera el fragmento resaltado. No contiene «no se aplica»: el modelo verá la palabra, pero no la excepción, y puede responder justo lo contrario.
La idea: Cortar por tamaño fijo puede separar una excepción de aquello a lo que se refiere. Cortar respetando la estructura del texto (artículos, apartados, párrafos) evita el problema.
Con algunos tamaños, la frase «no se aplica» queda en un fragmento y «productos personalizados» en otro. El sistema recupera el fragmento con la palabra buscada, pero sin la negación: el modelo puede acabar diciendo justo lo contrario de lo que dice el reglamento.
Cortar por apartados, párrafos o artículos, respetando la estructura del texto, evita ese problema. Es una decisión sobre la organización del discurso, y quien ha editado o anotado textos tiene ventaja.
No hay un tamaño de fragmento correcto para todo. Cada género textual tiene su propia unidad natural, y respetarla es la mejor regla:
Un fragmento por artículo o apartado, con el título de la norma y el número del artículo al principio. Nunca separar una excepción («salvo…», «no se aplica a…») de la regla a la que afecta.
Un fragmento por pareja de pregunta y respuesta. La pregunta original ayuda mucho a la búsqueda, porque se parece a lo que escribirá la gente.
Una carta por fragmento si es corta, con remitente, destinatario y fecha como encabezado. Sin esos datos, «le respondo a su pregunta del día 3» no significa nada.
Por turnos o por temas, con el nombre de quien habla. Cortar a mitad de una intervención mezcla voces y atribuye frases a quien no las dijo.
Es análisis del discurso aplicado: saber dónde empieza y acaba una unidad de sentido, qué elementos (fecha, remitente, número de artículo) necesita un fragmento para entenderse solo y qué conectores («salvo», «no obstante») no se pueden separar de lo que modifican.
4. Convertir fragmentos en vectores
Un modelo de embeddings convierte cada fragmento en una lista de cientos de números que representa su significado. No hace falta entender los números. Basta con la idea: los fragmentos que hablan de lo mismo quedan cerca, aunque usen palabras distintas. «Baja por maternidad» y «permiso por nacimiento» acaban próximos.
Es lo que permite encontrar la respuesta aunque la pregunta no use las palabras exactas del documento.
5. Buscar: por significado y por palabras exactas
Cuando llega una pregunta, se convierte también en vector y se buscan los fragmentos más cercanos. Esta búsqueda por significado tiene un punto débil: falla justo donde la búsqueda clásica por palabras acierta, con nombres propios, siglas, códigos de producto y números de artículo.
Por eso muchos sistemas combinan las dos (búsqueda híbrida). La búsqueda por palabras más usada se llama BM25, y es la de los buscadores clásicos.
6. Reordenar
La búsqueda devuelve rápidamente 20 o 50 candidatos. Un segundo modelo, más lento y más preciso (un reranker), lee cada candidato junto con la pregunta y los vuelve a ordenar. Se quedan los cinco o diez mejores. Es una de las mejoras más baratas que se pueden añadir.
La analogía es la de una bibliotecaria que primero saca del catálogo veinte libros con buena pinta y luego hojea cada uno para quedarse con los cinco que de verdad responden.
7. Generar con las fuentes
El modelo recibe la pregunta y los fragmentos con una instrucción explícita:
Responde solo con la información de los documentos siguientes.
Cita entre corchetes el documento de cada afirmación.
Si la respuesta no está en los documentos, di que no la encuentras.
<documentos>
[doc 1] El plazo de devolución es de 30 días naturales desde la entrega.
[doc 2] Los productos personalizados no admiten devolución.
</documentos>
Pregunta: ¿Puedo devolver una camiseta con mi nombre bordado?
Cada línea de la instrucción tiene una función:
- «Responde solo con…» evita que mezcle lo que recuerda de su entrenamiento.
- «Cita…» permite comprobar cada afirmación.
- «Si no está, dilo» es la más importante. Sin ella, cuando falta la información, el modelo tiende a responder de todos modos.