[{"data":1,"prerenderedAt":472},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Fai\u002Frag-produccion-calidad-recuperacion-primero":13},{"i18nKey":4,"paths":5},"ai-003-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fai\u002Frag-production-retrieval-qualitaet-vor-kosten","\u002Fen\u002Fai\u002Frag-production-retrieval-quality-over-cost","\u002Fes\u002Fai\u002Frag-production-calidad-recuperacion-primero","\u002Ffr\u002Fai\u002Fproduction-rag-retrieval-quality-before-cost","\u002Fit\u002Fai\u002Frag-production-retrieval-quality-first","\u002Fru\u002Fai\u002Frag-production-retrieval-quality-first","\u002Ftr\u002Fai\u002Fproductionda-rag-retrieval-kalitesi-costtan-once-gelir",{"_path":14,"_dir":15,"_draft":16,"_partial":16,"_locale":17,"title":18,"description":19,"publishedAt":20,"modifiedAt":20,"category":15,"i18nKey":4,"tags":21,"readingTime":27,"author":28,"body":29,"_type":466,"_id":467,"_source":468,"_file":469,"_stem":470,"_extension":471},"\u002Fes\u002Fai\u002Frag-produccion-calidad-recuperacion-primero","ai",false,"","RAG en Producción: La Calidad de Recuperación Viene Antes del Costo","Sin embedding correcto, chunking estratégico y evaluación robusta, tu RAG se convierte en máquina de alucinaciones. Lecciones de experiencia en producción.","2026-06-01",[22,23,24,25,26],"rag","embedding","recuperación","evaluacion-llm","ia-produccion",8,"Roibase",{"type":30,"children":31,"toc":450},"root",[32,40,47,52,57,62,69,74,80,85,90,95,221,227,232,238,243,248,283,288,294,299,305,310,315,320,326,331,336,342,347,401,406,420,426,431,436,441,445],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","Los sistemas RAG en producción viven dos destinos posibles: se cierran en 3 semanas por alucinaciones, o alcanzan F1>90% en recuperación y se convierten en pipeline crítico. La diferencia está en la elección de embedding, estrategia de chunking y configuración de evaluación. La optimización de costo es secundaria — si no resuelves entregar el documento correcto, un modelo económico solo produce errores baratos.",{"type":33,"tag":41,"props":42,"children":44},"h2",{"id":43},"modelo-de-embedding-dimensión-ajuste-al-dominio",[45],{"type":38,"value":46},"Modelo de Embedding: Dimensión ≠ Ajuste al Dominio",{"type":33,"tag":34,"props":48,"children":49},{},[50],{"type":38,"value":51},"El primer reflejo es \"el modelo más grande embebe mejor\". text-embedding-3-large (3072 dim) no siempre supera a text-embedding-3-small (1536 dim). MTEB benchmark mide corpus generales — si tu dominio es finanzas, medicina o e-commerce, esas puntuaciones engañan.",{"type":33,"tag":34,"props":53,"children":54},{},[55],{"type":38,"value":56},"En producción vimos: un modelo de 768 dimensiones ajustado al dominio (sentence-transformers\u002Fall-mpnet-base-v2 fine-tuned) entregó 12% mejor recall@10 que uno genérico de 3072 dimensiones. La razón es directa: el espacio embedding no entiende la jerga de tu sector. \"Conversion rate optimization\" vs \"CRO\" tienen distancia semántica 0.68 en modelos genéricos, 0.91 en ajustados al dominio.",{"type":33,"tag":34,"props":58,"children":59},{},[60],{"type":38,"value":61},"El trade-off de dimensionalidad es claro: 3072 dim produce índice de 4.2GB, 768 dim de 1.1GB. Latencia de query: 47ms vs 18ms (FAISS HNSW, m=16). Si pierdes menos del 5% en recall, el modelo pequeño gana — costo y velocidad. Decidir sin medir es ingeniería especulativa.",{"type":33,"tag":63,"props":64,"children":66},"h3",{"id":65},"decisión-de-fine-tuning",[67],{"type":38,"value":68},"Decisión de Fine-Tuning",{"type":33,"tag":34,"props":70,"children":71},{},[72],{"type":38,"value":73},"Fine-tuning de embedding es obligatorio en dos casos: (1) vocabulario extremadamente específico (términos médicos, nombres de tokens crypto), (2) distribución asimétrica query-documento (preguntas cortas, documentos largos). OpenAI Embedding API no acepta fine-tuning; usa sentence-transformers o Cohere embed-v3. Comienza con 500-1000 pares etiquetados — más produce ganancia marginal.",{"type":33,"tag":41,"props":75,"children":77},{"id":76},"chunking-tamaño-coherencia-semántica",[78],{"type":38,"value":79},"Chunking: Tamaño ≠ Coherencia Semántica",{"type":33,"tag":34,"props":81,"children":82},{},[83],{"type":38,"value":84},"No existe regla \"chunk size 512 tokens es óptimo\". Evaluamos 3 estrategias: (1) fixed 512 tokens, (2) basada en headers markdown (corta en H2\u002FH3), (3) chunking semántico (LLM lee contexto de párrafo, divide en transiciones semánticas). Resultado: markdown-based entrega 18% mejor NDCG@5, pero cuesta 2.3x más tiempo en indexación.",{"type":33,"tag":34,"props":86,"children":87},{},[88],{"type":38,"value":89},"El problema del chunking fijo es cortar en mitad de oración. \"Si integras tracking server-side con arquitectura de datos first-party...\" se divide en token 510, el siguiente chunk comienza \"...arquitectura, la precisión de attribution aumenta\" — contexto perdido. El retriever encuentra este chunk para query \"attribution\", pero sin contexto el LLM no puede generar respuesta. La alucinación comienza aquí.",{"type":33,"tag":34,"props":91,"children":92},{},[93],{"type":38,"value":94},"Chunking semántico (no RecursiveCharacterTextSplitter de LangChain — preguntar a gpt-4o-mini \"¿este párrafo cambia a una idea nueva?\") es superior pero costoso: procesar 10K páginas de base de conocimiento cuesta $47 (0.15$\u002F1M input tokens). Trade-off: indexación es one-time cost, calidad de recuperación es valor continuo. Elegimos semántico, pero si actualizas documentos dinámicamente (semanalmente), fixed chunking es más viable.",{"type":33,"tag":96,"props":97,"children":98},"table",{},[99,133],{"type":33,"tag":100,"props":101,"children":102},"thead",{},[103],{"type":33,"tag":104,"props":105,"children":106},"tr",{},[107,113,118,123,128],{"type":33,"tag":108,"props":109,"children":110},"th",{},[111],{"type":38,"value":112},"Estrategia",{"type":33,"tag":108,"props":114,"children":115},{},[116],{"type":38,"value":117},"Tamaño Promedio",{"type":33,"tag":108,"props":119,"children":120},{},[121],{"type":38,"value":122},"NDCG@5",{"type":33,"tag":108,"props":124,"children":125},{},[126],{"type":38,"value":127},"Tiempo Build (10K doc)",{"type":33,"tag":108,"props":129,"children":130},{},[131],{"type":38,"value":132},"Costo",{"type":33,"tag":134,"props":135,"children":136},"tbody",{},[137,166,193],{"type":33,"tag":104,"props":138,"children":139},{},[140,146,151,156,161],{"type":33,"tag":141,"props":142,"children":143},"td",{},[144],{"type":38,"value":145},"Fixed 512",{"type":33,"tag":141,"props":147,"children":148},{},[149],{"type":38,"value":150},"489 tokens",{"type":33,"tag":141,"props":152,"children":153},{},[154],{"type":38,"value":155},"0.71",{"type":33,"tag":141,"props":157,"children":158},{},[159],{"type":38,"value":160},"4 min",{"type":33,"tag":141,"props":162,"children":163},{},[164],{"type":38,"value":165},"$0",{"type":33,"tag":104,"props":167,"children":168},{},[169,174,179,184,189],{"type":33,"tag":141,"props":170,"children":171},{},[172],{"type":38,"value":173},"Basada en Markdown",{"type":33,"tag":141,"props":175,"children":176},{},[177],{"type":38,"value":178},"680 tokens",{"type":33,"tag":141,"props":180,"children":181},{},[182],{"type":38,"value":183},"0.84",{"type":33,"tag":141,"props":185,"children":186},{},[187],{"type":38,"value":188},"9 min",{"type":33,"tag":141,"props":190,"children":191},{},[192],{"type":38,"value":165},{"type":33,"tag":104,"props":194,"children":195},{},[196,201,206,211,216],{"type":33,"tag":141,"props":197,"children":198},{},[199],{"type":38,"value":200},"Semántico (LLM)",{"type":33,"tag":141,"props":202,"children":203},{},[204],{"type":38,"value":205},"520 tokens",{"type":33,"tag":141,"props":207,"children":208},{},[209],{"type":38,"value":210},"0.81",{"type":33,"tag":141,"props":212,"children":213},{},[214],{"type":38,"value":215},"22 min",{"type":33,"tag":141,"props":217,"children":218},{},[219],{"type":38,"value":220},"$47",{"type":33,"tag":41,"props":222,"children":224},{"id":223},"estrategia-de-solapamiento",[225],{"type":38,"value":226},"Estrategia de Solapamiento",{"type":33,"tag":34,"props":228,"children":229},{},[230],{"type":38,"value":231},"Solapar chunks incrementa recall de recuperación — pero aumenta índice 1.4-1.8x. Con 50 tokens de solapamiento vimos 6% de mejora en recall (recall@10: 0.78 → 0.83). Puedes activar solapamiento condicional solo en documentos largos (>2000 tokens) y desactivarlo en contenido corto.",{"type":33,"tag":41,"props":233,"children":235},{"id":234},"setup-de-evaluación-métrica-offline-ab-online",[236],{"type":38,"value":237},"Setup de Evaluación: Métrica Offline → A\u002FB Online",{"type":33,"tag":34,"props":239,"children":240},{},[241],{"type":38,"value":242},"Antes de llevar RAG a producción es obligatorio armar pipeline de evaluación. \"La salida del LLM se ve bien\" no es suficiente — precision\u002Frecall de recuperación y factualidad del LLM se miden por separado.",{"type":33,"tag":34,"props":244,"children":245},{},[246],{"type":38,"value":247},"Medimos dos capas:",{"type":33,"tag":249,"props":250,"children":251},"ol",{},[252,273],{"type":33,"tag":253,"props":254,"children":255},"li",{},[256,262,264,271],{"type":33,"tag":257,"props":258,"children":259},"strong",{},[260],{"type":38,"value":261},"Capa de recuperación:",{"type":38,"value":263}," Precision@k, Recall@k, NDCG@k, MRR. Ground truth: pares query-documento etiquetados manualmente (320 en nuestro caso). La métrica ",{"type":33,"tag":265,"props":266,"children":268},"code",{"className":267},[],[269],{"type":38,"value":270},"context_precision",{"type":38,"value":272}," de librería Ragas funciona sin LLM, permite iteración rápida.",{"type":33,"tag":253,"props":274,"children":275},{},[276,281],{"type":33,"tag":257,"props":277,"children":278},{},[279],{"type":38,"value":280},"Capa de generación:",{"type":38,"value":282}," Consistencia factual (¿la salida se entaila con el documento?), tasa de alucinación (¿qué % de respuesta sale del documento?), precisión de citación (¿el LLM cita correctamente?). Usamos patrón LLM-as-judge — preguntamos a gpt-4o \"¿esta respuesta se basa en el documento?\", acuerdo 0.89 (vs evaluación humana).",{"type":33,"tag":34,"props":284,"children":285},{},[286],{"type":38,"value":287},"Evaluación offline corre diariamente (CI\u002FCD integrado). Nueva estrategia de chunking, embedding, reranker: deben pasar métricas verdes antes de commit. A\u002FB testing es aparte: 10% tráfico a versión nueva, monitorear feedback usuario + métricas sesión (task completion, tasa de reformulación query). Si NDCG offline sube 0.02 pero online task completion no cambia, no desplegamos.",{"type":33,"tag":63,"props":289,"children":291},{"id":290},"confiabilidad-de-llm-as-judge",[292],{"type":38,"value":293},"Confiabilidad de LLM-as-Judge",{"type":33,"tag":34,"props":295,"children":296},{},[297],{"type":38,"value":298},"No confíes ciegamente en LLM-as-judge. GPT-4o se marcó como alucinante en 6% de casos (falso positivo), perdió 4% de alucinaciones reales (falso negativo). Solución: evaluación human-in-the-loop para casos críticos — audita random 5% de samples, calcula calibration score del judge en ese subset. Si calibration \u003C0.85, revisa prompt del judge.",{"type":33,"tag":41,"props":300,"children":302},{"id":301},"reranker-poder-del-segundo-paso",[303],{"type":38,"value":304},"Reranker: Poder del Segundo Paso",{"type":33,"tag":34,"props":306,"children":307},{},[308],{"type":38,"value":309},"Primera recuperación trae 20-50 chunks (recall-oriented), reranker reduce a 3-5 (precision-oriented). Con Cohere rerank-v3 vimos 14% mejora en precision (P@5: 0.68 → 0.78). Costo: $2 por 1M tokens reranked (10x más caro que embedding), pero pasar 50 chunks al LLM vs 5 reduce tokens y riesgo de alucinación.",{"type":33,"tag":34,"props":311,"children":312},{},[313],{"type":38,"value":314},"El trade-off del reranker es latencia: búsqueda embedding 18ms, agregando rerank llega a 95ms. Con pipeline async es tolerable — mientras usuario envía query, backend corre retrieval+rerank, cuando LLM comienza streaming, latencia total es 400-500ms. Síncrono degrada experiencia.",{"type":33,"tag":34,"props":316,"children":317},{},[318],{"type":38,"value":319},"Sistemas RAG sin reranker asumen \"top-k embedding es correcto\". Eso aplica solo si hay alto overlap lexical query-chunk. En queries semánticas (¿cómo integro arquitectura first-party con medición server-side?), embedding devuelve 4 chunks irrelevantes en top 10. El reranker usa cross-attention query-documento, limpia ese ruido. Sin reranker en producción, accuracy de citación cae 18%.",{"type":33,"tag":41,"props":321,"children":323},{"id":322},"búsqueda-híbrida-bm25-embedding",[324],{"type":38,"value":325},"Búsqueda Híbrida: BM25 + Embedding",{"type":33,"tag":34,"props":327,"children":328},{},[329],{"type":38,"value":330},"Retrieval solo con embedding falla en dos escenarios: (1) búsquedas de coincidencia exacta (nombre marca, código producto), (2) términos raros (embedding los ha visto poco). BM25 (basado keywords) cierra ese gap. En Weaviate o Qdrant: búsqueda híbrida con 0.7 peso embedding + 0.3 BM25. Recall@10: solo embedding 0.76, híbrido 0.83.",{"type":33,"tag":34,"props":332,"children":333},{},[334],{"type":38,"value":335},"Índice BM25 es 5-8x más pequeño que embedding (inverted index structure). Sin latencia adicional (corre en paralelo). Único costo: query planning — qué ponderación es óptima por tipo de query, lo encuentras con A\u002FB test. En nuestro caso: queries generales usan 0.8 embedding, queries con menciones de marca\u002Fproducto usan 0.5 embedding.",{"type":33,"tag":41,"props":337,"children":339},{"id":338},"monitoreo-en-producción",[340],{"type":38,"value":341},"Monitoreo en Producción",{"type":33,"tag":34,"props":343,"children":344},{},[345],{"type":38,"value":346},"60% del deployment RAG es monitoring — evitar degradación silenciosa. Métricas observadas:",{"type":33,"tag":348,"props":349,"children":350},"ul",{},[351,361,371,381,391],{"type":33,"tag":253,"props":352,"children":353},{},[354,359],{"type":33,"tag":257,"props":355,"children":356},{},[357],{"type":38,"value":358},"Cobertura de recuperación:",{"type":38,"value":360}," % de queries donde encuentra documento (target >95%)",{"type":33,"tag":253,"props":362,"children":363},{},[364,369],{"type":33,"tag":257,"props":365,"children":366},{},[367],{"type":38,"value":368},"Relevancia promedio de contexto:",{"type":38,"value":370}," % de chunks entregados al LLM realmente relevantes (target >0.8)",{"type":33,"tag":253,"props":372,"children":373},{},[374,379],{"type":33,"tag":257,"props":375,"children":376},{},[377],{"type":38,"value":378},"Tasa de alucinación:",{"type":38,"value":380}," % respuesta LLM fuera del documento (target \u003C5%)",{"type":33,"tag":253,"props":382,"children":383},{},[384,389],{"type":33,"tag":257,"props":385,"children":386},{},[387],{"type":38,"value":388},"Latencia p95:",{"type":38,"value":390}," 95% de queries termina en X tiempo (target \u003C800ms)",{"type":33,"tag":253,"props":392,"children":393},{},[394,399],{"type":33,"tag":257,"props":395,"children":396},{},[397],{"type":38,"value":398},"Costo por query:",{"type":38,"value":400}," embedding + rerank + LLM (target \u003C$0.02)",{"type":33,"tag":34,"props":402,"children":403},{},[404],{"type":38,"value":405},"Estas métricas se envían a Datadog, alertas Slack si threshold se excede. Si cobertura cae 2 días bajo 92%, hay gap en base de conocimiento — content team actúa. Si alucinación sube, revisa prompt LLM o tamaño chunk. Spike de latencia → sharding de vector database.",{"type":33,"tag":34,"props":407,"children":408},{},[409,418],{"type":33,"tag":410,"props":411,"children":415},"a",{"href":412,"rel":413},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fverianalizi",[414],"nofollow",[416],{"type":38,"value":417},"Análisis de Datos e Ingeniería de Insights",{"type":38,"value":419}," requiere vincular métricas RAG a business outcomes — ¿cuando sube calidad recuperación, sube satisfacción usuario en survey? ¿o es solo métrica técnica inflada? Correlación analysis lo revela.",{"type":33,"tag":41,"props":421,"children":423},{"id":422},"balance-costo-vs-calidad",[424],{"type":38,"value":425},"Balance Costo vs Calidad",{"type":33,"tag":34,"props":427,"children":428},{},[429],{"type":38,"value":430},"Costo mensual RAG en producción: 1M queries, promedio 3 chunks retrieved, generación con gpt-4o-mini = ~$420 (embedding $80, rerank $40, LLM $300). Sin reranker: $380, pero alucinación sube 5% → 11% — más tickets soporte, indirect cost $600+.",{"type":33,"tag":34,"props":432,"children":433},{},[434],{"type":38,"value":435},"Reducción costo correcta: (1) cache layer (query repetida en 24h toma cache, 23% queries son repetidas), (2) embedding model pequeño ajustado dominio (768 dim), (3) rerank async (queries no críticas sin rerank). Resultado: $280, pérdida calidad \u003C2%.",{"type":33,"tag":34,"props":437,"children":438},{},[439],{"type":38,"value":440},"Aproximación equivocada: reemplazar embedding por keyword search, LLM por templates rule-based. Produces sistema que no es realmente \"AI\" — precision recuperación cae 40%. Optimizar costo nunca debe sabotear calidad de recuperación.",{"type":33,"tag":442,"props":443,"children":444},"hr",{},[],{"type":33,"tag":34,"props":446,"children":447},{},[448],{"type":38,"value":449},"Llevar RAG a producción es más que elegir modelos — requiere disciplina en evaluación, monitoring e iteración. Puedes reducir dimensión embedding y ganar velocidad, pero si recall cae, LLM alucina y pierdes confianza usuario. Primero: recuperación a F1>0.85, después: optimiza costo. Sino, construyes máquina de alucinaciones económica.",{"title":17,"searchDepth":451,"depth":451,"links":452},3,[453,457,458,459,462,463,464,465],{"id":43,"depth":454,"text":46,"children":455},2,[456],{"id":65,"depth":451,"text":68},{"id":76,"depth":454,"text":79},{"id":223,"depth":454,"text":226},{"id":234,"depth":454,"text":237,"children":460},[461],{"id":290,"depth":451,"text":293},{"id":301,"depth":454,"text":304},{"id":322,"depth":454,"text":325},{"id":338,"depth":454,"text":341},{"id":422,"depth":454,"text":425},"markdown","content:es:ai:rag-produccion-calidad-recuperacion-primero.md","content","es\u002Fai\u002Frag-produccion-calidad-recuperacion-primero.md","es\u002Fai\u002Frag-produccion-calidad-recuperacion-primero","md",1782079498287]