Un modelo de lenguaje tiene un problema incómodo: sabe muchísimo sobre el mundo en general, pero nada sobre tu empresa, tus documentos o lo que pasó ayer. Su conocimiento quedó congelado el día que terminó su entrenamiento, y no tiene forma de consultar tus archivos. Puedes reentrenarlo con tus datos —caro, lento y hay que repetirlo cada vez que algo cambia—, o puedes hacer algo mucho más astuto: pasarle la información justa en el momento de preguntar. Eso es RAG.
RAG significa Retrieval-Augmented Generation: generación aumentada por recuperación. En cristiano: primero busco los documentos relevantes, luego se los doy al modelo junto con la pregunta. El modelo responde apoyándose en ese material, no en su memoria difusa.
El problema que resuelve
Sin RAG, un LLM que no sabe algo hace lo peor posible: se lo inventa con total seguridad. Es la famosa alucinación. Le preguntas por la política de vacaciones de tu empresa y te entrega una respuesta plausible, bien redactada… y falsa, porque nunca vio ese documento.
RAG ataca esto de raíz. Si la respuesta está en un documento que le entregamos, el modelo la usa; y como le pedimos que se base en el material, podemos exigirle que cite de dónde sacó cada cosa. Menos invención, más trazabilidad.
Las dos mitades: recuperar y generar
RAG se lee en su propio nombre. Son dos fases, y conviene verlas por separado.
1. Preparación (una sola vez)
Antes de responder nada, hay que dejar los documentos listos para buscar:
- Trocear (chunking): partir cada documento en fragmentos manejables —un par de párrafos cada uno—. Ni tan grandes que mezclen temas, ni tan chicos que pierdan contexto.
- Vectorizar: convertir cada fragmento en un embedding, ese vector donde la cercanía significa parecido de significado.
- Guardar: meter todos esos vectores en una base de datos vectorial.
2. Consulta (en cada pregunta)
- Se convierte la pregunta del usuario en un vector con el mismo modelo de embeddings.
- Se recuperan de la base los k fragmentos más cercanos —los más parecidos en significado, no en palabras exactas—.
3. Generación
- Se arma un prompt que dice, más o menos: "Usando solo esta información: [fragmentos recuperados], responde: [pregunta]".
- El LLM redacta la respuesta apoyándose en ese contexto.
El prompt es el pegamento
La magia de RAG no está en un algoritmo exótico, sino en cómo se le habla al modelo en el paso 3. Un patrón típico:
Eres un asistente que responde SOLO con la información del contexto.
Si la respuesta no está en el contexto, di "No lo sé". No inventes.
Contexto:
{fragmentos recuperados de la base vectorial}
Pregunta: {pregunta del usuario}
Ese "si no está, di que no lo sabes" es media batalla ganada contra las alucinaciones. Le damos permiso explícito para reconocer que no sabe, en vez de premiarlo por rellenar. Cómo escribir estas instrucciones es justo el tema de la ingeniería de prompts.
Dónde se tuerce en la práctica
RAG suena simple, y su versión de juguete lo es. Pero en producción los problemas casi nunca están en el LLM; están en la recuperación:
- Trozos mal cortados — si partes un documento a la mitad de una idea, ningún fragmento contiene la respuesta completa.
- La consulta no se parece al documento — el usuario pregunta "¿cuántos días libres tengo?" y el documento dice "asignación anual de vacaciones". Los embeddings ayudan (capturan significado, no palabras), pero no son magia.
- Recuperar de más o de menos — pocos fragmentos y falta contexto; demasiados y el modelo se pierde en el ruido.
Por eso se dice que RAG es, en el fondo, un problema de búsqueda con un LLM al final. Si la recuperación trae basura, el modelo redactará una respuesta preciosa a partir de basura.
Para llevar
RAG le da a un LLM acceso a información que no tenía: recupera los documentos relevantes con búsqueda vectorial y se los entrega al modelo para que responda apoyándose en ellos. Es la forma estándar de construir asistentes sobre datos privados, con respuestas fundamentadas y con fuentes, sin el costo de reentrenar. Su punto débil rara vez es el modelo: casi siempre es la calidad de la recuperación. Une tres piezas que ya conoces —embeddings, bases vectoriales y LLM— en un solo sistema útil.
