12 de agosto de 2026
RAG que no alucina: patrones que sí funcionan en producción
RAG (Retrieval-Augmented Generation) suena simple en el tutorial: trocea tus documentos, mételos en un vector store, recupera los top-k más parecidos a la pregunta y pásaselos al modelo. En producción, ese pipeline de tres pasos se rompe rápido.
Por qué falla el RAG naive
- Chunking ciego. Cortar cada 500 tokens sin respetar la estructura del documento parte una tabla o un procedimiento por la mitad, y el retrieval devuelve fragmentos sin contexto.
- Similitud no es relevancia. Un chunk puede ser semánticamente parecido a la pregunta y no contener la respuesta. El modelo, con ese contexto de por medio, alucina con más confianza que si no tuviera nada.
- Top-k fijo. Si siempre recuperas 5 chunks, unas veces sobra contexto (ruido) y otras falta (la respuesta estaba en el chunk 8).
Tres patrones que sí funcionan
- Chunking consciente de la estructura. Trocea por encabezados, secciones o límites semánticos, no por número de tokens. Guarda el chunk padre como metadata para poder expandir contexto si hace falta.
- Búsqueda híbrida. Combina similitud vectorial con búsqueda léxica (BM25). Los nombres propios, códigos de error o términos exactos los encuentra mejor el léxico que el embedding.
- Re-ranking antes de generar. Recupera un top-20 barato y pasa un re-ranker (cross-encoder) para quedarte con los 3-5 realmente relevantes. Es la diferencia entre "parecido" y "útil".
const candidates = await vectorStore.search(query, { topK: 20 });
const reranked = await reranker.rank(query, candidates);
const context = reranked.slice(0, 4).map((c) => c.text).join('\n\n');
const prompt = `
Responde solo con la información del CONTEXTO. Si no está, di "no tengo esa información".
CONTEXTO:
${context}
PREGUNTA: ${query}
`;
La regla que evita la mayoría de alucinaciones
Instruye explícitamente al modelo para que admita cuando no sabe, y verifica que el contexto recuperado realmente contiene la respuesta antes de generar. Un RAG sin esta instrucción rellena huecos con confianza; con ella, falla de forma visible en vez de silenciosa.
Cuándo NO necesitas RAG
Si tu corpus cabe en la ventana de contexto del modelo (documentos pequeños, pocas decenas de páginas), un context window largo sin retrieval es más simple y a menudo más preciso que montar una capa de RAG. Resérvalo para corpus que de verdad no caben.
La próxima semana: cómo evaluar un pipeline de RAG con métricas automáticas, no solo "a ojo".
// no te pierdas el próximo número
$ suscribir --boletin --modulo-gratis --to tu@email.com