PTENES
Ir al contenido
MÓDULO 5 POST-RAG

RAG moderno y contexto híbrido

Repensar RAG en la era del Long Context. Cuándo usarlo, cómo integrarlo con contexto fijo y estrategias para reducir las alucinaciones con contexto híbrido.

6
Temas
90
Minutos
6
Ejercicios
1

Cuándo RAG sigue siendo necesario

Casos de uso que justifican RAG en 2024+

El cambio de paradigma

Con ventanas de contexto de 100K-1M+ tokens, la pregunta pasó de "¿cómo usar RAG?" a "¿cuándo sigue teniendo sentido RAG?". RAG dejó de ser la solución estándar para convertirse en una herramienta específica.

✅ RAG sigue teniendo sentido

  • • Datos en tiempo real: Precios, inventario, estado
  • • Base > 1M tokens: Cuando excede el contexto
  • • Multiinquilino: Datos aislados por usuario
  • • Costo: Long context es costoso para datos que se usan rara vez
  • • Actualización frecuente: Datos que cambian constantemente

❌ Un contexto largo es mejor

  • • La documentación fija: Manuales, políticas, especificaciones
  • • Bases de código: Código fuente del proyecto
  • • Análisis profundo: Cuando necesitas verlo todo junto
  • • Consistencia: Respuestas que dependen de varios documentos
  • • Contexto enriquecido: Las sutilezas y las interrelaciones importan

Matriz de Decisión RAG vs Long Context

Criterio RAG Long Context
Los datos cambian constantemente ✓ —
Volumen > 1M tokens ✓ —
Se necesita la máxima precisión — ✓
Análisis de relaciones entre documentos — ✓
Importa el costo por consulta ✓ —
2

RAG como complemento al Long Context

Integración inteligente de enfoques

La arquitectura moderna no elige entre RAG y Long Context: los combina estratégicamente. Cada uno tiene su papel en el sistema de contexto.

Arquitectura complementaria

// Contexto en capas con RAG complementario
┌─────────────────────────────────────────────┐
│  SYSTEM CONTEXT (Long Context - Fixo)       │
│  • Identidade, regras, políticas            │
│  • Skills disponíveis                       │
│  • Formato de resposta esperado             │
├─────────────────────────────────────────────┤
│  GLOBAL CONTEXT (Long Context - Sessão)     │
│  • Documentação do projeto                  │
│  • Codebase relevante                       │
│  • Histórico resumido                       │
├─────────────────────────────────────────────┤
│  DYNAMIC CONTEXT (RAG - Por query)          │
│  • Dados em tempo real                      │
│  • Resultados de busca                      │
│  • Informações específicas do momento       │
├─────────────────────────────────────────────┤
│  USER QUERY                                 │
└─────────────────────────────────────────────┘

🏗️ Fundamentos

Long Context para todo lo que sea estable: identidad, reglas, documentación base.

🔄 Dinámico

RAG para datos que cambian: precios, estado, novedades, datos externos.

⚡ Bajo demanda

RAG activado por necesidad: búsqueda activada por keywords o skill.

Ejemplo: asistente de soporte

FIJO Manual del producto (50K tokens) + Políticas (10K tokens)
RAG Estado del pedido del cliente + Historial de tickets recientes
TRIGGER "Buscar casos similares" se activa cuando se llama a la skill de escalación
3

Inyección selectiva de conocimiento

Precisión sobre cantidad

El Problema del RAG Tradicional

El RAG clásico recupera fragmentos por similitud semántica, pero no siempre lo más «similar» es lo más «relevante». La inyección selectiva resuelve esto.

❌ Recuperar top-K por embedding
✓ Recuperar por intención + contexto

Estrategias de inyección selectiva

1. Inyección por clasificación de intención

# Primeiro: classificar a intenção
intent = classify_intent(user_query)
# → "troubleshooting" | "how_to" | "pricing" | "status"

# Depois: recuperar da fonte correta
if intent == "troubleshooting":
    context = retrieve_from("knowledge_base/errors")
elif intent == "pricing":
    context = retrieve_from("pricing_api", realtime=True)
elif intent == "status":
    context = retrieve_from("orders_db", user_id=user.id)

2. Inyección por Skill activo

# Skill determina o que precisa
skill = "code_review"
required_context = skill.required_context()
# → ["file_content", "project_conventions", "recent_changes"]

# Injetar apenas o necessário
for ctx_type in required_context:
    inject_context(ctx_type, scope=skill.scope)

3. Inyección condicional

# Injetar apenas se necessário
if mentions_product(query):
    inject("product_specs", lazy=True)

if mentions_policy(query):
    inject("company_policies", section=detect_policy_type(query))

if requires_calculation(query):
    inject("pricing_formulas")
    inject("current_rates", source="api", cache=60s)

Beneficios de la selectividad

🎯
Precisión
Contexto relevante, no solo similar
💰
Costo
Menos tokens = menor costo por consulta
⚡
Latencia
Menos contexto = respuesta más rápida
🧠
Enfoque
El LLM no se distrae con contexto irrelevante
4

