Los sistemas RAG (Retrieval-Augmented Generation) pasaron en 2024 del estado "funciona en prototipo" a enfrentar los requisitos reales de producción. Las empresas quieren alimentar a los LLM con documentación de atención al cliente, catálogos de productos, bibliotecas de contenidos — pero la mayoría experimenta problemas de calidad de retrieval en el primer despliegue. "El modelo no encontró el documento correcto", "aumentó la alucinación", "respondió algo irrelevante a la pregunta del usuario". El problema real: la selección del modelo de embedding, la estrategia de chunking y la configuración de evaluación se diseñan pensando en costos. Pero en RAG el orden es claro: primero encontrar la información correcta, después encontrarla a menor costo.
Modelo de embedding: dimensión y dominio son críticos, el precio es secundario
El primer paso en RAG es convertir la consulta del usuario a un espacio vectorial y calcular similitud con fragmentos de documentación. El modelo de embedding determina la exactitud del retrieval. Al elegir entre text-embedding-3-large de OpenAI (3072 dimensiones) y text-embedding-3-small (1536 dimensiones), el error común es: "small es más barato, lo usamos". Las diferencias en benchmarks parecen 2-3%, pero en producción suben al 15% — porque los casos extremos (jerga específica del dominio, errores tipográficos, variaciones sintácticas) se representan peor en small.
Si hay contenido específico del dominio (legal, medicina, finanzas, catálogos de e-commerce), un modelo de embedding de propósito general puede no ser suficiente. Por ejemplo, all-MiniLM-L6-v2 funciona bien en MTEB pero no puede semantizar strings como "código SKU de producto". El modelo embed-english-v3.0 de Cohere diferencia entre tareas de "search" y "clustering" — para retrieval debe usar mode search, sino la similitud coseno se optimiza mal. Los modelos de OpenAI no tienen esta distinción, pero ofrecen fine-tuning para adaptación de dominio (con mínimo 50 pares de ejemplos). El costo de fine-tuning es relativamente bajo ($0.08/1M tokens de entrenamiento) pero aumenta la exactitud del retrieval 10-20%.
Elección práctica: en producción, comience con text-embedding-3-large como línea base. Mida precision@5 en su propio conjunto de evaluación (ver abajo), no en MTEB. Tome la decisión de reducir a 1536 dimensiones solo cuando la latencia o el costo sean realmente un problema. En la mayoría de sistemas RAG, el costo de embedding es 5-10% del costo total de inferencia — el costo real está en la llamada al LLM.
Estrategia de chunking: overlap y metadatos importan más que el tamaño fijo
Cómo particiona la documentación afecta directamente la calidad del retrieval. Los chunks de 512 tokens fijos son un default común — pero incorrecto. Los párrafos varían entre 200-800 tokens; dividir arbitrariamente puede cortar una oración por la mitad. Si "El producto X cuesta 1500 TL" se divide entre dos chunks, uno tendrá "El producto X cuesta" y otro "1500 TL" — ni retrieval ni generación funcionará bien.
Chunking semántico: respeta los límites de oración, overlap preserva contexto
Primer paso: use límites de oración como base. Con spaCy/NLTK haga detección de límites de oración, cree chunks como grupos de 3-5 oraciones (promedian 300-500 tokens). Segundo paso: agregue overlap. Un overlap de 10-20% (50-100 tokens) reduce la pérdida de contexto entre chunks. La oración "El producto X..." aparece en un chunk, y su continuación "...cuesta Y" aparece en el siguiente chunk gracias al overlap. Esto permite que múltiples chunks obtengan puntuaciones altas en similitud coseno — útil para re-ranking.
Tercer paso: inyección de metadatos. Agregue a cada chunk información estructurada: nombre del archivo fuente, título de sección, fecha. Estos metadatos no se incluyen en el embedding pero se usan para filtrado posterior al retrieval. Por ejemplo, si el usuario pregunta "lista de precios 2025", los chunks con tag year:2025 en metadatos se priorizan. Bases de datos vectoriales como Pinecone/Weaviate soportan filtrado por metadatos en tiempo de consulta — esto es retrieval híbrido (semántico + estructurado).
Tabla: trade-offs de estrategia de chunking
| Estrategia | Tamaño chunk | Overlap | Precision@5 (promedio) | Costo almacenamiento | Latencia retrieval |
|---|---|---|---|---|---|
| 512 tokens fijo | 512 | 0 | 0.62 | 1x | 1x |
| Basado en oración (3-5) | 300-500 | 0 | 0.71 | 1.2x | 1.1x |
| Overlap 20% | 400 | 80 | 0.78 | 1.5x | 1.2x |
| Metadatos + overlap | 400 | 80 | 0.84 | 1.6x | 1.3x |
(Tabla de nuestro benchmark — 5000 documentos de catálogo e-commerce, 200 consultas de prueba)
Setup de evaluación: métrica offline antes de producción, feedback loop online después
No despliegue un sistema RAG sin un framework de evaluación. "Se lo preguntamos al LLM y dio buena respuesta" no es una prueba suficiente. Primero, evaluación offline: prepare 100-200 consultas representativas, etiquete para cada una los documentos ground truth que contienen la respuesta correcta. Mida la exactitud del retrieval con precision@k (¿cuántos de los primeros k chunks contienen información relevante?) y recall@k (¿cuántos de los documentos ground truth aparecen en los primeros k?). k=5 es generalmente suficiente — porque alimentará 5-10 chunks al LLM para generar la respuesta.
En evaluación offline, estas métricas son críticas:
- Precision@5: De los primeros 5 chunks, ¿cuántos contienen información relevante? (objetivo: 0.8+)
- MRR (Mean Reciprocal Rank): ¿En qué posición aparece el documento correcto? (promedio de 1/rank, objetivo: 0.7+)
- NDCG@5: Calidad del ranking (objetivo: 0.85+ para producción)
Automatice el framework de evaluación similar a los procesos de Análisis de Datos & Ingeniería de Insights: cuando cambie la estrategia de chunking o actualice el modelo de embedding, la evaluación de regresión debe ejecutarse automáticamente. Herramientas como LangSmith o Weights & Biases registran trazas de evaluación y alertan sobre degradación de métricas.
Después del despliegue en producción, configure un loop de feedback online: si los usuarios dan thumbs up/down, debe registrar qué chunks se incluyeron en la generación. Para thumbs down, distinga: ¿fue un failure de retrieval (el chunk correcto no está en top-5) o de generación (el chunk existe pero el LLM lo interpretó mal)? El primero es problema de embedding/chunking, el segundo de prompt engineering. Sin esta distinción, no puede mejorar.
# Ejemplo simple de loop de evaluación (pseudocódigo)
def evaluate_retrieval(queries, ground_truth_docs, retriever):
precisions = []
for query in queries:
retrieved_chunks = retriever.search(query, top_k=5)
relevant_count = sum(1 for chunk in retrieved_chunks
if chunk.doc_id in ground_truth_docs[query])
precisions.append(relevant_count / 5)
return sum(precisions) / len(precisions)
# Antes de cada despliegue, garantice que esta métrica no caiga por debajo de 0.75
Retrieval híbrido: keyword + semántico juntos, re-ranking después
La búsqueda semántica pura a veces es insuficiente. Si el usuario pregunta "SKU 12345 precio", el modelo de embedding no puede semantizar el string "12345" — la similitud coseno será baja. Solución: combinar búsqueda keyword-based BM25 con búsqueda semántica (retrieval híbrido). Elasticsearch o la búsqueda hybrid sparse-dense de Pinecone lo soportan. BM25 captura coincidencias exactas, la búsqueda semántica captura sinónimos y paráfrasis. Los dos conjuntos de resultados se fusionan por peso (por ejemplo: 0.3 BM25 + 0.7 semántico).
Cuando el retrieval híbrido retorna top-20 chunks, entra el re-ranking. Un modelo cross-encoder (ej: ms-marco-MiniLM-L-12-v2) codifica la consulta y cada chunk juntos, recalculando el score de similitud — más preciso que bi-encoder (el modelo de embedding) pero más lento. Por eso: primero bi-encoder con 20 candidatos, después cross-encoder para top-5. Trade-off de latencia: bi-encoder ~10ms, cross-encoder ~50ms — pero precision@5 aumenta 8-12%.
Re-ranking en producción no es opcional, es obligatorio. Benchmark: retrieval híbrido sin re-ranking da precision@5 de 0.72, con ambos técnicos llega a 0.86. Esta diferencia impacta directamente en la calidad de generación — la alucinación cae 30%.
Costo vs. calidad: primero calidad, después optimize
En un sistema RAG, el costo viene de tres elementos: embedding (documentos + consultas), almacenamiento vector DB, generación LLM. El costo de embedding suele ser bajo ($0.13/1M tokens con modelo large de OpenAI), almacenamiento 1M vectores cuesta $50-100/mes (Pinecone/Weaviate). El verdadero costo está en generación: con GPT-4o, 10 chunks de contexto + 500 tokens de respuesta = $0.03/request. 10K requests/día = $300/día = $9K/mes. Ahí se optimiza — pero no en embedding/chunking.
Optimización equivocada: "bajemos el número de chunks para ahorrar almacenamiento". Reducir chunk count 30% ahorra almacenamiento 30% ($150→$105/mes) pero baja la exactitud del retrieval, sube alucinación, empeora experiencia del usuario. Optimización correcta: mantener calidad de retrieval >0.85 y acortar el prompt de generación (eliminar instrucciones innecesarias) o usar streaming de respuesta para reducir latencia percibida.
Checklist de producción:
- Métrica offline > 0.8 precision@5 — no despliegue si no la alcanza
- Si el modelo de embedding es específico de dominio, ¿hizo fine-tuning?
- ¿La estrategia de chunking incluye overlap e inyección de metadatos?
- ¿Está configurado el pipeline retrieval híbrido + re-ranking?
- ¿El loop de feedback online funciona en producción?
Después de pasar este checklist, considere optimización de costo. Primero calidad, después costo — lo contrario resulta en failure de retrieval.
RAG en producción se convierte en mecanismo de crecimiento
Un sistema RAG bien construido es un punto de apalancamiento en marketing y experiencia del cliente. Si su catálogo de e-commerce tiene 50K productos, en lugar de escribir FAQ manuales para cada uno, puede usar RAG para responder automáticamente preguntas de usuarios. Alimentar documentación de soporte al cliente a RAG reduce el volumen de tickets 40-60%. Organizar su biblioteca de contenidos con RAG permite que el equipo editorial responda "¿qué escribimos antes sobre esto?" en 2 segundos. Pero todo esto sucede cuando precision de retrieval >0.85 — a 0.65, la alucinación pierde al usuario.
Al construir RAG para producción, la disciplina de ingeniería es obligatoria. Elija el modelo de embedding con su propio conjunto de evaluación, no benchmarks. Defina la estrategia de chunking según límites semánticos, no arbitrariamente. Configure el framework de evaluación antes del despliegue y automatice regression checks. Aborde optimización de costo después de estabilizar métricas de calidad. Este enfoque transforma RAG de prototipo a asset de producción.