Errores comunes en tu primer RAG
La lista honesta
Sección titulada «La lista honesta»Si esto es tu primer RAG, vas a cometer al menos tres de estos errores. Lo digo con cariño — los cometí yo, los cometen mis colegas senior, los cometen los tutoriales online. Conocerlos de antemano te ahorra horas de debugging confuso.
1. Modelo de embeddings distinto en ingest vs query
Sección titulada «1. Modelo de embeddings distinto en ingest vs query»Síntoma: Scores siempre muy bajos (top-1 < 0.4) para queries que deberían matchear obvio. La respuesta del LLM es inútil.
Causa: El modelo que usaste para embedear chunks NO es el mismo que usaste para embedear la query. Los vectores viven en espacios distintos — son incomparables.
Fix: Usá una constante compartida (OLLAMA_EMBED en este repo, en @rag-lab/shared/config.ts). Si tenés que cambiar de modelo, re-indexá todo.
2. Chunk size mal calibrado
Sección titulada «2. Chunk size mal calibrado»Síntoma A (chunks muy chicos, ej. 200 chars): top-K trae chunks parciales que no responden la pregunta. El LLM dice “no tengo suficiente contexto”.
Síntoma B (chunks muy grandes, ej. 3000 chars): la respuesta del LLM es vaga, mete temas de la pregunta mezclados con otros. Pierde foco.
Fix: Empezá con 800 chars / 100 overlap (el default del repo). Después, medí: probá 400 / 50, 1200 / 150, y comparte respuestas. El sweet spot depende del corpus.
3. Distance metric incorrecta
Sección titulada «3. Distance metric incorrecta»Síntoma: Scores raros (negativos cuando esperás 0-1, o todos parecidos).
Causa: Creaste la collection con distance: 'Euclid' o 'Dot' en vez de 'Cosine'.
Fix: Para texto, siempre cosine salvo que sepás muy bien qué hacés. Verificá la collection con curl http://localhost:6333/collections/rag_vercel.
4. Prompt sin instrucciones anti-alucinación
Sección titulada «4. Prompt sin instrucciones anti-alucinación»Síntoma: El LLM responde con info que no está en el corpus. Inventa con confianza.
Causa: Tu prompt no le dice explícitamente que se restrinja al contexto. Frases tipo “Answer the question” sin más son insuficientes.
Fix: Las dos frases mágicas del prompt template del repo:
Answer the question using ONLY the context below.If the context does not contain enough information, say so.Ambas son obligatorias. La primera restringe; la segunda habilita admitir ignorancia.
5. Mismatch de idioma corpus / query / modelo
Sección titulada «5. Mismatch de idioma corpus / query / modelo»Síntoma: Scores bajos consistentemente, sin importar la pregunta.
Causa: Corpus en español + query en inglés + nomic-embed-text monolingual = retrieval pobre.
Fix: Mantené idioma consistente. Si necesitás multilingual, usá multilingual-e5-small o BGE-M3 (Ollama tiene varios). El paquete 05-web-demo del repo usa el primero como referencia.
6. Top-K demasiado alto
Sección titulada «6. Top-K demasiado alto»Síntoma: Las respuestas del LLM se vuelven vagas o se contradicen.
Causa: Trayendo 10-15 chunks, varios son ruido. El LLM intenta integrar todo y se pierde.
Fix: Empezá con K = 4 (default del repo). Subí a 6-8 solo si tu corpus es grande y heterogéneo. Más allá de 10, casi siempre estás dilutando señal.
7. No re-indexar después de cambiar algo importante
Sección titulada «7. No re-indexar después de cambiar algo importante»Síntoma: Cambiaste el chunker o el modelo y los resultados no mejoran.
Causa: Qdrant todavía tiene los vectores viejos. Cualquier cambio de upstream (chunker, modelo, dimensión) requiere borrar y recrear la collection.
Fix: El script ingest.ts del repo ya lo hace por vos (recreateCollection()). Si trabajás con tu propio pipeline, agregá ese paso explícitamente.
Cerraste Nivel 1
Sección titulada «Cerraste Nivel 1»Si llegaste hasta acá:
- Tenés el stack 100% local funcionando
- Indexaste el corpus
- Hiciste tu primera query
- Sabés inspeccionar y debuggear
- Conocés los 7 errores más comunes
Eso ya es más de lo que sabe el 80% de la gente que dice que “trabaja con RAG”. Posta.
Lo que viene
Sección titulada «Lo que viene»Tu RAG anda. Sabés mirar adentro, sabés reconocer los errores típicos. Pero “me parece que está OK” no escala. Si cambiás el chunk size o el TOP_K, ¿está mejor o peor? ¿Cuánto?
Para responder eso necesitás métricas reproducibles. Eso es Nivel 2 — Calidad y evaluación: eval harness propio, faithfulness, golden sets, datasets sintéticos. Cuando termines, vas a poder cambiar parámetros y medir la diferencia en lugar de adivinarla.
(Después, los Niveles 3 y 4 te llevan a producción — técnicas avanzadas y operación. El cierre del curso es la comparativa side-by-side de los 4 frameworks del repo, en el último nivel.)