7 · ¿Por qué RAG?
Un modelo solo sabe lo que estaba en sus datos de entrenamiento. RAG recupera tus hechos, los mete en el prompt y le dice al modelo que responda desde ESO — reduciendo la alucinación y desbloqueando conocimiento fresco y privado.
La Generación Aumentada por Recuperación (RAG) es el patrón recuperar → aumentar → generar: embebes la pregunta, traes el texto más relevante de TUS datos, lo pegas en el prompt e instruyes al modelo a responder usando solo ese contexto. Los pesos del modelo quedan congelados — cambias su conocimiento cambiando lo que pones en el contexto.
Sin esto:
Sin RAG el modelo responde desde datos de entrenamiento congelados y genéricos: inventa con confianza hechos que nunca vio (alucinación), no puede citar tus documentos privados y queda desactualizado en cuanto tus datos cambian.
Un modelo de lenguaje solo sabe lo que quedó grabado en sus pesos durante el entrenamiento. Eso implica tres límites duros:
- Alucina. Cuando le preguntas algo que no sabe, no dice "no sé" — predice los siguientes tokens que suenan más plausibles, que suele ser una respuesta confiada y equivocada.
- No ve tus datos privados. El wiki de tu empresa, los tickets de soporte de la semana pasada, el historial de pedidos de este cliente — nada de eso estaba en el conjunto de entrenamiento.
- Queda desactualizado. El entrenamiento se detiene en una fecha de corte; cualquier cosa más nueva simplemente no existe para el modelo.
La Generación Aumentada por Recuperación (RAG) arregla las tres con un solo movimiento: en lugar de pedirle al modelo que responda de memoria, primero traes los hechos relevantes y los pegas en el prompt. El patrón son tres pasos:
- Recuperar — embebes la pregunta del usuario y luego buscas en tus datos (un índice vectorial del Capítulo 2) los chunks de texto más parecidos.
- Aumentar — construyes un prompt que contiene esos chunks recuperados como contexto, más una instrucción: "responde usando solo el contexto de arriba".
- Generar — llamas al modelo. Ahora responde fundamentado en tus hechos en vez de desde memoria congelada.
Los pesos del modelo nunca cambian. Cambias lo que sabe cambiando lo que pones frente a él. Ese es el patrón de ingeniería de LLM más importante en producción.
Aquí tienes un RAG de juguete completo sobre cinco hechos. Usamos un embed() determinista de bolsa de palabras (sin necesidad de un modelo de embeddings real), similitud coseno para recuperar los top-k hechos, y un generate() simulado que compone una respuesta uniendo los hechos recuperados. El simulado es un sustituto de una llamada a un LLM real — pero deja visible lo clave: la respuesta se construye solo a partir de lo que la recuperación encontró, no de la memoria.
Python (in browser)
RAG de juguete de extremo a extremo: embeber → recuperar top-k por coseno → generar simulado. La respuesta se construye solo con hechos recuperados, así que no puede alejarse de tus datos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
La forma en producción es idéntica a la de juguete: embeber la pregunta, recuperar chunks, pegarlos en un prompt fundamentado y luego generar.
¿Cuál es el mecanismo central por el que RAG reduce la alucinación?
- Un modelo solo conoce sus datos de entrenamiento congelados; RAG inyecta hechos frescos, privados y relevantes en el prompt al momento de la consulta.
- RAG = recuperar (embeber + buscar en tus datos) → aumentar (construir un prompt fundamentado) → generar (el modelo responde desde el contexto).
- La mayoría de los bugs de 'alucinación' en producción son en realidad bugs de recuperación — arregla qué contexto ve el modelo, no el modelo.
Los bots de preguntas sobre documentos, los asistentes de soporte, el 'chatea con tu PDF' y la búsqueda con IA usan RAG para fundamentar respuestas en un corpus específico en vez de datos de entrenamiento genéricos.
Si lo quitas: Quita RAG y tu asistente responde de memoria — confiadamente equivocado en cualquier cosa privada, reciente o de nicho, sin forma de citar una fuente.