Contexto híbrido (fijo + recuperado)

Lo mejor de ambos mundos

El contexto híbrido combina la estabilidad del Long Context con la dinamismo del RAG, creando sistemas que son al mismo tiempo consistentes y actualizados.

Anatomía del contexto híbrido

Estático
System + Global Context
~40%
Semiestático
Sesión + preferencias
~20%
Dinámico
RAG + Tools + APIs
~30%
Query
User Input
~10%

Estándar: Context Window Budget

System Context 10K max
Conocimiento global 50K max
Session History 20K máx.
RAG Results 15K dynamic
Response Buffer 5K reserved
Presupuesto total 100K tokens

Estrategias de gestión

Priority Eviction

Eliminar el contexto menos prioritario cuando se exceda el presupuesto

Carga diferida

Cargar contexto solo cuando sea necesario

Summarization

Comprimir el historial antiguo en resúmenes

Ejemplo práctico: asistente de comercio electrónico

context_budget = ContextBudget(total=100_000)

# Camada fixa (sempre presente)
context_budget.allocate("system",
    content=system_prompt + skills_definition,
    priority=CRITICAL, evictable=False)

# Camada por sessão
context_budget.allocate("catalog_summary",
    content=get_catalog_summary(),
    priority=HIGH, evictable=True)

# Camada dinâmica (por query)
if user_query.mentions_product():
    context_budget.allocate("product_details",
        content=rag.retrieve(user_query, top_k=5),
        priority=MEDIUM, evictable=True)

if user_query.mentions_order():
    context_budget.allocate("order_status",
        content=api.get_order(user.current_order),
        priority=HIGH, evictable=True)
5

Reducción de alucinaciones mediante contexto

Fundamentación en hechos concretos

Por qué alucinan los LLM

Las alucinaciones ocurren cuando el modelo necesita llenar vacíos de conocimiento. La solución no es pedir «no alucines», sino proporcionar el contexto que elimina las lagunas.

Brecha de información

El modelo inventa datos que desconoce

Presión para responder

El prompt implica que debe haber una respuesta

Estrategias de grounding

1. Contexto autoritativo

Proporciona explícitamente la fuente de verdad, con instrucciones para usarla.


{product_data}


Responda APENAS com informações presentes em
PRODUCT_DATABASE. Se a informação não estiver
disponível, diga "Não encontrei essa informação
no catálogo."

2. Cita obligatoria

Obliga al modelo a citar sus fuentes, evitando invenciones.

Cada afirmación factual debe incluir [fuente: documento#sección].
Si no puedes citar una fuente del contexto proporcionado,
marca como [fuente: conocimiento general] u omite la afirmación.

3. Permiso para decir "No sé"

Reduce la presión para inventar respuestas.

Es perfectamente aceptable responder:
- "No tengo esa información"
- "Tendría que verificarlo en el sistema"
- "Puedo ayudarte con X, pero no tengo datos sobre Y"

Las respuestas parciales son mejores que las respuestas inventadas.

Framework anti-alucinación

📚
Contexto enriquecido
Datos completos
🏷️
Cita
Trazabilidad
🚫
Límites
Alcance definido
✅
Validación
Verificación posterior
6

Evaluación de la calidad contextual

Métricas y diagnóstico

¿Cómo saber si tu contexto está funcionando? Las métricas específicas ayudan a diagnosticar problemas y optimizar el sistema de contexto.

Métricas de calidad

🎯 Relevancia

% del contexto utilizado efectivamente en la respuesta

Target: > 70%
📊 Cobertura

% de preguntas respondidas con el contexto disponible

Target: > 90%
🔍 Precisión

% de respuestas factualmente correctas

Target: > 95%
⚡ Eficiencia

Tokens usados frente a la calidad de la respuesta

Optimizar continuamente

Framework de diagnóstico

❌
Respuestas frecuentes de «No sé»

Diagnóstico: Contexto insuficiente o mal recuperado

Acción: Ampliar la base de conocimiento o mejorar la recuperación de información

❌
Alucinaciones frecuentes

Diagnóstico: Contexto presente pero ignorado, o lagunas

Acción: Mejorar las instrucciones de grounding, agregar citas obligatorias

❌
Respuestas lentas/costosas

Diagnóstico: Contexto demasiado grande o mal organizado

Acción: Implementar inyección selectiva, comprimir el contexto estático

❌
Inconsistencias entre respuestas

Diagnóstico: Conflictos en el contexto o falta de priorización

Acción: Establecer una jerarquía clara y resolver los conflictos desde el origen

Lista de verificación de calidad contextual

✓ ¿El contexto contiene información actualizada?
✓ ¿Se definió la jerarquía de prioridad?
✓ ¿Se resolvieron los conflictos en la fuente?
✓ ¿Se respetó el presupuesto de tokens?
✓ ¿Se monitorean las métricas de calidad?
✓ ¿Alternativas para fallos de RAG?

Descargar este módulo

Guarda para estudiar sin conexión

Anterior
Módulo 4: Orquestación
Siguiente
Módulo 6: Preparación para Masterclass