Roteamento RAG — Uma API, Várias Arquiteturas
Roteamento RAG
Um único endpoint de API. Dez arquiteturas de recuperação suportadas. O roteador aprende com o seu tráfego histórico de consultas e despacha cada nova pergunta para o backend com maior probabilidade de respondê-la corretamente — pelo menor custo que ainda atenda ao seu padrão de qualidade.
As três arquiteturas, conceitualmente
A maioria dos sistemas RAG em produção entrega uma única arquitetura de recuperação e considera o trabalho encerrado. Nós entregamos um roteador que escolhe entre stacks arquiteturalmente distintos — a escolha certa raramente é a mesma para cada consulta no seu corpus.
→ stuff context
→ generate
Ideal para
Consultas de fato único, perguntas no formato FAQ, perguntas do tipo "o que é X?" em corpora com chunks planos.
→ Reciprocal Rank Fusion
→ cross-encoder reranker
→ generate
Ideal para
Consultas em que sinais léxicos e semânticos divergem — códigos, nomes, siglas, vocabulário técnico, strings de erro.
at ingest → agent walks tree
→ opens / reads sections
→ generate
Ideal para
Leitura multi-hop de documentos longos e estruturados — contratos jurídicos, formulários financeiros 10-K, PDFs técnicos em que o contexto atravessa seções não adjacentes.
Como o roteador realmente decide
A maioria dos roteadores RAG publicados classifica a consulta de antemão por complexidade. O nosso não. Usamos roteamento aprendido: cada consulta bem-sucedida é armazenada junto com o backend que a respondeu, e novas consultas são comparadas a esse histórico por similaridade de embedding.
O algoritmo de lookup — o que roda em cada consulta
- Faça o hash da pergunta com SHA-256, truncado em uma chave de 16 caracteres, e consulte o armazenamento de roteamento por cliente no Cloudflare KV para encontrar uma correspondência exata anterior. Se já foi respondida antes, despache imediatamente para o backend que teve o melhor desempenho da última vez.
- Em caso de miss, faça o embedding da pergunta e execute busca por cosseno contra o índice em cache de embeddings de perguntas históricas. Se a similaridade do vizinho mais próximo exceder 0.88, despache para o backend associado.
- Sem correspondência acima do limiar, faça fallback para o backend padrão do cliente para aquele corpus.
- Após a resposta ser renderizada, a tupla (hash da pergunta, backend, score de qualidade) é gravada de volta no armazenamento de histórico de roteamento daquele cliente, alimentando lookups futuros.
Os dez backends entre os quais roteamos hoje
O roteador despacha para um entre dez backends nomeados. Três deles têm "formato Tier 3" (hierárquicos ou enriquecidos por grafos); os demais são mecanismos puramente vetoriais que tratamos como Tier 1 com diferentes tradeoffs operacionais.
O Tier 2 (BM25 + fusão densa + cross-encoder reranker) já é entregue hoje no nosso canvas de workflow como um nó componível. O roteador automático o adiciona em seguida, conforme os dados de roteamento por corpus justifiquem.
Superfície da API — um endpoint, transparência em nível de auditoria
O roteador é invisível para quem chama. Um único formato de requisição; a resposta inclui a decisão de roteamento para que você possa auditar qual backend respondeu (e por quê).
# Um único endpoint. O roteador decide qual backend usar.
curl -X POST https://api.divinci.app/v1/rag/query \
-H "Authorization: Bearer $DIVINCI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"question": "What clauses in the 2024 amendment override section 7.3?",
"corpus": "legal-contracts-q4"
}'
# Resposta — chunks de que o agente precisa para fundamentar a resposta.
{
"items": [
{
"content": "Section 7.3 is superseded by …",
"metadata": { "doc": "amendment-2024.pdf", "section": "II.4.b" },
"score": 0.91
}
/* … */
],
"routing": {
"backend": "pageindex", // despachado para page-index tier-3
"match_source": "learned-history", // arena · auto-fix · ou fallback
"similarity": 0.92, // ≥ 0.88 de limiar
"ttl_remaining":"23d 14h" // janela de frescor antes de novo benchmark
}
}
Os metadados de routing são atualmente registrados internamente e expostos via trilha de auditoria. A entrega inline na resposta está sendo liberada gradualmente ao longo do Q3 de 2026.
Como isso se diferencia dos roteadores existentes
Roteamento RAG não é uma ideia nova — roteadores acadêmicos como Adaptive-RAG e Probing-RAG já classificam consultas por complexidade. A diferenciação é que a Divinci roteia entre stacks de recuperação arquiteturalmente distintos, aprendidos a partir do seu próprio tráfego, atrás de um único endpoint gerenciado.
| Oferta | O que ela roteia | Eixo de roteamento | Gerenciado? |
|---|---|---|---|
| Divinci RAG Routing | 10 backends (PageIndex, RAPTOR, LightRAG, neo4j, 6 mecanismos vetoriais) | Arquitetura · aprendido do histórico | Sim — endpoint único |
| LlamaIndex RouterRetriever | Retrievers BYO | Seletor LLM/Pydantic | Não — biblioteca que você monta |
| Adaptive-RAG (Jeong et al.) | sem recuperação / passo único / iterativo | Profundidade · classificador de complexidade de consulta | Pesquisa |
| Cloudflare AI Search (ex-AutoRAG) | Um pipeline híbrido | Sem roteamento | Sim |
| AWS Bedrock Knowledge Bases | Um pipeline híbrido | Sem roteamento | Sim |
| Azure AI Search Agentic Retrieval | Híbrido + modo agêntico separado | Usuário escolhe o modo manualmente | Sim |
| VectifyAI PageIndex | Arquitetura única (traversal hierárquico) | Sem roteamento | OSS standalone |
A fraqueza honesta no nosso pitch: roteamento RAG por consulta como conceito não é novo. Não inventamos o roteamento. A diferenciação genuína está na combinação entre (a) rotear entre stacks arquiteturalmente distintos em vez de variantes de profundidade, (b) traversal hierárquico nos moldes de PageIndex / RAPTOR / LightRAG incluído como backend de primeira classe, e não como produto separado, e (c) um único endpoint gerenciado em vez de uma biblioteca que você monta e opera por conta própria.
Como as preferências de roteamento são alimentadas
Seu modelo de roteamento não é pré-treinado — ele aprende com o seu tráfego. Três sinais alimentam o armazenamento de histórico de roteamento.
- Seleção na arena. Execute uma consulta pelo RAG Arena em vários backends, pontue as variantes lado a lado e escolha a vencedora. O par (pergunta, backend vencedor) entra no armazenamento de roteamento.
- Saídas do auto-fix. Quando nosso auto-fix executa recuperações comparativas sobre consultas representativas durante a ingestão ou auditorias agendadas, o backend de melhor desempenho por consulta é gravado no mesmo armazenamento.
- Feedback de produção. Consultas bem-sucedidas (aquelas que ultrapassaram seu limiar de qualidade via nosso gate de avaliação online — veja o post sobre testes de regressão) gravam o par (hash da pergunta, backend) de volta no armazenamento de roteamento em tempo de requisição, com TTL de 30 dias para que o modelo de roteamento permaneça fresco à medida que seu corpus evolui.
Quando isso importa mais
Um corpus homogêneo com formatos de consulta uniformes se beneficia pouco — escolha um backend manualmente e está pronto. A cunha está em corpora mistos e formatos de consulta mistos.
Um time jurídico que pergunta tanto "qual é a definição de força maior no nosso contrato padrão?" (Tier 1, abaixo de 300 ms) quanto "ao longo dos nossos 47 contratos com fornecedores, quais têm cláusulas de rescisão não-padrão e quais são os padrões?" (Tier 3, traversal page-index de vários segundos) não quer escolher um único backend. Eles querem que a pergunta simples volte rápida e barata, e que a pergunta profunda volte correta mesmo que custe mais — sem operar dois stacks.
É nesse cenário que um endpoint único gerenciado roteando entre backends arquiteturalmente distintos compensa o investimento. Se o seu tráfego é uniforme, você não precisa disso. Se o seu tráfego é misto — e a maioria dos corpora corporativos reais é — você precisa.
Leitura aprofundada e produtos adjacentes
O mergulho profundo na arquitetura está no nosso post The Future of RAG Systems: Beyond Simple Document Retrieval. A arena que alimenta o Passo 1 acima está em RAG Arena & Dynamic Routing. As decisões de roteamento são ancoradas em auditoria pelo mesmo padrão de release-manifest que usamos em toda a plataforma — veja Validating and Releasing Custom LMs in Regulated Fields. E, se você quer saber como avaliamos a qualidade da recuperação online (o sinal que alimenta o Passo 3 acima), o post sobre testes de regressão é o ponto de partida.