Módulo 7: RAG y Semantic Search
6. Limitaciones de RAG y Cómo Mitigarlas
Descripción
RAG no es perfecto. Esta cápsula cubre limitaciones comunes (búsqueda incorrecta, límite de contexto, latencia, alucinaciones residuales) y estrategias de mitigación.
Limitación 1: Búsqueda incorrecta (retrieval failure)
Problema:
Si búsqueda semántica retorna chunks irrelevantes, LLM genera respuesta incorrecta.
Ejemplo:
User: "¿Cuál es el horario de atención?"
Sistema busca (semantic search):
→ Retorna chunks sobre "atención al cliente" (tema general)
→ NO retorna chunk con horario específico (8am-5pm)
LLM: "Nuestro equipo está disponible para atención personalizada."
→ Respuesta genérica (no responde la pregunta)
Mitigación 1.1: Hybrid search (keyword + semantic)
Query: "horario de atención"
Keyword search:
→ Documentos que contienen "horario" literalmente
Semantic search:
→ Documentos sobre "atención" conceptualmente
Fusión (RRF):
→ Combinar ambos → Encuentra chunk con horario ✅
Mitigación 1.2: Reranking con cross-encoder
1. kNN retorna top-100 candidatos
2. Cross-encoder reordena específicamente para la query
3. Top-10 final más precisos
Ejemplo:
Query: "política de reembolso"
kNN top-3:
1. "Políticas de la empresa..." (0.85)
2. "Política de reembolso: 30 días..." (0.83) ← Relevante
3. "Política de privacidad..." (0.81)
Cross-encoder:
1. "Política de reembolso: 30 días..." (0.95) ✅
2. "Políticas de la empresa..." (0.70)
3. "Política de privacidad..." (0.40)
Mitigación 1.3: Query expansion
Expandir query con sinónimos:
Query original: "horario"
Query expandida: "horario OR schedule OR horas de operación"
→ Mayor recall (encuentra más variantes)
Limitación 2: Límite de contexto (context window limit)
Problema:
LLMs tienen límite de contexto (ej: GPT-4 Turbo = 128K tokens). Si necesitas más chunks, no caben.
Ejemplo:
Query: "Resume todo el manual de empleados" (200 páginas)
Manual completo: 250K tokens
Límite GPT-4: 128K tokens
→ No puedes enviar todo ❌
Mitigación 2.1: Two-stage retrieval (coarse → fine)
1. Primera búsqueda (coarse):
→ Retorna top-50 chunks (25K tokens)
2. Segunda búsqueda (fine):
→ Reranking → top-5 (2.5K tokens)
→ Caben en contexto ✅
Mitigación 2.2: Map-reduce pattern
Para queries que requieren múltiples chunks:
1. Dividir query en sub-queries
"Resume manual" → ["Resume sección 1", "Resume sección 2", ...]
2. Para cada sub-query:
RAG individual → Respuesta parcial
3. Combinar respuestas parciales:
LLM final: "Combina estos resúmenes: [resumen 1] [resumen 2]..."
Mitigación 2.3: Usar LLM con contexto largo
GPT-4 Turbo: 128K tokens
Claude 3 Opus: 200K tokens
Gemini 1.5 Pro: 1M tokens
→ Más contexto = más chunks simultáneos
Trade-off: Mayor costo.
Limitación 3: Latencia alta
Problema:
RAG es más lento que LLM puro (búsqueda + generación).
Latencia típica:
Query embedding: 50-200ms
kNN search: 10-50ms
Reranking (opcional): 100-300ms
LLM generation: 2-5 segundos
Total: 2.2-5.5 segundos
Mitigación 3.1: Streaming de respuesta
Usuario ve respuesta mientras LLM genera:
"Para configurar..." [aparece]
"el entorno de..." [aparece]
"desarrollo, sigue..." [aparece]
Percepción de menor latencia (aunque total es igual)
Mitigación 3.2: Cache de queries frecuentes
Query: "¿Qué es RAG?"
→ Cache hit → Respuesta pre-generada
→ Latencia: 0ms ✅
Query nueva:
→ Cache miss → RAG completo
→ Latencia: 3s
→ Guardar en cache para próxima vez
Mitigación 3.3: Modelo más rápido
GPT-4 Turbo: 2-5s generación
GPT-3.5 Turbo: 1-2s generación
Claude 3 Haiku: 0.5-1s generación
Trade-off: Menor calidad (pero más rápido)
Limitación 4: Hallucinations residuales
Problema:
Aunque RAG reduce hallucinations, LLM puede seguir "inventando" si contexto es ambiguo.
Ejemplo:
Contexto: "El producto cuesta $99. Ofrecemos descuentos."
Query: "¿Cuánto es el descuento?"
LLM: "El descuento es del 20%."
→ Inventado (contexto NO menciona 20%) ❌
Mitigación 4.1: Prompt engineering estricto
Instrucción al LLM:
"Responde SOLO si el contexto contiene la respuesta EXPLÍCITA.
Si el contexto NO contiene la respuesta, di:
'No tengo información suficiente para responder esto.'"
Resultado:
LLM: "No tengo información suficiente sobre el porcentaje de descuento.
El contexto solo menciona que ofrecemos descuentos,
pero no especifica el monto." ✅
Mitigación 4.2: Citation forcing
Instrucción al LLM:
"Cita SIEMPRE la fuente exacta.
Formato: 'Según [documento], página [X]: [respuesta]'"
Resultado:
LLM: "Según guia-precios.pdf, página 3: El producto cuesta $99.
NO se especifica el porcentaje de descuento en este documento." ✅
Mitigación 4.3: Verificación post-generación
1. LLM genera respuesta
2. Sistema verifica:
¿Respuesta contiene hechos del contexto? ✅
¿Respuesta contiene información NO en contexto? ❌
3. Si hay información NO verificada:
→ Rechazar respuesta o marcar como "no verificada"
Limitación 5: Costo acumulado
Problema:
RAG tiene costo por query (embedding + LLM). Con muchas queries, costo crece.
Ejemplo:
10K queries/mes × $0.022 = $220/mes
100K queries/mes × $0.022 = $2200/mes
Mitigación 5.1: Cache agresivo
Cache respuestas frecuentes (TTL: 1 semana)
→ 30% de queries son repetidas
→ Ahorro: 30% × $2200 = $660/mes
Mitigación 5.2: Modelo más barato
GPT-4 Turbo: $0.01/1K tokens input
GPT-3.5 Turbo: $0.0005/1K tokens input (20x más barato)
Costo/query:
- GPT-4: $0.022
- GPT-3.5: $0.0011
Ahorro con GPT-3.5: 95%
Trade-off: Menor calidad (pero 20x más barato).
Mitigación 5.3: Modelo local
Llama 3 (8B):
- Costo inference: $0 (self-hosted)
- Setup: GPU server ($500/mes)
Break-even:
$500/mes = 22,727 queries con GPT-4
Si tienes > 22K queries/mes → Modelo local es más barato
Resumen de limitaciones y soluciones
| Limitación | Solución |
|---|---|
| Búsqueda incorrecta | Hybrid search, reranking, query expansion |
| Límite de contexto | Two-stage retrieval, map-reduce, LLM con contexto largo |
| Latencia alta | Streaming, cache, modelo más rápido |
| Hallucinations residuales | Prompt estricto, citation forcing, verificación |
| Costo acumulado | Cache agresivo, modelo más barato, self-hosting |
Resumen
Puntos clave:
- RAG NO es perfecto: Búsqueda, contexto, latencia, costo
- Mitigación: Hybrid search, reranking, cache, prompt engineering
- Trade-offs: Precisión vs latencia vs costo
- Diseño robusto: Combinar múltiples técnicas
Próxima cápsula: 07-capstone-exercise-7.md — Diagnosticar y solucionar problemas de RAG.