{"id":6492,"date":"2026-09-01T08:30:00","date_gmt":"2026-09-01T06:30:00","guid":{"rendered":"http:\/\/blog-david.moreno-morales.com\/?p=6492"},"modified":"2026-08-30T19:12:01","modified_gmt":"2026-08-30T17:12:01","slug":"rag-busqueda-semantica-o-contexto-directo-como-elegir-la-arquitectura-adecuada-para-una-aplicacion-con-ia","status":"publish","type":"post","link":"https:\/\/blog-david.moreno-morales.com\/index.php\/2026\/09\/01\/rag-busqueda-semantica-o-contexto-directo-como-elegir-la-arquitectura-adecuada-para-una-aplicacion-con-ia\/","title":{"rendered":"RAG, b\u00fasqueda sem\u00e1ntica o contexto directo: c\u00f3mo elegir la arquitectura adecuada para una aplicaci\u00f3n con IA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"6492\" class=\"elementor elementor-6492\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1f790ae elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1f790ae\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-858b1f5\" data-id=\"858b1f5\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-61e0e1f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"61e0e1f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-1cc40bf\" data-id=\"1cc40bf\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-085053d elementor-widget elementor-widget-text-editor\" data-id=\"085053d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">El patr\u00f3n m\u00e1s sencillo consiste en proporcionar al modelo toda la informaci\u00f3n necesaria junto con la petici\u00f3n. No hay \u00edndice vectorial, chunking ni pipeline de recuperaci\u00f3n.<\/p><p class=\"isSelectedEnd\">Imaginemos una aplicaci\u00f3n que analiza el manual interno de un equipo, un contrato concreto o el c\u00f3digo de un repositorio peque\u00f1o. Si el contenido cabe en el contexto aceptado por el modelo y el coste es razonable, introducir una infraestructura RAG completa puede aportar m\u00e1s complejidad que valor.<\/p><p class=\"isSelectedEnd\">Las ventanas de contexto actuales pueden ser enormes. Google documenta modelos Gemini con ventanas de un mill\u00f3n de tokens o m\u00e1s y plantea expl\u00edcitamente el contexto largo como alternativa viable para determinados problemas que anteriormente requer\u00edan RAG. Tambi\u00e9n advierte de que enviar m\u00e1s informaci\u00f3n tiene implicaciones de coste y latencia y que la recuperaci\u00f3n sobre contextos muy grandes no es perfecta en todos los escenarios.<\/p><h3>Cu\u00e1ndo tiene sentido<\/h3><p class=\"isSelectedEnd\">El contexto directo encaja especialmente bien cuando:<\/p><ul data-spread=\"false\"><li>El corpus es peque\u00f1o o mediano.<\/li><li>Cambia poco.<\/li><li>Cada consulta necesita buena parte de los documentos.<\/li><li>Quieres reducir componentes de infraestructura.<\/li><li>El n\u00famero de consultas no hace prohibitivo reenviar el mismo contenido.<\/li><\/ul><p class=\"isSelectedEnd\">La cach\u00e9 de contexto puede cambiar todav\u00eda m\u00e1s esta ecuaci\u00f3n cuando muchas peticiones reutilizan un prefijo grande de informaci\u00f3n. La documentaci\u00f3n actual de Gemini, por ejemplo, contempla caching expl\u00edcito e impl\u00edcito para reducir el coste asociado a esos patrones.<\/p><h3>Su principal limitaci\u00f3n<\/h3><p class=\"isSelectedEnd\">Que algo <em>quepa<\/em> en la ventana de contexto no significa que debamos enviarlo siempre. M\u00e1s tokens implican m\u00e1s datos que procesar y normalmente m\u00e1s tiempo hasta obtener la respuesta. Adem\u00e1s, en problemas con m\u00faltiples piezas concretas de informaci\u00f3n escondidas en un contexto enorme, la precisi\u00f3n puede degradarse. Por eso el tama\u00f1o m\u00e1ximo de contexto no deber\u00eda convertirse en un objetivo de arquitectura.<\/p><p class=\"isSelectedEnd\">La pregunta correcta no es cu\u00e1nto contexto admite el modelo, sino cu\u00e1nto contexto necesita realmente para responder.<\/p><h2>Opci\u00f3n 2: b\u00fasqueda sem\u00e1ntica<\/h2><p class=\"isSelectedEnd\">La b\u00fasqueda sem\u00e1ntica intenta recuperar contenido por significado y no \u00fanicamente mediante coincidencias literales.<\/p><p class=\"isSelectedEnd\">Para ello, normalmente convertimos documentos y consultas en embeddings: representaciones vectoriales que permiten calcular qu\u00e9 fragmentos est\u00e1n sem\u00e1nticamente pr\u00f3ximos.<\/p><p class=\"isSelectedEnd\">Supongamos que un usuario pregunta:<\/p><p class=\"isSelectedEnd\">\u00ab\u00bfQu\u00e9 ocurre si un empleado deja la empresa?\u00bb<\/p><p class=\"isSelectedEnd\">El documento quiz\u00e1 no contiene esa frase. Puede hablar de \u00abprocedimiento de baja\u00bb, \u00abrevocaci\u00f3n de credenciales\u00bb o \u00aboffboarding\u00bb.<\/p><p class=\"isSelectedEnd\">Una b\u00fasqueda literal podr\u00eda perder informaci\u00f3n relevante. Una b\u00fasqueda basada en embeddings tiene m\u00e1s posibilidades de relacionar ambos conceptos.<\/p><h3>Cu\u00e1ndo funciona bien<\/h3><p class=\"isSelectedEnd\">La b\u00fasqueda sem\u00e1ntica es atractiva cuando:<\/p><ul data-spread=\"false\"><li>Los usuarios formulan preguntas con vocabulario diferente al de los documentos.<\/li><li>Queremos descubrir contenido conceptualmente similar.<\/li><li>Existen grandes cantidades de texto no estructurado.<\/li><li>No necesitamos generar siempre una respuesta: quiz\u00e1 solo queremos devolver documentos relevantes.<\/li><\/ul><p class=\"isSelectedEnd\">Este \u00faltimo punto es importante.<\/p><p class=\"isSelectedEnd\"><strong>Una b\u00fasqueda vectorial no es RAG por s\u00ed misma.<\/strong><\/p><p class=\"isSelectedEnd\">Puedes usar embeddings para un buscador interno, recomendaciones o detecci\u00f3n de similitud sin que intervenga ning\u00fan LLM generativo.<\/p><h3>El problema de utilizar solo vectores<\/h3><p class=\"isSelectedEnd\">El significado no lo es todo.<\/p><p class=\"isSelectedEnd\">Hay consultas donde una coincidencia exacta importa mucho:<\/p><ul data-spread=\"false\"><li><code dir=\"ltr\">ERR_CONNECTION_RESET<\/code>;<\/li><li><code dir=\"ltr\">SKU-28491<\/code>;<\/li><li><code dir=\"ltr\">Factura 2026-00381<\/code>;<\/li><li>nombres propios;<\/li><li>versiones;<\/li><li>fechas;<\/li><li>referencias legales.<\/li><\/ul><p class=\"isSelectedEnd\">Microsoft destaca precisamente esta diferencia: la b\u00fasqueda vectorial funciona bien para similitud conceptual, mientras que la b\u00fasqueda textual mantiene ventajas para coincidencias exactas y terminolog\u00eda especializada.<\/p><p class=\"isSelectedEnd\">Eso nos lleva a una arquitectura cada vez m\u00e1s habitual.<\/p><h2>Opci\u00f3n 3: b\u00fasqueda h\u00edbrida<\/h2><p class=\"isSelectedEnd\">La b\u00fasqueda h\u00edbrida ejecuta dos estrategias a la vez:<\/p><ul data-spread=\"false\"><li>b\u00fasqueda textual o keyword<\/li><li>b\u00fasqueda vectorial.<\/li><\/ul><p class=\"isSelectedEnd\">Despu\u00e9s combina sus resultados.<\/p><p class=\"isSelectedEnd\">Azure AI Search, por ejemplo, ejecuta ambas consultas en paralelo y fusiona sus rankings mediante Reciprocal Rank Fusion RRF, para obtener un \u00fanico conjunto ordenado de resultados. Tambi\u00e9n permite a\u00f1adir reranking sem\u00e1ntico posteriormente.<\/p><p class=\"isSelectedEnd\">Este enfoque resuelve una debilidad frecuente de los sistemas puramente vectoriales.<\/p><p class=\"isSelectedEnd\">Pensemos en:<\/p><blockquote><p class=\"isSelectedEnd\">\u00ab\u00bfQu\u00e9 cambios afectan al endpoint <code dir=\"ltr\">\/v2\/orders<\/code> en la versi\u00f3n 4.3?\u00bb<\/p><\/blockquote><p class=\"isSelectedEnd\">La similitud sem\u00e1ntica puede localizar documentaci\u00f3n relacionada con pedidos y APIs.<\/p><p class=\"isSelectedEnd\">La b\u00fasqueda textual puede garantizar que aparezcan resultados que contienen exactamente <code dir=\"ltr\">\/v2\/orders<\/code> y <code dir=\"ltr\">4.3<\/code>.<\/p><p class=\"isSelectedEnd\">La combinaci\u00f3n suele proporcionar una recuperaci\u00f3n m\u00e1s robusta.<\/p><h3>Una regla pr\u00e1ctica<\/h3><p class=\"isSelectedEnd\">Cuando tus datos contienen una mezcla de lenguaje natural y elementos que deben coincidir exactamente\u00a0 (c\u00f3digos, nombres, n\u00fameros, fechas o identificadores), eval\u00faa b\u00fasqueda h\u00edbrida antes de apostar exclusivamente por vectores.<\/p><p class=\"isSelectedEnd\">No significa que siempre gane. Significa que deber\u00edas medirla.<\/p><h2>Opci\u00f3n 4: RAG<\/h2><p class=\"isSelectedEnd\">RAG empieza a aportar todo su valor cuando la informaci\u00f3n disponible supera lo que tiene sentido enviar directamente al modelo y debemos seleccionar din\u00e1micamente qu\u00e9 contexto utilizar.<\/p><p class=\"isSelectedEnd\">Un pipeline habitual puede parecerse a esto:<\/p><p class=\"isSelectedEnd\">fuentes \u2192 ingesti\u00f3n \u2192 chunking \u2192 \u00edndices \u2192 recuperaci\u00f3n \u2192 reranking \u2192 construcci\u00f3n del contexto \u2192 LLM \u2192 respuesta<\/p><p class=\"isSelectedEnd\">La ventaja fundamental es la escalabilidad. El modelo no tiene que recibir toda la base documental. Solo recibe una selecci\u00f3n de evidencia potencialmente relevante.<\/p><p class=\"isSelectedEnd\">Anthropic describe el mismo principio al explicar que RAG permite escalar a bases de conocimiento que exceden la ventana de contexto: el sistema recupera solamente fragmentos relevantes y los incorpora a la petici\u00f3n.<\/p><p class=\"isSelectedEnd\">Pero cada etapa a\u00f1ade decisiones nuevas.<\/p><h3>Chunking<\/h3><p class=\"isSelectedEnd\">\u00bfC\u00f3mo dividir documentos?<\/p><p class=\"isSelectedEnd\">Un fragmento demasiado peque\u00f1o puede perder contexto. Uno demasiado grande incorpora ruido y consume m\u00e1s tokens.<\/p><p class=\"isSelectedEnd\">Anthropic ha mostrado precisamente c\u00f3mo los chunks aislados pueden perder informaci\u00f3n esencial, por ejemplo, a qu\u00e9 empresa o periodo pertenece una cifra, y propone a\u00f1adir contexto espec\u00edfico a cada fragmento antes de indexarlo mediante su enfoque de Contextual Retrieval.<\/p><h3>Recuperaci\u00f3n<\/h3><p class=\"isSelectedEnd\">\u00bfCu\u00e1ntos resultados recuperamos?<\/p><p class=\"isSelectedEnd\">Recuperar poco puede dejar fuera la respuesta correcta. Recuperar demasiado introduce ruido y aumenta el contexto enviado.<\/p><h3>Reranking<\/h3><p class=\"isSelectedEnd\">Una primera b\u00fasqueda puede generar candidatos r\u00e1pidamente. Un reranker posterior puede volver a ordenarlos utilizando una evaluaci\u00f3n sem\u00e1ntica m\u00e1s potente.<\/p><h3>Filtros y seguridad<\/h3><p class=\"isSelectedEnd\">En aplicaciones empresariales, relevancia no equivale a autorizaci\u00f3n. Un documento puede ser perfecto para responder una pregunta y, aun as\u00ed, el usuario no deber\u00eda poder verlo. Por eso permisos, tenant, departamento, regi\u00f3n, versi\u00f3n o clasificaci\u00f3n del documento deben formar parte del dise\u00f1o de recuperaci\u00f3n y no a\u00f1adirse como parche despu\u00e9s.<\/p><h3>Observabilidad<\/h3><p class=\"isSelectedEnd\">Un sistema RAG necesita responder preguntas que una llamada sencilla a un LLM no plantea:<\/p><ul data-spread=\"false\"><li>\u00bfse recuper\u00f3 el documento correcto?<\/li><li>\u00bfel problema fue retrieval o generaci\u00f3n?<\/li><li>\u00bfqu\u00e9 chunks llegaron al modelo?<\/li><li>\u00bfqu\u00e9 puntuaci\u00f3n ten\u00edan?<\/li><li>\u00bfqu\u00e9 versi\u00f3n del documento se utiliz\u00f3?<\/li><li>\u00bfel modelo respondi\u00f3 utilizando realmente la evidencia recuperada?<\/li><\/ul><p>Sin esa observabilidad, optimizar RAG se convierte r\u00e1pidamente en ensayo y error.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-26a56fa elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"26a56fa\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-bf5ce92\" data-id=\"bf5ce92\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2c79896 elementor-widget elementor-widget-image\" data-id=\"2c79896\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"819\" height=\"1024\" src=\"https:\/\/blog-david.moreno-morales.com\/wp-content\/uploads\/2026\/08\/rag002-819x1024.png\" class=\"attachment-large size-large wp-image-6500\" alt=\"\u00c1rbol de decisi\u00f3n: \u00bfContexto directo, b\u00fasqueda o RAG?\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">\u00c1rbol de decisi\u00f3n: \u00bfContexto directo, b\u00fasqueda o RAG?<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5d576d9\" data-id=\"5d576d9\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d7256b4 elementor-widget elementor-widget-image\" data-id=\"d7256b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/blog-david.moreno-morales.com\/wp-content\/uploads\/2026\/08\/rag003-1024x576.png\" class=\"attachment-large size-large wp-image-6501\" alt=\"Anatom\u00eda de un RAG moderno\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Anatom\u00eda de un RAG moderno<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-e8ae2ac elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e8ae2ac\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-7c91588\" data-id=\"7c91588\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-af8d6c7 elementor-widget elementor-widget-text-editor\" data-id=\"af8d6c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>Entonces, \u00bfqu\u00e9 arquitectura elegir?<\/h2><p class=\"isSelectedEnd\">Una forma pr\u00e1ctica de decidir es comenzar por la opci\u00f3n m\u00e1s sencilla y aumentar complejidad \u00fanicamente cuando los requisitos lo justifiquen.<\/p><h3>Usa contexto directo cuando\u2026<\/h3><p class=\"isSelectedEnd\">El conocimiento necesario es acotado, relativamente estable y cabe de forma econ\u00f3mica en cada interacci\u00f3n.<\/p><p class=\"isSelectedEnd\">Es especialmente \u00fatil para prototipos, an\u00e1lisis de documentos concretos y procesos donde casi todo el corpus es relevante para cada consulta.<\/p><h3>Usa b\u00fasqueda sem\u00e1ntica cuando\u2026<\/h3><p class=\"isSelectedEnd\">Necesitas localizar informaci\u00f3n por significado sobre un corpus amplio y las coincidencias conceptuales son m\u00e1s importantes que las literales.<\/p><p class=\"isSelectedEnd\">Tambi\u00e9n sirve cuando el producto final es un buscador y no necesariamente una respuesta generada.<\/p><h3>Usa b\u00fasqueda h\u00edbrida cuando\u2026<\/h3><p class=\"isSelectedEnd\">Necesitas significado <strong>y<\/strong> precisi\u00f3n lexical.<\/p><p class=\"isSelectedEnd\">Es una candidata especialmente fuerte en documentaci\u00f3n t\u00e9cnica, cat\u00e1logos, soporte, normativa y datos empresariales con identificadores, versiones y terminolog\u00eda espec\u00edfica.<\/p><h3>Usa RAG cuando\u2026<\/h3><p class=\"isSelectedEnd\">El corpus es demasiado grande o din\u00e1mico para enviarlo completo, necesitas recuperar solamente una parte por petici\u00f3n o requieres control expl\u00edcito sobre evidencia, filtros, permisos y trazabilidad.<\/p><p class=\"isSelectedEnd\">Y recuerda: RAG no obliga a elegir \u00fanicamente b\u00fasqueda vectorial.<\/p><p class=\"isSelectedEnd\">Un RAG puede recuperar mediante:<\/p><ul data-spread=\"false\"><li>SQL<\/li><li>b\u00fasquedas textuales<\/li><li>vectores<\/li><li>b\u00fasqueda h\u00edbrida<\/li><li>APIs<\/li><li>grafos<\/li><li>herramientas especializadas<\/li><li>o una combinaci\u00f3n de varias fuentes<\/li><\/ul><h2>En producci\u00f3n, probablemente acabar\u00e1s con una arquitectura h\u00edbrida<\/h2><p class=\"isSelectedEnd\">Las fronteras entre estos patrones se est\u00e1n haciendo menos r\u00edgidas. Una aplicaci\u00f3n puede mantener instrucciones y documentaci\u00f3n fundamental en contexto directo, consultar mediante b\u00fasqueda h\u00edbrida una base documental extensa, recuperar datos operacionales mediante SQL y entregar finalmente todas esas evidencias al mismo modelo. Ese dise\u00f1o sigue siendo RAG en sentido amplio, pero su arquitectura de recuperaci\u00f3n es mucho m\u00e1s sofisticada que \u00abembeddings + base vectorial\u00bb.<\/p><p class=\"isSelectedEnd\">Por eso conviene pensar en capas:<\/p><p class=\"isSelectedEnd\"><strong>1. Fuente de verdad<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfD\u00f3nde vive realmente la informaci\u00f3n?<\/p><p class=\"isSelectedEnd\"><strong>2. Selecci\u00f3n<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfC\u00f3mo determinamos qu\u00e9 informaci\u00f3n necesita esta consulta?<\/p><p class=\"isSelectedEnd\"><strong>3. Autorizaci\u00f3n<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfQu\u00e9 parte de esa informaci\u00f3n puede conocer este usuario?<\/p><p class=\"isSelectedEnd\"><strong>4. Ranking<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfQu\u00e9 evidencia es m\u00e1s relevante?<\/p><p class=\"isSelectedEnd\"><strong>5. Contexto<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfCu\u00e1nto de esa evidencia enviamos al modelo?<\/p><p class=\"isSelectedEnd\"><strong>6. Generaci\u00f3n<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfC\u00f3mo obligamos al sistema a distinguir entre evidencia disponible y conocimiento no fundamentado?<\/p><p class=\"isSelectedEnd\"><strong>7. Evaluaci\u00f3n<\/strong><\/p><p class=\"isSelectedEnd\">\u00bfC\u00f3mo sabemos que funciona?<\/p><h2>La arquitectura se elige con evaluaciones, no con intuici\u00f3n<\/h2><p class=\"isSelectedEnd\">Antes de decidir que una arquitectura es mejor, crea un conjunto de preguntas representativas de producci\u00f3n.<\/p><p class=\"isSelectedEnd\">Incluye consultas f\u00e1ciles y dif\u00edciles:<\/p><ul data-spread=\"false\"><li>Preguntas sem\u00e1nticas.<\/li><li>T\u00e9rminos exactos.<\/li><li>Acr\u00f3nimos.<\/li><li>Informaci\u00f3n distribuida entre varios documentos.<\/li><li>Documentos similares pero pertenecientes a versiones diferentes.<\/li><li>Preguntas sin respuesta.<\/li><li>Contenido que el usuario no puede consultar.<\/li><\/ul><p class=\"isSelectedEnd\">Despu\u00e9s mide al menos:<\/p><p class=\"isSelectedEnd\"><strong>Recall de recuperaci\u00f3n:<\/strong> \u00bfapareci\u00f3 la evidencia correcta entre los candidatos?<\/p><p class=\"isSelectedEnd\"><strong>Precisi\u00f3n del ranking:<\/strong> \u00bfla evidencia correcta qued\u00f3 suficientemente arriba?<\/p><p class=\"isSelectedEnd\"><strong>Groundedness:<\/strong> \u00bfla respuesta se apoya en las fuentes recuperadas?<\/p><p class=\"isSelectedEnd\"><strong>Latencia:<\/strong> \u00bfcu\u00e1nto tarda cada etapa?<\/p><p class=\"isSelectedEnd\"><strong>Coste:<\/strong> \u00bfcu\u00e1nto cuesta ingesti\u00f3n, almacenamiento, b\u00fasqueda, reranking y generaci\u00f3n?<\/p><p class=\"isSelectedEnd\"><strong>Mantenibilidad:<\/strong> \u00bfqu\u00e9 infraestructura tendr\u00e1 que operar el equipo durante los pr\u00f3ximos a\u00f1os?<\/p><p class=\"isSelectedEnd\">El patr\u00f3n m\u00e1s sofisticado no siempre gana.<\/p><p class=\"isSelectedEnd\">Una soluci\u00f3n con contexto directo puede superar a un RAG mal dise\u00f1ado.<\/p><p class=\"isSelectedEnd\">Una b\u00fasqueda keyword bien configurada puede resolver mejor determinados dominios que una base vectorial.<\/p><p class=\"isSelectedEnd\">Y una buena b\u00fasqueda h\u00edbrida puede evitar m\u00faltiples capas de complejidad posterior.<\/p><h2>Conclusi\u00f3n<\/h2><p class=\"isSelectedEnd\">RAG sigue siendo una de las arquitecturas m\u00e1s \u00fatiles para construir aplicaciones sobre conocimiento empresarial, pero ya no deber\u00eda ser el punto de partida autom\u00e1tico.<\/p><p class=\"isSelectedEnd\">Empieza por una pregunta m\u00e1s sencilla:<\/p><p class=\"isSelectedEnd\"><strong>\u00bfQu\u00e9 necesita el modelo para responder correctamente y cu\u00e1l es la forma m\u00e1s eficiente de proporcion\u00e1rselo?<\/strong><\/p><p class=\"isSelectedEnd\">Si toda la informaci\u00f3n necesaria cabe razonablemente en el contexto, empieza por contexto directo.<\/p><p class=\"isSelectedEnd\">Si necesitas recuperar por significado, prueba b\u00fasqueda sem\u00e1ntica.<\/p><p class=\"isSelectedEnd\">Si tu dominio mezcla significado con coincidencias exactas, eval\u00faa b\u00fasqueda h\u00edbrida.<\/p><p class=\"isSelectedEnd\">Si el corpus crece, cambia constantemente, requiere permisos y necesitas seleccionar evidencia din\u00e1mica, construye RAG.<\/p><p class=\"isSelectedEnd\">Y solo despu\u00e9s a\u00f1ade chunking avanzado, m\u00faltiples \u00edndices, rerankers, agentes o pipelines adicionales.<\/p><p class=\"isSelectedEnd\">Porque una buena arquitectura de IA no es la que incorpora m\u00e1s componentes.<\/p><p>Es la que consigue la evidencia correcta, para la consulta correcta, con el coste, la latencia y la complejidad adecuados.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-4fa9b73 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4fa9b73\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-eeaff01\" data-id=\"eeaff01\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6abbbf9 elementor-widget elementor-widget-heading\" data-id=\"6abbbf9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">REFERENCIAS\n<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4439ef8 elementor-widget elementor-widget-text-editor\" data-id=\"4439ef8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tc_dark_mode_responsive_hide_in_dark&quot;:&quot;no&quot;,&quot;tc_dark_mode_responsive_hide_in_light&quot;:&quot;no&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<ul class=\"content-list\"><li>Long context | Gemini API | Google AI for Developers \u2014 https:\/\/ai.google.dev\/gemini-api\/docs\/long-context \u2014 Documentaci\u00f3n oficial sobre ventanas de contexto largas, casos de uso, caching, costes, latencia y limitaciones.<\/li><li>Hybrid Search Overview | Azure AI Search | Microsoft Learn \u2014 https:\/\/learn.microsoft.com\/en-us\/azure\/search\/hybrid-search-overview \u2014 Documentaci\u00f3n oficial sobre b\u00fasqueda h\u00edbrida, combinaci\u00f3n de texto y vectores y Reciprocal Rank Fusion.<\/li><li>Create a Hybrid Query | Azure AI Search | Microsoft Learn \u2014 https:\/\/learn.microsoft.com\/en-us\/azure\/search\/hybrid-search-how-to-query \u2014 Gu\u00eda oficial actualizada sobre consultas h\u00edbridas y semantic ranking.<\/li><li>Contextual Retrieval in AI Systems | Anthropic \u2014 https:\/\/www.anthropic.com\/engineering\/contextual-retrieval \u2014 Fuente t\u00e9cnica original sobre Contextual Embeddings, Contextual BM25 y problemas de p\u00e9rdida de contexto en RAG tradicional.<\/li><li>Retrieval Augmented Generation (RAG) for Projects | Anthropic Help Center \u2014 https:\/\/support.anthropic.com\/en\/articles\/11473015-retrieval-augmented-generation-rag-for-projects \u2014 Ejemplo actual de uso pr\u00e1ctico de RAG para escalar conocimiento m\u00e1s all\u00e1 de la ventana de contexto.<\/li><li>Vector store files | OpenAI API Reference \u2014 https:\/\/platform.openai.com\/docs\/api-reference\/vector-stores-files \u2014 Referencia oficial sobre archivos en vector stores utilizados por herramientas de recuperaci\u00f3n como File Search.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Comparaci\u00f3n orientada a decisiones entre patrones para conectar modelos con informaci\u00f3n empresarial.<\/p>\n","protected":false},"author":1,"featured_media":6499,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[63,55,49,52,62,48],"class_list":["post-6492","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arquitectura","tag-arquitectura","tag-automatizacion","tag-ia","tag-inteligenciaartificial","tag-rag","tag-software"],"_links":{"self":[{"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/posts\/6492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/comments?post=6492"}],"version-history":[{"count":3,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/posts\/6492\/revisions"}],"predecessor-version":[{"id":6504,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/posts\/6492\/revisions\/6504"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/media\/6499"}],"wp:attachment":[{"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/media?parent=6492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/categories?post=6492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-david.moreno-morales.com\/index.php\/wp-json\/wp\/v2\/tags?post=6492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}