RAG Routing — Una sola API, molte architetture
RAG Routing
Un solo endpoint API. Dieci architetture di retrieval supportate. Il router impara dal traffico storico delle tue query e instrada ogni nuova domanda verso il backend con la maggiore probabilità di rispondere correttamente — al costo più basso che superi comunque la tua soglia di qualità.
Le tre architetture, a livello concettuale
La maggior parte dei sistemi RAG in produzione spedisce una sola architettura di retrieval e considera il lavoro concluso. Noi spediamo un router che sceglie tra stack architettonicamente distinti — la scelta giusta è raramente la stessa per ogni query del tuo corpus.
→ stuff context
→ generate
Ideale per
Lookup di singoli fatti, query in forma di FAQ, domande tipo "che cos'è X?" su corpora a chunk piatti.
→ Reciprocal Rank Fusion
→ cross-encoder reranker
→ generate
Ideale per
Query in cui segnali lessicali e semantici sono in disaccordo — codici, nomi, acronimi, vocabolario tecnico, stringhe di errore.
at ingest → agent walks tree
→ opens / reads sections
→ generate
Ideale per
Lettura multi-hop di documenti lunghi e strutturati — contratti legali, 10-K finanziari, PDF tecnici dove il contesto si estende attraverso sezioni non adiacenti.
Come decide davvero il router
La maggior parte dei router RAG pubblicati classifica la query a priori in base alla complessità. Il nostro no. Usiamo il routing appreso: ogni query andata a buon fine viene memorizzata insieme al backend che ha risposto, e le nuove query vengono confrontate con quella storia tramite similarità di embedding.
L'algoritmo di lookup — cosa gira a ogni query
- Hash della domanda con SHA-256, troncato a una chiave di 16 caratteri, e ricerca nello store di routing per cliente su Cloudflare KV per un match esatto precedente. Se la domanda ha già avuto risposta, dispatch immediato verso il backend che ha performato meglio l'ultima volta.
- In caso di miss, embedding della domanda e ricerca per coseno sull'indice in cache degli embedding storici delle domande. Se la similarità del nearest neighbour supera 0.88, dispatch verso il backend associato.
- Senza match sopra soglia, fallback al backend di default del cliente per quel corpus.
- Dopo che la risposta è stata renderizzata, la tupla (hash domanda, backend, punteggio di qualità) viene riscritta nello store cronologico di routing per cliente, alimentando i lookup futuri.
I dieci backend tra cui instradiamo oggi
Il router fa dispatch verso uno dei dieci backend nominati. Tre di loro hanno la "forma Tier 3" (gerarchici o graph-enhanced); gli altri sono motori puramente vettoriali che trattiamo come Tier 1 con tradeoff operativi diversi.
Il Tier 2 (BM25 + dense fusion + cross-encoder reranker) viene spedito oggi nel nostro workflow canvas come nodo componibile. L'auto-router lo punterà come prossimo obiettivo quando i dati di routing per corpus lo giustificheranno.
Superficie API — un solo endpoint, trasparenza audit-grade
Il router è invisibile a chi chiama. Una sola forma di richiesta; la risposta include la decisione di routing così puoi controllare quale backend ha risposto (e perché).
# Un solo endpoint. Il router decide quale backend usare.
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"
}'
# Risposta — chunk di cui l'agente ha bisogno per fondare la risposta.
{
"items": [
{
"content": "Section 7.3 is superseded by …",
"metadata": { "doc": "amendment-2024.pdf", "section": "II.4.b" },
"score": 0.91
}
/* … */
],
"routing": {
"backend": "pageindex", // dispatched al page-index tier-3
"match_source": "learned-history", // arena · auto-fix · oppure fallback
"similarity": 0.92, // soglia ≥ 0.88
"ttl_remaining":"23d 14h" // finestra di freschezza prima del re-benchmark
}
}
I metadata di routing sono attualmente loggati internamente ed esposti tramite l'audit trail. La consegna inline nella risposta è in rollout nel Q3 2026.
In cosa differisce dai router esistenti
Il routing RAG non è un'idea nuova — router accademici come Adaptive-RAG e Probing-RAG classificano già le query per complessità. La differenziazione è che Divinci instrada attraverso stack di retrieval architettonicamente distinti, appresi dal tuo traffico, dietro un unico endpoint gestito.
| Offerta | Tra cosa instrada | Asse di routing | Gestito? |
|---|---|---|---|
| Divinci RAG Routing | 10 backend (PageIndex, RAPTOR, LightRAG, neo4j, 6 motori vettoriali) | Architettura · appreso dallo storico | Sì — endpoint unico |
| LlamaIndex RouterRetriever | Retriever BYO | Selettore LLM/Pydantic | No — libreria che assembli |
| Adaptive-RAG (Jeong et al.) | no-retrieval / single-step / iterative | Profondità · classificatore di complessità query | Ricerca |
| Cloudflare AI Search (ex-AutoRAG) | Una pipeline ibrida | Nessun routing | Sì |
| AWS Bedrock Knowledge Bases | Una pipeline ibrida | Nessun routing | Sì |
| Azure AI Search Agentic Retrieval | Ibrido + modalità agentica separata | L'utente sceglie la modalità manualmente | Sì |
| VectifyAI PageIndex | Singola architettura (traversal gerarchica) | Nessun routing | OSS standalone |
Il punto debole onesto del nostro pitch: il routing RAG per query, come concetto, non è nuovo. Non abbiamo inventato il routing. La differenziazione genuina è la combinazione di (a) routing tra stack architettonicamente distinti invece che varianti di profondità, (b) traversal gerarchica in stile PageIndex / RAPTOR / LightRAG inclusa come backend di prima classe invece che come prodotto separato, e (c) un unico endpoint gestito invece di una libreria che assembli e operi da solo.
Come vengono seminate le preferenze di routing
Il tuo modello di routing non è pre-addestrato — impara dal tuo traffico. Tre segnali alimentano lo store cronologico di routing.
- Selezione in arena. Fai girare una query attraverso RAG Arena su più backend, valuta le varianti fianco a fianco, scegli il vincitore. La coppia (domanda, backend vincente) finisce nello store di routing.
- Output di auto-fix. Quando il nostro auto-fix esegue retrieval comparativi su query rappresentative durante l'ingestion o gli audit pianificati, il backend più performante per ciascuna query viene scritto nello stesso store.
- Feedback dalla produzione. Le query andate a buon fine (quelle che hanno superato la tua soglia di qualità tramite il nostro gate di valutazione online — vedi il post sul regression testing) riscrivono la propria coppia (hash domanda, backend) nello store di routing al momento della richiesta, con un TTL di 30 giorni in modo che il modello di routing resti fresco mentre il tuo corpus evolve.
Quando questo conta di più
Un corpus omogeneo con forme di query uniformi ne beneficia poco — scegli un backend manualmente e hai chiuso. Il cuneo sono i corpora misti e le forme di query miste.
Un team legale che chiede sia "qual è la definizione di forza maggiore nel nostro contratto standard?" (Tier 1, sotto i 300 ms) sia "tra i nostri 47 contratti con fornitori, quali hanno clausole di risoluzione non standard e quali sono i pattern?" (Tier 3, traversal page-index in più secondi) non vuole scegliere un solo backend. Vuole che la domanda semplice torni veloce ed economica, e che la domanda profonda torni corretta anche se costa di più — senza dover operare due stack.
Questo è il caso in cui un endpoint gestito unico che instrada attraverso backend architettonicamente distinti si guadagna lo stipendio. Se il tuo traffico è uniforme, non ti serve. Se il tuo traffico è misto — la maggior parte dei corpora enterprise reali lo è — sì.
Letture di approfondimento e prodotti adiacenti
L'approfondimento architetturale vive nel nostro post sul blog The Future of RAG Systems: Beyond Simple Document Retrieval. L'arena che alimenta il passo 1 sopra si trova in RAG Arena & Dynamic Routing. Le decisioni di routing sono ancorate all'audit tramite lo stesso pattern di release-manifest che usiamo su tutta la piattaforma — vedi Validating and Releasing Custom LMs in Regulated Fields. E se vuoi sapere come valutiamo la qualità del retrieval online (il segnale che alimenta il passo 3 sopra), il post sul regression testing è da dove partire.