Voltar ao Nível Avançado
MÓDULO 5 PÓS-RAG

RAG Moderno e Contexto Híbrido

Repensando RAG na era do Long Context. Quando usar, como integrar com contexto fixo, e estratégias para reduzir alucinações com contexto híbrido.

6
Tópicos
90
Minutos
6
Exercícios
1

Quando RAG Ainda é Necessário

Casos de uso que justificam RAG em 2024+

A Mudança de Paradigma

Com janelas de contexto de 100K-1M+ tokens, a pergunta mudou de "como usar RAG?" para "quando RAG ainda faz sentido?". RAG deixou de ser a solução padrão para se tornar uma ferramenta específica.

✅ RAG Ainda Faz Sentido

  • Dados em tempo real: Preços, estoque, status
  • Base > 1M tokens: Quando excede o contexto
  • Multi-tenant: Dados isolados por usuário
  • Custo: Long context é caro para dados raramente usados
  • Atualização frequente: Dados que mudam constantemente

❌ Long Context é Melhor

  • Documentação fixa: Manuais, políticas, specs
  • Codebases: Código fonte do projeto
  • Análise profunda: Quando precisa ver tudo junto
  • Consistência: Respostas dependem de múltiplos docs
  • Contexto rico: Nuances e interrelações importam

Matriz de Decisão RAG vs Long Context

Critério RAG Long Context
Dados mudam constantemente
Volume > 1M tokens
Precisão máxima necessária
Análise de relações entre docs
Custo por query importa
2

RAG como Complemento ao Long Context

Integração inteligente de abordagens

A arquitetura moderna não escolhe entre RAG e Long Context — ela os combina estrategicamente. Cada um tem seu papel no sistema de contexto.

Arquitetura Complementar

// Contexto em camadas com RAG complementar
┌─────────────────────────────────────────────┐
│  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                                 │
└─────────────────────────────────────────────┘
🏗️ Fundação

Long Context para tudo que é estável: identidade, regras, documentação base.

🔄 Dinâmico

RAG para dados que mudam: preços, status, novidades, dados externos.

⚡ Sob Demanda

RAG triggered por necessidade: busca ativada por keywords ou skill.

Exemplo: Assistente de Suporte

FIXO Manual do produto (50K tokens) + Políticas (10K tokens)
RAG Status do pedido do cliente + Histórico de tickets recentes
TRIGGER "Buscar casos similares" ativado quando skill de escalação é chamado
3

Injeção Seletiva de Conhecimento

Precisão sobre quantidade

O Problema do RAG Tradicional

RAG clássico recupera chunks por similaridade semântica, mas nem sempre o mais "similar" é o mais "relevante". Injeção seletiva resolve isso.

Recuperar top-K por embedding
Recuperar por intenção + contexto

Estratégias de Injeção Seletiva

1. Injeção por Classificação de Intent
# 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. Injeção por Skill Ativo
# 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. Injeção 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)

Benefícios da Seletividade

🎯
Precisão
Contexto relevante, não apenas similar
💰
Custo
Menos tokens = menor custo por query
Latência
Contexto menor = resposta mais rápida
🧠
Foco
LLM não se distrai com contexto irrelevante
4

Contexto Híbrido (Fixo + Recuperado)

O melhor dos dois mundos

Contexto híbrido combina a estabilidade do Long Context com a dinamicidade do RAG, criando sistemas que são ao mesmo tempo consistentes e atualizados.

Anatomia do Contexto Híbrido

Estático
System + Global Context
~40%
Semi-estático
Sessão + Preferências
~20%
Dinâmico
RAG + Tools + APIs
~30%
Query
User Input
~10%
Padrão: Context Window Budget
System Context 10K max
Global Knowledge 50K max
Session History 20K max
RAG Results 15K dynamic
Response Buffer 5K reserved
Total Budget 100K tokens
Estratégias de Gestão
Priority Eviction

Remover contexto menos prioritário quando excede budget

Lazy Loading

Carregar contexto apenas quando necessário

Summarization

Comprimir histórico antigo em resumos

Exemplo Prático: E-commerce Assistant

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

Redução de Alucinação via Contexto

Grounding em fatos concretos

Por Que LLMs Alucinam

Alucinações acontecem quando o modelo precisa preencher lacunas de conhecimento. A solução não é pedir "não alucine" — é fornecer o contexto que elimina as lacunas.

Lacuna de Fatos

Modelo inventa dados que não conhece

Pressão para Responder

Prompt implica que deve haver resposta

Estratégias de Grounding

1. Contexto Autoritativo

Forneça a fonte de verdade explicitamente, com instruções para usá-la.


{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ção Obrigatória

Force o modelo a citar suas fontes, impedindo invenções.

Cada afirmação factual deve incluir [fonte: documento#seção].
Se não puder citar uma fonte do contexto fornecido,
marque como [fonte: conhecimento geral] ou omita.
3. Permissão para "Não Sei"

Reduza a pressão para inventar respostas.

É perfeitamente aceitável responder:
- "Não tenho essa informação"
- "Precisaria verificar no sistema"
- "Posso ajudar com X, mas não tenho dados sobre Y"

Respostas parciais são melhores que respostas inventadas.

Framework Anti-Alucinação

📚
Contexto Rico
Dados completos
🏷️
Citação
Rastreabilidade
🚫
Limites
Escopo definido
Validação
Verificação pós
6

Avaliação de Qualidade Contextual

Métricas e diagnóstico

Como saber se seu contexto está funcionando? Métricas específicas ajudam a diagnosticar problemas e otimizar o sistema de contexto.

Métricas de Qualidade

🎯 Relevância

% do contexto efetivamente usado na resposta

Target: > 70%
📊 Cobertura

% de perguntas respondidas com contexto disponível

Target: > 90%
🔍 Precisão

% de respostas factualmente corretas

Target: > 95%
Eficiência

Tokens usados vs qualidade da resposta

Otimizar continuamente

Framework de Diagnóstico

Respostas "Não sei" frequentes

Diagnóstico: Contexto insuficiente ou mal recuperado

Ação: Aumentar base de conhecimento ou melhorar retrieval

Alucinações frequentes

Diagnóstico: Contexto presente mas ignorado, ou lacunas

Ação: Melhorar instruções de grounding, adicionar citações obrigatórias

Respostas lentas/caras

Diagnóstico: Contexto muito grande ou mal organizado

Ação: Implementar injeção seletiva, comprimir contexto estático

Inconsistências entre respostas

Diagnóstico: Conflitos no contexto ou falta de priorização

Ação: Estabelecer hierarquia clara, resolver conflitos na fonte

Checklist de Qualidade Contextual

Contexto contém informações atualizadas?
Hierarquia de prioridade definida?
Conflitos resolvidos na fonte?
Budget de tokens respeitado?
Métricas de qualidade monitoradas?
Fallbacks para falhas de RAG?

Baixar este módulo

Salve para estudar offline

Anterior
Módulo 4: Orquestração
Próximo
Módulo 6: Preparação Masterclass