Mascota Jacar — leyendo contigo Un portátil cuyos ojos siguen el cursor mientras lees.
Arquitectura Inteligencia Artificial

RAG en producción: patrones que funcionan y los que no

RAG en producción: patrones que funcionan y los que no

Actualizado: 2026-05-03

Tras dos años de RAG en producción, los patrones que separan deployments exitosos de decepcionantes son claros. Este artículo compila las lecciones — técnicas que funcionan y anti-patterns a evitar — para equipos que ya tienen un RAG básico funcionando y quieren escalar con fiabilidad.

Puntos clave

  • El chunking naive de 500 tokens en splits fijos es el error más común y el de mayor impacto en calidad de retrieval.
  • Hybrid search (BM25 + vectorial) mejora el recall significativamente frente a solo vectorial — especialmente para nombres propios, códigos y términos exactos.
  • Un pipeline de re-ranking reduce el contexto enviado al LLM de top-100 a top-10 con una mejora de precisión del 15-30 %.
  • Sin un golden dataset y métricas de evaluación continua, las mejoras son placebos — no se puede optimizar lo que no se mide.
  • RAG producción es disciplina de ingeniería, no magia: los patrones son conocidos, la ejecución varía.

Chunking: no es simple

Anti-pattern: chunking naive con splits fijos de 500 tokens, ignorando la estructura del documento.

Patrones que funcionan:

  • Semantic chunking: split por fronteras semánticas, no por número de tokens.
  • Hierarchical chunks: documento → secciones → párrafos, permitiendo retrieval a múltiples niveles de granularidad.
  • Overlap estratégico: 10-20 % de overlap entre chunks para preservar contexto en los límites.
  • Metadata-rich: tags, autor, fecha, sección por chunk — permite filtering eficaz.

Librerías: LangChain RecursiveCharacterTextSplitter, LlamaIndex SentenceSplitter, implementaciones custom según el tipo de documento.

Hybrid search: BM25 + vectorial

El search solo vectorial falla en casos de exact-match: SKUs de producto, nombres propios, códigos de error, términos técnicos poco frecuentes. La combinación:

  • BM25 (keyword, exact match) + vectorial (semántico).
  • Reciprocal Rank Fusion (RRF): merge de resultados de ambas vías.
  • Resultado: recall significativamente mejor que cualquiera de las dos vías por separado.

Elasticsearch, OpenSearch, Weaviate y Qdrant ofrecen hybrid search nativo. Para el contexto de elección de base de datos vectorial, ver pgvector: madurez en 2024.

Re-ranking: de 100 candidatos a 10 relevantes

El pipeline estándar en producción madura:

  1. Retrieval: top-100 con embeddings (recall alto, precisión moderada).
  2. Re-ranking: cross-encoder (Cohere Rerank, BGE-reranker) → top-10 (precisión alta).
  3. Generación LLM con los top-10 en el contexto.

Mejora de precisión típica: 15-30 %. El re-ranking añade latencia (50-150 ms), pero el trade-off vale la pena para respuestas críticas.

Query transformation: atacar la raíz del retrieval malo

Las queries mal formuladas del usuario producen retrieval malo. Técnicas:

  • HyDE (Hypothetical Document Embeddings): generar una respuesta hipotética, embeddearla y buscar con ella — el embedding de la respuesta es más cercano al embedding de documentos relevantes que el de la pregunta.
  • Query expansion: añadir sinónimos y términos relacionados.
  • Sub-queries: descomponer preguntas complejas en múltiples sub-búsquedas.
  • Query classification: routear a índices o estrategias distintas según el tipo de pregunta.

El LLM puede hacer todas estas transformaciones en un paso pre-retrieval.

Metadata filtering: pre-filtrar el espacio de búsqueda

python
results = vectorstore.similarity_search(
    query,
    filter={"department": "engineering", "date": {"$gt": "2024-01-01"}}
)

Filtrar antes del retrieval es más rápido y más relevante que buscar en todo el índice y filtrar después. Metadata bien diseñada al momento del chunking es la base — no se puede filtrar por lo que no se indexó.

Evaluación continua: sin esto, todo lo demás es placebo

Golden dataset: 100-500 pares query-respuesta curados manualmente, representativos de los casos de uso reales.

Métricas Ragas: – Faithfulness: ¿la respuesta está soportada por el contexto recuperado? – Answer relevance: ¿la respuesta responde la pregunta? – Context precision: ¿los chunks recuperados son relevantes?

Proceso:

  1. Evaluar contra golden dataset antes de cualquier cambio.
  2. A/B testing al cambiar componentes (modelo de embedding, chunking strategy, re-ranker).
  3. Human review periódica de una muestra de respuestas en producción.
  4. Dashboard continuo de métricas — el drift en calidad de retrieval es silencioso.

