Routage RAG — Une API, plusieurs architectures
RAG Routing
Un seul endpoint d'API. Dix architectures de récupération prises en charge. Le routeur apprend de votre historique de trafic et oriente chaque nouvelle question vers le backend le plus susceptible d'y répondre correctement — au coût le plus bas qui satisfait encore votre seuil de qualité.
Les trois architectures, conceptuellement
La plupart des systèmes RAG en production livrent une seule architecture de récupération et considèrent l'affaire close. Nous livrons un routeur qui choisit parmi des stacks architecturalement distincts — le bon choix est rarement le même pour toutes les requêtes de votre corpus.
→ stuff context
→ generate
Idéal pour
Recherches de faits ponctuels, requêtes en forme de FAQ, questions « qu'est-ce que X ? » sur des corpus à découpage plat.
→ Reciprocal Rank Fusion
→ cross-encoder reranker
→ generate
Idéal pour
Requêtes où les signaux lexicaux et sémantiques divergent — codes, noms propres, acronymes, vocabulaire technique, chaînes d'erreur.
at ingest → agent walks tree
→ opens / reads sections
→ generate
Idéal pour
Lecture multi-saut de longs documents structurés — contrats juridiques, 10-K financiers, PDF techniques où le contexte s'étend sur des sections non adjacentes.
Comment le routeur décide réellement
La plupart des routeurs RAG publiés classifient la requête d'emblée selon sa complexité. Le nôtre, non. Nous utilisons un routage appris : chaque requête réussie est stockée avec le backend qui y a répondu, et les nouvelles requêtes sont rapprochées de cet historique par similarité d'embedding.
L'algorithme de lookup — ce qui s'exécute à chaque requête
- Hacher la question en SHA-256, tronqué en clé de 16 caractères, puis interroger le store de routage par client dans Cloudflare KV à la recherche d'une correspondance exacte antérieure. Si elle a déjà reçu une réponse, dispatch immédiat vers le backend qui s'en est le mieux sorti la dernière fois.
- En cas de miss, embedder la question et faire une recherche cosinus sur l'index mis en cache des embeddings de questions historiques. Si la similarité du plus proche voisin dépasse 0.88, dispatch vers le backend associé.
- S'il n'y a aucune correspondance au-dessus du seuil, repli sur le backend par défaut du client pour ce corpus.
- Une fois la réponse rendue, le tuple (hash de question, backend, score de qualité) est réécrit dans le store d'historique de routage par client, alimentant les futurs lookups.
Les dix backends entre lesquels nous routons aujourd'hui
Le routeur dispatche vers l'un de dix backends nommés. Trois d'entre eux sont de forme « Tier 3 » (hiérarchiques ou enrichis par graphe) ; les autres sont des moteurs purement vectoriels que nous traitons comme Tier 1 avec différents arbitrages opérationnels.
Tier 2 (BM25 + fusion dense + reranker cross-encoder) est livré comme nœud composable dans notre canvas de workflow aujourd'hui. Le routeur automatique le ciblera ensuite, à mesure que les données de routage par corpus le justifieront.
Surface API — un endpoint, transparence niveau audit
Le routeur est invisible pour l'appelant. Une seule forme de requête ; la réponse inclut la décision de routage pour que vous puissiez auditer quel backend a répondu (et pourquoi).
# Un seul endpoint. Le routeur décide quel backend utiliser.
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"
}'
# Réponse — chunks dont l'agent a besoin pour fonder la réponse.
{
"items": [
{
"content": "Section 7.3 is superseded by …",
"metadata": { "doc": "amendment-2024.pdf", "section": "II.4.b" },
"score": 0.91
}
/* … */
],
"routing": {
"backend": "pageindex", // page-index tier-3 dispatché
"match_source": "learned-history", // arena · auto-fix · ou fallback
"similarity": 0.92, // seuil ≥ 0.88
"ttl_remaining":"23d 14h" // fenêtre de fraîcheur avant re-benchmark
}
}
Les métadonnées routing sont aujourd'hui journalisées en interne et exposées via la piste d'audit. La livraison inline dans la réponse est en cours de déploiement durant le Q3 2026.
En quoi cela diffère des routeurs existants
Le routage RAG n'est pas une idée neuve — des routeurs académiques comme Adaptive-RAG et Probing-RAG classifient déjà les requêtes par complexité. La différenciation, c'est que Divinci route entre des stacks de récupération architecturalement distincts, en apprenant à partir de votre propre trafic, derrière un seul endpoint managé.
| Offre | Entre quoi cela route | Axe de routage | Managé ? |
|---|---|---|---|
| Divinci RAG Routing | 10 backends (PageIndex, RAPTOR, LightRAG, neo4j, 6 moteurs vectoriels) | Architecture · appris depuis l'historique | Oui — endpoint unique |
| LlamaIndex RouterRetriever | BYO retrievers | Sélecteur LLM/Pydantic | Non — bibliothèque que vous assemblez |
| Adaptive-RAG (Jeong et al.) | sans récupération / single-step / itératif | Profondeur · classifieur de complexité | Recherche |
| Cloudflare AI Search (ex-AutoRAG) | Un pipeline hybride | Pas de routage | Oui |
| AWS Bedrock Knowledge Bases | Un pipeline hybride | Pas de routage | Oui |
| Azure AI Search Agentic Retrieval | Hybride + mode agentique séparé | L'utilisateur choisit le mode manuellement | Oui |
| VectifyAI PageIndex | Architecture unique (traversée hiérarchique) | Pas de routage | OSS autonome |
La faiblesse honnête dans notre pitch : le routage RAG par requête, en tant que concept, n'est pas neuf. Nous n'avons pas inventé le routage. La vraie différenciation, c'est la combinaison de (a) router entre des stacks architecturalement distincts plutôt qu'entre des variantes de profondeur, (b) inclure la traversée hiérarchique de type PageIndex / RAPTOR / LightRAG comme backend de première classe plutôt que comme produit séparé, et (c) un seul endpoint managé au lieu d'une bibliothèque que vous assemblez et exploitez vous-même.
Comment les préférences de routage sont initialisées
Votre modèle de routage n'est pas pré-entraîné — il apprend de votre trafic. Trois signaux alimentent le store d'historique de routage.
- Sélection en arène. Faites passer une requête dans RAG Arena sur plusieurs backends, scorez les variantes côte à côte, désignez le gagnant. La paire (question, backend gagnant) atterrit dans le store de routage.
- Sorties d'auto-fix. Quand notre auto-fix exécute des récupérations comparatives sur des requêtes représentatives lors de l'ingestion ou d'audits planifiés, le backend le plus performant par requête est écrit dans le même store.
- Feedback en production. Les requêtes réussies (celles qui ont franchi votre seuil de qualité via notre porte d'évaluation en ligne — voir le post sur le regression testing) réécrivent leur paire (hash de question, backend) dans le store de routage au moment de la requête, avec un TTL de 30 jours pour que le modèle de routage reste frais à mesure que votre corpus évolue.
Quand cela compte le plus
Un corpus homogène avec des formes de requêtes uniformes en tire peu de bénéfice — choisissez un backend manuellement et c'est plié. Le coin d'entrée, ce sont les corpus mixtes et les formes de requêtes mixtes.
Une équipe juridique qui pose à la fois « quelle est la définition de la force majeure dans notre contrat standard ? » (Tier 1, sous 300 ms) et « parmi nos 47 contrats fournisseurs, lesquels ont des clauses de résiliation non standards et quels sont les patterns ? » (Tier 3, traversée page-index de plusieurs secondes) ne veut pas choisir un seul backend. Elle veut que la question simple revienne vite et pas cher, et que la question profonde revienne correctement même si elle coûte plus — sans exploiter deux stacks.
C'est le cas où un endpoint managé unique routant entre des backends architecturalement distincts gagne sa place. Si votre trafic est uniforme, vous n'en avez pas besoin. Si votre trafic est mixte — la plupart des vrais corpus d'entreprise le sont — vous en avez besoin.
Lectures approfondies et produits adjacents
L'analyse approfondie d'architecture vit dans notre billet de blog The Future of RAG Systems: Beyond Simple Document Retrieval. L'arène qui alimente l'étape 1 ci-dessus se trouve sur RAG Arena & Dynamic Routing. Les décisions de routage sont ancrées en audit via le même pattern de release-manifest que nous utilisons à travers la plateforme — voir Validating and Releasing Custom LMs in Regulated Fields. Et si vous voulez savoir comment nous évaluons la qualité de récupération en ligne (le signal qui alimente l'étape 3 ci-dessus), le post sur le regression testing est le point de départ.