<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>RAGs · DacaCode &lt;/&gt;</title><link>https://blog.dacadev.com/series/rags/</link><description>Blog de tecnología, programación y electrónica, para compartir conocimientos, experiencias y tutoriales con este apasionante mundo.</description><generator>Hugo</generator><language>es-CO</language><copyright>Copyright © 2026 DacaDev. All rights reserved.</copyright><lastBuildDate>Tue, 14 Jul 2026 00:00:00 -0500</lastBuildDate><atom:link href="https://blog.dacadev.com/series/rags/index.xml" rel="self" type="application/rss+xml"/><image><url>https://blog.dacadev.com/images/blog-logo.png</url><title>DacaCode &lt;/&gt;</title><link>https://blog.dacadev.com/</link></image><item><title>Arquitectura de un RAG: Indexing y Retrieval Pipeline</title><link>https://blog.dacadev.com/generative-ai/rag/arquitectura-de-un-rag/</link><pubDate>Tue, 14 Jul 2026 00:00:00 -0500</pubDate><guid>https://blog.dacadev.com/generative-ai/rag/arquitectura-de-un-rag/</guid><dc:creator>Dacadev</dc:creator><category>IA generativa</category><description>Descubre la arquitectura de un sistema RAG: el indexing pipeline, el retrieval pipeline y cómo evaluar su calidad con el RAG Triad.</description><media:content url="https://blog.dacadev.com/images/generative-ai/rag/02-arquitectura-de-un-rag/banner.png" medium="image" type="image/png"/><content:encoded>
&lt;details class="table-of-content "&gt;
 &lt;summary&gt;
 
 Tabla de Contenido
 
 &lt;/summary&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#los-dos-pipelines-de-un-sistema-rag"&gt;Los dos pipelines de un sistema RAG&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#el-indexing-pipeline"&gt;El indexing pipeline&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#el-retrieval-pipeline"&gt;El retrieval pipeline&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#arquitectura-completa"&gt;Arquitectura completa&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#evaluación"&gt;Evaluación&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#conclusión-y-próximos-pasos"&gt;Conclusión y próximos pasos&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;
&lt;/nav&gt;
&lt;/details&gt;

&lt;p&gt;En el &lt;a href="https://blog.dacadev.com/generative-ai/rag/que-es-un-rag/"



 


