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ónSolución
Búsqueda incorrectaHybrid search, reranking, query expansion
Límite de contextoTwo-stage retrieval, map-reduce, LLM con contexto largo
Latencia altaStreaming, cache, modelo más rápido
Hallucinations residualesPrompt estricto, citation forcing, verificación
Costo acumuladoCache 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.