· Hernán Pérez Rodal · Engineering  · 3 min read

RAG sobre 10+ bases de datos: lo que producción nos enseñó

Por qué RAG vector-only no escala en compliance, cómo diseñamos retrieval híbrido sobre múltiples stores, y las decisiones arquitectónicas que funcionaron en producción.

Por qué RAG vector-only no escala en compliance, cómo diseñamos retrieval híbrido sobre múltiples stores, y las decisiones arquitectónicas que funcionaron en producción.

TL;DR — En 2026 el consenso es claro: RAG vector-only no escala en producción. En Darwin construimos un sistema agentic de compliance con retrieval híbrido sobre 10+ bases de datos. Las mejores decisiones que tomamos no tuvieron que ver con el modelo, sino con la capa de datos.

El problema

Nuestro sistema agentic de compliance tiene que responder preguntas como:

“¿Qué lotes de mango del productor X, procesados entre mayo y julio, cumplieron con los CTEs exigidos por FSMA 204, y cuáles tienen gaps de evidencia?”

Una sola pregunta que combina:

  • Conocimiento regulatorio (FSMA 204 CTE/KDE definitions — texto estructurado)
  • Eventos de trazabilidad (CTEs registrados con timestamp, geolocalización, proveedor, lote)
  • Reglas de negocio internas (gap analysis, risk scoring — lógica dinámica)
  • Relaciones entre entidades (productor → planta → envío → retailer)

Un vector store con embeddings de todo mezclado no sirve para responder eso bien. La respuesta correcta requiere join de datos estructurados + retrieval semántico + cálculo agregado.

La arquitectura

Nuestro stack de retrieval:

FuenteTipoUso
QdrantVector storeRegulaciones, doctrina, casos históricos (datos no estructurados)
PostgreSQLRelacionalEventos de trazabilidad (CTE/KDE con timestamps, IDs, geo)
Firebase/FirestoreDocumentoConfiguración por cliente, UI state
Cloud StorageBlobPDFs originales, audit trails, evidencia digital
On-chain (Polygon)ImmutableAttestations críticas, firmas digitales

El agente no sabe dónde vive cada cosa — el orchestrator lo resuelve.

LangGraph como orchestrator

Usamos LangGraph para rutear queries en múltiples pasos:

  1. Classify — qué tipo de pregunta es (regulatoria / operacional / mixta)
  2. Plan — qué retrievals son necesarios (vector + SQL + graph traversal)
  3. Fan-out — ejecutar retrievals en paralelo
  4. Synthesize — pasar resultados al LLM con contexto estructurado
  5. Validate — guardrails para prevenir hallucinations en datos numéricos

El paso clave fue #2: darle al LLM un query planner que decide la estrategia de retrieval antes de ir a buscar. Sin eso, el modelo alucina datos o trae contexto irrelevante.

Lo que no funcionó

Vector-only con chunking agresivo — nuestro primer intento. Falló en dos dimensiones:

  • Counting / aggregation queries (¿cuántos lotes? ¿promedio por semana?) — LLM inventaba números cuando no los tenía explícitos en contexto
  • Joins relacionales (productor X + ventana temporal Y + certificación Z) — imposible sin query estructurada

La solución no fue “mejor chunking” — fue separar retrieval semántico de consultas estructuradas.

Lo que sí funcionó

Query routing explícito → el planner decide si una pregunta requiere vector search, SQL, graph traversal, o combinación.

Guardrails numéricos → si la respuesta del LLM contiene números, verificamos que coincidan con lo que devolvió la query estructurada. Si no, fallamos fast en lugar de devolver datos incorrectos.

Semantic caching en el nivel de preguntas similares → reduce costos de LLM ~40% sin impacto en calidad.

Observabilidad full-trace con OpenTelemetry → cada query se trackea end-to-end (planner → retrieval → LLM → guardrails). Crítico para debug.

Lessons learned

  1. El bottleneck de RAG en producción no es el retrieval — es la decisión de qué retrieval usar
  2. Los guardrails numéricos salvan vidas cuando la correctness de la respuesta afecta decisiones regulatorias
  3. LangGraph es mejor que cadenas lineales para orchestrar retrievals condicionales
  4. Multi-store + planner > single vector store con mejor chunking
  5. Los LLMs van a alucinar sobre aggregations estructuradas — no importa cuán bueno sea el modelo

¿Y ahora?

La próxima iteración es reemplazar algunas reglas del planner por fine-tuning del router con ejemplos reales de producción. El planner como LLM es flexible pero caro — cachear sus decisiones en un modelo más chico es un step lógico.

Si estás construyendo RAG para dominios regulados, mi consejo es: empezá por el query planner, no por el vector store.


¿Estás construyendo algo similar? Hablemos — estamos abiertos a compartir arquitectura y aprender de otros casos.

Compartir:
Back to Blog

Related Posts

View All Posts »