&gt;artículo anterior de esta serie&lt;/a&gt; se habló de qué es un RAG y cómo ayuda a proveer de conocimiento privado y actualizado a los &lt;strong&gt;LLMs&lt;/strong&gt;. Ahora abordemos el tema de &lt;em&gt;&amp;ldquo;cómo se estructura internamente un &lt;strong&gt;sistema RAG (Retrieval Augmented Generation)&lt;/strong&gt;&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Este es el segundo artículo de la serie &lt;strong&gt;RAGs&lt;/strong&gt;. Al terminar comprenderás la arquitectura de un RAG: el &lt;strong&gt;indexing pipeline&lt;/strong&gt; que prepara el conocimiento, el &lt;strong&gt;retrieval pipeline&lt;/strong&gt; que responde en tiempo real, y el componente de &lt;strong&gt;evaluación&lt;/strong&gt; que garantiza la calidad en producción. 🚀&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="los-dos-pipelines-de-un-sistema-rag"&gt;Los dos pipelines de un sistema RAG&lt;/h2&gt;
&lt;p&gt;Un sistema RAG se puede descomponer en dos pipelines complementarios: el &lt;strong&gt;indexing pipeline&lt;/strong&gt; (pipeline de indexación) y el &lt;strong&gt;retrieval pipeline&lt;/strong&gt; (pipeline de recuperación).&lt;/p&gt;
&lt;p&gt;La distinción es fundamentalmente temporal. El indexing pipeline se ejecuta de forma &lt;strong&gt;offline o asíncrona&lt;/strong&gt;, preparando la base de conocimiento. El retrieval pipeline se ejecuta en &lt;strong&gt;tiempo real&lt;/strong&gt; y es el encargado de responder a cada petición del usuario consumiendo el conocimiento ya indexado.&lt;/p&gt;
&lt;h2 id="el-indexing-pipeline"&gt;El indexing pipeline&lt;/h2&gt;
&lt;p&gt;El &lt;strong&gt;indexing pipeline&lt;/strong&gt; es el responsable de tomar los datos crudos, dividirlos en fragmentos procesables, convertirlos en vectores numéricos —los &lt;strong&gt;embeddings&lt;/strong&gt;— y almacenarlos en una base de datos, típicamente una &lt;strong&gt;base de datos vectorial&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;El flujo parte de la fuente de datos y encadena cuatro etapas de procesamiento hasta almacenar el conocimiento en la base de datos vectorial:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 F[&amp;#34;📄 Fuente de datos&amp;#34;] --&amp;gt; CA[&amp;#34;📥 Carga&amp;#34;]
 CA --&amp;gt; FR[&amp;#34;✂️ Fragmentación&amp;#34;]
 FR --&amp;gt; CO[&amp;#34;🧮 Conversión&amp;#34;]
 CO --&amp;gt; AL[(&amp;#34;🗄️ Almacenamiento&amp;#34;)]
&lt;/pre&gt;

&lt;p&gt;Cada nodo del diagrama se corresponde con una etapa lógica bien definida:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fuente de datos&lt;/strong&gt;: el origen de la información cruda —bases de datos, APIs, archivos o páginas web— que alimenta el sistema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carga&lt;/strong&gt;: se conecta a las fuentes externas, extrae los documentos y parsea su contenido a texto plano.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fragmentación&lt;/strong&gt;: divide los documentos extensos en piezas más pequeñas y manejables, denominadas &lt;strong&gt;chunks&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conversión&lt;/strong&gt;: transforma cada chunk en un vector numérico —el &lt;strong&gt;embedding&lt;/strong&gt;— que captura su significado semántico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Almacenamiento&lt;/strong&gt;: persiste los embeddings en una &lt;strong&gt;base de datos vectorial&lt;/strong&gt;, lista para la fase de recuperación.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice info"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Info&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;El indexing pipeline no se ejecuta en cada consulta. Su activación depende de la volatilidad de la fuente de datos y suele responder a &lt;strong&gt;disparadores&lt;/strong&gt; concretos: la carga de un documento nuevo, la actualización de un registro o una reindexación programada. Al ser un proceso offline, podemos permitirnos operaciones costosas sin afectar la latencia de respuesta al usuario.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Tanto la estrategia de &lt;strong&gt;chunking&lt;/strong&gt; como la generación de &lt;strong&gt;embeddings&lt;/strong&gt; son decisiones de diseño con un impacto directo en la calidad del sistema. Las abordaremos en profundidad más adelante en la serie.&lt;/p&gt;
&lt;h2 id="el-retrieval-pipeline"&gt;El retrieval pipeline&lt;/h2&gt;
&lt;p&gt;El &lt;strong&gt;retrieval pipeline&lt;/strong&gt; es el que opera en tiempo real. Su responsabilidad es analizar la petición del usuario, recuperar de la base de datos vectorial los fragmentos de información más relacionados con ella, inyectarlos en el prompt junto con la consulta original, enviar el resultado al LLM y devolver la respuesta.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 U[&amp;#34;👤 Usuario&amp;lt;br/&amp;gt;(prompt)&amp;#34;] --&amp;gt; R[&amp;#34;🔎 Retriever&amp;#34;]
 R --&amp;gt;|&amp;#34;search query&amp;#34;| DB[(&amp;#34;🗄️ Vector DB&amp;lt;br/&amp;gt;memoria no paramétrica&amp;#34;)]
 DB --&amp;gt;|&amp;#34;fetch information&amp;#34;| R
 R --&amp;gt;|&amp;#34;prompt + contexto&amp;#34;| L[&amp;#34;🧠 LLM&amp;lt;br/&amp;gt;memoria paramétrica&amp;#34;]
 L --&amp;gt; RESP[&amp;#34;💬 Respuesta&amp;#34;]
&lt;/pre&gt;

&lt;p&gt;Este flujo introduce una distinción conceptual relevante entre dos tipos de memoria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Memoria paramétrica&lt;/strong&gt;: el conocimiento codificado en los pesos del LLM durante su entrenamiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memoria no paramétrica&lt;/strong&gt;: el conocimiento externo almacenado en la base de datos vectorial, que el sistema consulta dinámicamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El retrieval pipeline es, en esencia, el mecanismo que combina ambas memorias para producir una respuesta fundamentada y este se organiza en tres fases secuenciales, cada una soportada por un componente:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 A[&amp;#34;🔎 Retrieval&amp;lt;br/&amp;gt;recupera contexto&amp;#34;] --&amp;gt; B[&amp;#34;🧩 Augmentation&amp;lt;br/&amp;gt;construye el prompt&amp;#34;]
 B --&amp;gt; G[&amp;#34;🧠 Generation&amp;lt;br/&amp;gt;genera la respuesta&amp;#34;]
&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Retrieval&lt;/strong&gt;: el &lt;strong&gt;Retriever&lt;/strong&gt; es el componente central del RAG. Busca en la base de conocimiento y recupera los fragmentos relevantes para la consulta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Augmentation&lt;/strong&gt;: la capa de &lt;strong&gt;gestión de prompts&lt;/strong&gt; combina la información recuperada con la petición original para construir el prompt final.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generation&lt;/strong&gt;: el &lt;strong&gt;componente LLM&lt;/strong&gt; genera la respuesta definitiva. Puede apoyarse en modelos fundacionales o afinados, de código abierto o cerrado.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice tip"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0 1 12 21 8.25 8.25 0 0 1 6.038 7.047 8.287 8.287 0 0 0 9 9.601a8.983 8.983 0 0 1 3.361-6.867 8.21 8.21 0 0 0 3 2.48Z" /&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 0 0 .495-7.468 5.99 5.99 0 0 0-1.925 3.547 5.975 5.975 0 0 1-2.133-1.001A3.75 3.75 0 0 0 12 18Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Tip&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;La calidad de la respuesta está acotada por la fase de &lt;em&gt;Retrieval&lt;/em&gt;. Si el Retriever recupera fragmentos irrelevantes, ninguna capacidad del LLM compensará ese contexto deficiente. Optimizar la recuperación suele rendir más que cambiar a un modelo más potente.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="arquitectura-completa"&gt;Arquitectura completa&lt;/h2&gt;
&lt;p&gt;Ambos pipelines no operan de forma aislada; convergen en la &lt;strong&gt;base de conocimiento&lt;/strong&gt;. El indexing pipeline la construye y la mantiene actualizada, mientras que el retrieval pipeline la consulta para fundamentar cada respuesta.&lt;/p&gt;




 
 
 
 &lt;div class="flex justify-center"&gt;
 &lt;img
 src="https://blog.dacadev.com/images/generative-ai/rag/02-arquitectura-de-un-rag/rag-architecture_hu_d6115f518ece95d9.webp"
 alt="Imagen guia del contenido de la página"/&gt;
 &lt;/div&gt;
 
 
 


&lt;p&gt;Esta arquitectura desacoplada es lo que confiere al patrón RAG su principal ventaja operativa: actualizar el conocimiento del sistema no requiere reentrenar el modelo, sino únicamente ejecutar el indexing pipeline sobre los nuevos datos.&lt;/p&gt;
&lt;h2 id="evaluación"&gt;Evaluación&lt;/h2&gt;
&lt;p&gt;Hasta aquí hemos descrito los dos componentes estructurales del sistema. Sin embargo, en un entorno de producción es crucial incorporar un tercer componente: la &lt;strong&gt;evaluación&lt;/strong&gt;, encargada de medir si las respuestas que entrega el sistema son correctas y relevantes.&lt;/p&gt;
&lt;p&gt;Un punto de partida sólido es el &lt;strong&gt;RAG Triad&lt;/strong&gt; propuesto por &lt;a href="https://truera.com/ai-quality-education/generative-ai-rags/what-is-the-rag-triad/"




 target="_blank"
 


&gt;TruEra&lt;/a&gt;, un marco que evalúa la coherencia entre las tres piezas de una interacción: la consulta del usuario, el contexto recuperado y la respuesta generada.&lt;/p&gt;




 
 
 
 &lt;div class="flex justify-center"&gt;
 &lt;img
 src="https://blog.dacadev.com/images/generative-ai/rag/02-arquitectura-de-un-rag/rag-triad_hu_81bc0f3ab1929222.webp"
 alt="Imagen guia del contenido de la página"/&gt;
 &lt;/div&gt;
 
 
 


&lt;p&gt;El marco define tres validaciones, una por cada arista del triángulo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Context relevance&lt;/strong&gt;: ¿el contexto recuperado de la base de conocimiento es relevante para la consulta del usuario? Evalúa la calidad de la fase de &lt;em&gt;Retrieval&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Groundedness&lt;/strong&gt;: ¿la respuesta del LLM se apoya fielmente en el contexto recuperado, en lugar de alucinar? Evalúa que el modelo utilice la información proporcionada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Answer relevance&lt;/strong&gt;: ¿la respuesta final responde efectivamente a la consulta del usuario? Evalúa la utilidad del resultado.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice warning"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Warning&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Un sistema RAG sin evaluación es un sistema opaco. Sin medir &lt;em&gt;context relevance&lt;/em&gt;, &lt;em&gt;groundedness&lt;/em&gt; y &lt;em&gt;answer relevance&lt;/em&gt; no podrás distinguir si un fallo proviene de una recuperación deficiente o de una generación defectuosa, lo que vuelve la depuración prácticamente imposible.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="conclusión-y-próximos-pasos"&gt;Conclusión y próximos pasos&lt;/h2&gt;
&lt;p&gt;La arquitectura de un RAG se sostiene sobre dos pipelines desacoplados —indexación offline y recuperación en tiempo real— que convergen en una base de conocimiento vectorial, más un componente transversal de evaluación que garantiza su fiabilidad en producción.&lt;/p&gt;
&lt;p&gt;Con este mapa arquitectónico claro, las próximas entregas de la serie &lt;strong&gt;RAGs&lt;/strong&gt; profundizarán en cada pieza:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estrategias de &lt;strong&gt;chunking&lt;/strong&gt;: cómo fragmentar los documentos sin perder contexto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embeddings&lt;/strong&gt;: qué son, cómo se generan y cómo capturan el significado semántico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bases de datos vectoriales&lt;/strong&gt;: indexación y búsqueda por similitud.&lt;/li&gt;
&lt;li&gt;Métricas y herramientas para evaluar sistemas RAG de forma rigurosa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el siguiente artículo comenzaremos a construir el indexing pipeline, empezando por la fase de carga y fragmentación de datos.&lt;/p&gt;</content:encoded></item><item><title>RAG: Qué es y Cómo Funciona Retrieval Augmented Generation</title><link>https://blog.dacadev.com/generative-ai/rag/que-es-un-rag/</link><pubDate>Mon, 13 Jul 2026 00:00:00 -0500</pubDate><guid>https://blog.dacadev.com/generative-ai/rag/que-es-un-rag/</guid><dc:creator>Dacadev</dc:creator><category>IA generativa</category><description>Descubre qué es un RAG, cómo Retrieval Augmented Generation resuelve las alucinaciones de los LLMs y por qué es clave en la IA generativa.</description><media:content url="https://blog.dacadev.com/images/generative-ai/rag/01-que-es-un-rag/banner.png" medium="image" type="image/png"/><content:encoded>
&lt;details class="table-of-content "&gt;
 &lt;summary&gt;
 
 Tabla de Contenido
 
 &lt;/summary&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#las-limitaciones-estructurales-de-los-llms"&gt;Las limitaciones estructurales de los LLMs&lt;/a&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#alucinaciones"&gt;Alucinaciones&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#conocimiento-con-fecha-de-corte"&gt;Conocimiento con fecha de corte&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#ausencia-de-conocimiento-privado"&gt;Ausencia de conocimiento privado&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#alternativas-antes-de-llegar-a-rag"&gt;Alternativas antes de llegar a RAG&lt;/a&gt;
 &lt;ol&gt;
 &lt;li&gt;&lt;a href="#agentes"&gt;Agentes&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#fine-tuning"&gt;Fine-tuning&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#qué-es-un-rag-retrieval-augmented-generation"&gt;Qué es un RAG (Retrieval Augmented Generation)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#cómo-funciona-un-rag-a-alto-nivel"&gt;Cómo funciona un RAG a alto nivel&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#ventajas-de-adoptar-un-rag"&gt;Ventajas de adoptar un RAG&lt;/a&gt;&lt;/li&gt;
 &lt;/ol&gt;
&lt;/nav&gt;
&lt;/details&gt;

&lt;p&gt;Supongamos que debemos desplegar un asistente conversacional sobre la documentación interna de una organización: manuales técnicos, contratos y políticas que se actualizan cada semana. El modelo base responde con fluidez sobre conocimiento general, pero desconoce por completo esos documentos privados e inventa respuestas con total seguridad cuando se le pregunta por ellos. Aquí es donde &lt;strong&gt;RAG (Retrieval Augmented Generation)&lt;/strong&gt; se convierte en la aproximación arquitectónica más rentable para dotar a un &lt;strong&gt;LLM&lt;/strong&gt; de información precisa, privada y actualizada.&lt;/p&gt;




 
 





 


&lt;div class="notice note"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" width="22" height="22" stroke-width="1.5" stroke="currentColor"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Note&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Este es el primer artículo de la serie &lt;strong&gt;RAGs&lt;/strong&gt;. Al terminar podrás explicar qué es un RAG, cómo funciona a alto nivel y por qué se ha vuelto una pieza central en el diseño de aplicaciones de IA generativa. 🚀&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="las-limitaciones-estructurales-de-los-llms"&gt;Las limitaciones estructurales de los LLMs&lt;/h2&gt;
&lt;p&gt;Antes de definir qué es un RAG, es crucial entender las limitaciones de los LLMs que esta técnica resuelve. Un modelo de lenguaje, por potente que sea, arrastra tres restricciones inherentes a la forma en que fue entrenado.&lt;/p&gt;
&lt;h3 id="alucinaciones"&gt;Alucinaciones&lt;/h3&gt;
&lt;p&gt;Las &lt;strong&gt;alucinaciones&lt;/strong&gt; son uno de los problemas más severos de los LLMs. Consisten en que el modelo responde con información incorrecta o inventada, pero con un nivel de confianza que induce al usuario a asumirla como válida.&lt;/p&gt;
&lt;p&gt;En aplicaciones comerciales esto representa un riesgo directo: si la información de entrada es incorrecta, todo el proceso que dependa de ella heredará el error. Consideremos un asistente en el dominio médico; una respuesta errónea sobre la dosificación de un medicamento puede tener consecuencias fatales. La confianza aparente del modelo no es un indicador de veracidad.&lt;/p&gt;
&lt;h3 id="conocimiento-con-fecha-de-corte"&gt;Conocimiento con fecha de corte&lt;/h3&gt;
&lt;p&gt;Los LLMs se entrenan con grandes volúmenes de datos públicos —libros, artículos, páginas web— hasta una &lt;strong&gt;fecha de corte&lt;/strong&gt; determinada. Todo evento posterior a esa fecha queda fuera de su conocimiento.&lt;/p&gt;
&lt;p&gt;Si un modelo fue entrenado con datos hasta 2025, no dispone de información sobre hechos ocurridos después. Ante una consulta de este tipo, el modelo o bien reconoce su desconocimiento, o bien alucina para completar la respuesta.&lt;/p&gt;
&lt;h3 id="ausencia-de-conocimiento-privado"&gt;Ausencia de conocimiento privado&lt;/h3&gt;
&lt;p&gt;Al entrenarse sobre datos públicos, los LLMs no tienen acceso a datos privados: manuales internos, contratos, bases de conocimiento corporativas o historiales de clientes. Esta es una limitación esperada, pero decisiva.&lt;/p&gt;
&lt;p&gt;La alternativa que uno creeria de adjuntar todos los documentos privados en cada conversación no es técnicamente viable, implica un consumo desmedido de tokens y latencia en cada llamada, además de chocar contra los límites de la ventana de contexto.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 L[🧠 LLM entrenado con datos públicos]
 L --&amp;gt; A[❌ Alucinaciones&amp;lt;br/&amp;gt;respuestas inventadas]
 L --&amp;gt; B[❌ Fecha de corte&amp;lt;br/&amp;gt;sin datos recientes]
 L --&amp;gt; C[❌ Sin conocimiento privado&amp;lt;br/&amp;gt;manuales, contratos, datos internos]
&lt;/pre&gt;

&lt;h2 id="alternativas-antes-de-llegar-a-rag"&gt;Alternativas antes de llegar a RAG&lt;/h2&gt;
&lt;p&gt;RAG no es la única técnica para inyectar conocimiento en un LLM. Es importante situarla frente a otras dos aproximaciones habituales y comprender sus contrapartidas.&lt;/p&gt;
&lt;h3 id="agentes"&gt;Agentes&lt;/h3&gt;
&lt;p&gt;Los &lt;strong&gt;agentes&lt;/strong&gt; han ganado tracción gracias a las amplias ventanas de contexto actuales, que permiten al modelo procesar grandes cantidades de información para resolver tareas complejas de manera autonoma. Sin embargo, cuando el volumen documental es elevado, el agente debería leer toda la información en cada ejecución.&lt;/p&gt;
&lt;p&gt;Incluso apoyándose en mecanismos de caché, el costo en tokens y tiempo escala de forma prohibitiva. Procesar íntegramente un manual extenso solo para resolver una consulta puntual es análogo a recorrer una biblioteca completa para responder una única pregunta: funciona, pero es ineficiente.&lt;/p&gt;
&lt;h3 id="fine-tuning"&gt;Fine-tuning&lt;/h3&gt;
&lt;p&gt;El &lt;strong&gt;fine-tuning&lt;/strong&gt; consiste en reentrenar un LLM sobre datos específicos para ajustar sus pesos y especializarlo en un dominio. Esta técnica genera una nueva versión del modelo con el conocimiento incorporado directamente en sus parámetros.&lt;/p&gt;
&lt;p&gt;El problema es su costo operativo: requiere tiempo, recursos y datos de entrenamiento cuidados. Además, cada vez que la información cambia, es necesario reentrenar. En un escenario donde los datos se actualizan cada semana, o cada día, el fine-tuning se vuelve inviable como estrategia principal.&lt;/p&gt;




 
 





 


&lt;div class="notice info"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Info&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Estas alternativas no son deficientes; simplemente resuelven problemas distintos. Los &lt;strong&gt;agentes&lt;/strong&gt; son idóneos para explorar código o ejecutar flujos de trabajo dinámicos, y el &lt;strong&gt;fine-tuning&lt;/strong&gt; brilla cuando el conocimiento es estable y muy específico. RAG destaca precisamente donde estas fallan: conocimiento amplio, cambiante y verificable.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="qué-es-un-rag-retrieval-augmented-generation"&gt;Qué es un RAG (Retrieval Augmented Generation)&lt;/h2&gt;
&lt;p&gt;Un &lt;strong&gt;RAG (Retrieval Augmented Generation)&lt;/strong&gt; es una técnica que recupera información relevante desde una fuente de datos externa y la incorpora al contexto del LLM en tiempo de inferencia, de modo que el modelo pueda responder con información verídica y actualizada.&lt;/p&gt;
&lt;p&gt;La idea central es desacoplar el conocimiento del modelo. En lugar de codificar los datos en los pesos, como hace el fine-tuning, o de arrastrar todo el corpus en cada llamada, como hace un agente, el RAG selecciona únicamente los fragmentos pertinentes para cada consulta y los añade al prompt.&lt;/p&gt;
&lt;p&gt;Analicemos un caso concreto. Supongamos un modelo cuyo conocimiento llega hasta mayo de 2026 y le preguntamos por un evento posterior a esa fecha:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;prompt: ¿Qué equipos jugarán la semifinal de la Copa del Mundo 2026?
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LLM: Lo siento, no dispongo de información sobre los equipos que jugarán
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; la semifinal de la Copa del Mundo 2026. Mi conocimiento está
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; actualizado hasta mayo de 2026.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ahora enriquezcamos ese mismo prompt con un bloque de contexto recuperado desde una fuente externa:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#abb2bf;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;prompt: ¿Qué equipos jugarán la semifinal de la Copa del Mundo 2026?
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;----- contexto inyectado -----
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Contexto: Los equipos que disputarán la semifinal de la Copa del Mundo 2026 son:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Francia
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- España
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Inglaterra
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Argentina
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;----- fin del contexto -----
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LLM: Los equipos que jugarán la semifinal de la Copa del Mundo 2026 son
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Francia, España, Inglaterra y Argentina.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La diferencia está en el campo de &lt;strong&gt;contexto&lt;/strong&gt;. Ese bloque, recuperado dinámicamente, es lo que permite al modelo responder con precisión sin haber sido entrenado con esa información. En esto consiste, en esencia, un RAG: obtener el conocimiento relevante desde una fuente de datos y aumentar con él el contexto del LLM.&lt;/p&gt;
&lt;p&gt;Si pensamos esto en el caso de la documentación extensa, un RAG permite extraer las secciones pertinentes de un manual o contrato y añadirlas al prompt, de modo que el modelo pueda responder con información verídica y actualizada sin necesidad de reentrenar ni de procesar todo el documento en cada consulta. Es decir que solo cargamos una parte del documento y no todo su contenido.&lt;/p&gt;
&lt;h2 id="cómo-funciona-un-rag-a-alto-nivel"&gt;Cómo funciona un RAG a alto nivel&lt;/h2&gt;
&lt;p&gt;Su nombre describe con exactitud las tres fases del proceso: &lt;strong&gt;Retrieval&lt;/strong&gt; (recuperación), &lt;strong&gt;Augmented&lt;/strong&gt; (aumento) y &lt;strong&gt;Generation&lt;/strong&gt; (generación).&lt;/p&gt;




 
 
 
 &lt;div class="flex justify-center"&gt;
 &lt;img
 src="https://blog.dacadev.com/images/generative-ai/rag/01-que-es-un-rag/rag-diagram_hu_ae75a4373e1dc204.webp"
 alt="Imagen guia del contenido de la página"/&gt;
 &lt;/div&gt;
 
 
 


&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Retrieval (Recuperación)&lt;/strong&gt;: ante una consulta del usuario, el sistema busca en una base de conocimiento externa los fragmentos de información más relevantes. Esta búsqueda suele apoyarse en similitud semántica, un mecanismo que abordaremos en detalle más adelante en la serie.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Augmented (Aumento)&lt;/strong&gt;: los fragmentos recuperados se combinan con la consulta original para construir un prompt enriquecido. El modelo recibe así, junto a la pregunta, el contexto necesario para responderla.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generation (Generación)&lt;/strong&gt;: el LLM genera la respuesta final apoyándose en el contexto inyectado, no solo en su conocimiento paramétrico.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice tip"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M15.362 5.214A8.252 8.252 0 0 1 12 21 8.25 8.25 0 0 1 6.038 7.047 8.287 8.287 0 0 0 9 9.601a8.983 8.983 0 0 1 3.361-6.867 8.21 8.21 0 0 0 3 2.48Z" /&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 18a3.75 3.75 0 0 0 .495-7.468 5.99 5.99 0 0 0-1.925 3.547 5.975 5.975 0 0 1-2.133-1.001A3.75 3.75 0 0 0 12 18Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Tip&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;La calidad de un RAG depende directamente de la fase de recuperación. Si los fragmentos recuperados son irrelevantes o incompletos, el modelo generará una respuesta pobre por muy capaz que sea. En RAG, la máxima &amp;ldquo;basura entra, basura sale&amp;rdquo; aplica con especial fuerza.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id="ventajas-de-adoptar-un-rag"&gt;Ventajas de adoptar un RAG&lt;/h2&gt;
&lt;p&gt;Más allá de mitigar las limitaciones descritas, el patrón RAG ofrece beneficios concretos de ingeniería:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Eficiencia y costo&lt;/strong&gt;: aporta conocimiento profundo y específico al modelo sin el costo de reentrenar ni de procesar el documento completo en cada llamada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Información verificable&lt;/strong&gt;: al recuperar fragmentos de fuentes reales, el modelo puede &lt;strong&gt;citar&lt;/strong&gt; su origen, de modo que el usuario contraste la respuesta con la fuente original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actualización simple&lt;/strong&gt;: mantener el sistema al día se reduce a actualizar la base de conocimiento, sin tocar el modelo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reducción de alucinaciones&lt;/strong&gt;: al fundamentar la respuesta en datos recuperados, disminuye de forma significativa la probabilidad de que el modelo invente información.&lt;/li&gt;
&lt;/ul&gt;




 
 





 


&lt;div class="notice warning"&gt;
 &lt;div class="notice-head"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" /&gt;
 &lt;/svg&gt;
 &lt;p&gt;Warning&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div class="notice-body"&gt;&lt;p&gt;Un RAG reduce las alucinaciones, pero no las elimina por completo. El modelo aún puede malinterpretar el contexto recuperado o combinarlo con su conocimiento paramétrico de forma incorrecta. El diseño del prompt y la evaluación rigurosa siguen siendo responsabilidad del ingeniero.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
</content:encoded></item></channel></rss>