Sin evaluación, las mejoras son placebo. La mayoría de equipos que reportan “mejorar el RAG” no tienen métricas de línea base.

Anti-patterns más comunes

1. Stuffing de contexto

Enviar 20 chunks al LLM produce el efecto “lost in the middle”: el modelo ignora información relevante en el centro del contexto. Mejor: top-5 relevantes, forzar citación explícita.

2. Staleness de embeddings

Cambiar el modelo de embedding sin re-indexar el corpus produce inconsistencias silenciosas. Mejor: re-indexar completo o mantener consistencia estricta del modelo por versión del índice.

3. Sin caché

Las mismas queries repetidas generan el mismo coste de LLM repetidamente:

  • Embedding cache: Redis por texto de query — el embedding de “¿cuánto cuesta el plan básico?” siempre es el mismo.
  • Result cache: por query + filtros activos.

4. Ignorar la latencia

El target de producción es <2 s total. Retrieve + re-rank + LLM puede excederlo fácilmente:

  • Paralelizar el retrieval con un prefetch de contexto al LLM.
  • Streaming de la respuesta del LLM para mejorar la latencia percibida.
  • Caché agresiva en los steps más lentos.

5. Sin observabilidad

Loguear query + chunks recuperados + respuesta generada. Revisar semanalmente. Sin datos, la iteración es ciega. Herramientas como Langfuse o Arize Phoenix permiten trazabilidad completa del pipeline.

Arquitectura de stack de producción típico

[Query del usuario]
    ↓
[Query analysis + transformation (HyDE, expansion)]
    ↓
[Hybrid search] → [Vector DB + BM25]
    ↓
[Re-ranker (cross-encoder)]
    ↓
[LLM con contexto top-10 + citación forzada]
    ↓
[Respuesta]

Caché en cada step donde aplica. Para el componente de orquestación de agents que consultan el RAG, ver CrewAI: equipos de agentes.

Elección de base de datos vectorial

Base de datos Cuándo elegirla
pgvector Si ya usas Postgres — la mayoría de casos
Qdrant Purpose-built, alto rendimiento, soporte hybrid
Weaviate Hybrid nativo, más features out-of-the-box
Pinecone Managed serverless, simple, más caro
Elasticsearch / OpenSearch Hybrid maduro, ya en el stack

Decisión práctica: pgvector por defecto; base vectorial especializada si la escala lo requiere o si el hybrid search nativo es un requisito duro.

Streaming responses

python
# Retrieve primero
chunks = retriever.get_relevant_documents(query)

# Stream la respuesta del LLM
for token in llm.stream(prompt_with_context):
    yield token

La latencia percibida mejora significativamente con streaming — el usuario ve la primera palabra antes de que la respuesta completa esté lista.

Monitorización en producción

Métricas a trackear:

  • Retrieval recall: % de queries que recuperaron un documento relevante (requiere ground truth).
  • Answer accuracy: vía Ragas sobre muestra.
  • Latencia p50/p95/p99 del pipeline completo.
  • Token usage por query.
  • Coste por query.
  • Satisfacción del usuario: thumbs up/down cuando aplica.

Dashboard continuo para detectar drift. La calidad del RAG no es estable — los documentos del corpus cambian, las queries de los usuarios evolucionan, los modelos se actualizan.

Iteración: RAG no es “deploy y olvidar”

  • Añadir nuevos documentos continuamente con re-indexación incremental.
  • Re-evaluar periódicamente contra el golden dataset.
  • Actualizar la estrategia de chunking basándose en los failures más comunes.
  • Intercambiar componentes (LLM, modelo de embeddings, re-ranker) cuando emergen mejores opciones — ver text-embedding-3 de OpenAI para el impacto en calidad de retrieval.

Conclusión

RAG en producción es disciplina de ingeniería, no magia. Los patrones son conocidos; la ejecución varía. Los equipos exitosos invierten en evaluación, observabilidad e iteración desde el principio. Los equipos que fallan despliegan “basic RAG” y esperan perfección. Para proyectos nuevos: aplicar estos patrones desde el día 1 es más barato que rearquitectar. Para sistemas existentes: auditar contra esta lista y priorizar las mejoras por impacto esperado.

¿Te ha resultado útil?
[Total: 15 · Media: 4.4]

Escrito por

CEO - Jacar Systems

Apasionado de la tecnología, la infraestructura cloud y la inteligencia artificial. Escribe sobre DevOps, IA, plataformas y software desde Madrid.