RAG Routing — Una API, muchas arquitecturas
RAG Routing
Un solo endpoint de API. Diez arquitecturas de recuperación soportadas. El router aprende del histórico de consultas de tu tráfico y envía cada pregunta nueva al backend que tiene más probabilidad de responderla correctamente — al menor costo que aún supere tu umbral de calidad.
Las tres arquitecturas, conceptualmente
La mayoría de los sistemas RAG en producción lanzan una sola arquitectura de recuperación y dan por terminado el trabajo. Nosotros lanzamos un router que elige entre stacks arquitectónicamente distintos — la elección correcta rara vez es la misma para cada consulta dentro de un corpus.
→ stuff context
→ generate
Ideal para
Búsquedas de un solo dato, consultas tipo FAQ, preguntas "¿qué es X?" sobre corpus segmentados en chunks planos.
→ Reciprocal Rank Fusion
→ cross-encoder reranker
→ generate
Ideal para
Consultas donde las señales léxicas y semánticas no coinciden — códigos, nombres, acrónimos, vocabulario técnico, cadenas de error.
at ingest → agent walks tree
→ opens / reads sections
→ generate
Ideal para
Lectura multi-salto de documentos extensos y estructurados — contratos legales, formularios 10-K financieros, PDFs técnicos donde el contexto se extiende por secciones no adyacentes.
Cómo decide el router en realidad
La mayoría de los routers RAG publicados clasifican la consulta de entrada por complejidad. El nuestro no. Usamos enrutamiento aprendido: cada consulta exitosa se almacena junto con el backend que la respondió, y las nuevas consultas se comparan con ese historial mediante similitud por embeddings.
El algoritmo de búsqueda — qué se ejecuta en cada consulta
- Hashea la pregunta con SHA-256, truncada a una clave de 16 caracteres, y consulta el almacén de enrutamiento por cliente en Cloudflare KV buscando una coincidencia exacta previa. Si ya fue respondida antes, despacha de inmediato al backend que mejor lo hizo la última vez.
- Si no hay coincidencia, embebe la pregunta y haz una búsqueda por coseno contra el índice cacheado de embeddings históricos de preguntas. Si la similitud del vecino más cercano supera 0.88, despacha al backend asociado.
- Si no hay coincidencia por encima del umbral, recurre al backend por defecto del cliente para ese corpus.
- Tras renderizar la respuesta, la tupla (hash de pregunta, backend, puntaje de calidad) se escribe de vuelta en el almacén de historial de enrutamiento por cliente, alimentando futuras búsquedas.
Los diez backends entre los que enrutamos hoy
El router despacha a uno de diez backends nombrados. Tres son "del tipo Tier 3" (jerárquicos o con grafos); los demás son motores puramente vectoriales que tratamos como Tier 1 con distintos tradeoffs operativos.
Tier 2 (BM25 + fusión densa + reranker cross-encoder) está disponible hoy como nodo componible en nuestro canvas de workflows. El auto-router lo incorporará a continuación, a medida que los datos de enrutamiento por corpus lo justifiquen.
Superficie de la API — un endpoint, transparencia con grado de auditoría
El router es invisible para quien llama. Una sola forma de petición; la respuesta incluye la decisión de enrutamiento para que puedas auditar qué backend respondió (y por qué).
# Un solo endpoint. El router decide qué 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"
}'
# Respuesta — chunks que el agente necesita para sustentar la respuesta.
{
"items": [
{
"content": "Section 7.3 is superseded by …",
"metadata": { "doc": "amendment-2024.pdf", "section": "II.4.b" },
"score": 0.91
}
/* … */
],
"routing": {
"backend": "pageindex", // despachado a page-index tier-3
"match_source": "learned-history", // arena · auto-fix · o fallback
"similarity": 0.92, // umbral ≥ 0.88
"ttl_remaining":"23d 14h" // ventana de frescura antes de re-benchmark
}
}
Actualmente los metadatos routing se registran internamente y se exponen a través del audit trail. La entrega inline en la respuesta se irá desplegando durante el Q3 de 2026.
En qué se diferencia esto de los routers existentes
El enrutamiento RAG no es una idea nueva — routers académicos como Adaptive-RAG y Probing-RAG ya clasifican consultas por complejidad. La diferenciación está en que Divinci enruta entre stacks de recuperación arquitectónicamente distintos, aprendiendo de tu propio tráfico, detrás de un único endpoint gestionado.
| Oferta | Entre qué enruta | Eje de enrutamiento | ¿Gestionado? |
|---|---|---|---|
| Divinci RAG Routing | 10 backends (PageIndex, RAPTOR, LightRAG, neo4j, 6 motores vectoriales) | Arquitectura · aprendido del historial | Sí — endpoint único |
| LlamaIndex RouterRetriever | Retrievers BYO | Selector LLM/Pydantic | No — librería que tú ensamblas |
| Adaptive-RAG (Jeong et al.) | sin recuperación / paso único / iterativo | Profundidad · clasificador de complejidad de consulta | Investigación |
| Cloudflare AI Search (ex-AutoRAG) | Un pipeline híbrido | Sin enrutamiento | Sí |
| AWS Bedrock Knowledge Bases | Un pipeline híbrido | Sin enrutamiento | Sí |
| Azure AI Search Agentic Retrieval | Híbrido + modo agéntico separado | El usuario elige el modo manualmente | Sí |
| VectifyAI PageIndex | Arquitectura única (traversal jerárquica) | Sin enrutamiento | OSS standalone |
La debilidad honesta de nuestro pitch: el enrutamiento RAG por consulta, como concepto, no es nuevo. No inventamos el enrutamiento. La diferenciación genuina es la combinación de (a) enrutar entre stacks arquitectónicamente distintos en lugar de variantes de profundidad, (b) incluir la traversal jerárquica al estilo PageIndex / RAPTOR / LightRAG como backend de primera clase y no como producto aparte, y (c) un único endpoint gestionado en vez de una librería que tú ensamblas y operas.
Cómo se siembran las preferencias de enrutamiento
Tu modelo de enrutamiento no viene pre-entrenado — aprende de tu tráfico. Tres señales alimentan el almacén de historial de enrutamiento.
- Selección en la arena. Corre una consulta por RAG Arena entre múltiples backends, puntúa las variantes lado a lado y elige al ganador. El par (pregunta, backend ganador) aterriza en el almacén de enrutamiento.
- Salidas del auto-fix. Cuando nuestro auto-fix ejecuta recuperaciones comparativas sobre consultas representativas durante la ingesta o en auditorías programadas, el backend con mejor desempeño por consulta queda escrito en el mismo almacén.
- Feedback de producción. Las consultas exitosas (las que superan tu umbral de calidad vía nuestra puerta de evaluación online — ver el post sobre regression-testing) escriben su par (hash de pregunta, backend) de vuelta en el almacén de enrutamiento en tiempo de petición, con un TTL de 30 días para que el modelo de enrutamiento se mantenga fresco a medida que evoluciona tu corpus.
Cuándo importa más
Un corpus homogéneo con formas de consulta uniformes se beneficia poco — elige un backend manualmente y listo. La cuña son los corpus mixtos y las formas de consulta mixtas.
Un equipo legal que pregunta tanto "¿cuál es la definición de fuerza mayor en nuestro contrato estándar?" (Tier 1, sub-300 ms) como "a través de nuestros 47 contratos con proveedores, ¿cuáles tienen cláusulas de terminación no estándar y qué patrones hay?" (Tier 3, traversal page-index de varios segundos) no quiere elegir un solo backend. Quiere que la pregunta simple regrese rápida y barata, y que la pregunta profunda regrese correcta aunque cueste más — sin tener que operar dos stacks.
Ese es el caso en el que un único endpoint gestionado enrutando entre backends arquitectónicamente distintos se gana su lugar. Si tu tráfico es uniforme, no lo necesitas. Si tu tráfico es mixto — y la mayoría de los corpus empresariales reales lo son — sí lo necesitas.
Lecturas más profundas y productos adyacentes
El análisis arquitectónico a fondo vive en nuestro post The Future of RAG Systems: Beyond Simple Document Retrieval. La arena que alimenta el paso 1 de arriba está en RAG Arena & Dynamic Routing. Las decisiones de enrutamiento quedan ancladas en auditoría a través del mismo patrón de release-manifest que usamos en toda la plataforma — ver Validating and Releasing Custom LMs in Regulated Fields. Y si quieres saber cómo evaluamos la calidad de recuperación en línea (la señal que alimenta el paso 3 de arriba), el post sobre regression-testing es por donde empezar.