← Voltar a RAG — Arquitetura de Ingestion e Retrieval

📌 Regras de Routing

RAG — Arquitetura de Ingestion e Retrieval

Apresentação

5. Critérios de Routing

O router traduz sinais do Query Analyzer em estratégia de execução. Esta é a parte mais crítica do sistema.


Dimensões de Decisão

A. Precisa de Grounding?

SinaisAção
Referência a documento, policy, base interna, número específicoSim → RAG ou tools
Pedido factual dependente de dados atualizadosSim
Risco de inventar é altoSim
Nenhum dos acimaTalvez → direct_answer

B. Quantas Fontes?

SinaisEstratégia
"compara X com Y", "segundo os docs e os dados"multi_backend_agent
Mistura texto + númerosmulti_backend_agent
Envolve relações entre entidadesmulti_backend_agent
Uma só fontesimple_rag ou enriched_rag

C. Complexidade Semântica

Sinais de alta complexidadeEstratégia
Multi-hop, comparação, causalidadeenriched_rag ou multi_backend_agent
Síntese de várias evidênciasenriched_rag
Ambiguidade, muitos filtrosenriched_rag
Baixa complexidadesimple_rag
Médiaenriched_rag

D. Tipo de Tarefa → Estratégia

task_typeEstratégia provável
factualsimple_rag
proceduralsimple_rag ou enriched_rag
comparativeenriched_rag
analyticalenriched_rag ou multi_backend_agent
structured_numericSQL/tool path → multi_backend_agent
exploratoryenriched_rag

E. Criticidade / Risco

CondiçãoAção
Query sensível, business critical, números exatosEvitar direct_answer, exigir grounding
Pode levar a decisão operacionalOpcional verificação adicional

F. Restrição de Latência

ModoRestrições
fast (rápido)Evitar decomposição agressiva, evitar multi-tool, usar simple_rag com top-k controlado
quality (qualidade)Pode escalar para enriched_rag / multi_backend_agent

Tabela de Routing

CondiçãoEstratégia
needs_grounding = false e complexity = lowdirect_answer
needs_grounding = true, sources = ["docs"], complexity = lowsimple_rag
task_type = comparative, complexity = mediumenriched_rag
requires_multi_source = true ou requires_structured_data = truemulti_backend_agent
Baixa confiança após retrieve inicialfallback → enriched_rag
Baixa confiança após enrichedfallback → multi_backend_agent ou clarify

Pseudocódigo do Router

function route(analysis: QueryAnalysis) -> Strategy:
    # Override por criticidade
    if analysis.risk_level == "high":
        return multi_backend_agent if analysis.requires_multi_source else enriched_rag

    # Direct answer só quando seguro
    if not analysis.needs_grounding and analysis.complexity == "low" and analysis.risk_level == "low":
        return direct_answer

    # Multi-backend
    if analysis.requires_multi_source or analysis.requires_structured_data:
        return multi_backend_agent

    # Latência fast → limitar
    if analysis.latency_tier == "fast":
        return simple_rag if analysis.complexity in ["low"] else enriched_rag

    # Por tipo e complexidade
    if analysis.task_type in ["comparative", "analytical"]:
        return enriched_rag
    if analysis.complexity == "high":
        return enriched_rag  # ou multi_backend se sources incluem sql/api

    # Default
    return simple_rag

Heurísticas do Query Analyzer (Camada A)

Regras baratas para hints iniciais:

Padrão (keywords)Sugestão
"compara", "diferença", "versus"task_type: comparative
"quanto", "número", "média", "top"requires_structured_data: true
"explica", "resume"documental/semântica
"segundo a policy", "neste documento"needs_grounding: true
"policy", "regulamento", "handbook"sources: ["docs"]
"gastos", "budget", "despesas", "trimestre"sources: ["docs", "sql"]

Zona de prática

Sem perguntas. Clica em Editar para adicionar.