<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[IA y DevOps para Profesionales]]></title><description><![CDATA[Una newsletter técnica para profesionales que quieren aprender tecnología aplicable cada semana sobre Inteligencia Artificial, DevOps, CI/CD y entornos Cloud.]]></description><link>https://lvrpiz.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!PnMp!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fb2152-2c75-4612-9a7f-714fedb7aeae_750x750.png</url><title>IA y DevOps para Profesionales</title><link>https://lvrpiz.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 03 Sep 2026 17:22:38 GMT</lastBuildDate><atom:link href="/__u/lvrpiz.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Álvaro García Pizarro]]></copyright><language><![CDATA[es]]></language><webMaster><![CDATA[lvrpiz@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[lvrpiz@substack.com]]></itunes:email><itunes:name><![CDATA[Álvaro]]></itunes:name></itunes:owner><itunes:author><![CDATA[Álvaro]]></itunes:author><googleplay:owner><![CDATA[lvrpiz@substack.com]]></googleplay:owner><googleplay:email><![CDATA[lvrpiz@substack.com]]></googleplay:email><googleplay:author><![CDATA[Álvaro]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Full Duplex: la arquitectura que cambia cómo diseñamos agentes de voz]]></title><description><![CDATA[GPT&#8209;Live de OpenAI trae una arquitectura donde el sistema puede escuchar, hablar y pensar en paralelo sin romper la conversaci&#243;n.]]></description><link>https://lvrpiz.substack.com/p/full-duplex-la-arquitectura-que-cambia</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/full-duplex-la-arquitectura-que-cambia</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 19 Aug 2026 15:02:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!52zR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hablar con una IA siempre ha tenido un peque&#241;o problema: los turnos.</p><p>T&#250; hablas. Esperas. El sistema decide si has terminado. Transcribe el audio. Piensa. Genera una respuesta. La convierte en voz. Y entonces te responde.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Funciona, pero no se parece demasiado a una conversaci&#243;n humana. Esto es lo que conocemos como <strong>arquitectura en cascada</strong>.</p><p>Las personas no esperamos a que haya un silencio perfecto para empezar a entender. Podemos asentir mientras alguien habla, detectar una interrupci&#243;n, cambiar de idea a mitad de frase o responder con un &#8220;s&#237;, sigue&#8221; sin convertirlo en un turno formal de conversaci&#243;n.</p><p>OpenAI ha presentado GPT&#8209;Live, su tercera generaci&#243;n de sistema de voz, y lo interesante no es solo el modelo. Es la arquitectura que hay detr&#225;s: una arquitectura <strong>full duplex</strong> que es capaz de escuchar y hablar al mismo tiempo y esto es mucho m&#225;s relevante de lo que parece.</p><p></p><h2>TL;DR</h2><p>En este art&#237;culo te explico qu&#233; cambia una arquitectura full duplex en los agentes de voz y por qu&#233; puede ser una referencia &#250;til para dise&#241;ar sistemas de IA en tiempo real.</p><ul><li><p>Los sistemas de voz tradicionales funcionan por turnos: primero escucha, despu&#233;s piensa y luego habla.</p></li><li><p>GPT&#8209;Live elimina el detector de final de turno del camino principal del audio y mantiene un flujo continuo.</p></li><li><p>El audio en vivo, el razonamiento profundo y las llamadas a herramientas se ejecutan en caminos separados.</p></li><li><p>La conversaci&#243;n puede seguir mientras otro modelo busca informaci&#243;n, razona o consulta una herramienta.</p></li><li><p>El reto ya no es solo servir un modelo r&#225;pido sino que hay que mantener cada fragmento de audio llegando a tiempo.</p></li></ul><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!52zR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!52zR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1336091,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/209804804?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!52zR!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8a261b5-95c1-4b5f-ad79-2cfe7f183978_1672x941.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>&#191;C&#243;mo funciona un asistente de voz de IA? - Arquitectura en cascada</h2><p>La primera generaci&#243;n de asistentes de voz segu&#237;a una cadena como la siguiente:</p><pre><code><code>Audio del usuario
  &#8594; transcripci&#243;n
  &#8594; modelo de lenguaje
  &#8594; texto de respuesta
  &#8594; s&#237;ntesis de voz</code></code></pre><p>Este enfoque se conoce como <strong>arquitectura en cascada</strong>. Cada parte espera a la anterior y tiene sus ventajas como que cada componente es f&#225;cil de entender, sustituir y medir. Puedes cambiar el proveedor de transcripci&#243;n o usar otro modelo de texto sin rehacerlo todo.</p><p>Peeero tiene un precio y es que la latencia se acumula.</p><p>Adem&#225;s, en la transcripci&#243;n se pierden cosas. El tono, las pausas, la duda o el &#233;nfasis no siempre sobreviven cuando el audio se reduce a texto. Y, sobre todo, el sistema necesita decidir cu&#225;ndo has terminado de hablar antes de hacer nada &#250;til.</p><p>Ah&#237; aparece el <strong>detector de turnos</strong>, un peque&#241;o modelo que intenta identificar si la persona ya ha acabado de hablar: si se equivoca y decide demasiado pronto, te interrumpe. Si espera demasiado, parece lento.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dfq2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dfq2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1004740,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/209804804?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dfq2!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c8c45b2-2146-4fa0-86de-290fe81bd2ac_1672x941.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Arquitectura en cascada y full duplex (generado con IA)</figcaption></figure></div><p>Es una pieza inc&#243;moda porque est&#225; tomando una decisi&#243;n social con una se&#241;al imperfecta: unos milisegundos de silencio pueden ser el final de una frase, una pausa para pensar o el momento en que alguien va a continuar.</p><p></p><h2>&#191;Qu&#233; significa Full Duplex?</h2><p>Full duplex significa que la comunicaci&#243;n puede ir en ambas direcciones a la vez. En una llamada telef&#243;nica puedes hablar mientras escuchas. Eso es full duplex.</p><p>Un walkie-talkie, en cambio, funciona de forma parecida a un sistema por turnos: habla uno, luego habla el otro. No hay conversaci&#243;n simult&#225;nea.</p><p>GPT&#8209;Live lleva esta idea al modelo de voz. El audio entra continuamente al modelo y la voz generada sale de forma continua. El modelo puede seguir escuchando aunque est&#233; hablando.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fMW5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 424w, /__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 848w, /__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fMW5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg" width="1456" height="1165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1165,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115206,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/svg+xml&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/209804804?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 424w, /__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 848w, /__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!fMW5!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491aa0a7-3659-46b8-8650-19f9c94d6abf_596x477.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Arquitectura GPT Live. Fuente: OpenAI Blog</figcaption></figure></div><p>Esto cambia una decisi&#243;n fundamental porque ya no hace falta que un detector externo d&#233; permiso al modelo para empezar a inferir. El propio modelo participa en la conversaci&#243;n y puede manejar mejor cosas como estas:</p><ul><li><p>Empiezas a hablar mientras la IA est&#225; respondiendo.</p></li><li><p>Dices &#8220;espera, espera&#8221; para corregir una petici&#243;n.</p></li><li><p>Haces una pausa larga a mitad de una explicaci&#243;n.</p></li><li><p>La IA responde con una confirmaci&#243;n corta mientras sigues explicando el problema.</p></li></ul><p>No significa que el sistema entienda siempre perfectamente las reglas de una conversaci&#243;n humana porque eso sigue siendo dif&#237;cil pero si que elimina una frontera artificial. Ya no hay que convertir toda interacci&#243;n en bloques cerrados de &#8220;usuario habla&#8221; e &#8220;IA responde&#8221;.</p><p></p><h2>Dos caminos de audio en paralelo: delegaci&#243;n de tareas</h2><p>En un producto de voz, una llamada lenta a una API no es simplemente una respuesta lenta. Puede convertirse en un silencio raro, un corte o un audio entrecortado. Por eso OpenAI separa la arquitectura en dos caminos: uno r&#225;pido y uno lento.</p><h3>El camino r&#225;pido: audio en directo</h3><p>Este es el camino que no puede bloquearse. Aqu&#237; el micr&#243;fono del usuario est&#225; siempre abierto siguiendo una capa de transporte de baja latencia. Aqu&#237; el trabajo es mantener el flujo de audio. Cada fragmento tiene que llegar cuando toca.</p><p>OpenAI usa <strong>WebRTC como base de transporte</strong>. WebRTC est&#225; pensado para comunicaciones en tiempo real y puede gestionar p&#233;rdidas de paquetes, cambios de red o peque&#241;as variaciones de reloj sin dejar huecos evidentes en el audio.</p><p>La compa&#241;&#237;a tambi&#233;n explica que traslad&#243; el frontend de medios y parte de la inferencia de Python con <code>asyncio</code> a <strong>Go</strong>. Seg&#250;n OpenAI, el percentil 95 de la entrega de audio del nuevo sistema igual&#243; al percentil 50 del sistema anterior. (los momentos malos del sistema nuevo se parec&#237;an a los momentos habituales del anterior).</p><p>Ese dato no prueba que Go sea mejor que Python para cualquier proyecto (esa ser&#237;a una conclusi&#243;n bastante pobre), lo que demuestra es que, cuando cada frame de audio importa, el comportamiento predecible bajo carga importa tanto como la media.</p><h3>El camino lento: pensar, buscar y usar herramientas</h3><p>Ahora imagina que preguntas:</p><blockquote><p>&#8220;&#191;Puedes revisar las ventas del &#250;ltimo trimestre y compararlas con el presupuesto?&#8221;</p></blockquote><p>Una respuesta natural puede empezar antes de tener el an&#225;lisis completo:</p><blockquote><p>&#8220;S&#237;, d&#233;jame revisar los datos&#8230;&#8221;</p></blockquote><p>Mientras mantiene la conversaci&#243;n, el sistema puede consultar una base de datos, lanzar una b&#250;squeda o pedir a un modelo m&#225;s capaz que haga el an&#225;lisis.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Y4Lr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 424w, /__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 848w, /__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Y4Lr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png" width="1456" height="616" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b95497a3-4e81-4d50-81aa-69e294238803_1916x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:616,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95205,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/209804804?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 424w, /__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 848w, /__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Y4Lr!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb95497a3-4e81-4d50-81aa-69e294238803_1916x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Delegaci&#243;n de tareas de forma as&#237;ncrona. Fuente: OpenAI Blog</figcaption></figure></div><p>En GPT&#8209;Live, este trabajo ocurre de forma as&#237;ncrona. El <strong>modelo de voz puede delegar una tarea a otro modelo como GPT&#8209;5.5</strong> seg&#250;n el art&#237;culo de OpenAI, sin bloquear el canal de audio.</p><p>La <strong>separaci&#243;n evita que una herramienta lenta congele la conversaci&#243;n</strong>. Si el CRM tarda tres segundos, su resultado llegar&#225; tarde pero el usuario no deber&#237;a escuchar tres segundos de vac&#237;o porque el sistema decidi&#243; esperar.</p><p>La propuesta de OpenAI separa dos capacidades:</p><ul><li><p>Un modelo de voz r&#225;pido que gestiona el ritmo de la conversaci&#243;n.</p></li><li><p>Un modelo m&#225;s potente que se encarga del trabajo profundo cuando hace falta.</p></li></ul><p>El modelo de voz no tiene que resolver una consulta compleja antes de decir una primera frase &#250;til. Y el modelo de razonamiento no tiene que competir con la exigencia de producir audio de forma continua.</p><p></p><h2>&#191;C&#243;mo se convierte un flujo continuo de voz en mensajes?</h2><p>El modelo de voz trabaja con audio continuo. Pero las interfaces, los sistemas de anal&#237;tica, los registros de auditor&#237;a y muchas reglas de seguridad siguen necesitando mensajes discretos. <strong>Alguien tiene que decidir d&#243;nde empieza y termina cada intervenci&#243;n</strong>.</p><p>OpenAI explica que mantiene dos versiones de la conversaci&#243;n:</p><ul><li><p>Una vista provisional, que puede actualizarse mientras llega m&#225;s audio.</p></li><li><p>Un registro definitivo, para cuando ya hay suficiente certeza sobre qui&#233;n dijo qu&#233; y cu&#225;ndo.</p></li></ul><p>Esto es importante porque las conversaciones reales se solapan. La IA puede decir &#8220;aj&#225;&#8221; mientras hablas. T&#250; puedes intervenir a mitad de su frase. Puede haber una palabra mal transcrita que se corrige unos instantes despu&#233;s.</p><p>Si guardas cada fragmento demasiado pronto, el <strong>historia de la conversaci&#243;n</strong> queda roto y confuso. Si esperas demasiado para confirmar cada mensaje, retrasas todo lo que depende de ese texto: la interfaz, las herramientas, las m&#233;tricas o la moderaci&#243;n.</p><p></p><h2>&#191;C&#243;mo gestiona OenAI la latencia en el modo de voz?</h2><p>Cuando pulsas el bot&#243;n para empezar una conversaci&#243;n de voz, el sistema todav&#237;a tiene trabajo por delante: crear la sesi&#243;n, negociar la conexi&#243;n, establecer el canal de medios y empezar a enviar audio.</p><p>OpenAI ha trabajado en ese arranque con una variante de WebRTC llamada <strong>WARP</strong>, dise&#241;ada para reducir los viajes de ida y vuelta necesarios al iniciar la conexi&#243;n. Seg&#250;n la compa&#241;&#237;a, <strong>pasa de seis rondas de red a una</strong>.</p><p>Muchas veces nos obsesionamos con la latencia del modelo cuando lo importante puede ser:</p><ul><li><p>La red.</p></li><li><p>El arranque de sesi&#243;n.</p></li><li><p>El procesamiento de audio.</p></li><li><p>Las colas.</p></li><li><p>Los servicios externos.</p></li><li><p>La distancia f&#237;sica a la regi&#243;n donde se ejecuta la inferencia.</p></li></ul><p>Un sistema de voz se percibe como r&#225;pido o lento por el conjunto entero. No por el tiempo que tarda un &#250;nico modelo en generar tokens.</p><p></p><h2>5 Tips que aplicar si construyes agentes de voz</h2><p>No hace falta replicar toda la infraestructura de OpenAI para quedarte con las ideas importantes.</p><ol><li><p><strong>Separa lo que debe ocurrir ya de lo que puede esperar:</strong> El audio, las confirmaciones cortas y la detecci&#243;n de interrupciones pertenecen al camino r&#225;pido.</p></li><li><p><strong>Dise&#241;a respuestas intermedias con sentido:</strong> Decir &#8220;un momento&#8221; por sistema es una mala experiencia. Pero una respuesta breve que explique qu&#233; est&#225; haciendo el agente s&#237; puede mantener el contexto: &#8220;Estoy comprobando las reservas de ma&#241;ana&#8221; o &#8220;Voy a revisar el estado del pedido&#8221;.</p></li><li><p><strong>Mide el audio, no solo las peticiones:</strong> En un backend tradicional puedes mirar latencia media, errores y rendimiento de la GPU. En voz necesitas adem&#225;s saber si los frames llegan a tiempo, d&#243;nde se forman colas, cu&#225;nto tarda en empezar una sesi&#243;n y qu&#233; ocurre cuando la red se degrada. La pregunta &#250;til no es &#8220;&#191;cu&#225;ntas peticiones por segundo soportamos?&#8221;, sino &#8220;&#191;cu&#225;ntas conversaciones simult&#225;neas podemos mantener sin que el audio se rompa?&#8221;.</p></li><li><p><strong>Trata las herramientas como una fuente de variabilidad:</strong> Una herramienta externa puede ir r&#225;pida durante semanas y tardar cuatro segundos justo en el peor momento. Pon l&#237;mites de tiempo, prepara rutas alternativas y deja claro qu&#233; hacer si el resultado llega tarde. El modelo de voz debe saber continuar la conversaci&#243;n sin inventarse una respuesta.</p></li><li><p><strong>Prueba conversaciones largas y redes imperfectas:</strong> Una demo de dos minutos en una Wi&#8209;Fi estable no descubre los problemas importantes. Hay que probar reconexiones, sesiones largas, cambios de red, usuarios que interrumpen, herramientas lentas y picos de tr&#225;fico. OpenAI cuenta que sus pruebas silenciosas con tr&#225;fico real revelaron saturaciones de componentes auxiliares que no hab&#237;an aparecido en las pruebas de carga. Menudo recordatorio de que la GPU no es todo el sistema.</p></li></ol><p></p><h2>Referencias t&#233;cnicas</h2><ul><li><p><a href="https://openai.com/index/continuous-voice-interaction-with-gpt-live/">How we built a realtime system for responsive voice AI in six months</a>: art&#237;culo de ingenier&#237;a de OpenAI sobre GPT&#8209;Live, su modelo full duplex, la delegaci&#243;n as&#237;ncrona y la infraestructura de baja latencia.</p></li><li><p><a href="https://developers.openai.com/api/docs/guides/realtime">Realtime and audio</a>: documentaci&#243;n oficial de OpenAI sobre capacidades y gu&#237;as para experiencias de audio y tiempo real.</p></li><li><p><a href="https://www.w3.org/TR/webrtc/">WebRTC: Real-Time Communication in Browsers</a>: especificaci&#243;n del est&#225;ndar WebRTC, la base de transporte de baja latencia mencionada en el art&#237;culo.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[¿Qué es el prompt caching y por qué influye en tu factura de IA?]]></title><description><![CDATA[Te explico c&#243;mo funciona la cach&#233; de prompts en agentes de IA, por qu&#233; se rompe con tanta facilidad, y por qu&#233; tiene que ver lo que pagas a tu proveedor de IA]]></description><link>https://lvrpiz.substack.com/p/que-es-el-prompt-caching-y-por-que</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/que-es-el-prompt-caching-y-por-que</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Thu, 06 Aug 2026 15:02:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FDwM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#191;Alguna vez te ha llegado una factura de la API de un modelo que no cuadraba con lo que esperabas, sin haber tocado una sola l&#237;nea de tu c&#243;digo?</p><p>Hay un tema al que se suele dar por sentado cuando se habla de agentes de c&#243;digo y es la cach&#233; de prompts. Se trata como un detalle de optimizaci&#243;n, un ahorro de c&#233;ntimos, pero en una sesi&#243;n larga es la pieza que decide si el coste es razonable o se dispara.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Earendil, la empresa detr&#225;s del agente de c&#243;digo Pi, public&#243; hace poco un an&#225;lisis bastante completo sobre c&#243;mo funciona el prompt caching y me ha parecido un buen punto de partida para explicarlo, con sus implicaciones para cualquiera que construya o use un agente.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FDwM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 424w, /__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 848w, /__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FDwM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1728687b-303f-4602-9529-281765586467_1731x909.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1664714,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/208701893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 424w, /__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 848w, /__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FDwM!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1728687b-303f-4602-9529-281765586467_1731x909.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>TL;DR</h2><p>El prompt caching determina si un agente reutiliza el trabajo de c&#243;mputo de turnos anteriores o lo repite entero, y eso cambia el coste, la latencia, y hasta el dise&#241;o de las herramientas del agente.</p><ul><li><p>Un modelo guarda, para cada token procesado, un par clave-valor por capa de atenci&#243;n. Ese estado (la <strong>cach&#233; KV</strong>) es lo que evita recalcular todo el historial en cada turno.</p></li><li><p>Existen dos formas de guardar esa cach&#233;: pegada a la GPU que la calcul&#243; (afinidad de sesi&#243;n) o repartida entre varias m&#225;quinas (cach&#233; distribuida), con trade-offs distintos entre velocidad y flexibilidad.</p></li><li><p>Un cambio peque&#241;o, como a&#241;adir una herramienta nueva o reordenar el listado de herramientas, puede invalidar toda la cach&#233; de una sesi&#243;n de horas.</p></li><li><p>La mayor&#237;a de proveedores, Anthropic incluido, usan cach&#233;s con un TTL corto (5 minutos por defecto). Ua pausa para comer o para revisar un build puede hacerte pagar el mismo prefijo otra vez entero.</p></li><li><p>Borrar contexto antiguo para ahorrar tokens tiene un coste de cach&#233; que muchas veces supera el ahorro, as&#237; que podar agresivamente no siempre compensa.</p></li></ul><p></p><h2>&#191;Qu&#233; es y qu&#233; guarda exactamente una cach&#233; KV?</h2><p>Un transformer procesa un prompt en dos fases. En la fase de <strong>prefill</strong> lee todos los tokens de entrada y calcula, para cada uno, el estado de atenci&#243;n de cada capa. En la fase de <strong>decode</strong> genera los tokens de salida, uno detr&#225;s de otro.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zg3T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 424w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 848w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zg3T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp" width="1456" height="921" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:921,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60106,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 424w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 848w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fases Prefill y Decode en la inferencia de un LLM</figcaption></figure></div><p>En cada capa de atenci&#243;n, cada token procesado produce dos vectores: una clave y un valor. Cuando el modelo procesa un token nuevo, compara su consulta (query) contra las claves de todos los tokens anteriores para decidir cu&#225;nto peso darle a cada uno, y con esos pesos construye una mezcla de los valores correspondientes. La clave es contra qu&#233; comparas, el valor es lo que recuperas, aunque aqu&#237; no hay coincidencia exacta como en un diccionario, es m&#225;s una b&#250;squeda difusa por similitud.</p><p>Esas claves y valores se guardan para que el siguiente token generado pueda mirar hacia atr&#225;s sin tener que recalcular nada de lo anterior. <strong>Eso es la cach&#233; KV</strong>.</p><p>F&#237;jate en lo que implica esto para un agente de c&#243;digo: cada turno vuelve a enviar el system prompt, las herramientas, el historial completo y el resultado de la &#250;ltima herramienta, m&#225;s un poco de contenido nuevo. Si el prefijo (todo menos ese trocito nuevo) coincide token por token con una petici&#243;n anterior, el proveedor puede reutilizar el c&#225;lculo ya hecho y solo procesar lo nuevo. <strong>Si un solo token cambia en medio del historial, todo lo que va despu&#233;s de ese punto deja de coincidir y hay que recalcularlo desde ah&#237;</strong>.</p><p></p><h2>&#191;D&#243;nde vive esa cach&#233;? Afinidad de sesi&#243;n frente a cach&#233; distribuida</h2><p>Para que una cach&#233; sirva de algo tiene que estar en alg&#250;n sitio localizable cuando llega la siguiente petici&#243;n. Los sistemas de inferencia resuelven esto de dos maneras.</p><p>La m&#225;s simple es la <strong>afinidad de sesi&#243;n</strong>: la cach&#233; se queda en la <strong>GPU que la calcul&#243;</strong>, y el router manda la siguiente petici&#243;n de esa misma sesi&#243;n a esa misma m&#225;quina. Es r&#225;pido cuando funciona y apenas necesita infraestructura adicional, pero ata la sesi&#243;n a un worker concreto. Si ese worker se satura, se reinicia, o el balanceador decide que repartir carga es m&#225;s importante que conservar esa cach&#233;, la pierdes.</p><p>La alternativa es distribuir la cach&#233;: <strong>guardar los bloques KV en otra capa de memoria, o hacerlos accesibles desde varias m&#225;quinas</strong>, de forma que la petici&#243;n no dependa de una GPU concreta. Gana en flexibilidad de scheduling y en recuperaci&#243;n ante fallos, pero mover, indexar y desalojar esos bloques es en s&#237; mismo un problema de sistemas nada trivial.</p><p>No hay una opci&#243;n objetivamente mejor. Cada proveedor mezcla memoria de GPU, memoria de host, almacenamiento local y remoto, y pol&#237;ticas de desalojo distintas. Lo que s&#237; conviene saber como usuario de la API es que <strong>ninguna de las dos garantiza que tu cach&#233; siga viva cuando la necesites</strong>.</p><p></p><h2>Una sesi&#243;n no es una lista, es un &#225;rbol</h2><p>Aqu&#237; hay un matiz que se pasa por alto casi siempre. Muchos agentes de c&#243;digo no representan una conversaci&#243;n como una lista lineal de mensajes, sino como un &#225;rbol donde puedes retroceder a un punto anterior y continuar por otra rama, sin borrar la rama original.</p><p>El problema es que, aunque todas esas ramas compartan el mismo identificador de sesi&#243;n de cara al router, de cara a la cach&#233; de prompts son secuencias de tokens distintas con solo un solapamiento parcial de prefijo. <strong>Si saltas a una rama que se separ&#243; hace poco, puede que se reutilice casi todo lo anterior</strong>. Si saltas a una rama que se separ&#243; al principio de la conversaci&#243;n, puede que solo se aproveche el system prompt y las primeras herramientas, y todo lo dem&#225;s haya que recalcularlo.</p><p>El caso contrario tambi&#233;n existe: puedes crear una sesi&#243;n nueva que en la pr&#225;ctica arrastra el mismo contexto que una anterior, y si el sistema de routing solo identifica sesiones por su ID, nunca se da cuenta de ese solapamiento y desperdicia cach&#233; reutilizable.</p><p></p><h2>Cach&#233; expl&#237;cita frente a cach&#233; autom&#225;tica</h2><p>Las APIs de los proveedores de IA exponen esto de dos formas distintas.</p><p>Anthropic usa puntos de cach&#233; expl&#237;citos con <code>cache_control</code>. T&#250; marcas, dentro de la petici&#243;n, el final del bloque estable (system prompt, herramientas, la &#250;ltima parte cacheable de la conversaci&#243;n), y el servidor escribe o busca la cach&#233; hasta ese punto. Algo as&#237;:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;e6228a96-2793-44f3-8cbd-475a8a5232b4&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "model": "claude-sonnet-4-5",
  "max_tokens": 1024,
  "system": [
    {
      "type": "text",
      "text": "Eres un agente de c&#243;digo. Usa las herramientas disponibles para leer, editar y ejecutar archivos.",
      "cache_control": { "type": "ephemeral", "ttl": "1h" }
    }
  ],
  "tools": [ { "name": "read_file", "description": "..." } ],
  "messages": [ { "role": "user", "content": "Arregla el test que falla en auth.py" } ]
}</code></pre></div><p>Ojo con un detalle que se suele pasar por alto: en Anthropic no solo el punto de corte es expl&#237;cito, tambi&#233;n lo es el precio. Escribir en la cach&#233; cuesta m&#225;s que un input normal, y t&#250; eliges cu&#225;nto tiempo quieres retenerla (5 minutos o 1 hora, con precios distintos). En el momento de escribir este post Anthropic trataba con estos multiplicadores:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!exAD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 424w, /__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 848w, /__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 1272w, /__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!exAD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png" width="1456" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83171,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/208701893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 424w, /__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 848w, /__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 1272w, /__u/substackcdn.com/image/fetch/$s_!exAD!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc03c3aeb-e395-4f8b-9984-1426ecaa3c7e_1728x386.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Multiplicadores precio API Anthropic</figcaption></figure></div><p></p><h2>Por qu&#233; a&#241;adir una herramienta nueva te puede destrozar la cach&#233;</h2><p>Las definiciones de herramientas normalmente van antes de la conversaci&#243;n dentro del system prompt de cara al modelo. Sus nombres, descripciones y esquemas JSON son texto de entrada como cualquier otro. A&#241;adir una herramienta, quitar una, cambiar un esquema, o simplemente serializarlas en otro orden, puede mover el primer punto de desajuste muy cerca del principio del prompt, y todo lo que viene despu&#233;s de ese punto deja de coincidir con la cach&#233; anterior.</p><p>Esto sorprende mucho en sistemas de plugins o cat&#225;logos de herramientas al estilo MCP. <strong>Cargar una herramienta solo cuando hace falta suena eficiente, porque mandas menos esquemas al principio</strong>. El problema es que, <strong>en la mayor&#237;a de modelos, ese nuevo listado ampliado invalida toda la conversaci&#243;n cacheada que ven&#237;a detr&#225;s</strong>. Ahorrarte unos pocos tokens de esquema puede obligarte a reprocesar decenas de miles de tokens de conversaci&#243;n.</p><p>Algunas APIs de modelos m&#225;s recientes soportan <strong>carga aditiva de herramientas</strong>: una herramienta nueva se hace disponible a partir de un resultado de herramienta concreto dentro de la conversaci&#243;n, en vez de insertarse en el listado original. Si el cambio es puramente aditivo, el prefijo antiguo no se toca. La palabra clave aqu&#237; es aditivo: quitar herramientas, sustituir un listado por otro, o tocar cualquier fragmento anterior del prompt sigue rompiendo la cach&#233; igual.</p><p></p><h2>El coste real de un fallo de cach&#233;</h2><p>Imagina una sesi&#243;n con 60.000 tokens de historial y una petici&#243;n corta nueva. Cuando la cach&#233; funciona, casi todo ese historial se cobra al precio reducido de lectura de cach&#233;, y solo lo nuevo se procesa al precio normal. Cuando la cach&#233; falla, el proveedor tiene que reprocesar los 60.000 tokens enteros al precio normal, y puede que adem&#225;s cobre por volver a escribirlos en cach&#233;. Por eso un mensaje tan corto como &#8220;contin&#250;a&#8221; puede salir caro justo despu&#233;s de que caduque la cach&#233;: <strong>en una sesi&#243;n larga, releer el historial antiguo cuesta m&#225;s que generar la respuesta siguiente.</strong></p><p>Esto tambi&#233;n genera incentivos poco evidentes. Al usuario le interesa un buen ratio de aciertos porque baja coste y latencia. Al operador de la inferencia tambi&#233;n, porque menos prefill significa servir m&#225;s peticiones con el mismo hardware. Pero un intermediario que factura por tokens de input al precio sin descuento puede acabar generando una factura mayor precisamente cuando falla la cach&#233;, as&#237; que el rendimiento de cach&#233; deber&#237;a ser algo visible, no algo que solo intuyes mirando la factura del mes.</p><p></p><h2>&#191;Compensa podar el contexto para ahorrar tokens?</h2><p>Es tentador controlar el coste borrando resultados de herramientas antiguos o reescribiendo el historial. A veces es necesario, sobre todo cerca del l&#237;mite de contexto. Pero borrar algo del medio del historial cambia el prefijo justo en ese punto, as&#237; que todo lo que sobrevive despu&#233;s puede tener que reprocesarse entero.</p><p>Una forma simple de verlo:</p><pre><code><code>coste &#250;nico de reescribir  &#8776; tokens supervivientes &#215; (precio sin cach&#233; &#8722; precio de lectura de cach&#233;)
ahorro futuro por turno    &#8776; tokens eliminados &#215; precio de lectura de cach&#233;</code></code></pre><p><strong>El coste de reescribir un contexto largo cacheado puede superar de sobra el ahorro futuro de quitar unos pocos tokens que de todas formas se estaban cobrando barato.</strong> Y hay una segunda raz&#243;n, menos de hoja de c&#225;lculo: los resultados de herramientas antiguos suelen contener la evidencia que el modelo us&#243; para decidir algo m&#225;s adelante, as&#237; que borrarlos puede empeorar el comportamiento aunque un resumen conserve la idea general.</p><p>Dicho esto, podar s&#237; compensa en otros contextos: si trabajas con proveedores que no descuentan bien los aciertos de cach&#233;, o si por lo que sea no consigues buenos ratios de acierto, reducir contexto mejora la capacidad del router para repartir carga entre proveedores, precisamente porque las cach&#233;s no se pueden transferir de uno a otro.</p><p></p><h2>Referencias t&#233;cnicas</h2><ul><li><p><a href="https://earendil.com/posts/prompt-caching/">Prompt Caching In Agents (Earendil)</a>: el an&#225;lisis original sobre c&#243;mo el dise&#241;o de cach&#233; de KV afecta al coste, la latencia y el dise&#241;o de herramientas en el agente de c&#243;digo Pi.</p></li><li><p><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">Prompt caching (Claude Platform Docs)</a>: documentaci&#243;n oficial de Anthropic sobre <code>cache_control</code>, TTLs de 5 minutos y 1 hora, y precios de lectura y escritura de cach&#233;.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Una guía sobre Inference Engineering]]></title><description><![CDATA[Batching, prefix caching, cuantizaci&#243;n, speculative decoding y paralelismo]]></description><link>https://lvrpiz.substack.com/p/una-guia-sobre-inference-engineering</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/una-guia-sobre-inference-engineering</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 15 Jul 2026 15:02:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Olvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#191;Alguna vez te has parado a pensar por qu&#233; generar una respuesta de mil palabras en un modelo de lenguaje tarda unos segundos pero el primer fragmento de texto aparece casi al instante en tu pantalla? La respuesta a esta pregunta no tiene que ver con la magia del software, sino con un cuello de botella f&#237;sico en el hardware de los servidores que ejecutan estos modelos, un problema de arquitectura que divide el proceso en dos fases completamente opuestas y que ha dado lugar a una disciplina t&#233;cnica entera llamada ingenier&#237;a de inferencia.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Olvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Olvi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1631075,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Olvi!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1c4cf39-8693-45be-8e34-24150d0f13b3_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>TL;DR</h2><p>El <strong>inference engineering es la disciplina que permite ejecutar modelos de IA en producci&#243;n de forma eficiente para optimizar la latencia, el rendimiento y el coste computacional</strong>.</p><ul><li><p>El proceso de generaci&#243;n se divide en dos fases con cuellos de botella opuestos: el <strong>prefill</strong>, limitado por la capacidad de c&#225;lculo, y el <strong>decode</strong>, limitado por el ancho de banda de la memoria de la GPU.</p></li><li><p>T&#233;cnicas como el <strong>batching</strong> y el <strong>prefix caching</strong> ayudan a maximizar el uso del hardware agrupando peticiones simult&#225;neas y reutilizando el contexto procesado previamente.</p></li><li><p>La <strong>cuantizaci&#243;n</strong> permite reducir el peso del modelo en memoria bajando la precisi&#243;n matem&#225;tica de los datos, lo que acelera tanto el c&#225;lculo como la transferencia de informaci&#243;n.</p></li><li><p>Modelos avanzados utilizan <strong>speculative decoding</strong> para adivinar m&#250;ltiples tokens a la vez usando un modelo m&#225;s peque&#241;o y validarlos en bloque con el modelo principal.</p></li><li><p>Las <strong>arquitecturas a gran escala</strong> separan f&#237;sicamente el hardware dedicado al prefill del dedicado al decode para escalar cada fase seg&#250;n sus necesidades espec&#237;ficas de tr&#225;fico.</p></li></ul><p></p><h2>El auge del inference engineering</h2><p>Hace apenas tres a&#241;os el inference engineering era una especialidad practicada casi exclusivamente dentro de los grandes laboratorios de inteligencia artificial. El trabajo reca&#237;a sobre un grupo reducido de ingenieros que constru&#237;an modelos cerrados que el resto de la industria consum&#237;a a trav&#233;s de llamadas a una API. Ese panorama ha cambiado por completo desde la explosi&#243;n de los modelos abiertos.</p><p><a href="https://huggingface.co">Hugging Face</a>, el registro p&#250;blico de referencia para modelos de IA, aloja actualmente m&#225;s de <strong>dos millones de modelos abiertos</strong>. Esto representa aproximadamente 25 veces el volumen de lo que exist&#237;a hace 5 a&#241;os. Lanzamientos abiertos recientes como DeepSeek V3 han cerrado la brecha de capacidad operativa con los modelos privados, dando a las empresas una opci&#243;n real entre pagar por una API cerrada o ejecutar un modelo abierto en sus propios servidores.</p><p>Alojar tus propios modelos abiertos aporta tres ventajas operativas fundamentales frente a depender de servicios de terceros.</p><ul><li><p>Los perfiles de latencia se pueden afinar para el patr&#243;n de carga de trabajo de un producto espec&#237;fico, mientras que las APIs p&#250;blicas optimizan el rendimiento general para atender a miles de clientes a la vez.</p></li><li><p>El tiempo de actividad o uptime puede alcanzar niveles de disponibilidad mucho m&#225;s altos con despliegues dedicados, superando los problemas de estabilidad t&#237;picos de las plataformas p&#250;blicas en horas pico.</p></li><li><p>Los costes suelen caer en torno a un 80 por ciento a gran escala una vez que el volumen de peticiones justifica la inversi&#243;n inicial en infraestructura.</p></li></ul><p>El resultado de este cambio de paradigma es que <strong>empresas construyen ahora pilas de inferencia serias</strong>. Esto incluye startups nativas de IA, productos consolidados que integran funciones inteligentes en flujos de trabajo existentes e incluso sectores tradicionalmente cautelosos con los datos de terceros como el sanitario. Un ejemplo representativo es <strong>Cursor</strong>. El equipo construy&#243; su funci&#243;n <strong>Composer</strong> sobre un modelo abierto aplicando una extensa ingenier&#237;a de inferencia para ofrecer una latencia de autocompletado muy por debajo de lo que ofrecen las APIs cerradas del mercado.</p><p></p><h2>&#191;C&#243;mo genera respuestas un LLM? Fases Prefill y Decode</h2><p>Para entender por qu&#233; el inference engineering tiene este nivel de complejidad es necesario comprender <strong>qu&#233; ocurre f&#237;sicamente en la GPU cuando llega un prompt</strong> a un modelo de lenguaje. Antes de proceder a la explicaci&#243;n hay 4 m&#225;ximas que deben estar claras:</p><ul><li><p>El proceso se divide en dos fases con demandas f&#237;sicas totalmente diferentes: prefill y decode (ahora veremos cada una).</p></li><li><p>La unidad at&#243;mica con la que trabaja un modelo es el <strong>token</strong>.</p></li><li><p>Un token es un fragmento de palabra o una palabra entera. (Puedes jugar con este <a href="https://tiktokenizer.vercel.app/">tokenizador</a> para aprender m&#225;s sobre Tokens).</p></li><li><p>Las m&#233;tricas de latencia en esta industria siempre se miden utilizando esta unidad base.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zg3T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 424w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 848w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zg3T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp" width="1456" height="921" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:921,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 424w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 848w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!zg3T!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc41c971f-91dd-4e9e-b9ea-1b0f65868255_1456x921.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><p><strong>[1] La primera fase del proceso se llama prefill.</strong> El modelo toma todo el prompt de entrada y lo pasa por todas las capas de pesos de la red neuronal en paralelo. De esta r&#225;faga de procesamiento inicial salen <strong>dos cosas</strong>, el <strong>primer token de la respuesta</strong> y el <strong>KV cache</strong>.</p><div class="callout-block" data-callout="true"><p><strong>&#191;Qu&#233; es el KV Cache?</strong></p><p>El KV cache es una estructura de datos que almacena valores intermedios del mecanismo de atenci&#243;n para que puedan ser referenciados r&#225;pidamente a medida que se generan m&#225;s tokens. Sin el KV cache el modelo tendr&#237;a que procesar y calcular la relaci&#243;n de la palabra 100 con las 99 anteriores, luego la 101 con las 100 anteriores, y as&#237; sucesivamente lo que ser&#237;a prohibitivamente lento.</p></div><p>El prefill est&#225; limitado por la capacidad de c&#225;lculo bruto, la GPU es el factor limitante porque cada token de entrada se procesa simult&#225;neamente a trav&#233;s de cada capa del modelo. Si a&#241;ades m&#225;s potencia computacional a esta fase, el proceso se acelera.</p><p><strong>La m&#233;trica que captura el rendimiento del prefill es el tiempo hasta el primer token o TTFT por sus siglas en ingl&#233;s</strong>. Esa breve pausa entre que env&#237;as un mensaje a una IA y ves aparecer las primeras letras es el prefill trabajando al m&#225;ximo de la capacidad de la tarjeta gr&#225;fica.</p><p></p><p><strong>[2] La segunda fase es el decode</strong>. El modelo genera cada token de uno en uno, ejecutando una pasada completa hacia adelante a trav&#233;s de cada capa de pesos por cada nuevo token. <strong>Cada nuevo token depende de todos los tokens anteriores</strong>, lo que hace que el proceso sea fundamentalmente secuencial. La GPU repite esta operaci&#243;n miles de veces para generar una respuesta completa.</p><p>El <strong>decode est&#225; limitado por el ancho de banda de la memoria</strong>. La capacidad de c&#225;lculo de la GPU permanece mayoritariamente inactiva mientras el chip gasta sus ciclos leyendo los pesos del modelo desde la memoria VRAM para cada pasada hacia adelante.</p><p>El cuello de botella reside en el movimiento de los datos y no en el c&#243;mputo. <strong>La m&#233;trica que captura el rendimiento del decode son los tokens por segundo o TPS</strong>. El ritmo constante al que fluye una respuesta larga es la fase de decode operando bajo la restricci&#243;n de la memoria.</p><p></p><p>Dado que el prefill y el decode tienen cuellos de botella opuestos, una t&#233;cnica que acelera una fase suele tener un impacto nulo en la otra. Esta es la raz&#243;n por la que los benchmarks t&#233;cnicos reportan el TTFT y los TPS como n&#250;meros separados, ya que <strong>el rendimiento en cada fase debe medirse de forma independiente</strong>. Una vez que entiendes el prefill y el decode como dos operaciones distintas, las t&#233;cnicas de optimizaci&#243;n se dividen en tres grupos l&#243;gicos:</p><ul><li><p>Las que aceleran el prefill.</p></li><li><p>Las que aceleran el decode.</p></li><li><p>Y las que reequilibran ambas fases entre s&#237;.</p></li></ul><p></p><h2>&#191;Qu&#233; es y c&#243;mo funciona el Batching?</h2><p>El batching es la forma m&#225;s b&#225;sica de escalar la capacidad de salida de una &#250;nica GPU en producci&#243;n.</p><p>El motor de inferencia agrupa varias peticiones de diferentes usuarios token a token para que un solo servidor pueda atender a muchas personas a la vez. El rendimiento total del sistema aumenta significativamente porque la inmensa capacidad de c&#225;lculo de la GPU se utiliza por completo en lugar de quedarse inactiva esperando entre petici&#243;n y petici&#243;n.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!E46L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 424w, /__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 848w, /__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!E46L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp" width="1456" height="860" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58670,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 424w, /__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 848w, /__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!E46L!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55eeed71-f105-4610-8921-98455d0477ae_1456x860.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><p>F&#237;jate que <strong>el coste de esta t&#233;cnica se paga directamente en la latencia por usuario</strong>. </p><ul><li><p>Un &#250;nico usuario en un sistema sin batching obtiene el tiempo de respuesta m&#225;s bajo posible.</p></li><li><p>Ese mismo usuario en un sistema con un batching agresivo esperar&#225; m&#225;s tiempo porque la GPU est&#225; dividiendo su atenci&#243;n para servir otras peticiones simult&#225;neamente. </p></li></ul><p>Esta <strong>compensaci&#243;n entre rendimiento global y latencia individual</strong> es el equilibrio principal sobre el que pivota cualquier otra t&#233;cnica de inferencia. Los diferentes productos del mercado se sit&#250;an en distintos puntos de este espectro. <strong>Las herramientas de chat para consumidores finales favorecen una latencia baja para dar sensaci&#243;n de inmediatez</strong>, mientras que los pipelines de procesamiento de datos en segundo plano favorecen un batching masivo para maximizar el rendimiento y reducir la factura de los servidores.</p><p></p><h2>Prefix Caching: Gesti&#243;n del contexto</h2><p><strong>El prefix caching es una t&#233;cnica dise&#241;ada espec&#237;ficamente para acelerar la fase de prefill</strong> mediante la <strong>reutilizaci&#243;n de los valores del KV cache entre diferentes peticiones</strong>.</p><p>Cuando dos prompts comparten un segmento de apertura id&#233;ntico, como por ejemplo un <strong>system prompt largo</strong> que define el comportamiento del modelo y que <strong>es igual en miles de peticiones de tus usuarios</strong>, el motor calcula ese prefijo una sola vez y lee el resultado desde la cach&#233; a partir de ese momento. Esta es la raz&#243;n por la que los proveedores a trav&#233;s de la API cobran menos dinero por los tokens de entrada que han sido cacheados.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Neza!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 424w, /__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 848w, /__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Neza!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp" width="1456" height="719" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:719,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69562,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 424w, /__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 848w, /__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!Neza!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa64d1e2d-a39e-4f15-9acf-2043d16ebcf8_1456x719.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><p>Ojo con esto porque la cach&#233; solo ayuda desde el inicio de la secuencia hasta el primer token que no coincide.</p><p><strong>Si el primer token del texto difiere entre dos prompts distintos, el prefix caching ofrece cero ahorro computacional</strong> incluso si el resto de la secuencia es id&#233;ntica. Por lo tanto, la estructura del prompt que env&#237;as al modelo tiene implicaciones directas en el coste y en la latencia. La estrategia correcta es colocar siempre la entrada variable del usuario al final del prompt y mantener el contenido est&#225;tico y compartido al principio para dar a la cach&#233; del servidor algo con lo que trabajar eficazmente.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;json&quot;,&quot;nodeId&quot;:&quot;99b32039-deb5-49ef-909d-7f53bf88d746&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-json">{
  "system_prompt": "Eres un asistente experto en bases de datos SQL. Tu objetivo es optimizar consultas lentas...",
  "instructions": "Reglas de formato: 1. Usa may&#250;sculas para las palabras reservadas. 2. A&#241;ade comentarios...",
  "user_input": "Optimiza esta consulta: SELECT * FROM users u JOIN orders o ON u.id = o.user_id"
}
</code></pre></div><p>En un esquema como el anterior, el servidor de inferencia mantendr&#225; cacheados el system_prompt y las instructions para todos los usuarios. Cuando llega la petici&#243;n, la GPU solo tiene que calcular la fase de prefill para el user_input, reduciendo el tiempo de primera respuesta a una fracci&#243;n del original.</p><p></p><h2>Cuantizaci&#243;n: Mejora Prefill y Decode a la vez</h2><p><strong>La cuantizaci&#243;n ayuda a ambas fases de la inferencia aunque por razones completamente diferentes</strong>. La cuantizaci&#243;n b&#225;sica consiste en almacenar los pesos del modelo en un formato de n&#250;mero de menor precisi&#243;n. La inmensa mayor&#237;a de los modelos modernos se entrenan utilizando una precisi&#243;n de punto flotante de 16 bits. La cuantizaci&#243;n comprime esos valores reduci&#233;ndolos a representaciones de 8 bits o incluso de 4 bits. Esto significa que los pesos del modelo son f&#237;sicamente m&#225;s peque&#241;os, <strong>ocupan mucha menos memoria VRAM</strong> y requieren menos movimiento de datos a trav&#233;s de los buses de la placa base.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!thWE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 424w, /__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 848w, /__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!thWE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp" width="1456" height="884" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:884,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56088,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 424w, /__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 848w, /__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!thWE!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef41d08-3067-4f51-97ac-1d25c1a84a72_1456x884.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><ul><li><p>El <strong>prefill</strong> se acelera porque las operaciones matem&#225;ticas de menor precisi&#243;n <strong>se ejecutan m&#225;s r&#225;pido</strong> en las unidades especializadas dentro de las GPUs modernas.</p></li><li><p>El <strong>decode</strong> se acelera porque la menor presi&#243;n sobre el ancho de banda de la memoria significa que <strong>los pesos se cargan mucho m&#225;s r&#225;pido por cada pasada hacia adelante</strong>. </p></li></ul><p>Un paso t&#237;pico hacia abajo en la precisi&#243;n del modelo produce un rendimiento entre un 30 y un 50 por ciento mejor, dependiendo del modelo exacto y de la t&#233;cnica aplicada.</p><p>El coste a pagar aqu&#237; es la <strong>posible degradaci&#243;n de la calidad de las respuestas</strong>, y diferentes partes de una red neuronal toleran la cuantizaci&#243;n de forma distinta. Los pesos lineales lo manejan bien, las activaciones son algo m&#225;s sensibles, el KV cache es m&#225;s sensible todav&#237;a y las capas de atenci&#243;n son las m&#225;s cr&#237;ticas de todas.</p><p>La raz&#243;n matem&#225;tica de esta degradaci&#243;n es que <strong>los peque&#241;os errores de precisi&#243;n en las capas de atenci&#243;n se acumulan a lo largo de la secuencia de tokens</strong>. Dado que el c&#225;lculo de cada token se basa en los anteriores, los peque&#241;os errores se convierten en una p&#233;rdida de calidad significativa en respuestas largas. </p><p></p><h2>Acelera el decode con Speculative Decoding</h2><p>El speculative decoding acelera el proceso de decode aprovechando una asimetr&#237;a t&#233;cnica muy interesante. <strong>Generar un token desde cero es extremadamente costoso a nivel computacional</strong>, pero verificar si un token candidato coincide con lo que el modelo principal producir&#237;a es una operaci&#243;n muy barata. Un ejemplo de modelo que aplica esta t&#233;cnica es <a href="https://ai.google.dev/gemma/docs/mtp/overview">Gemma 4 de Google</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!St3T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 424w, /__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 848w, /__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!St3T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp" width="1456" height="1161" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1161,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 424w, /__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 848w, /__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!St3T!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e33b69-c384-48e3-b345-7516004fa98e_1456x1161.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><p>En esta t&#233;cnica interviene un modelo borrador m&#225;s peque&#241;o que predice los siguientes tokens de la respuesta. El modelo principal toma estos tokens sugeridos y los verifica todos a la vez en una &#250;nica pasada hacia adelante, aceptando los que coinciden con sus propias predicciones y rechazando el resto. El resultado en la pr&#225;ctica es que emergen m&#250;ltiples tokens v&#225;lidos por cada ciclo de c&#225;lculo del modelo principal en lugar del &#250;nico token que se generar&#237;a de forma tradicional.</p><p>El <strong>speculative decoding mejora dr&#225;sticamente los tokens por segundo</strong> mientras deja intacto el tiempo hasta el primer token porque la fase de prefill sigue ejecut&#225;ndose de forma normal. Esta t&#233;cnica funciona mucho mejor en tama&#241;os de batch peque&#241;os, cuando la GPU todav&#237;a tiene capacidad de c&#225;lculo libre para gastar en el proceso de verificaci&#243;n. En tama&#241;os de batch grandes donde el servidor atiende a muchos usuarios a la vez, la GPU ya est&#225; saturada trabajando al l&#237;mite. En esos momentos de alta demanda el sistema de inferencia desactiva din&#225;micamente la especulaci&#243;n porque necesita absolutamente todos los ciclos de reloj para procesar la carga de trabajo principal.</p><p></p><h2>Paralelismo de LLMs en m&#250;ltiples GPUs</h2><p>Las t&#233;cnicas de paralelismo permiten que los modelos masivos se ejecuten distribuidos en m&#250;ltiples GPUs cuando una sola tarjeta se queda corta. Esto ocurre habitualmente porque el modelo es demasiado grande para caber en la memoria VRAM de un solo chip o porque la latencia usando una sola GPU es inaceptablemente alta para el usuario. Dos enfoques principales dominan el panorama actual de los modelos abiertos, el <strong>paralelismo de tensores</strong> y el <strong>paralelismo de expertos</strong>.</p><p><strong>[1] El paralelismo de tensores</strong> divide cada capa del modelo entre m&#250;ltiples GPUs. Cada tarjeta gr&#225;fica mantiene en su memoria un fragmento de cada capa y <strong>todas las GPUs comparten el trabajo aritm&#233;tico para cada pasada hacia adelante</strong>.</p><p>Esta t&#233;cnica requiere conexiones f&#237;sicas de alt&#237;simo ancho de banda entre las tarjetas, como la tecnolog&#237;a <strong>NVLink</strong>, porque los resultados matem&#225;ticos necesitan combinarse y sincronizarse despu&#233;s de calcular cada capa individual. El paralelismo de tensores es la opci&#243;n por defecto para servir modelos densos muy grandes, donde el enorme coste de comunicaci&#243;n entre los chips se compensa con el aumento masivo de velocidad al dividir el trabajo.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!9pSc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 424w, /__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 848w, /__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!9pSc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 424w, /__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 848w, /__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!9pSc!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f9e21eb-3beb-46c8-a01f-a50dd76fcb24_1456x1061.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><p><strong>[2] El paralelismo de expertos</strong> se aplica espec&#237;ficamente a los modelos con arquitectura de mezcla de expertos o MoE. En estos modelos solo un subconjunto de los par&#225;metros se activa para procesar cada token. <strong>Los diferentes componentes expertos se distribuyen entre distintas GPUs y los tokens se enrutan din&#225;micamente hacia el experto que necesitan en cada momento</strong>. La sobrecarga de comunicaci&#243;n por la red es mucho menor que en el paralelismo de tensores porque <strong>los expertos operan de forma independiente</strong>.</p><p>Esto hace que el paralelismo de expertos sea ideal para despliegues en m&#250;ltiples nodos de servidores donde el ancho de banda de red es m&#225;s limitado. La verdad es que la mayor&#237;a de los despliegues serios en producci&#243;n combinan ambas estrategias, utilizando <strong>paralelismo de tensores dentro del mismo servidor f&#237;sico y paralelismo de expertos entre diferentes m&#225;quinas conectadas por red</strong>.</p><p></p><h2>Separa el Prfill y Decode con la t&#233;cnica de Desagregaci&#243;n</h2><p>La desagregaci&#243;n lleva la separaci&#243;n arquitect&#243;nica entre el prefill y el decode a su l&#237;mite f&#237;sico m&#225;s extremo. La idea fundamental es ejecutar la fase de <strong>prefill en un grupo espec&#237;fico de GPUs</strong> y la fase de <strong>decode en otro grupo de m&#225;quinas completamente distinto</strong>, enviando el KV cache entre ellos a trav&#233;s de la red del centro de datos. Cada grupo utiliza hardware espec&#237;ficamente ajustado a su cuello de botella particular y cada cl&#250;ster de servidores escala de forma independiente seg&#250;n su propio patr&#243;n de tr&#225;fico de usuarios.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wkum!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 424w, /__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 848w, /__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wkum!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp" width="1456" height="763" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:763,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54658,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202936016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 424w, /__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 848w, /__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!wkum!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e2797a-6dd4-4606-ba39-7a454000b52d_1456x763.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: ByteByteGo Blog</figcaption></figure></div><p>El flujo de trabajo se convierte en un proceso de <strong>tres pasos:</strong></p><ul><li><p>El motor de <strong>prefill</strong> toma la secuencia de entrada del usuario y produce tanto el <strong>primer token de respuesta</strong> como la <strong>enorme matriz de datos del KV cache</strong>.</p></li><li><p>Esa <strong>matriz de cach&#233; se env&#237;a sobre una conexi&#243;n de red de muy alta velocidad al motor de decode</strong>.</p></li><li><p>Finalmente el motor de decode asume el control exclusivo y maneja la generaci&#243;n de cada token posterior hasta terminar la respuesta.</p></li></ul><p>En configuraciones de desagregaci&#243;n condicional, las peticiones muy cortas o las que ya tienen su contexto almacenado en cach&#233; se saltan el intercambio de datos por la red por completo y se ejecutan exclusivamente en el motor de decode.</p><p>Este enfoque funciona muy bien frente al tr&#225;fico real de usuarios que suele incluir una mezcla impredecible de prompts largos, prompts cortos y peticiones repetitivas.</p><p>La desagregaci&#243;n trata el prefill y el decode como microservicios separados con preocupaciones operativas distintas y proporciona a los ingenieros controles independientes para escalar cada parte.</p><p>Las empresas que operan inferencia a escala masiva consideran este paso como un requisito casi obligatorio una vez que la mezcla de cargas de trabajo de sus usuarios est&#225; perfectamente monitorizada y comprendida.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://blog.bytebytego.com/p/a-guide-to-ai-inference-engineering">A guide to AI inference engineering</a> - An&#225;lisis detallado de las t&#233;cnicas de optimizaci&#243;n y arquitectura para modelos de lenguaje en producci&#243;n.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[¿Qué es y cómo funciona el agentic loop?]]></title><description><![CDATA[Entiende el ciclo de vida del mensaje, la ejecuci&#243;n de las tools, la ventana de contexto]]></description><link>https://lvrpiz.substack.com/p/que-es-y-como-funciona-el-agentic</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/que-es-y-como-funciona-el-agentic</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 01 Jul 2026 16:01:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sarp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace dos semanas en el blog explicaba lo que era el <a href="/__u/lvrpiz.substack.com/p/que-es-el-loop-engineering">loop engineering</a> y la verdad es que creo que quedaron bastantes dudas sobre <strong>c&#243;mo funciona realmente el bucle de los agentes por debajo</strong>, as&#237; que por eso he decidido hacer esta publicaci&#243;n en la que te explico m&#225;s a fondo c&#243;mo funciona la arquitectura del bucle ag&#233;ntico, c&#243;mo se gestionan los turnos y todo lo que conlleva la ejecuci&#243;n de herramientas en segundo plano. As&#237; es como funcionan herramientas como Claude Code o Codex por debajo&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sarp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 424w, /__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 848w, /__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sarp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png" width="1456" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ba66dd0-768e-4417-b738-015c87934929_1653x951.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1533526,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202841574?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 424w, /__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 848w, /__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sarp!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba66dd0-768e-4417-b738-015c87934929_1653x951.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>TL;DR</h2><p>Entender el bucle ag&#233;ntico sirve para dejar de ver a los agentes de IA como cajas negras y empezar a dise&#241;arlos como sistemas predecibles y controlables.</p><ul><li><p>El bucle ag&#233;ntico es un <strong>ciclo continuo</strong> donde el modelo eval&#250;a una tarea, decide qu&#233; herramientas usar, observa los resultados y repite el proceso.</p></li><li><p>Un turno es una vuelta completa de este ciclo, que consume tokens y debe limitarse por coste o iteraciones.</p></li><li><p>La <strong>comunicaci&#243;n interna</strong> funciona mediante eventos o mensajes clave que marcan el inicio, la ejecuci&#243;n de herramientas y el resultado final.</p></li><li><p>El contexto del modelo se llena r&#225;pidamente con los resultados de las herramientas, por lo que el bucle necesita <strong>mecanismos de compresi&#243;n autom&#225;tica de contexto</strong>.</p></li><li><p>Para que un bucle sea &#250;til en producci&#243;n, la infraestructura subyacente debe permitir <strong>guardar el estado y reanudar la ejecuci&#243;n si ocurren fallos de red o servidor</strong>.</p></li></ul><p></p><h2>&#191;Qu&#233; es el bucle ag&#233;ntico o agent loop?</h2><p>El discurso actual en LinkedIn, X y dem&#225;s redes sociales sobre inteligencia artificial ha convergido en que <strong>los bucles son la pieza fundamental de los sistemas ag&#233;nticos</strong>. Pero la pregunta que poca gente se hace es <strong>qu&#233; ejecuta realmente ese bucle</strong>. Un agente no es solo un modelo de lenguaje con acceso a herramientas aisladas sino que es un sistema orquestado.</p><p><strong>El bucle ag&#233;ntico es el ciclo de ejecuci&#243;n aut&#243;nomo donde el modelo eval&#250;a tu petici&#243;n, llama a herramientas para ejecutar acciones, recibe los resultados de esas herramientas y repite el proceso hasta que la tarea se da por terminada.</strong></p><p>Es decir, en lugar de darte una respuesta de texto plana y quedarse esperando, el <strong>agente toma la iniciativa</strong>, <strong>interact&#250;a con el entorno local</strong> o remoto y corrige su rumbo en base a lo que va descubriendo por el camino.</p><p></p><h2>&#191;C&#243;mo funciona el bucle por debajo paso a paso?</h2><p>Para entender el bucle a nivel t&#233;cnico, la documentaci&#243;n oficial del SDK de agentes de Claude nos da una visi&#243;n muy clara del proceso. <strong>Cada sesi&#243;n de un agente sigue exactamente el mismo ciclo de vida estructurado en cinco fases</strong>.</p><p>El primer paso es <strong>recibir el contexto inicial</strong>. El sistema env&#237;a tu prompt junto con las instrucciones del sistema y las definiciones de las herramientas disponibles. Aqu&#237; es donde se inicializa la sesi&#243;n.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oyb_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 424w, /__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 848w, /__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oyb_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png" width="1398" height="406" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:1398,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55620,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202841574?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 424w, /__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 848w, /__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oyb_!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F024867ce-a2c8-49f8-a5b2-16bf2e42547e_1398x406.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Funcionamiento bucle ag&#233;ntico. Fuente: Anthropic</figcaption></figure></div><p>Despu&#233;s, <strong>el modelo eval&#250;a el estado actual y decide c&#243;mo proceder</strong>. Puede:</p><ul><li><p>Responder con texto.</p></li><li><p>Pedir que se ejecute una herramienta.</p></li><li><p>O hacer ambas cosas a la vez.</p></li></ul><p>Si el modelo solicita usar una herramienta, el sistema detiene temporalmente la generaci&#243;n de texto, ejecuta la funci&#243;n solicitada y recoge el resultado.</p><p>Ese resultado se devuelve al modelo, lo que desencadena de forma natural una nueva evaluaci&#243;n. Este ciclo de evaluar, llamar a la herramienta y recibir el resultado se repite una y otra vez. Finalmente, <strong>cuando el modelo determina que la tarea est&#225; completa y no necesita recopilar m&#225;s informaci&#243;n, devuelve un mensaje final de texto cerrando el ciclo</strong>.</p><p>Para que lo veas m&#225;s claro, piensa en cada uno de estos ciclos como un turno indivisible. Cuando el modelo decide que necesita usar una herramienta, como ejecutar un script en bash o buscar en un directorio, <strong>la generaci&#243;n de texto se pausa y esa herramienta se ejecuta realmente en tu m&#225;quina o en tu entorno local</strong>. Durante este tiempo de procesamiento, <strong>el modelo se queda esperando</strong> hasta que la herramienta termina su trabajo y el sistema recoge la salida y se inyecta de nuevo en la conversaci&#243;n mediante mensajes internos del sistema. Justo en ese momento se cierra el turno y el modelo vuelve a tomar el control con el contexto actualizado para decidir su siguiente paso.</p><p></p><h2>&#191;Qu&#233; son los turnos y c&#243;mo limitan la ejecuci&#243;n del agente?</h2><p>Aqu&#237; es donde la cosa se pone interesante. <strong>Un turno es b&#225;sicamente un viaje de ida y vuelta dentro de este bucle</strong>. El modelo produce una salida que incluye llamadas a herramientas, el sistema ejecuta esas herramientas de forma secuencial o paralela, y los resultados vuelven al modelo autom&#225;ticamente.</p><p>Todo esto ocurre en segundo plano sin devolver el control al hilo principal. <strong>Los turnos contin&#250;an de forma aut&#243;noma hasta que el modelo decide parar</strong>.</p><p>Un ejemplo: piensa en una tarea t&#237;pica como arreglar unos tests que fallan en un proyecto de Node:</p><ul><li><p>El primer turno podr&#237;a ser ejecutar un comando en la terminal para ver qu&#233; falla exactamente.</p></li><li><p>El segundo turno ser&#237;a leer el contenido de los archivos TypeScript afectados.</p></li><li><p>El tercer turno consistir&#237;a en editar el c&#243;digo y volver a pasar los tests.</p></li><li><p>El turno final es simplemente el modelo diciendo que todo funciona correctamente.</p></li></ul><p>Dejar que un modelo itere de forma infinita es un peligro de cara a costes, por eso, a nivel de c&#243;digo, es fundamental establecer l&#237;mites estrictos. <strong>Puedes limitar el n&#250;mero m&#225;ximo de turnos permitidos</strong> o establecer un <strong>presupuesto m&#225;ximo en d&#243;lares</strong>. Si no pones estos l&#237;mites, un prompt un poco ambiguo podr&#237;a hacer que el agente se quede atrapado leyendo archivos en bucle y consumiendo tokens sin parar.</p><p></p><h2>&#191;C&#243;mo se comunican el agente y las herramientas mediante mensajes?</h2><p>A medida que el bucle funciona, el sistema emite un flujo constante de mensajes. <strong>Estos mensajes son la &#250;nica forma que tienes como desarrollador de saber en qu&#233; etapa exacta se encuentra el proceso por debajo</strong>.</p><p>Tenemos los <strong>mensajes de sistema</strong>, que manejan los eventos del ciclo de vida de la sesi&#243;n, como el inicio o el aviso de que el sistema se est&#225; apagando.</p><p>Luego est&#225;n los <strong>mensajes del asistente</strong>, que se emiten cada vez que el modelo responde. Estos mensajes contienen el texto que genera y los bloques de llamadas a herramientas que quiere ejecutar en ese turno concreto.</p><p>Justo despu&#233;s, entran en juego los <strong>mensajes del usuario</strong>. Ojo, estos no son mensajes que t&#250; escribas en tu teclado, sino que son los mensajes generados por el sistema para devolverle al modelo los resultados crudos de las herramientas que acaba de pedir.</p><p>Por &#250;ltimo, cuando el bucle termina, se emite un <strong>mensaje de resultado</strong>. Este mensaje contiene el texto final, los tokens consumidos, el coste total de las operaciones y el identificador de la sesi&#243;n. F&#237;jate que es crucial comprobar siempre el subtipo de este resultado en tu c&#243;digo, porque te dir&#225; si el agente termin&#243; con &#233;xito o si se detuvo de forma forzosa porque alcanz&#243; el l&#237;mite de turnos o de presupuesto que definiste.</p><p></p><h2>&#191;Qu&#233; pasa con la memoria y el contexto cuando el bucle se alarga?</h2><p>La ventana de contexto en este tipo de arquitecturas lo es todo ya que durante una sesi&#243;n, la informaci&#243;n no se reinicia entre un turno y el siguiente: absolutamente todo se acumula (se acumula el prompt del sistema inicial, las definiciones de las herramientas, el historial de la conversaci&#243;n, los comandos enviados y, sobre todo, los resultados de esos comandos).</p><p>Cuidado con las herramientas que devuelven mucho texto plano porque si el agente decide hacer una b&#250;squeda global en un repositorio grande o leer un archivo de log interminable, esa salida consume miles de tokens en un solo turno. Y como el contexto se arrastra, los turnos posteriores cargar&#225;n con todo ese peso, encareciendo brutalmente cada llamada a la API y ralentizando el tiempo de respuesta.</p><p>Para evitar que el agente colapse por exceso de informaci&#243;n, <strong>los sistemas avanzados implementan la compactaci&#243;n autom&#225;tica de memoria</strong>. Cuando la ventana de contexto se acerca a su l&#237;mite, el sistema hace una pausa, <strong>resume el historial antiguo para liberar espacio y mantiene intactos &#250;nicamente los intercambios m&#225;s recientes y las decisiones clave</strong>.</p><p>Esto significa en la pr&#225;ctica que las instrucciones muy espec&#237;ficas que le diste al principio de la conversaci&#243;n pueden perderse diluidas en el resumen. <strong>Si tienes reglas estrictas que el agente nunca debe olvidar bajo ninguna circunstancia, debes inyectarlas en el prompt del sistema de forma persistente</strong> a trav&#233;s de archivos de configuraci&#243;n, no como un simple mensaje de chat al inicio de la sesi&#243;n.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://code.claude.com/docs/en/agent-sdk/agent-loop">Documentaci&#243;n del SDK de Agentes de Claude: El bucle del agente</a> - Gu&#237;a completa de implementaci&#243;n sobre la arquitectura interna, la gesti&#243;n de turnos y el control del contexto en el bucle ag&#233;ntico de Anthropic.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[La gran mentira de los benchmarks: los modelos abiertos no están tan cerca como crees]]></title><description><![CDATA[Te explico c&#243;mo la optimizaci&#243;n artificial para benchmarks est&#225; ocultando la verdadera distancia en con los modelos frontera]]></description><link>https://lvrpiz.substack.com/p/la-gran-mentira-de-los-benchmarks</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/la-gran-mentira-de-los-benchmarks</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 24 Jun 2026 15:01:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_EB8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>El otro d&#237;a hablando con unos amigos me surgi&#243; la siguiente duda: realmente c&#243;mo de atr&#225;s est&#225;n los modelos abiertos respecto a los modelos de los grandes laboratorios. Me pic&#243; la curiosidad y la verdad es que la respuesta no es tan trivial ni tan sencilla de explicar como parece a simple vista cuando te pones a analizar los datos.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_EB8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_EB8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1710589,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200877174?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_EB8!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec10a7f8-5848-404e-9dfd-7bbd9a170dc3_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>TL;DR</h2><p>En este art&#237;culo te explico la complejidad metodol&#243;gica para medir la verdadera diferencia de rendimiento entre la inteligencia artificial de c&#243;digo abierto y los modelos frontera.</p><ul><li><p>Los modelos con pesos abiertos tienen un retraso de en torno a 8/10 meses en benchmarks privados.</p></li><li><p>En benchmarks p&#250;blicos la diferencia se comprime a una ventana mucho m&#225;s corta de 4/6 meses.</p></li><li><p>&#191;Est&#225;n los modelos open source haciendo trampas en los benchmarks?</p></li></ul><p></p><h2>&#191;C&#243;mo de detr&#225;s est&#225;n los modelos abiertos?</h2><p>Cuando intentamos medir el estado del arte de la tecnolog&#237;a siempre nos encontramos con el problema de las m&#233;tricas y aqu&#237; la situaci&#243;n es bastante m&#225;s enrevesada de lo que te cuentan en Twitter.</p><p>Preparando el post me encontr&#233; con este <a href="https://www.lesswrong.com/posts/rJcCrXyEsJKmmDpWG/how-far-behind-are-open-models">an&#225;lisis</a> que se apoya en una recopilaci&#243;n de 17 benchmarks seleccionados meticulosamente. De estos tenemos 8 que son privados y 9 que son p&#250;blicos con un total de 110 puntos de datos validados.</p><p>Si miras los datos de los <strong>benchmarks privados</strong>, es decir, aquellos donde las preguntas y respuestas <strong>no est&#225;n accesibles en internet</strong> para que nadie contamine los datos de entrenamiento, los <strong>modelos abiertos est&#225;n entre 8 y 10 meses por detr&#225;s de la frontera cerrada</strong>.</p><p>Peeero si miras los <strong>benchmarks p&#250;blicos</strong> la historia cambia por completo y la brecha se reduce a unos <strong>4 o 6 meses</strong>.</p><p>Es una diferencia brutal que nos hace plantearnos muchas cosas.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0ACN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 424w, /__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 848w, /__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0ACN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png" width="1456" height="1079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1079,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:321213,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200877174?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 424w, /__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 848w, /__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0ACN!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e86c39e-2159-4319-86d0-2e78b26f555a_1890x1400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Diferencia entre modelos abiertos y cerrados en benchmarks p&#250;blicos y privados</figcaption></figure></div><p>Aqu&#237; puedes ver exactamente esta divergencia. Cada punto en esa gr&#225;fica representa un umbral de puntuaci&#243;n aceptado. La altura del punto te dice cu&#225;ntos meses antes un modelo cerrado hab&#237;a cruzado ese mismo umbral.</p><p>Las curvas que ves son tendencias suavizadas donde se ve claramente c&#243;mo la brecha fue m&#237;nima alrededor del lanzamiento de DeepSeek R1 en enero de 2025. Desde ese momento la l&#237;nea vuelve a subir.</p><p>Vemos que la diferencia entre las dos curvas nos dice que los benchmarks p&#250;blicos subestiman la distancia real casi por un factor de dos.</p><p></p><h2>&#191;C&#243;mo medimos la diferencia entre modelos abiertos y cerrados?</h2><p>Para entender de d&#243;nde salen estos n&#250;meros tienes que entender c&#243;mo se calculan y aviso que <strong>la l&#243;gica tiene trampa</strong>. El m&#233;todo define una serie de umbrales de puntuaci&#243;n para cada benchmark, normalmente <strong>en intervalos del 5 por ciento desde el 0.05 hacia arriba</strong>.</p><p>Cuando un modelo abierto cruza uno de estos umbrales por primera vez, el sistema mira hacia atr&#225;s en el tiempo para <strong>ver cu&#225;ndo un modelo cerrado cruz&#243; ese mismo umbral</strong>.</p><p>Un ejemplo para verlo mejor: imagina que o1-preview sale en septiembre de 2024 y cruza el umbral del 40 por ciento en una prueba. Luego llega DeepSeek R1 en enero de 2025 y cruza ese mismo 40 por ciento. <strong>El cruce se cuenta como un punto de datos que mide la brecha en 4.3 meses</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Rhd2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Rhd2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png" width="1305" height="1417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1417,&quot;width&quot;:1305,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:268396,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200877174?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rhd2!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930f83eb-f11a-4a77-b765-0ae35577961b_1305x1417.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Fuente: lesswrong.com</figcaption></figure></div><p></p><p>Aqu&#237; vemos la l&#237;nea de tiempo de retraso para SimpleBench donde cada fila es un umbral y <strong>el marcador verde es el modelo cerrado y el azul es el abierto</strong>.</p><p><strong>La barra roja en el medio es la brecha temporal en meses</strong>. Las flechas grises punteadas son los umbrales que la frontera cerrada ya ha alcanzado pero que siguen pendientes para los modelos abiertos.</p><p></p><h2>Errores al evaluar los modelos abiertos chinos</h2><p>Hay un factor enorme en todo esto que casi nadie menciona: cuando la gente eval&#250;a modelos abiertos chinos en benchmarks privados normalmente utilizan proveedores de terceros.</p><p>Estos proveedores tienen pol&#237;ticas de retenci&#243;n de datos nula para proteger la privacidad de las evaluaciones. Instituciones como METR o Epoch AI son extremadamente cuidadosas con esto al evaluar cosas como FrontierMath.</p><p>A veces estos proveedores de terceros sufren problemas de implementaci&#243;n o peque&#241;os bugs. Esto provoca una degradaci&#243;n sutil en el rendimiento del modelo abierto cuando se sirve a trav&#233;s de su infraestructura.</p><p><strong>Detectar esta degradaci&#243;n es muy complicado</strong>. De nada sirve tener un modelo potent&#237;simo si el flujo por el que pasa la evaluaci&#243;n le resta puntos por latencias o fallos de formato.</p><p>Si esta degradaci&#243;n est&#225; ocurriendo realmente, significa que la brecha que medimos en los benchmarks privados est&#225; artificialmente inflada. <strong>El modelo abierto ser&#237;a mejor de lo que los datos privados nos est&#225;n diciendo</strong>.</p><p></p><h2>La trampa de los modelos abiertos para puntuar m&#225;s en los benchmarks</h2><p>El contraste entre los resultados con benchmarks p&#250;blicos y privados sugiere algo bastante evidente y es que <strong>los desarrolladores de modelos abiertos est&#225;n filtrando mal los datos de los benchmarks o directamente est&#225;n optimizando sus entrenamientos para superar esas pruebas concretas</strong>.</p><p>Aunque esto tambi&#233;n pasa con los laboratorios privados, aunque a menor escala. <strong>Los desarrolladores entrenan a sus modelos en el tipo de tareas que saben que van a ser evaluadas porque son las tareas verificables m&#225;s f&#225;ciles de convertir en m&#233;tricas</strong>.</p><p>Los grandes laboratorios cerrados tienen much&#237;simo m&#225;s capital, acceso a flujos de datos variados y retroalimentaci&#243;n directa de millones de clientes empresariales. Su dependencia de la optimizaci&#243;n pura para benchmarks es menor.</p><p>Por tanto la brecha real en tareas del mundo real, las que haces t&#250; en tu trabajo diario, es probablemente bastante m&#225;s grande que la que marcan incluso los benchmarks privados.</p><p></p><h2>Categor&#237;as, modelos chinos y evaluaciones de la comunidad</h2><p>Si separamos los datos por categor&#237;as de capacidades la situaci&#243;n no cambia mucho. La categor&#237;a de razonamiento muestra una brecha significativamente mayor que las dem&#225;s.</p><p>Peeero hay que tener en cuenta que los tres benchmarks que componen esta categor&#237;a de razonamiento son privados. <strong>El factor de privacidad parece tener m&#225;s peso que la categor&#237;a de la tarea en s&#237; misma</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ohCS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 424w, /__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 848w, /__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ohCS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png" width="1456" height="1079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1079,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:363292,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200877174?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 424w, /__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 848w, /__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ohCS!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59222eaa-f960-44a3-b2b9-ff24e5fd18ed_1890x1400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Benchmarks por categor&#237;a. Fuente: lesswrong</figcaption></figure></div><p>Un experimento <strong>interesante es aislar exclusivamente los modelos abiertos de origen chino frente a la frontera cerrada</strong>. Los resultados desde la salida de Llama 3.1 en julio de 2024 son id&#233;nticos a la gr&#225;fica general.</p><p>Antes de esa fecha la brecha medida utilizando solo modelos chinos era notablemente m&#225;s grande. Esto demuestra la gran aceleraci&#243;n que ha tenido el ecosistema asi&#225;tico en el &#250;ltimo a&#241;o.</p><p>En las discusiones t&#233;cnicas de la comunidad surgen debates complejos sobre la integraci&#243;n de nuevos datos. Por ejemplo, hay casos donde un modelo como Kimi K2.5 aparece en un punto de datos con un retraso de 10 meses.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bKwG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 424w, /__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 848w, /__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bKwG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png" width="1456" height="1079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1079,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:329760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200877174?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 424w, /__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 848w, /__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bKwG!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8988a7-f550-4d4b-be87-467da61178d5_1890x1400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Modelos chinos. Fuente: lesswrong</figcaption></figure></div><p>Esto ocurre precisamente por la definici&#243;n retroactiva de la brecha ya que aunque ese modelo en particular estuviera menos atrasado respecto a la frontera en el momento de la prueba, la brecha hist&#243;rica que estaba cerrando en ese umbral concreto era de 10 meses y el sistema lo asocia a su fecha de lanzamiento.</p><p></p><h2>La procedencia de los datos y la asimetr&#237;a de la contaminaci&#243;n</h2><p>Para medir de manera justa cu&#225;ndo un modelo abierto alcanza a uno cerrado los n&#250;meros tienen que ser comparables, idealmente una &#250;nica entidad independiente deber&#237;a ejecutar todos los modelos en el mismo entorno.</p><p>Pero la realidad es que el ecosistema de evaluaci&#243;n es un absoluto caos.</p><p>El an&#225;lisis divide los benchmarks en un n&#250;cleo limpio y una periferia mucho m&#225;s dudosa. En el lado limpio tenemos pruebas como GPQA Diamond, MATH Level 5 o WeirdML. <strong>Estas pruebas las ejecuta una sola entidad de principio a fin sin depender de n&#250;meros reportados por los propios creadores</strong>.</p><p>En el lado m&#225;s oscuro tenemos MMLU, GSM8K o Terminal-Bench. Aqu&#237; las puntuaciones son una amalgama de env&#237;os de la comunidad y auto-reportes de los laboratorios utilizando configuraciones que les favorecen.</p><p>Y aqu&#237; viene lo m&#225;s cr&#237;tico del estudio. Incluso el conjunto de pruebas privadas en las que m&#225;s confiamos tiene problemas de asimetr&#237;a.</p><p>Por ejemplo en el caso de FrontierMath: una prueba privada administrada por Epoch AI pero OpenAI financi&#243; el proyecto y tiene acceso a gran parte de los problemas. Esto puede inflar artificialmente las puntuaciones de la frontera cerrada.</p><p>Luego tienes <strong>ARC-AGI que utiliza un conjunto semi privado.</strong> Las entradas de evaluaci&#243;n se transmiten a trav&#233;s de APIs comerciales. La exposici&#243;n es completamente asim&#233;trica.</p><p>Los modelos cerrados reciben los datos a trav&#233;s de sus propias APIs nativas mientras que los abiertos lo hacen a trav&#233;s de servidores de terceros. Cualquier contaminaci&#243;n en este proceso infla el lado cerrado.</p><p>Si el lado cerrado se infla la frontera cruza los umbrales mucho antes en la l&#237;nea de tiempo. Esto significa que la brecha que estamos midiendo podr&#237;a estar sobrestimada. Los n&#250;meros privados podr&#237;an ser peores sobre el papel de lo que son en la realidad.</p><p>La complejidad de analizar el rendimiento real requiere cuestionar cada punto de datos. No basta con mirar un titular que dice que la brecha se cierra. Tienes que rascar, entender la procedencia del benchmark, la configuraci&#243;n del prompt, el tipo de acceso a la API y el momento temporal exacto en el que se valid&#243; ese conocimiento.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://www.lesswrong.com/posts/rJcCrXyEsJKmmDpWG/how-far-behind-are-open-models">How far behind are open models?</a> - An&#225;lisis detallado de H&#229;vard Tveit Ihle sobre las divergencias de rendimiento en base a 17 benchmarks seleccionados.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[¿Qué es el loop engineering?]]></title><description><![CDATA[Aprende a crear arquitecturas robustas con subagentes que validan todo el trabajo de forma aut&#243;noma.]]></description><link>https://lvrpiz.substack.com/p/que-es-el-loop-engineering</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/que-es-el-loop-engineering</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 17 Jun 2026 15:02:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lSPe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En inform&#225;tica y en el mundillo de la inteligencia artificial, todo cambia muy r&#225;pido y llevamos hablando de conceptos semana a semana que van evolucionando, dando la sensaci&#243;n de que si no los estudias constantemente te quedas fuera del c&#237;rculo.</p><p>El &#250;ltimo t&#233;rmino que ha salido a la luz es el de <strong>Loop Engineering</strong>, un concepto que en el fondo agrupa automatizaciones que ya hac&#237;amos previamente, pero donde ahora estamos incluyendo agentes de IA para tomar decisiones de forma aut&#243;noma.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>TL;DR</h2><p>El Loop Engineering sirve para <strong>dejar de escribir prompts manualmente y construir sistemas que orquesten el trabajo de los agentes de IA por ti</strong>.</p><ul><li><p>Pasas de chatear con la IA paso a paso a dise&#241;ar un <strong>flujo automatizado</strong> que eval&#250;a y corrige su propio c&#243;digo.</p></li><li><p>El <strong>sistema utiliza tareas programadas cl&#225;sicas</strong> pero incluye un modelo de lenguaje en el centro para tomar las decisiones.</p></li><li><p>Es fundamental <strong>separar las tareas</strong>: un agente escribe el c&#243;digo y otro distinto revisa que funcione correctamente.</p></li><li><p><strong>Tokenomics</strong>: Requiere un control estricto de los presupuestos, ya que un bucle infinito puede disparar tu factura de tokens en cuesti&#243;n de horas.</p></li></ul><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lSPe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lSPe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1599604,&quot;alt&quot;:&quot;qu&#233; es el loop engineering&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/202088581?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="qu&#233; es el loop engineering" title="qu&#233; es el loop engineering" srcset="/__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lSPe!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d35f108-9dcf-41cc-8fab-635ad8562412_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>&#191;Qu&#233; es el Loop Engineering y de d&#243;nde sale este concepto?</h2><p>Hace apenas un mes parec&#237;a que el <a href="/__u/lvrpiz.substack.com/p/que-es-el-harness-engineering">Harness Engineering</a> era la &#250;nica habilidad que necesitabas dominar para trabajar con modelos de lenguaje. F&#237;jate c&#243;mo cambian las cosas que ahora entras en X y el &#250;nico t&#233;rmino que acapara las conversaciones t&#233;cnicas es el de <strong>Loop Engineering</strong>.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/addyosmani/status/2064127981161959567&quot;,&quot;full_text&quot;:&quot;https://t.co/hIe0UX7z6T&quot;,&quot;username&quot;:&quot;addyosmani&quot;,&quot;name&quot;:&quot;Addy Osmani&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/2012065253623021570/0BReDfMk_normal.jpg&quot;,&quot;date&quot;:&quot;2026-06-08T23:30:35.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:312,&quot;retweet_count&quot;:1140,&quot;like_count&quot;:7326,&quot;impression_count&quot;:1836577,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;video_preview_media_key&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Todo esto viene impulsado por declaraciones recientes de desarrolladores como <a href="https://x.com/steipete">Peter Steinberger</a>, el creador de OpenClaw o <a href="https://x.com/bcherny?lang=es">Boris Cherny</a>, el creador de Claude Code. B&#225;sicamente ambos afirman que ya no deber&#237;amos estar escribiendo prompts para interactuar con los asistentes de c&#243;digo. Su postura es que <strong>el trabajo de un ingeniero ahora consiste en dise&#241;ar bucles que se encarguen de escribir esos prompts de forma autom&#225;tica</strong>.</p><p>Hasta ahora, la mayor&#237;a de nosotros trabaj&#225;bamos con la IA mediante un chat. T&#250; abr&#237;as la interfaz de Claude, escrib&#237;as un prompt pidiendo una funcionalidad o la correcci&#243;n de un bug, le&#237;as la respuesta, y volv&#237;as a escribir. A esto se le conoce como <strong>bucle abierto</strong>, muy relacionado con el concepto de human in the loop, porque el humano interviene en cada uno de los pasos del proceso.</p><p>La idea del Loop Engineering es evolucionar hacia un <strong>bucle cerrado</strong> donde aqu&#237; pasas a ser <strong>el supervisor que dise&#241;a el flujo de trabajo completo</strong>. T&#250; defines las reglas, los l&#237;mites y las comprobaciones. El sistema se encarga de ejecutar las iteraciones necesarias hasta completar la tarea asignada, algo similar a <strong>/goal</strong> en Claude Code.</p><p></p><h2>&#191;C&#243;mo funciona realmente el loop engineering?</h2><p>Siendo sinceros, la verdad es que el loop engineering tampoco tiene mucho&#8230; y es que se parece bastante a un cron job de toda la vida. La diferencia principal radica en lo que ocurre dentro de esa tarea programada.</p><p>En una automatizaci&#243;n tradicional, el script sigue un camino r&#237;gido. Con el Loop Engineering, <strong>el script incluye un modelo de lenguaje</strong> que eval&#250;a el estado actual de tu repositorio, decide cu&#225;l es la siguiente acci&#243;n, la ejecuta y, lo m&#225;s importante, comprueba si ha funcionado. <strong>El modelo es el que toma la decisi&#243;n bas&#225;ndose en el contexto</strong>, no en una simple bifurcaci&#243;n de c&#243;digo predefinida determinista.</p><p>Para que este sistema no se rompa, necesita apoyarse en varios componentes t&#233;cnicos:</p><ul><li><p>Primero est&#225;n las automatizaciones que inician el proceso, ya sea por un evento temporal o por un <strong>trigger</strong> externo.</p></li><li><p>Luego est&#225;n las herramientas de aislamiento, como los worktrees de Git, que evitan que varios agentes trabajando en paralelo modifiquen los mismos archivos y generen conflictos.</p></li><li><p>Aqu&#237; es donde entran en juego las habilidades o skills del agente. De nada sirve tener un bucle automatizado si el modelo tiene que adivinar las convenciones de tu proyecto en cada iteraci&#243;n. <strong>Proporcionar un contexto claro mediante archivos de instrucciones permite que la IA sepa exactamente c&#243;mo debe comportarse sin que tengas que explic&#225;rselo desde cero en cada ejecuci&#243;n</strong>.</p></li><li><p>Adem&#225;s, la arquitectura m&#225;s robusta para estos bucles implica el uso de <strong>subagentes</strong>. El modelo que escribe el c&#243;digo suele ser demasiado optimista para evaluar su propio trabajo. Un bucle fiable utiliza un agente enfocado en el desarrollo y otro completamente distinto, a menudo con un modelo de razonamiento superior, encargado de revisar y validar que el resultado cumple con las especificaciones.</p></li></ul><p></p><h2>&#191;De d&#243;nde viene el concepto de loop engineering? Origen y evoluci&#243;n</h2><p>Para comprender c&#243;mo hemos llegado hasta aqu&#237;, conviene repasar c&#243;mo han madurado estos sistemas. El concepto no naci&#243; ayer y tiene un origen bastante claro en la investigaci&#243;n de modelos de lenguaje.</p><ol><li><p>La primera etapa la vimos hace un par de a&#241;os con el <strong>patr&#243;n ReAct</strong>. Era un bucle muy b&#225;sico donde el modelo razonaba, utilizaba una herramienta externa, le&#237;a el resultado y repet&#237;a el proceso. <strong>Era un modelo ejecutando un &#250;nico bucle bajo la atenta mirada de un operador humano</strong>.</p></li><li><p>La segunda fase lleg&#243; con experimentos como <a href="https://www.ibm.com/es-es/think/topics/autogpt">AutoGPT</a>. Se le proporcionaba un objetivo general y se le daba libertad para autogestionarse. El problema recurrente es que <strong>sol&#237;a perder el rumbo r&#225;pidamente</strong>, entrando en ciclos donde no lograba completar ninguna tarea &#250;til. Esto gener&#243; bastante escepticismo sobre la viabilidad real de los agentes.</p></li><li><p>Posteriormente aparecieron soluciones m&#225;s pragm&#225;ticas basadas en terminal mediante scripts de bash. La innovaci&#243;n principal fue la gesti&#243;n adecuada del contexto. En lugar de mantener un historial de conversaci&#243;n interminable que terminaba confundiendo al modelo, el script reiniciaba el contexto en cada iteraci&#243;n bas&#225;ndose en un conjunto fijo de archivos clave.</p></li></ol><p>Lo que hoy llamamos <strong>Loop Engineering</strong> no deja de ser una capa superior de abstracci&#243;n sobre todo lo anterior. Ya no hablamos de un &#250;nico script en tu ordenador personal, sino de orquestaci&#243;n. <strong>Los bucles ahora supervisan a otros bucles</strong>, se ejecutan de forma concurrente, responden a eventos del sistema y mantienen su estado respaldado en repositorios para poder recuperarse si el proceso falla.</p><p></p><h2>C&#243;mo aplicar Loop Engineering en tu d&#237;a a d&#237;a: Ejemplos pr&#225;cticos</h2><p>Imagina que tienes conectada tu plataforma de observabilidad, como Sentry, a tu c&#243;digo fuente. Cuando Sentry detecta una excepci&#243;n en producci&#243;n, <strong>en lugar de simplemente enviarte un correo de alerta, dispara un bucle de IA</strong>.</p><p>El sistema recopila el stack trace y el contexto del error, y lanza un agente que escribe una prueba automatizada para reproducir ese fallo. Una vez que la prueba falla en rojo, otro agente desarrolla el c&#243;digo necesario para solucionarlo. Finalmente, el bucle verifica que la prueba pasa en verde y abre una Pull Request para que t&#250; la revises. <strong>Todo esto ocurre en segundo plano.</strong></p><p>Otro caso de uso habitual empieza en el gestor de tareas. Se crea un ticket nuevo en Linear con las especificaciones de una nueva vista para tu aplicaci&#243;n. Esto dispara un flujo donde un agente redacta un borrador t&#233;cnico y te env&#237;a un mensaje por Slack. Si t&#250; das el visto bueno, el bucle contin&#250;a: asigna subagentes para escribir los componentes, a&#241;adir las pruebas unitarias y actualizar la documentaci&#243;n interna. T&#250; solo intervienes como supervisor en los puntos de control clave.</p><p></p><h2>Tokenomics</h2><p>Un concepto que me encanta es el de Tokenomics, o econom&#237;a de Tokens y es que el loop engineering requiere de una buena gesti&#243;n de recursos.</p><p>Dejar que las m&#225;quinas trabajen por ti suena espectacular sobre el papel pero la realidad de mantener estos sistemas funcionando de forma desatendida tiene matices importantes, especialmente cuando hablamos del impacto econ&#243;mico.</p><p>El recurso m&#225;s caro en el desarrollo con IA ha dejado de ser la generaci&#243;n de c&#243;digo para pasar <strong>a ser la gesti&#243;n del propio bucle</strong>. Si un agente empieza a iterar infinitamente intentando arreglar un error de dependencias, el consumo de tokens se dispara. <strong>Establecer l&#237;mites estrictos de iteraciones</strong>, detectar la falta de progreso y configurar techos de gasto son reglas obligatorias antes de poner cualquier automatizaci&#243;n a funcionar de forma aislada.</p><p>A nivel profesional tambi&#233;n existe un riesgo t&#233;cnico evidente. <strong>Cuanto m&#225;s c&#243;digo genere el bucle sin tu intervenci&#243;n directa, mayor ser&#225; la brecha entre lo que existe en el repositorio y lo que t&#250; realmente entiendes de la base de c&#243;digo</strong>. Si dejas de leer lo que produce el sistema, tu capacidad para mantener el proyecto a largo plazo se hunde.</p><p>Adoptar el Loop Engineering no significa desentenderse del proyecto sino que significa mover el esfuerzo desde la escritura manual de funciones hacia el dise&#241;o y la supervisi&#243;n del sistema que las construye. A fin de cuentas, la responsabilidad de lo que llega a tus usuarios sigue siendo tuya.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://www.youtube.com/watch?v=18FeGXyB-sI&amp;t=338s">&#191;Qu&#233; es el LOOP ENGINEERING? El nuevo HYPE de la Inteligencia Artificial</a> - Explicaci&#243;n detallada de Betta Tech sobre la automatizaci&#243;n de agentes y desmitificaci&#243;n t&#233;cnica del concepto.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[La verdad sobre la memoria en agentes de IA y el problema de guardar todo]]></title><description><![CDATA[TODO]]></description><link>https://lvrpiz.substack.com/p/la-verdad-sobre-la-memoria-en-agentes</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/la-verdad-sobre-la-memoria-en-agentes</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 10 Jun 2026 15:03:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VITe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#191;C&#243;mo funciona la memoria de un agente de IA? &#191;se parece en algo a c&#243;mo recordamos nosotros eventos o factos?</p><p>Seguro que has le&#237;do sobre agentes que recuerdan cada interacci&#243;n que tienes con ellos, un error com&#250;n es asumir que la memoria de un modelo debe funcionar como un caj&#243;n de sastre donde todo se almacena pero&#8230; esto no es as&#237;.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>El post de hoy no es tan t&#233;cnico pero creo que es importante porque asienta las bases de c&#243;mo funciona la memoria en estos sistemas y como se asemeja al funcionamiento de nuestras memorias biol&#243;gicas.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!VITe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!VITe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1091791,&quot;alt&quot;:&quot;Funcionamiento memoria en agentes de IA&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200280182?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Funcionamiento memoria en agentes de IA" title="Funcionamiento memoria en agentes de IA" srcset="/__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VITe!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ddbee0-77b9-434c-bf14-f9c55f298ccc_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>TL;DR</h2><p>Hoy te explico c&#243;mo operan los sistemas de memoria en agente de IA y por qu&#233; guardar todos los detalles perjudica el rendimiento del agente.</p><ul><li><p>Los sistemas constan de un extractor para procesar conversaciones, un almac&#233;n de datos y un &#8216;recuperador&#8217; para gestionar consultas.</p></li><li><p>Las herramientas actuales prometen diversas memorias cognitivas pero acaban reduciendo todo a simples hechos est&#225;ticos almacenados en &#237;ndices.</p></li><li><p>Nuestro cerebro biol&#243;gico no graba de forma continua, sino que filtra lo predecible y almacena &#250;nicamente las sorpresas/novedades o los errores de predicci&#243;n.</p></li><li><p>Un dise&#241;o eficiente debe capturar solo la informaci&#243;n novedosa y emplear un modelo bitemporal que registre tanto cu&#225;ndo ocurri&#243; un evento como cu&#225;ndo lo aprendi&#243; el sistema.</p></li></ul><p></p><p></p><h2>Las 3 partes de una memoria para agentes de IA</h2><p>Cualquier librer&#237;a de memoria para agentes de IA est&#225; construida con tres piezas fundamentales y lo bueno es que puedes entender el funcionamiento de cualquier herramienta <strong>conociendo estas partes</strong>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!c5-B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!c5-B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1615999,&quot;alt&quot;:&quot;partes de la memoria de un agente de IA&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200280182?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="partes de la memoria de un agente de IA" title="partes de la memoria de un agente de IA" srcset="/__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!c5-B!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07634e44-5ccc-4322-a50c-cafdd4949340_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Partes de la memoria de un agente de IA (imagen generada con IA)</figcaption></figure></div><ul><li><p><strong>Extractor</strong>: Es la pieza encargada de leer las transcripciones y decidir qu&#233; se mantiene. Habitualmente utiliza un LLM para extraer afirmaciones cortas sobre el entorno o el usuario. La decisi&#243;n m&#225;s importante que toma es el momento de la extracci&#243;n. <strong>Extraer tras cada mensaje consume tokens en charlas irrelevantes.</strong> Hacerlo al final degrada la calidad porque el modelo pierde la atenci&#243;n sobre la informaci&#243;n intermedia. En este proceso se pasa de un evento contextualizado a un hecho aislado, perdiendo referencias de tiempo y &#233;nfasis por el camino.</p></li><li><p><strong>Almac&#233;n</strong>: Hablamos de la base de datos, que pueden ser vectoriales, tablas relacionales o grafos de conocimiento. Cada registro contiene metadatos con una <strong>marca temporal</strong>. La mayor dificultad aqu&#237; es gestionar las contradicciones cuando un dato nuevo difiere de uno antiguo. El sistema debe elegir entre sobrescribir el dato perdiendo el historial, guardar ambos, o mantener ambos marcando el antiguo como reemplazado. <strong>Si un sistema no puede responder qu&#233; dato consideraba cierto el mes pasado, no act&#250;a como una memoria real</strong>.</p></li><li><p><strong>Recuperador</strong>: En el momento de la consulta, este m&#243;dulo convierte la pregunta en una b&#250;squeda para devolver las afirmaciones pertinentes. Estructuralmente es un <strong>sistema RAG aplicado a las afirmaciones acumuladas del usuario</strong>. A veces se incorpora un filtro temporal y una comprobaci&#243;n para bloquear hechos desactualizados.</p></li></ul><p></p><h2>Los 4 tipos de memoria y c&#243;mo se aplican a la IA</h2><p>La terminolog&#237;a de estos sistemas suele tomarse de la ciencia cognitiva, pero la ingenier&#237;a rara vez est&#225; a la altura de esos conceptos. Te comento los cuatro tipos te&#243;ricos y c&#243;mo se aplican.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mfX_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 424w, /__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 848w, /__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mfX_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1421600,&quot;alt&quot;:&quot;Tipos de memoria aplicados a agentes de IA&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/200280182?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Tipos de memoria aplicados a agentes de IA" title="Tipos de memoria aplicados a agentes de IA" srcset="/__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 424w, /__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 848w, /__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mfX_!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c17eb34-102b-48c0-8239-73d672ccf48b_1691x930.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Los 4 tipos de memoria aplicado a agentes de IA (imagen generada con IA)</figcaption></figure></div><ul><li><p>La <strong>memoria epis&#243;dica</strong> registra eventos concretos vinculados a un <strong>momento y lugar.</strong> Las librer&#237;as actuales lo solucionan con una tabla de afirmaciones etiquetadas temporalmente, reduciendo la experiencia a una simple observaci&#243;n.</p></li><li><p>Luego est&#225; la <strong>memoria sem&#225;ntica</strong>, referida a hechos descontextualizados. La inmensa mayor&#237;a de lo que llamamos memoria de agentes pertenece a esta categor&#237;a. Un dato epis&#243;dico se comprime y llega al almac&#233;n convertido en un hecho est&#225;tico sobre el usuario.</p></li><li><p>La <strong>memoria procedimental</strong> consiste en <strong>saber c&#243;mo hacer las tareas</strong>. Aqu&#237; es donde la brecha t&#233;cnica es m&#225;s evidente. Algunas herramientas aseguran incluir este tipo de memoria, pero la almacenan en el mismo &#237;ndice que los hechos sem&#225;nticos y solo alteran un campo en los metadatos. Podr&#237;amos entender que un Agent Skill es un tipo de memoria procedimental.</p></li><li><p>Por &#250;ltimo, la <strong>memoria prospectiva</strong> implica recordar acciones futuras. Ninguna librer&#237;a actual resuelve esto en toda su complejidad. En realidad, la mayor&#237;a de estos sistemas act&#250;an como sistemas autobiogr&#225;ficos que gestionan datos sobre la vida del usuario mediante un proxy. Un ejemplo de memoria prospectiva: &#8220;cuando ocurra X debo hacer Y&#8221;.</p></li></ul><p></p><h2>La memoria es el residuo de la sorpresa</h2><p>Una cosa que debe quedar clara es que no podemos almacenar absolutamente todo. El cerebro biol&#243;gico no funciona como una c&#225;mara, sino que predice experiencias. Seg&#250;n el <a href="https://psicologo.barcelona/explorando-el-principio-de-energia-libre-de-karl-friston-intersecciones-con-la-psicologia-contextual-y-sus-implicaciones-en-ciencias-del-comportamiento/">principio de energ&#237;a libre de Karl Friston</a>, el <strong>cerebro crea un modelo del mundo y genera expectativas</strong>. Cuando hay un error de predicci&#243;n y la realidad no encaja, esa sorpresa impulsa el aprendizaje. La memoria es literalmente el residuo de esa sorpresa.</p><p>Los sistemas de IA actuales hacen justo lo contrario. El flujo habitual consiste en extraer hechos de una conversaci&#243;n, guardar todo indiscriminadamente y luego recuperar la informaci&#243;n mediante similitud vectorial. Esto convierte la base de conocimiento en un c&#250;mulo de datos &#250;tiles y mucho contexto basura. Una aproximaci&#243;n mucho m&#225;s inteligente, documentada en herramientas open-source como memv, es <strong>usar el error de predicci&#243;n como filtro para extraer informaci&#243;n</strong>.</p><p>En este enfoque, <strong>el sistema predice qu&#233; deber&#237;a contener el episodio en funci&#243;n de lo que ya sabe</strong>. Al comparar el episodio real con la predicci&#243;n, <strong>&#250;nicamente se extraen y almacenan los datos que violaron esa expectativa</strong>. As&#237;, la base de datos se nutre exclusivamente de informaci&#243;n verdaderamente novedosa.</p><p>Para complementar esto, se requiere un modelado bitemporal en el que un registro no solo necesita la marca de tiempo de cu&#225;ndo fue almacenado por el sistema, sino tambi&#233;n de cu&#225;ndo empez&#243; a ser cierto en el mundo real.</p><p></p><h2>Por qu&#233; los agentes no deber&#237;an olvidar como hacemos los humanos</h2><p>Hay una falsa creencia de que, puesto que la memoria biol&#243;gica olvida datos, los agentes de IA deber&#237;an imitar este comportamiento mediante pesos de recencia o limpiezas programadas. Ojo, esto es un enfoque equivocado. El olvido biol&#243;gico es una restricci&#243;n por falta de capacidad f&#237;sica, no un objetivo a alcanzar.</p><p>Un sistema artificial no sufre esta limitaci&#243;n y puede almacenar un hist&#243;rico completo a un coste computacional bajo. Un historial inmutable es muy &#250;til porque permite depurar y auditar qu&#233; informaci&#243;n manejaba el sistema en un momento exacto del pasado. El verdadero problema de guardar todo es que la recuperaci&#243;n empeora a medida que la base de datos crece. <strong>La soluci&#243;n pasa por mejorar los filtros de b&#250;squeda y clasificar correctamente los datos obsoletos, no por eliminarlos del disco</strong>.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://brgsk.xyz/agent-memory-anatomy">Agent memory: an anatomy</a> - Desglose de los componentes estructurales y las clasificaciones cognitivas en librer&#237;as de retenci&#243;n para inteligencia artificial.</p></li><li><p><a href="https://brgsk.xyz/memory-residual-of-surprise">Memory is the residual of surprise</a> - An&#225;lisis del principio de energ&#237;a libre aplicado a sistemas de extracci&#243;n mediante errores de predicci&#243;n y bases de datos bitemporales.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Haz que tu web sea amigable con los agentes de IA]]></title><description><![CDATA[Te cuento c&#243;mo optimizar tu web con dos trucos para mejorar tu posicionamiento entre los agentes de IA]]></description><link>https://lvrpiz.substack.com/p/haz-que-tu-web-sea-amigable-con-los</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/haz-que-tu-web-sea-amigable-con-los</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 03 Jun 2026 15:03:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jddo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hace unos meses publiqu&#233; por aqu&#237; un <a href="/__u/substack.com/@lvrpiz/p-188252652">art&#237;culo</a> sobre estrategias de posicionamiento para inteligencias artificiales donde habl&#225;bamos de conceptos que sonaban un poco experimentales. En aquel momento mencion&#233; por encima la importancia de un peque&#241;o archivo llamado <strong>llms.txt</strong> para <strong>ayudar a los modelos a entender tu web</strong>.</p><p>Lo que parec&#237;a un experimento aislado de unos pocos desarrolladores acaba de dar un salto de gigante. Hoy te cuento qu&#233; cambios ha habido en este aspecto y qu&#233; puedes hacer para mejorar el posicionamiento de tu web entre los buscadores de IA.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Jddo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Jddo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:622653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/199302489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Jddo!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7ca38f4-c069-4890-a0b5-794dec0710a6_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>La adaptaci&#243;n del contenido web para inteligencias artificiales ha dejado de ser una teor&#237;a para convertirse en un <strong>est&#225;ndar t&#233;cnico auditable.</strong> Este art&#237;culo analiza c&#243;mo la adopci&#243;n del archivo llms.txt y el enfoque de Agentic Engine Optimization (<strong>AEO</strong>) redefinen la estructura de la informaci&#243;n en internet.</p><ul><li><p><strong>Google Lighthouse</strong> incluye ahora una nueva secci&#243;n llamada Navegaci&#243;n Ag&#233;ntica donde se verifican expl&#237;citamente la presencia de un <strong>archivo llms.txt</strong> en la ra&#237;z del dominio.</p></li><li><p>El consumo de tokens es la nueva m&#233;trica de rendimiento. El <strong>contenido debe estructurarse en formato Markdown</strong> para evitar que el exceso de etiquetas HTML agote la ventana de contexto de los modelos.</p></li><li><p>Infraestructuras como <strong>Cloudflare</strong> ya permiten la <strong>conversi&#243;n autom&#225;tica de HTML a Markdown</strong> en el borde mediante cabeceras de negociaci&#243;n de contenido, devolviendo estimaciones de tokens en tiempo real.</p></li><li><p>El archivo <strong>llms.txt no reemplaza al robots.txt ni al sitemap.xml</strong>, sino que act&#250;a como una capa de descubrimiento espec&#237;fica dise&#241;ada para la fase de inferencia de los agentes.</p></li></ul><p></p><h2>Google ahora analiza la Navegaci&#243;n Ag&#233;ntica desde Lighthouse</h2><p>Aqu&#237; hay una situaci&#243;n muy curiosa que da bastante que pensar. Por un lado, la documentaci&#243;n oficial de Google Search sobre optimizaci&#243;n para caracter&#237;sticas generativas afirma de forma rotunda que <strong>no necesitas crear archivos legibles por m&#225;quinas, ni formatos especiales, ni archivos de texto para IA para aparecer en los resultados generados</strong>. John Mueller, uno de los portavoces de b&#250;squeda de Google, lo dej&#243; claro recientemente argumentando que <strong>los sistemas pueden leer HTML sin problema y que preparar tu sitio para un futuro potencial lleno de agentes no deber&#237;a distraerte de las bases del SEO</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-EFL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-EFL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg" width="1456" height="1355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1355,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Google checks websites for llms.txt in new agentic browsing audit&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Google checks websites for llms.txt in new agentic browsing audit" title="Google checks websites for llms.txt in new agentic browsing audit" srcset="/__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-EFL!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfc5c5f-0b34-4878-adb5-f3153ebae053_1470x1368.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Agentic Browsing en Google Lighthouse</figcaption></figure></div><p>Pero por otro lado, el equipo de <strong>Chrome acaba de introducir una nueva categor&#237;a de auditor&#237;a en Lighthouse llamada &#8220;Agentic Browsing&#8221;</strong> (Navegaci&#243;n Ag&#233;ntica). Esta auditor&#237;a eval&#250;a espec&#237;ficamente lo bien construido que est&#225; tu sitio para la interacci&#243;n con m&#225;quinas.</p><p>Y adivina qu&#233; comprueba esta nueva auditor&#237;a de Lighthouse. Exacto. Verifica la presencia de un <strong>archivo llms.txt en la ra&#237;z del dominio</strong>.</p><p>La propia documentaci&#243;n de Lighthouse explica que, sin este archivo, <strong>los agentes pueden gastar mucho m&#225;s tiempo rastreando el sitio para entender su estructura de alto nivel y su contenido principal</strong>. Esta categor&#237;a no te da una puntuaci&#243;n tradicional de 0 a 100, sino una ratio de aprobaci&#243;n fraccional basada en se&#241;ales de preparaci&#243;n para agentes. </p><p>El SEO tradicional sirve para que un motor de b&#250;squeda global encuentre tu p&#225;gina. La optimizaci&#243;n para agentes sirve para que, una vez que el agente ha encontrado la p&#225;gina, <strong>pueda completar la tarea que el usuario le ha pedido de la forma m&#225;s r&#225;pida y precisa posible</strong>.</p><p></p><h2>&#191;Qu&#233; es Agentic Engine Optimization (AEO) y c&#243;mo influye en el uso de tokens?</h2><p>Todo esto se alinea perfectamente con lo que Addy Osmani, director de ingenier&#237;a en Google Cloud AI, plante&#243; hace poco bajo el concepto de <strong>Agentic Engine Optimization</strong>.</p><p>&#128073;&#127995;Este concepto se refiere a estructurar y servir contenido t&#233;cnico de manera que los agentes de inteligencia artificial puedan utilizarlo y no solo renderizarlo.</p><p>F&#237;jate en c&#243;mo consume informaci&#243;n un modelo de lenguaje: A diferencia de un humano que escanea visualmente una p&#225;gina, un agente debe procesar el c&#243;digo fuente. Una p&#225;gina web moderna est&#225; llena de ruido de la propia estructura. Men&#250;s de navegaci&#243;n, pies de p&#225;gina, CSS, SVG integrados y scripts de seguimiento. Para un LLM, todo ese HTML es texto plano que consume su ventana de contexto y que no tiene utilidad.</p><p>El presupuesto de tokens es el nuevo presupuesto de rastreo. Si le pasas a un agente un documento HTML masivo y lleno de basura, corres varios riesgos graves. El agente puede truncar la p&#225;gina si supera su l&#237;mite de contexto, puede omitir informaci&#243;n importante enterrada en la parte inferior o, peor a&#250;n, puede alucinar una respuesta porque el ruido sem&#225;ntico le ha confundido.</p><p>Las recomendaciones t&#233;cnicas para adaptar tu contenido bajo este nuevo paradigma son muy concretas y requieren replantear la arquitectura de la informaci&#243;n:</p><ul><li><p>Mantener las <strong>gu&#237;as de inicio r&#225;pido por debajo de los 15.000 tokens</strong>.</p></li><li><p>Limitar las gu&#237;as conceptuales a 20.000 tokens y las referencias de API a 25.000 tokens.</p></li><li><p>Colocar <strong>la respuesta o el concepto principal en los primeros 500 tokens del documento</strong>, ya que los agentes tienen muy poca tolerancia a los pre&#225;mbulos largos.</p></li><li><p>Servir el <strong>contenido en formato Markdown limpio en lugar de HTML</strong> siempre que sea posible.</p></li></ul><p>Aqu&#237; es donde entra en juego la necesidad de una capa de descubrimiento espec&#237;fica. Los agentes necesitan saber antes de empezar a leer si una p&#225;gina contiene la informaci&#243;n que buscan o si solo van a gastar tokens en vano.</p><p></p><h2>&#191;Qu&#233; es y c&#243;mo usar el llms.txt en tu web?</h2><p>La propuesta de usar un archivo llms.txt fue impulsada originalmente por Jeremy Howard y est&#225; ganando mucha tracci&#243;n en la comunidad. La idea principal es estandarizar un archivo en la ruta ra&#237;z de un sitio web que proporcione informaci&#243;n adaptada para ayudar a los modelos a utilizar esa web durante la fase de inferencia.</p><p>El archivo <strong>robots.txt</strong> se utiliza para establecer reglas de acceso. Le dice a los bots  qu&#233; rutas pueden rastrear y cu&#225;les no. Es un mecanismo de permisos. Pero ojo, son recomendaciones y no una norma o protocolo.</p><p>El <strong>sitemap.xml</strong> es un inventario exhaustivo dise&#241;ado para los indexadores de los motores de b&#250;squeda. Contiene todas las p&#225;ginas de tu web, pero rara vez incluye versiones optimizadas para m&#225;quinas o enlaces a recursos externos.</p><p>El archivo <strong>llms.txt</strong> tiene un prop&#243;sito muy diferente ya que funciona como un resumen y una gu&#237;a de navegaci&#243;n para un agente que ya est&#225; interactuando con tu sitio a petici&#243;n de un usuario. <strong>Es legible tanto por humanos como por modelos</strong>, pero sigue un formato preciso que permite su procesamiento mediante t&#233;cnicas de programaci&#243;n cl&#225;sicas.</p><p></p><h3>&#191;C&#243;mo crear un archivo llms.txt v&#225;lido?</h3><p>La especificaci&#243;n de llms.txt requiere que el archivo est&#233; en <strong>formato Markdown</strong> y siga un <strong>orden estructural estricto</strong>. Esto es importante porque si no mantienes la estructura, los analizadores autom&#225;ticos fallar&#225;n al intentar extraer el contexto.</p><p>La estructura t&#233;cnica debe contener:</p><ol><li><p>Un encabezado H1 con el nombre del proyecto o web. Esta es la &#250;nica secci&#243;n estrictamente obligatoria.</p></li><li><p>Un bloque de cita (blockquote) con un resumen conciso del proyecto que contenga la informaci&#243;n clave necesaria para entender el resto del documento.</p></li><li><p>Cero o m&#225;s secciones de Markdown gen&#233;ricas con detalles adicionales sobre el proyecto y c&#243;mo interpretar los archivos proporcionados.</p></li><li><p>Cero o m&#225;s secciones delimitadas por encabezados H2 que contienen listas de archivos.</p></li><li><p>Cada elemento de la lista debe ser un hiperv&#237;nculo en formato Markdown seguido opcionalmente de dos puntos y una nota explicativa.</p></li></ol><p>Este es un ejemplo real de c&#243;mo se estructura un archivo v&#225;lido siguiendo la especificaci&#243;n. Nota c&#243;mo la limpieza del formato facilita la extracci&#243;n de las URLs mediante expresiones regulares b&#225;sicas.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;d4b4a286-7f9d-4ab5-9f1e-3ef3fe92aaa8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># Ejemplo de proyecto API

&gt; Esta es una biblioteca backend dise&#241;ada para gestionar autenticaci&#243;n y pagos de forma unificada. Utiliza Node.js y se integra directamente con proveedores externos.

Informaci&#243;n importante:
- La biblioteca requiere una versi&#243;n de Node igual o superior a la 20.
- No incluye componentes de interfaz de usuario.

## Documentaci&#243;n Principal

- [Gu&#237;a de inicio r&#225;pido](https://miproyecto.com/docs/inicio.md): Configuraci&#243;n b&#225;sica y primeros pasos.
- [Referencia de la API de Pagos](https://miproyecto.com/docs/pagos.md): Detalles sobre los endpoints de facturaci&#243;n.

## Opcional

- [Gu&#237;a de migraci&#243;n desde v1](https://miproyecto.com/docs/migracion.md): Pasos para actualizar desde la versi&#243;n anterior.</code></pre></div><p>Hay un detalle de dise&#241;o muy inteligente en la especificaci&#243;n. La secci&#243;n con el encabezado H2 llamado &#8220;Opcional&#8221; tiene un significado especial ya que si un agente necesita ahorrar contexto o busca una respuesta r&#225;pida, puede ignorar todos los enlaces listados bajo esta secci&#243;n. </p><p>Junto a este archivo, la propuesta sugiere que las p&#225;ginas web con informaci&#243;n &#250;til <strong>expongan una versi&#243;n limpia en Markdown accesible a&#241;adiendo la extensi&#243;n &#8220;.md&#8221;</strong> a la URL original. Proyectos como FastHTML ya lo hacen por defecto, y la diferencia en velocidad de procesamiento y precisi&#243;n de respuesta cuando le pasas la versi&#243;n Markdown a un modelo como Claude o GPT-4 es abismal.</p><p></p><h2>Markdown for Agents de Cloudflare</h2><p>Producir versiones en Markdown de todo tu sitio web puede ser complejo a nivel de infraestructura si utilizas un gestor de contenido tradicional o generas p&#225;ginas din&#225;micamente. Cloudflare ha detectado esta necesidad y acaba de lanzar una funcionalidad que cambia la forma en que servimos contenido a las m&#225;quinas: <a href="https://blog.cloudflare.com/markdown-for-agents/">Markdown for Agents</a>.</p><p>Cloudflare ahora soporta la conversi&#243;n de contenido en tiempo real en su propia red de distribuci&#243;n. Cuando un sistema de inteligencia artificial solicita una p&#225;gina desde un sitio protegido por Cloudflare que tiene esta opci&#243;n habilitada, <strong>el agente puede usar cabeceras de negociaci&#243;n de contenido HTTP para expresar su preferencia por el formato Markdown</strong>. La red intercepta la petici&#243;n, obtiene el HTML original del servidor de origen, limpia todo el ruido visual y estructural, lo convierte a Markdown y se lo devuelve al agente de forma transparente.</p><p>La magia ocurre mediante la cabecera <code>Accept: text/markdown</code>. F&#237;jate en c&#243;mo se ve una petici&#243;n b&#225;sica usando cURL.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;f8709863-5788-4299-8414-6c8d4ed6f329&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">curl https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ \
  -H "Accept: text/markdown"
</code></pre></div><p>Si est&#225;s desarrollando tu propio agente usando JavaScript o TypeScript en un entorno de servidor, la implementaci&#243;n para solicitar esta versi&#243;n es igual de directa.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;typescript&quot;,&quot;nodeId&quot;:&quot;b78f8ffd-7c9f-4207-8215-1397f834d345&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-typescript">const response = await fetch(
  `https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/`,
  {
    headers: {
      Accept: "text/markdown",
    },
  },
);

const tokenCount = response.headers.get("x-markdown-tokens");
const markdownContent = await response.text();</code></pre></div><p>Ojo porque en la respuesta, Cloudflare incluye una cabecera personalizada llamada <code>x-markdown-tokens</code>. Esta cabecera devuelve una <strong>estimaci&#243;n del n&#250;mero de tokens que contiene el documento Markdown resultante</strong>.</p><p>Para un desarrollador que est&#225; construyendo un agente, este dato puede valer oro ya que te permite calcular din&#225;micamente si el contenido cabe en tu ventana de contexto antes de empezar a procesarlo, o decidir qu&#233; estrategia de fragmentaci&#243;n (chunking) aplicar para almacenarlo en una base de datos vectorial sin tener que tokenizar el texto t&#250; mismo.</p><p></p><h3>Formato y estructura de salida y retenci&#243;n de metadatos</h3><p>Cuando Cloudflare realiza esta conversi&#243;n, no se limita a pasar el texto por un conversor b&#225;sico sino que devuelve un documento con una estructura predecible que elimina la necesidad de escribir l&#243;gica de parseo espec&#237;fica para cada sitio web.</p><p>El proceso de conversi&#243;n sigue tres pasos r&#237;gidos.</p><ul><li><p>Primero, extrae los metadatos de las etiquetas <code>&lt;meta&gt;</code> del HTML original y los coloca en un bloque YAML frontmatter al principio del archivo. Si la p&#225;gina tiene etiquetas de t&#237;tulo, descripci&#243;n o imagen (priorizando las est&#225;ndar sobre Open Graph), aparecer&#225;n aqu&#237;.</p></li><li><p>Segundo, procesa el cuerpo del documento. Todo el contenido no esencial desaparece. Men&#250;s, pies de p&#225;gina, scripts de anal&#237;tica, hojas de estilo. Todo el HTML innecesario se descarta durante el preprocesamiento, dejando &#250;nicamente el contenido sem&#225;ntico en formato Markdown.</p></li><li><p>Tercero, preserva los datos estructurados. Si el HTML original inclu&#237;a bloques de JSON-LD, vitales para entender el contexto sem&#225;ntico de un art&#237;culo o un producto, el conversor los extrae y los coloca al final del documento dentro de un bloque de c&#243;digo marcado como JSON.</p></li></ul><p>La respuesta HTTP completa tiene este aspecto.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;4335da38-732c-4445-aa43-b3dabccc6f5d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">HTTP/2 200
date: Wed, 11 Feb 2026 11:44:48 GMT
content-type: text/markdown; charset=utf-8
content-length: 2899
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes

---
title: Markdown for Agents &#183; Cloudflare Agents docs
description: Cloudflare's Markdown for Agents converts HTML to Markdown at the edge.
---

## What is Markdown for Agents

Markdown has quickly become the lingua franca for agents and AI systems
as a whole. The format&#8217;s explicit structure makes it ideal for AI processing.
</code></pre></div><p>La cabecera <code>Content-Signal</code> que aparece en la respuesta es parte de un marco de trabajo emergente que permite a los propietarios de sitios web expresar sus preferencias sobre c&#243;mo puede usarse su contenido tras ser accedido. Por defecto, esta funci&#243;n se&#241;aliza que el contenido puede usarse para entrenamiento de IA, resultados de b&#250;squeda y entrada de agentes.</p><p></p><h2>C&#243;mo adaptar tu infraestructura para que sea consumid por agentes de IA</h2><p>En paralelo al desarrollo &#8216;normal&#8217; de una web, ahora debes mantener una capa subyacente optimizada para el procesamiento de m&#225;quinas.</p><p>Si utilizas Cloudflare, <strong>habilitar Markdown for Agents</strong> es un proceso sencillo que puedes realizar a nivel de zona entera o mediante reglas de configuraci&#243;n espec&#237;ficas para subdominios particulares. Si gestionas tu propia infraestructura, la recomendaci&#243;n t&#233;cnica pasa por integrar bibliotecas de generaci&#243;n est&#225;tica que produzcan artefactos <code>.md</code> durante el proceso de compilaci&#243;n y servirlos cuando la cabecera <code>Accept</code> lo indique.</p><p>El <strong>archivo llms.txt</strong> debe considerarse desde hoy como parte fundamental de la ra&#237;z de cualquier proyecto t&#233;cnico o sitio de documentaci&#243;n. Generarlo no cuesta recursos significativos y el beneficio de visibilidad frente a herramientas es enorme. </p><p>Finalmente, la auditor&#237;a de Lighthouse no es una casualidad, es un indicador de que la industria est&#225; adoptando estas convenciones como est&#225;ndares de calidad.</p><div><hr></div><p>Los agentes de IA han llegado para quedarse. Ya no es suficiente con adaptar nuestras webs para nosotros, los humanos, sino que tambi&#233;n debemos facilitar el trabajo a las m&#225;quinas para que puedan entendernos mejor y facilitar sus labores.</p><div><hr></div><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://llmstxt.org/">Especificaci&#243;n oficial del est&#225;ndar llms.txt</a> - Documentaci&#243;n de la propuesta original de Jeremy Howard y gu&#237;as de implementaci&#243;n.</p></li><li><p><a href="https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/">Documentaci&#243;n de Cloudflare: Markdown for Agents</a> - Gu&#237;a t&#233;cnica detallada sobre la conversi&#243;n en el borde y negociaci&#243;n de contenido.</p></li><li><p><a href="https://searchengineland.com/agentic-engine-optimization-google-ai-director-474358">Art&#237;culo de Addy Osmani: Agentic Engine Optimization (AEO)</a> - An&#225;lisis del director de ingenier&#237;a de Google Cloud AI sobre la estructuraci&#243;n de contenido para agentes.</p></li><li><p><a href="https://searchengineland.com/google-llms-txt-chrome-lighthouse-478246">Nuevas auditor&#237;as de Lighthouse para Navegaci&#243;n Ag&#233;ntica</a> - Cobertura sobre la inclusi&#243;n del chequeo de llms.txt en las herramientas de desarrollo de Chrome.</p></li><li><p><a href="https://contentsignals.org/">Iniciativa Content Signals</a> - Especificaci&#243;n t&#233;cnica del marco de trabajo para expresar preferencias de uso de contenido por inteligencias artificiales.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[¿Qué es el Harness Engineering? ]]></title><description><![CDATA[Te explico el Harness Engineering, la disciplina para dise&#241;ar entornos deterministas que transforman chatbots gen&#233;ricos en agentes de desarrollo fiables y seguros.]]></description><link>https://lvrpiz.substack.com/p/que-es-el-harness-engineering</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/que-es-el-harness-engineering</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 27 May 2026 15:02:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!x5RC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A final de 2025 escrib&#237; un post reflexionando sobre los avances que hab&#237;amos vivido durante el pasado a&#241;o donde <a href="/__u/open.substack.com/pub/lvrpiz/p/tendencias-ia-2026-analisis?r=1zd5r9&amp;utm_campaign=post&amp;utm_medium=web">criticaba bastante los agentes de IA</a>.</p><p>Nos han vendido que los agentes de programaci&#243;n iban a solucionar todos nuestros problemas de desarrollo, pero la realidad no siempre es as&#237;. A veces los modelos hacen cosas totalmente incre&#237;bles pero otras veces fallan estrepitosamente en lo m&#225;s simple.</p><p>La mayor&#237;a de gente en sector comete el error de pensar que la soluci&#243;n pasa por esperar a que salga la pr&#243;xima versi&#243;n de GPT o de Claude, confiando en que un modelo m&#225;s grande y con m&#225;s par&#225;metros ser&#225; m&#225;gicamente m&#225;s inteligente. La verdad es que gran parte de <strong>las mejoras reales que estamos viendo hoy en d&#237;a en el ecosistema del desarrollo no vienen de tener mejores modelos</strong>, sino de <strong>construir mejores entornos en los que estos modelos operan</strong>.</p><p>Ya tenemos una m&#225;quina capaz de escupir miles de l&#237;neas de c&#243;digo, nuestra responsabilidad ahora no es revisar cada l&#237;nea a mano, sino intentar controlar el entorno.</p><p>Precisamente de esa necesidad de control nace una disciplina que est&#225; cambiando la forma en la que construimos software asistido: <strong>el Harness Engineering</strong>. Hoy te voy a ense&#241;ar a crear sistemas verdaderamente productivos basados en IA.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!x5RC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!x5RC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:668049,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/198668749?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x5RC!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffdcd701d-e9d1-4016-bad1-e77d88c5ee77_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>TL;DR</h2><p>El <strong>Harness Engineering</strong> es la <strong>disciplina</strong> que se encarga de <strong>dise&#241;ar y construir el ecosistema tecnol&#243;gico que rodea a un modelo de inteligencia artificial</strong> para <strong>convertirlo en un agente aut&#243;nomo, seguro y fiable</strong>.</p><ul><li><p>Un <strong>agente funcional</strong> es la suma del modelo m&#225;s su arn&#233;s de control (<strong>Agent = Model + Harness</strong>). El arn&#233;s orquesta las herramientas, la memoria y el contexto.</p></li><li><p>La arquitectura se basa en un <strong>bucle REPL</strong> donde el arn&#233;s intercepta las peticiones del modelo, ejecuta las herramientas de forma segura y le devuelve los resultados.</p></li><li><p>Incorpora <strong>gu&#237;as preventivas (Feedforward)</strong> y <strong>sensores de correcci&#243;n (Feedback)</strong> mediante evaluaciones computacionales (linters, tests) e inferenciales (IA revisora).</p></li><li><p><strong>Limitar artificialmente las herramientas</strong> y el <strong>tama&#241;o del contexto</strong> mejora la precisi&#243;n del modelo y reduce notablemente el gasto en tokens.</p></li><li><p>Permite automatizar flujos complejos como el <strong>Spec Driven Development (SDD)</strong> coordinando subagentes aislados que se comunican mediante memoria externa.</p></li></ul><p></p><h2>Qu&#233; es el Harness Engineering y por qu&#233; es importante</h2><p>Imagina un modelo, puedes ser Claude, GPT o cualquier otro que uses a diario, este modelo es nuestro cerebro. Por s&#237; solo, este cerebro es capaz de procesar texto, predecir el siguiente token y razonar sobre conceptos abstractos, pero no tiene forma de tocar el teclado, ni de leer los archivos de tu proyecto y no tiene memoria a largo plazo m&#225;s all&#225; de la ventana de contexto que le proporciones en ese instante.</p><p>El Harness Engineering agrupa todas las pr&#225;cticas y arquitecturas que consisten en agarrar ese modelo de inteligencia artificial y <strong>definirle el entorno que le rodea</strong>. El arn&#233;s equivale a las riendas que le ponemos al modelo para intentar dirigir su fuerza bruta hacia un objetivo concreto: <strong>Agente es igual a Modelo m&#225;s Arn&#233;s en un bucle</strong>.</p><p>Este entorno o ecosistema que construimos alrededor del modelo se compone de <strong>varias piezas fundamentales</strong> que tenemos que orquestar:</p><ul><li><p>Por un lado, tenemos la <strong>gesti&#243;n del contexto</strong>, que es decidir qu&#233; informaci&#243;n le enviamos al modelo en cada momento.</p></li><li><p>Por otro lado, la <strong>definici&#243;n de herramientas</strong> (tools) a las que el modelo puede llamar para interactuar con el mundo real, como leer un archivo, ejecutar un comando de terminal o consultar una base de datos.</p></li><li><p>Tambi&#233;n necesitamos un <strong>sistema de memoria persistente</strong> para evitar que la ventana de contexto se inunde con informaci&#243;n irrelevante. </p></li><li><p>Finalmente, tambi&#233;n necesitamos <strong>mecanismos de validaci&#243;n</strong>.</p></li></ul><p>Uno de los <strong>mayores beneficios de adoptar el Harness Engineering</strong> es que pasas a ser <strong>due&#241;o del sistema</strong> y si ma&#241;ana sale un modelo open source hiperbarato que sirve perfectamente para tareas de refactorizaci&#243;n rutinaria, simplemente lo enchufas en tu arn&#233;s. </p><p>Ojo porque mucha gente piensa que construir un buen arn&#233;s consiste en darle al modelo acceso absoluto a todo (herramientas, acceso de lectura a todo el disco duro y ventanas de contexto de millones de tokens&#8230;) pero es justamente lo contrario. Ha quedado sobradamente demostrado que <strong>cuanto m&#225;s complejo haces el arn&#233;s y m&#225;s herramientas espec&#237;ficas le das al modelo, peor funciona</strong>.</p><p>El equipo de Vercel document&#243; hace poco c&#243;mo el rendimiento de su agente interno (D0) mejor&#243; cuando <a href="https://vercel.com/blog/we-removed-80-percent-of-our-agents-tools">eliminaron el 80% de las herramientas que le hab&#237;an programado inicialmente</a>. Adem&#225;s que reujeron el consumo de tokens en un 37%.</p><p></p><h2>&#191;C&#243;mo funciona el arn&#233;s? Bucles de evaluaci&#243;n y ejecuci&#243;n</h2><p>En el desarrollo de videojuegos existe el patr&#243;n conocido como &#8220;Game Loop&#8221;, un bucle infinito que en cada iteraci&#243;n o frame lee la entrada del usuario, actualiza el estado f&#237;sico y l&#243;gico del mundo, renderiza los gr&#225;ficos en la pantalla y vuelve a empezar. <strong>Los agentes de inteligencia artificial operan exactamente con el mismo principio estructural</strong>.</p><p>En la literatura t&#233;cnica, este patr&#243;n suele denominarse bucle REPL, por las siglas en ingl&#233;s de Read, Eval, Print, Loop. </p><p>El bucle principal gestiona la interacci&#243;n general. Lee lo que el usuario escribe en la interfaz (Read), decide qu&#233; hacer con ello (Eval), muestra el resultado en pantalla (Print) y vuelve a esperar (Loop).Pero en el Harness Engineering ocurre dentro de la fase de evaluaci&#243;n. Esa fase no es una simple llamada de red que devuelve un texto, sino que tiene su propio bucle interno, que es donde el agente puede actuar de forma aut&#243;noma.</p><p>Cuando el usuario introduce una petici&#243;n, el arn&#233;s env&#237;a ese mensaje al modelo junto con la lista de herramientas disponibles (<strong>la inteligencia artificial no ejecuta ninguna herramienta por s&#237; misma</strong>: el modelo no sabe abrir archivos ni compilar c&#243;digo). El modelo simplemente responde con una petici&#243;n estructurada diciendo: <em>&#8220;Oye, necesito que t&#250;, el arn&#233;s, ejecutes la herramienta de leer fichero pas&#225;ndole esta ruta exacta&#8221;</em>.</p><p>El arn&#233;s recibe esta petici&#243;n (el Tool Use), intercepta el flujo, <strong>ejecuta la funci&#243;n localmente en tu m&#225;quina para leer el fichero y agarra el contenido resultante</strong>. Luego, en la siguiente iteraci&#243;n de ese bucle interno, el arn&#233;s le manda al modelo un nuevo mensaje dici&#233;ndole: <em>&#8220;Vale, he ejecutado la herramienta que pediste y aqu&#237; tienes el resultado&#8221;</em>. <strong>El modelo lee la informaci&#243;n, razona sobre ella y decide su siguiente paso</strong>. Puede pedir ejecutar un comando de bash para compilar, o puede determinar que ya tiene toda la informaci&#243;n necesaria y formular la respuesta final para el usuario.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZY4H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZY4H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1485634,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/198668749?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZY4H!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47919d98-76bf-4b06-bed1-42f9cc294c75_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Infograf&#237;a Harness Engineering (Generada con IA)</figcaption></figure></div><p>A continuaci&#243;n te muestro un ejemplo en Go donde defino un bloque donde se itera sobre las respuestas del modelo, evaluando el tipo de salida:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;go&quot;,&quot;nodeId&quot;:&quot;3a41c864-dcd1-441d-90cd-5d488285d820&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-go">for {
    // 1. Enviamos el contexto y los mensajes actuales al modelo
    respuestas := proveedor.EnviarMensaje(contexto, mensajes)

    todasHerramientasEjecutadas := true

    for _, resp := range respuestas {
        if resp.EsLlamadaHerramienta() {
            // 2. El modelo pide usar una herramienta. El arn&#233;s toma el control.
            todasHerramientasEjecutadas = false
            
            // 3. Verificaci&#243;n de seguridad y permisos (Harness Engineering)
            if !pedirAprobacionHumana(resp.NombreHerramienta, resp.Argumentos) {
                agregarMensajeError(mensajes, "El usuario deneg&#243; la ejecuci&#243;n")
                continue
            }
            
            // 4. Ejecuci&#243;n real en el entorno local
            resultado := ejecutarHerramienta(resp.NombreHerramienta, resp.Argumentos)
            agregarResultadoHerramienta(mensajes, resp.ID, resultado)
        }
    }

    // 5. Si el modelo no pidi&#243; m&#225;s herramientas, terminamos el bucle interno
    if todasHerramientasEjecutadas {
        break
    }
}</code></pre></div><p>Esta abstracci&#243;n es el core de cualquier sistema ag&#233;ntico profesional.</p><p></p><h2>Control: Feedforward y Feedback</h2><p>Ya tenemos el bucle de ejecuci&#243;n pero&#8230; &#191;C&#243;mo comprobamos y nos aseguramos que ese c&#243;digo cumple con nuestros est&#225;ndares? Sabemos que <strong>los LLMs son no deterministas</strong>, que carecen de contexto organizativo y que, en el fondo, no entienden sem&#225;nticamente el c&#243;digo ya que operan prediciendo tokens de forma probabil&#237;stica.</p><p>Para solucionar esto, un arn&#233;s bien dise&#241;ado incorpora dos tipos de controles complementarios: <strong>mecanismos de Feedforward (Gu&#237;as)</strong> y <strong>mecanismos de Feedback (Sensores)</strong>.</p><ul><li><p>Los <strong>controles de Feedforward, o gu&#237;as</strong>, act&#250;an antes de que el agente empiece a escribir. Su objetivo es <strong>anticipar el comportamiento de la inteligencia artificial</strong> y dirigirla para aumentar la probabilidad de que acierte al primer intento. Esto incluye desde el <strong>System Prompt general</strong>, hasta inyectar de forma din&#225;mica las convenciones de c&#243;digo de tu proyecto, gu&#237;as de estilo o documentos de arquitectura directamente en la ventana de contexto antes de formular la petici&#243;n.<br><br>Los sensores son programas ejecutados por la CPU como los tests unitarios, los linters, los analizadores est&#225;ticos de c&#243;digo o el propio compilador. El arn&#233;s pilla la salida de un linter que ha fallado y se la devuelve autom&#225;ticamente al agente de IA con un mensaje como: &#8220;Tu c&#243;digo ha generado este error de compilaci&#243;n en la l&#237;nea 45. Arr&#233;glalo&#8221;.<br></p></li><li><p>Los <strong>controles de Feedback</strong>, o sensores, <strong>act&#250;an despu&#233;s</strong> de que el agente haya escrito el c&#243;digo, permite corregirse sin intervenci&#243;n humana. Es imposible garantizar que un modelo probabil&#237;stico acierte siempre a la primera.</p><p></p><p>Los sensores inferenciales se apoyan en otros modelos de IA (o en el mismo) para realizar juicios sem&#225;nticos que herramientas program&#225;ticas no pueden evaluar. Este es el famoso <strong>patr&#243;n de &#8220;LLM como Juez&#8221;</strong>. Obviamente, estos controles inferenciales consumen GPU, tardan m&#225;s y cuestan dinero, por lo que un buen Harness Engineering consiste en orquestarlos estrat&#233;gicamente, manteniendo la calidad en las fases tempranas del ciclo de vida del desarrollo.</p></li></ul><p></p><h2>&#191;C&#243;mo dise&#241;ar un buen arn&#233;s?</h2><p>Tenemos <strong>tres grandes &#225;reas</strong> de regulaci&#243;n que deber&#237;amos considerar al crear un arn&#233;s (en el contexto de la programaci&#243;n y el desarrollo de software)</p><ul><li><p>La primera es el <strong>arn&#233;s de mantenibilidad (Maintainability harness)</strong>: Su foco es la calidad interna del c&#243;digo. Aqu&#237; es donde integramos nuestras herramientas tradicionales. Son controles baratos y r&#225;pidos que el arn&#233;s puede invocar en cada iteraci&#243;n del bucle interno. Los LLMs pueden complementar esto identificando duplicidad sem&#225;ntica (c&#243;digo que hace lo mismo pero est&#225; escrito distinto), aunque su uso debe ser m&#225;s espor&#225;dico por el coste de inferencia.</p></li><li><p>La segunda categor&#237;a es el <strong>arn&#233;s de idoneidad arquitect&#243;nica (Architecture fitness harness)</strong>: Ya no buscamos solo que el c&#243;digo est&#233; limpio, sino que respete las caracter&#237;sticas de la arquitectura de la aplicaci&#243;n. Podemos inyectar gu&#237;as que dicten est&#225;ndares de observabilidad y logging, y utilizar sensores como tests estructurales para asegurarnos de que el agente no ha roto los l&#237;mites entre m&#243;dulos de dominio al intentar solucionar r&#225;pido un bug.</p></li><li><p>La tercera, y m&#225;s compleja, es el <strong>arn&#233;s de comportamiento (Behaviour harness)</strong>: &#191;C&#243;mo validamos que la aplicaci&#243;n hace funcionalmente lo que se supone que debe hacer? La soluci&#243;n aqu&#237; sigue requiriendo una <strong>fuerte especificaci&#243;n humana</strong> previa.</p></li></ul><p>Ojo, hay que tener en cuenta que no todos los proyectos son igual de propensos a ser domados por un arn&#233;s y habr&#225; casos donde funcione mejor que en otros.</p><p>Y, evidentemente, estas tres &#225;reas est&#225;n centradas en el desarrollo de software pero hay muchos usos y aplicaciones del uso de agentes fuera de la programaci&#243;n que necesitar&#237;an un arn&#233;s completamente diferente. </p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://martinfowler.com/articles/harness-engineering.html">Harness engineering for coding agent users</a> - Art&#237;culo fundacional de Birgitta B&#246;ckeler en el blog de Martin Fowler sobre la aplicaci&#243;n de conceptos de cibern&#233;tica y teor&#237;a de control a los agentes de programaci&#243;n.</p></li><li><p><a href="https://www.youtube.com/watch?v=q9Vaoz0hd0U">&#191;Qu&#233; es esto del Harness Engineering?</a> - An&#225;lisis conceptual en v&#237;deo sobre el rol del ecosistema en el rendimiento de los modelos, el problema de la hiperespecializaci&#243;n de herramientas y el uso de memoria externa frente a ventanas de contexto.</p></li><li><p><a href="https://www.youtube.com/watch?v=ElGlTv2A_bM">Esto es lo que Aprend&#237; Adaptando Claude Code para SDD</a> - Gu&#237;a pr&#225;ctica de orquestaci&#243;n multiagente aplicando Spec Driven Development (SDD), curaci&#243;n de contexto y separaci&#243;n de responsabilidades estructurales.</p></li><li><p><a href="https://modelcontextprotocol.io/">Model Context Protocol (MCP)</a> - Est&#225;ndar abierto para conectar de forma unificada modelos fundacionales con herramientas de datos y sistemas en entornos de desarrollo.</p></li><li><p><a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview">Anthropic API Documentation - Tool Use</a> - Referencia t&#233;cnica oficial sobre la estructuraci&#243;n de bucles de evaluaci&#243;n en modelos de la familia Claude.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[¿Qué es el formato GGUF?]]></title><description><![CDATA[La semana pasada te explicaba c&#243;mo correr LLMs en local y a ra&#237;z de esa publicaci&#243;n han surgido varias dudas sobre los formatos de los modelos.]]></description><link>https://lvrpiz.substack.com/p/que-es-el-formato-gguf</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/que-es-el-formato-gguf</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 20 May 2026 15:03:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xJrp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>La semana pasada te explicaba <a href="/__u/lvrpiz.substack.com/p/local-ai-101-aprende-a-correr-modelos">c&#243;mo correr LLMs en local</a> y a ra&#237;z de esa publicaci&#243;n han surgido varias dudas sobre los formatos de los modelos.</p><p>Seguro que alguna vez has entrado a HuggingFace con la intenci&#243;n de descargar un modelo de lenguaje para correrlo en tu equipo local y te has encontrado con una lista interminable de archivos con extensiones extra&#241;as como el .gguf, pero este formato es el principal responsable de que hoy <strong>podamos ejecutar inteligencia artificial avanzada en nuestros equipos de forma sencilla</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Muchos de nosotros usamos herramientas locales para levantar modelos, pero la verdad es que pocos entienden qu&#233; ocurre por debajo cuando se carga uno de estos archivos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xJrp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xJrp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:619005,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/198142669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xJrp!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a158d0-66c4-4423-adc6-ef2a2540e243_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>GGUF (Generic GPT Unified Format) es un formato de <strong>archivo contenedor</strong> dise&#241;ado para <strong>almacenar y ejecutar grandes modelos de lenguaje</strong> de forma altamente eficiente en hardware de consumo.</p><ul><li><p>Resuelve los problemas de escalabilidad y compatibilidad de su predecesor (<strong>GGML</strong>).</p></li><li><p><strong>Funciona como un contenedor</strong> que <strong>empaqueta</strong> en un solo lugar los pesos cuantificados del modelo, la arquitectura, el tokenizador y las plantillas de chat.</p></li><li><p>Permite leer y cargar en memoria &#250;nicamente las partes necesarias del modelo gracias a su tabla de tensores y metadatos estructurados.</p></li><li><p>Soporta m&#250;ltiples niveles de cuantificaci&#243;n (como 4-bit o 8-bit), lo que reduce dr&#225;sticamente el consumo de memoria RAM y VRAM.</p></li></ul><p></p><h2>Historia de los formatos tradicionales: GGML</h2><p>Para entender por qu&#233; necesitamos GGUF, tenemos que mirar un momento al pasado reciente. Antes, los modelos se guardaban en los formatos nativos de los frameworks con los que se entrenaban. Hablamos de archivos .pt de <strong>PyTorch</strong> o .pb de <strong>TensorFlow</strong>. Estos formatos estaban pensados para el entrenamiento y usaban una <strong>precisi&#243;n completa de 32 bits</strong> para los n&#250;meros de punto flotante.</p><p>El problema era el tama&#241;o: un modelo medianamente capaz pesaba ya decenas de gigabytes y exig&#237;a una cantidad de memoria de v&#237;deo (VRAM) que solo estaba al alcance de centros de datos.</p><p>Despu&#233;s de GGML lleg&#243; ONNX como un intento de estandarizar los modelos entre frameworks, pero <strong>segu&#237;a sin solucionar el problema fundamental del consumo masivo de memoria para la inferencia en equipos de consumo</strong>.</p><p>Aqu&#237; es donde entr&#243; en escena <a href="https://github.com/ggerganov">Georgi Gerganov</a>. Este desarrollador cre&#243; <a href="https://github.com/ggml-org/llama.cpp">llama.cpp</a>, un motor de inferencia en C++ puro, y junto con &#233;l, el formato <strong>GGML</strong> (que lleva sus iniciales). GGML fue el primer intento serio de hacer que los grandes modelos de lenguaje fueran accesibles en hardware est&#225;ndar mediante t&#233;cnicas de cuantizaci&#243;n (si quieres entender bien qu&#233; es la cuantizaci&#243;n te recomiendo leer el <a href="/__u/lvrpiz.substack.com/p/local-ai-101-aprende-a-correr-modelos">post </a>de la semana pasada).</p><p>GGML tiene limitaciones importantes de dise&#241;o ya que es muy r&#237;gido. Si alguien a&#241;ad&#237;a una nueva caracter&#237;stica al modelo o un nuevo tipo de metadato, romp&#237;a la compatibilidad con los modelos m&#225;s antiguos. Requer&#237;a demasiados ajustes manuales y no escalaba bien para los modelos gigantescos que estaban por venir.</p><p></p><h2>Qu&#233; es el formato GGUF y c&#243;mo funciona</h2><p>Para empezar, no quiero que asocies GGUF a un modelo de IA, debes empezar a verlo como un gran contenedor como un ZIP que contiene muchos ficheros pero dise&#241;ado para redes neuronales.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!g8pn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 424w, /__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 848w, /__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!g8pn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png" width="1456" height="1060" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1060,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:531826,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/198142669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 424w, /__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 848w, /__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g8pn!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d66a99-b54c-423e-9568-683e7dc9aaf4_3072x2236.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Un modelo de lenguaje en local es, en esencia, una gran colecci&#243;n de n&#250;meros a la que llamamos pesos. Pero el motor de inferencia (ya sea llama.cpp, Ollama o LM Studio) necesita un mapa para saber qu&#233; hacer con todos esos n&#250;meros. No le basta con tener los datos en crudo.</p><p>El <strong>motor necesita saber qu&#233; arquitectura concreta</strong> est&#225; utilizando ese modelo. Necesita conocer qu&#233; <strong>tokenizador</strong> exacto debe aplicar para convertir tu texto en n&#250;meros. Requiere la <strong>plantilla de chat espec&#237;fica que usa el modelo para diferenciar los roles de usuario y asistente</strong>. Y lo m&#225;s importante, necesita saber d&#243;nde empieza y termina cada tensor dentro de ese archivo.</p><p><strong>GGUF empaqueta todo eso en un &#250;nico archivo estandarizado</strong>. La parte m&#225;s importante de toda esta estructura es la tabla de tensores que le dice al cargador c&#243;mo debe leer los datos. Mira este ejemplo simplificado:</p><pre><code><code>tensor: blk.0.attn_q.weight 
shape: [4096, 4096] 
type: Q4_K_M 
offset: 1835008</code></code></pre><p>Cuando el cargador de llama.cpp lee este bloque: sabe que tiene que ir a la <strong>posici&#243;n del byte 1835008 del archivo</strong>, interpretar esos bytes bajo el <strong>esquema de cuantificaci&#243;n Q4_K_M</strong> y a&#241;adir el resultado a la capa de atenci&#243;n correspondiente con una forma de matriz de <strong>4096 por 4096</strong>.</p><p>Esto es exactamente lo que hace que GGUF sea tan potente para la inferencia en local. Tienes un <strong>archivo completamente portable que incluye todo el contexto, los metadatos y la disposici&#243;n en memoria de los pesos</strong>.</p><p></p><h2>Gesti&#243;n de la cuantizaci&#243;n en GGUF</h2><p>La cuantificaci&#243;n es el <strong>proceso matem&#225;tico de reducir la precisi&#243;n de los par&#225;metros del modelo</strong>. Pasamos de n&#250;meros de alta precisi&#243;n que ocupan mucha memoria a representaciones m&#225;s simples y comprimidas.</p><p>GGUF tiene soporte nativo para muchos esquemas de cuantificaci&#243;n, lo que te permite elegir el equilibrio exacto entre el tama&#241;o del modelo y su inteligencia.</p><p>En el post de la semana pasada te explicaba en profundidad el proceso de cuantizaci&#243;n, su funcionamiento en detalle y ejemplos, te recomiendo echarle un ojo antes de seguir leyendo &#128071;&#127995;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;597c8301-b5a4-4acf-ac76-fddf1ea22260&quot;,&quot;caption&quot;:&quot;Tanto si nunca has corrido un modelo de IA en local como si ya has trasteado algo y quieres aprender algo m&#225;s, hoy he preparado una gu&#237;a completa en la que te resumo todo lo que necesitas entender para correr modelos de IA en local.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Local AI 101: Aprende a correr modelos de IA en tu ordenador&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:119866725,&quot;name&quot;:&quot;&#193;lvaro&quot;,&quot;bio&quot;:&quot;DevOps y Cloud @ Santander Group | Ingeniero Inform&#225;tico y Economista | Divulgaci&#243;n e Investigaci&#243;n sobre IA y DevOps&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6396df49-e701-4302-bd62-0ca43dcaae8a_1000x1000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-13T15:02:46.017Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!coo7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lvrpiz.substack.com/p/local-ai-101-aprende-a-correr-modelos&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:197087442,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7938672,&quot;publication_name&quot;:&quot;IA y DevOps para Profesionales&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!PnMp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fb2152-2c75-4612-9a7f-714fedb7aeae_750x750.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><h2>Seguridad en los archivos GGUF y  vectores de ataque</h2><p>Solemos pensar que los modelos de IA son cajas negras que recopilan par&#225;metros y ya, pero nos olvidamos que la carga del modelo sigue el mismo proceso que cualquier software tradicional.</p><p>Cuando cargamos un archivo GGUF se produce un an&#225;lisis sint&#225;ctico (parsing) que conlleva implicaciones directas en la ciberseguridad. Como hemos visto antes, un archivo GGUF es una entrada de datos estructurada que se le pasa a un cargador en C, C++ o Rust. La tabla de tensores es la que dicta los tama&#241;os, las formas y los desplazamientos en memoria.</p><p>Si descargas un archivo GGUF malicioso desde una fuente no confiable, ese archivo podr&#237;a mentir deliberadamente sobre sus offsets o sobre el tama&#241;o de sus tensores. Si el cargador del motor de inferencia no valida estrictamente esos metadatos, un atacante podr&#237;a provocar un <strong>desbordamiento de b&#250;fer</strong> (buffer overflow) o <strong>lecturas de memoria fuera de los l&#237;mites</strong>.</p><p>T&#233;cnicamente, los atacantes podr&#237;an dise&#241;ar un archivo GGUF manipulado para filtrar informaci&#243;n privada que introduzcas en tu modelo local o incluso comprometer el entorno de ejecuci&#243;n del agente. Por eso es muy importante usar versiones actualizadas de herramientas como llama.cpp u Ollama.</p><p></p><h2>Ecosistema y herramientas compatibles</h2><p>La adopci&#243;n de GGUF est&#225; sido masiva y pr&#225;cticamente todo el ecosistema de IA en local pivota hoy en d&#237;a sobre este est&#225;ndar.</p><p>Si utilizas Ollama en tu terminal, por debajo est&#225;s utilizando llama.cpp y cargando archivos GGUF. Si usas interfaces gr&#225;ficas como LM Studio o GPT4All, todas dependen de la eficiencia de este formato para mover los datos desde tu disco duro hasta tu memoria RAM a gran velocidad.</p><p>Incluso plataformas empresariales y bibliotecas enormes como Transformers de Hugging Face han tenido que integrar soporte para leer y cargar metadatos GGUF, reconociendo que el formato binario propuesto por la comunidad de c&#243;digo abierto es muy superior a las soluciones tradicionales cuando se trata de inferencia pura y dura.</p><p></p><h4>Referencias t&#233;cnicas</h4><ol><li><p><a href="https://huggingface.co/docs/hub/gguf">GGUF - Hugging Face Hub Documentation</a></p></li><li><p><a href="https://www.ibm.com/es-es/think/topics/gguf-versus-ggml">GGUF versus GGML - IBM Think</a></p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Local AI 101: Aprende a correr modelos de IA en tu ordenador]]></title><description><![CDATA[Te ense&#241;o a elegir el modelo de IA, cuantizaci&#243;n y varios trucos para correr modelos acorde a tu hardware desde cero]]></description><link>https://lvrpiz.substack.com/p/local-ai-101-aprende-a-correr-modelos</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/local-ai-101-aprende-a-correr-modelos</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 13 May 2026 15:02:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!coo7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tanto si nunca has corrido un modelo de IA en local como si ya has trasteado algo y quieres aprender algo m&#225;s, hoy he preparado una <strong>gu&#237;a completa en la que te resumo todo lo que necesitas entender para correr modelos de IA en local</strong>.</p><p>La mayor&#237;a de la gente que se atasca trasteando con modelos de lenguaje en local no se queda bloqueada porque la tecnolog&#237;a sea compleja sino que se piensan que simplemente est&#225;n ejecutando un modelo en la terminal&#8230; pero la realidad es que est&#225;n tomando cinco decisiones t&#233;cnicas:   Hardware, Memoria, Entorno de ejecuci&#243;n (runtime), selecci&#243;n del Modelo y nivel de Cuantizaci&#243;n.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Cada una de estas capas tiene sus propios puntos de fallo, cada una se puede optimizar por separado y, para complicarlo m&#225;s, todas se limitan entre s&#237;. Casi cualquier problema de rendimiento o error que te encuentres se puede rastrear hasta una de estas cinco variables.</p><p>Todo lo que te voy a detallar en este post lo he probado y lo ejecuto de forma recurrente en un Mac Mini M4. He querido centrar los ejemplos en el ecosistema de Apple porque ahora mismo es el punto de entrada m&#225;s amigable, pero los conceptos base aplican a cualquier sistema. Si veo que hay inter&#233;s en el tema, preparar&#233; una versi&#243;n de esta gu&#237;a enfocada a entornos con gr&#225;ficas dedicadas de NVIDIA.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!coo7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!coo7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32759,&quot;alt&quot;:&quot;Local AI 101: Aprende a correr modelos de IA en tu ordenador&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/197087442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Local AI 101: Aprende a correr modelos de IA en tu ordenador" title="Local AI 101: Aprende a correr modelos de IA en tu ordenador" srcset="/__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!coo7!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec9d1bd-b4b8-4ee4-a028-058e2b2d59bb_1200x630.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Local AI 101: Aprende a correr modelos de IA en tu ordenador</figcaption></figure></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>Para entender y optimizar la ejecuci&#243;n de modelos de IA en local <strong>debes dominar c&#243;mo interact&#250;an el hardware, la memoria y el formato del modelo</strong>. Esta gu&#237;a desglosa la pila tecnol&#243;gica de inferencia local.</p><p>Empezaremos levantando un modelo b&#225;sico en minutos para luego profundizar en por qu&#233; <strong>el ancho de banda de memoria es m&#225;s importante que la potencia bruta</strong>. </p><p>Exploraremos <strong>c&#243;mo calcular el coste real de la memoria RAM incluyendo la cach&#233; KV</strong>, aprenderemos a <strong>leer los ficheros GGU</strong>F para <strong>elegir la cuantizaci&#243;n perfecta</strong> y revisaremos ajustes avanzados del entorno de ejecuci&#243;n.</p><p>Al final entender&#225;s exactamente qu&#233; est&#225; pasando en tu m&#225;quina cada vez que generas un token.</p><p></p><h2>&#191;C&#243;mo ejecutar un modelo en local?</h2><p>De nada sirve leerse la teor&#237;a sobre formatos de archivo o debatir si una cuantizaci&#243;n es mejor que otra si todav&#237;a no has experimentado lo que es correr modelos de IA en tu ordenador. </p><p>Mi <strong>objetivo</strong> ahora no es que entiendas conceptos complejos sino que <strong>corras un modelo b&#225;sico en tu equipo</strong> y te quites el miedo.</p><p>No empieces intentando descargar modelos de 70.000 millones de par&#225;metros ni te vuelvas loco con configuraciones complejas. Los Mac con procesadores Apple Silicon (la serie M: M1, M2&#8230;) son el punto de partida m&#225;s sencillo que existe ahora mismo.</p><blockquote><p>En los ejemplos usaremos ollama en su versi&#243;n de terminal. Si no te sientes c&#243;modo siempre puedes descargar la versi&#243;n de escritorio desde su <a href="https://ollama.com">web oficial</a> aunque te animo a seguir el post desde la terminal &#129470;.</p></blockquote><p>Solo necesitas abrir tu terminal y lanzar tres comandos que no te llevar&#225;n ni 5 minutos:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;8a3b929e-0db3-44cb-b662-1b30a29330eb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">brew install ollama  # Si no tienes Homebrew descarga Ollama desde su web oficial primero y salta este paso
ollama pull qwen3:8b
ollama run qwen3:8b</code></pre></div><p>Si no tienes Homebrew en tu Mac, puedes descargar el instalador directamente desde la web de Ollama. Y si al hacer el pull te salta un error de que no encuentra el tag, p&#225;sate por <a href="https://ollama.com/library">ollama.com/library</a> para comprobar las versiones disponibles.</p><p>Seguramente te preguntes por qu&#233; he elegido qwen3:8b para empezar. Hay varios motivos de peso.</p><p>Este modelo es lo suficientemente <strong>peque&#241;o</strong> para ser manejable, pesando unos <strong>5 GB con una cuantizaci&#243;n Q4</strong> (luego entenderemos qu&#233; es esto). Es lo bastante inteligente para que puedas darle un uso real y &#250;til en tu d&#237;a a d&#237;a. Entra perfectamente en los 8 GB de RAM que tienen los equipos base. Y adem&#225;s se defiende de maravilla tanto en ingl&#233;s como en otros idiomas.</p><p>Una vez que termine la descarga, <strong>ver&#225;s que te aparece un prompt con tres s&#237;mbolos</strong> de mayor que (&gt;&gt;&gt;). Escribe cualquier cosa y mira c&#243;mo responde.</p><p>Cuando te canses de jugar, sal del chat y ejecuta estos dos comandos para entender qu&#233; tienes entre manos:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;shell&quot;,&quot;nodeId&quot;:&quot;884973ff-b2be-4729-9eb5-2fb7fadfe340&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-shell">ollama list
ollama show qwen3:8b</code></pre></div><p>El primer comando te <strong>muestra los modelos que tienes instalados, su nivel de cuantizaci&#243;n y lo que ocupan en disco</strong>. El segundo es mucho m&#225;s interesante porque te da <strong>todos los detalles del modelo</strong>, mostrando la plantilla de chat que utiliza, el n&#250;mero de capas y la longitud de contexto configurada.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fUAm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 424w, /__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 848w, /__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 1272w, /__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fUAm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png" width="1337" height="1177" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1177,&quot;width&quot;:1337,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1217571,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/197087442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 424w, /__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 848w, /__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 1272w, /__u/substackcdn.com/image/fetch/$s_!fUAm!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf9559-17e9-4d29-acd2-1eefe9022eb9_1337x1177.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Qu&#233; mirar despu&#233;s de tu primera ejecuci&#243;n</figcaption></figure></div><p></p><p>Al trastear ver&#225;s que hay <strong>dos m&#233;tricas fundamentales</strong> que tienes que aprender a leer.</p><ul><li><p>La primera son los <strong>tokens por segundo (TPS)</strong>, que b&#225;sicamente es la velocidad de generaci&#243;n. En un chip de la serie M de Apple corriendo un modelo de 8B, deber&#237;as esperar entre 20 y 60 TPS, lo cual se deber&#237;a sentir muy fluido y r&#225;pido. Si ves que tu rendimiento cae por debajo de los 5 TPS, seguramente tengas un problema de memoria o has elegido una cuantizaci&#243;n incorrecta para tu m&#225;quina.</p></li><li><p>La segunda m&#233;trica es el <strong>tiempo de evaluaci&#243;n del prompt</strong> (prompt eval), que es el tiempo que tarda el modelo en procesar tu texto inicial y empezar a generar el primer token de respuesta. Este tiempo va a depender directamente del tama&#241;o del modelo y de lo largo que sea tu contexto. En otros posts me refiero a este concepto como <strong>TTFT</strong> o <a href="https://www.ibm.com/think/topics/time-to-first-token">Time To First Token</a>.</p></li></ul><p>Vigila siempre el uso de memoria de tu sistema operativo: si ves que superas el 80% de uso, deber&#237;as empezar a prestar atenci&#243;n. La saturaci&#243;n aumentar&#225; la latencia y es muy probable que tu sistema empiece a usar memoria swap. Puedes vigilar el uso de memoria con el comando <code>top</code> o desde el monitor de actividad.</p><p></p><h2>&#191;Qu&#233; hardware necesito para correr LLMs en local?</h2><p>T&#233;cnicamente el dispositivo desde el que me est&#225;s leyendo puede correr un modelo de IA en local sin problema, ahora bien, si hablamos de modelos &#8216;serios&#8217; debemos prestar atenci&#243;n a varios elementos.</p><p>La gran mayor&#237;a de personas que buscan comprar hardware para correr modelos locales se fijan casi exclusivamente en la potencia bruta de c&#225;lculo de la GPU, los famosos <a href="https://es.wikipedia.org/wiki/Operaciones_de_coma_flotante_por_segundo">FLOPS</a>. Ese instinto, aunque l&#243;gico en otros campos de la inform&#225;tica, aqu&#237; es totalmente err&#243;neo.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LIFC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LIFC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png" width="1323" height="1189" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1189,&quot;width&quot;:1323,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1269054,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/197087442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 424w, /__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 848w, /__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LIFC!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0295ed3e-638a-4a74-a9ac-1e09041d6225_1323x1189.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Elecci&#243;n de hardware</figcaption></figure></div><p>La <strong>inferencia local casi siempre est&#225; limitada por el ancho de banda de la memoria, no por la capacidad de procesamiento de los n&#250;cleos</strong>.</p><p>Piensa en c&#243;mo funciona un LLM por dentro: cada vez que el modelo genera un &#250;nico token, los pesos del modelo tienen que leerse desde la memoria RAM y enviarse a las unidades de c&#225;lculo. Los pesos son est&#225;ticos, no cambian, pero tienen que leerse en cada paso de generaci&#243;n de forma constante. <strong>El ancho de banda determina lo r&#225;pido que ocurre esa lectura</strong> y, por tanto, es el tope m&#225;ximo de tus tokens por segundo.</p><p>Aqu&#237; es donde Apple destaca y sus chips Silicon rinden sorprendentemente bien para tareas de IA local.</p><p>Los procesadores de la serie M utilizan una arquitectura de <strong>memoria unificada</strong>. Esto significa que la <strong>CPU y la GPU comparten exactamente el mismo bloque de memoria f&#237;sica</strong>. <strong>No existe la VRAM dedicada</strong> como tal y la distancia f&#237;sica desde la memoria hasta los n&#250;cleos de la gr&#225;fica es muy corta. La eficiencia del ancho de banda es muy superior a la de una tarjeta gr&#225;fica dedicada que tiene que comunicarse a trav&#233;s de un puerto PCIe.</p><p>Por ponerte n&#250;meros reales de Apple. Un MacBook Pro con el chip M4 Max tiene dos variantes. La versi&#243;n con CPU de 14 n&#250;cleos ofrece 410 GB/s de ancho de banda, mientras que el modelo superior con CPU de 16 n&#250;cleos y GPU de 40 n&#250;cleos llega a los 546 GB/s. Si te vas a un Mac Studio con el M3 Ultra, te plantas en unos 819 GB/s de ancho de banda. Esto lo convierte en la <strong>opci&#243;n de escritorio m&#225;s potente para el consumidor normal que quiere hacer trabajo serio con LLMs locales</strong>.</p><p>Si nos vamos al lado de NVIDIA, el rey del mercado de consumo es la RTX 4090 con sus 24 GB de VRAM, que te da unos 1008 GB/s de ancho de banda. La RTX 3090, que es la generaci&#243;n anterior, se queda en unos 936 GB/s pero tiene una ventaja clave: soporta NVLink para conectar varias tarjetas y sumar VRAM.</p><p></p><h2>&#191;Qu&#233; modelo me cabe en memoria Cuantizaci&#243;n</h2><p>El hardware te marca el techo de tu rendimiento, pero es la memoria la que te dice qu&#233; modelo concreto cabe dentro de ese techo.</p><p>El consumo de memoria de un modelo local se divide principalmente en dos bloques:</p><ul><li><p>Los pesos del modelo.</p></li><li><p>La cach&#233; KV (adem&#225;s de un peque&#241;o margen para el entorno de ejecuci&#243;n).</p></li></ul><p></p><h3>&#191;C&#243;mo calculo la memoria que necesitan los pesos del modelo?</h3><p>Primero debemos entender los tama&#241;os y par&#225;metros de los modelos. Cuando vemos el nombre de un modelo como <strong>Qwen-3-8B</strong>, ese &#8220;<strong>8B</strong>&#8220; significa que el modelo tiene 8 mil millones de par&#225;metros (8 billion en ingl&#233;s).</p><p>Por simplificar y sin entrar en detalle un par&#225;metro es un n&#250;mero que el modelo aprendi&#243; durante su entrenamiento. Generalmente, a m&#225;s par&#225;metros mejor capacidad del modelo a capturar patrones complejos, razonar en tareas complejas&#8230; pero todo a costa de una memoria m&#225;s grande para correrlos, m&#225;s lentos en inferencia y m&#225;s caros de servir en general.</p><p>Para calcular el espacio que ocupan los pesos solo tienes que <strong>multiplicar el n&#250;mero de par&#225;metros por los bytes que ocupa cada par&#225;metro</strong>.</p><p>Si usas el formato original sin comprimir (FP16 o BF16), cada par&#225;metro ocupa 2 bytes. Por tanto, un modelo de 8B en FP16 se va a tragar unos 16 GB de memoria.</p><p>Si aplicas una cuantizaci&#243;n Q8, reduces cada par&#225;metro a 1 byte, dejando el modelo en unos 8 GB.</p><p>Si bajas a Q4, estamos hablando de medio byte por par&#225;metro, por lo que un modelo de 8B ocupa unos 4 GB, a los que hay que sumar un 20% de sobrecarga operativa, qued&#225;ndose en unos 5 GB reales.</p><p>Si te atreves a probar un Q3, el coste baja a 0.375 bytes por par&#225;metro, lo que rozar&#237;a los 3 GB.</p><p>Pasar de 16 GB en formato puro a unos 4 o 5 GB con Q4 es un salto enorme. Por esto la cuantizaci&#243;n Q4 es el punto dulce que usa casi todo el mundo.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4lA9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 424w, /__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 848w, /__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4lA9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png" width="1401" height="1123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1123,&quot;width&quot;:1401,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1301525,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/197087442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 424w, /__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 848w, /__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4lA9!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc00c6599-7ec4-44e3-94a5-80853600f2af_1401x1123.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Pero&#8230; &#191;Qu&#233; es eso de la <strong>cuantizaci&#243;n</strong>? Piensa en ella como una <strong>t&#233;cnica de compresi&#243;n</strong> que reduce la precisi&#243;n de los pesos del modelo para que ocupen menos espacio. En su estado natural (FP16), los modelos usan n&#250;meros decimales muy largos y precisos, lo que consume much&#237;sima RAM. Al cuantizar, lo que hacemos es &#8220;redondear&#8221; esos valores a n&#250;meros enteros m&#225;s simples de 8, 4 o incluso 3 bits.</p><p>Por ejemplo, un peso que originalmente era un decimal complejo puede acabar representado por un valor mucho m&#225;s sencillo. Aunque al redondear perdemos un pel&#237;n de precisi&#243;n t&#233;cnica y existe un riesgo real de p&#233;rdida de calidad, en la pr&#225;ctica el modelo sigue siendo casi igual de inteligente pero ocupando una fracci&#243;n del espacio original. Esto es lo que nos <strong>permite correr modelos mucho m&#225;s potentes en hardware dom&#233;stico sin que la experiencia se resienta</strong>.</p><p></p><h3>&#191;C&#243;mo calculo la memoria que necesito para la KV cach&#233;?</h3><p>Como hab&#237;amos dicho la KV cach&#233; es la segunda variable de la ecuaci&#243;n, y sinceramente es la que la mayor&#237;a ignora por completo por desconocimiento.</p><p>La f&#243;rmula t&#233;cnica de la cach&#233; KV es un poco compleja. B&#225;sicamente consiste en multiplicar el <strong>n&#250;mero de capas</strong>, por las <strong>cabezas de atenci&#243;n KV</strong>, por la <strong>dimensi&#243;n de cada cabeza</strong>, por la <strong>longitud de la secuencia</strong>, por el <strong>tama&#241;o del lote</strong> (batch) y por los <strong>bytes de cada elemento</strong>.</p><p>Hay que tener en cuenta que los modelos modernos utilizan t&#233;cnicas como <strong>GQA</strong> (Grouped Query Attention) o <strong>MQA</strong> (Multi-Query Attention) para optimizar esto, donde el n&#250;mero de cabezas KV es mucho menor que el total de cabezas de atenci&#243;n. Y si est&#225;s usando el modelo t&#250; solo en tu terminal, <strong>el tama&#241;o de lote suele ser 1</strong>.</p><p>Lo importante que tienes que sacar de esa f&#243;rmula es que la cach&#233; KV escala de forma lineal con el tama&#241;o del contexto. Pasar de un contexto de 4.000 tokens a uno de 128.000 tokens significa multiplicar por 32 el tama&#241;o de tu cach&#233; KV.</p><p>El tama&#241;o de la <strong>ventana de contexto es el que se va comiendo tu memoria</strong>. El error m&#225;s com&#250;n es asumir que el consumo de memoria se queda fijo una vez que el archivo del modelo se ha cargado en disco. La ventana de contexto es una variable enorme y din&#225;mica.</p><p>Mira este ejemplo usando la API de Ollama para forzar el tama&#241;o del contexto:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;ba71d84e-91c4-4076-9f71-fe4b4da4e7d3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">curl http://localhost:11434/api/generate \
  -d '{
    "model": "qwen3:8b",
    "prompt": "Explica la cach&#233; KV",
    "options": { "num_ctx": 32768 },
    "stream": false
  }'</code></pre></div><p>El modelo qwen3:8b viene con un contexto por defecto de 4.096 tokens. Si lo aumentamos hasta los 32K como en el comando anterior, la memoria extra que consume el sistema se la come casi en su totalidad la cach&#233; KV. No es un error ni una fuga de memoria. Un contexto m&#225;s largo obliga al sistema a almacenar en RAM las computaciones de muchos m&#225;s tokens pasados para no tener que volver a calcularlos desde cero.</p><p></p><h2>&#191;Qu&#233; aplicaci&#243;n (runtime) necesitas para correr modelos de IA?</h2><p>Cuando antes has hecho la prueba y escribes tu comando en la terminal piensas que est&#225;s interactuando directamente con qwen3:8b pero la verdad es que primero est&#225;s pasando por Ollama, que es tu <strong>entorno de ejecuci&#243;n o runtime</strong>.</p><p>Ollama por su cuenta est&#225; tomando un mont&#243;n de decisiones cr&#237;ticas por debajo: c&#243;mo cargar el modelo en memoria, qu&#233; plantilla de di&#225;logo aplicar y cu&#225;ntas capas puede mandar a la GPU para acelerar el proceso.</p><p>El runtime te quita abstrae de muchas decisiones t&#233;cnicas para que tu no te preocupes por mucho.</p><p>Pero la idea es que seas un usuario avanzado y si quieres tener control absoluto, puedes saltarte a Ollama y llamar directamente a llama.cpp. Eso s&#237;, todo lo que Ollama automatizaba, ahora te toca escribirlo a mano:</p><blockquote><p>Puedes descargar llama.cpp desde su <a href="https://github.com/ggml-org/llama.cpp">repositorio </a>o siguiendo esta <a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/install.md">gu&#237;a</a>.</p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;ff0d6f6c-4886-4cd7-9af9-5284d9a1624d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">./llama-cli \
  --model ./models/Qwen3-30B-A3B-Q4_K_M.gguf \
  --ctx-size 32768 \
  --n-gpu-layers 99 \
  --flash-attn on \
  --jinja</code></pre></div><p>En este comando de ejemplo mira el flag del final, el par&#225;metro --jinja. Es fundamental mencionarlo porque le indica a llama.cpp <strong>que debe usar la plantilla de chat (chat template) que viene incrustada dentro del propio modelo, en lugar de intentar aplicar una por defecto</strong>. A&#241;adir simplemente esta opci&#243;n hace que desaparezcan muchos problemas de calidad y formato en las respuestas.</p><p>En el caso de Apple podemos aprovechar el framework MLX desarrollado directamente por el equipo de investigaci&#243;n de Apple. Est&#225; muy optimizado para sacar todo el provecho a la memoria unificada de la que habl&#225;bamos antes. tengo pensado sacar un post sobre MLX, mientras tanto te recomiendo este <a href="https://www.markus-schall.de/en/2025/09/mlx-on-apple-silicon-as-local-ki-compared-with-ollama-co/">post</a> si quieres profundizar.</p><div><hr></div><p>La gracia de los modelos locales no es usarlos desde la terminal. Una vez que el entorno de ejecuci&#243;n levanta el modelo, este expone una API local a la que puedes conectar tus scripts de Python, tus agentes o tus herramientas habituales.</p><p>Es decir, nuestro runtime ya sea Ollama, MLX u otro no s&#243;lo nos permiten interactuar con los modelos de forma directa por la terminal sino que tambi&#233;n exponen una API local que podemos consumir de igual modo que si llam&#225;ramos a la de OpenAI, Claude u otras&#8230;</p><p>Hacer una llamada directa a la API nativa de Ollama es tan sencillo como esto:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;ef690900-eead-4550-aa3a-e372cfa208d0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">curl http://localhost:11434/api/generate \
  -d '{
    "model": "qwen3:8b",
    "prompt": "Explica la cach&#233; KV en tres frases",
    "stream": false
  }'</code></pre></div><p>Lo mejor de esto es que generalmente el servidor es compatible con la API de OpenAI. Solo tienes que cambiar la URL base (base_url) en tu c&#243;digo de Python y, sin tocar nada m&#225;s de tu l&#243;gica pasas a usar el modelo de tu m&#225;quina de forma totalmente privada.</p><p>&#9888;&#65039; Ojo, quiero dejar claro un l&#237;mite en todo esto: esta gu&#237;a cubre la inferencia local en una &#250;nica m&#225;quina para un solo usuario. Si lo que buscas es montar un sistema en producci&#243;n para servir un modelo a m&#250;ltiples usuarios concurrentes, eso es territorio de herramientas como vLLM o SGLang que da para otro post&#8230;</p><p></p><h2>&#191;C&#243;mo elegir un modelo? Entiende el formato GGUF</h2><p>Cuando entras a <strong>HuggingFace</strong> a buscar un modelo, te vas a encontrar con nombres de archivo bastante raros, algo como esto:</p><p style="text-align: center;"><code>Qwen3-30B-A3B-Q4_K_M.gguf</code></p><p>El formato <strong>GGUF</strong> se ha convertido en el est&#225;ndar para distribuir modelos empaquetados listos para ejecutar. Cada bloque de texto en ese nombre de archivo te est&#225; dando informaci&#243;n &#250;til. Si sabes leerlo, sabr&#225;s exactamente qu&#233; est&#225;s bajando a tu equipo y como elegir algo adecuado a tus necesidades y capacidades.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!L24-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 424w, /__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 848w, /__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 1272w, /__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!L24-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png" width="1456" height="980" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:980,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1131857,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/197087442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 424w, /__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 848w, /__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 1272w, /__u/substackcdn.com/image/fetch/$s_!L24-!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72a0477f-29a1-451f-b7a9-4484f85f09a4_1529x1029.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>El primer punto a entender es la <strong>diferencia entre los modelos Base y los Instruct</strong> (o Chat). Aunque pertenezcan a la misma familia tecnol&#243;gica, su comportamiento es opuesto.</p><ul><li><p>Un modelo <strong>Base</strong> se dedica exclusivamente a continuar el texto que le pasas. No responde preguntas de forma natural, simplemente autocompleta el patr&#243;n.</p></li><li><p>Los modelos <strong>Instruct</strong>, por el contrario, han pasado por una fase de fine-tuning para aprender a obedecer &#243;rdenes y seguir instrucciones precisas. Los modelos tipo Chat van un paso m&#225;s all&#225; y entienden el formato de di&#225;logo entre usuario y asistente. Para tu d&#237;a a d&#237;a en local, casi siempre vas a querer descargar versiones Instruct o Chat.</p></li></ul><p>Aqu&#237; debemos hacer un inciso, cuidado con la trampa del formato del prompt: los modelos Instruct son muy sensibles a c&#243;mo se les pasa el texto. Cada familia de modelos utiliza su propia plantilla de marcas especiales.</p><p>Si le env&#237;as simplemente la frase &#8220;Explica que es el formato GGUF&#8221; de forma cruda, est&#225;s forzando al modelo a adivinar el contexto. La forma correcta para un modelo como Qwen3 requiere marcas especiales que delimitan el sistema, el usuario y la respuesta. Herramientas como Ollama aplican estas plantillas autom&#225;ticamente por detr&#225;s, y llama.cpp lo hace si usas la flag --jinja que comentamos antes. Equivocarse en este formato produce salidas ineseradas que los usuarios suelen diagnosticar err&#243;neamente pensando que el modelo es malo.</p><div><hr></div><p>El siguiente misterio que debemos resolver y del que te he hablado ya antes es la <strong>cuantizaci&#243;n</strong>, que es b&#225;sicamente <strong>el arte de sacrificar un poco de calidad para ahorrar memoria</strong>. Consiste en comprimir los pesos del modelo, pasando de utilizar variables flotantes de 16 bits a usar mucha menos precisi&#243;n.</p><p>La escala de calidad va desde los formatos puros sin comprimir (<strong>FP16 o BF16</strong>) en lo m&#225;s alto, bajando por <strong>Q8, Q6, Q4, Q3</strong>, hasta llegar a Q2 en lo m&#225;s bajo. A medida que bajas escalones, el archivo encoge pero la coherencia y precisi&#243;n del modelo se resiente.</p><div><hr></div><p>Seguramente ver&#225;s que muchas cuantizaciones llevan una <strong>&#8216;K&#8217; y una &#8216;M&#8217;</strong>, como en Q4_K_M.</p><ul><li><p>Esa <strong>K</strong> significa que se ha usado <strong>cuantizaci&#243;n K-means</strong>, que es un m&#233;todo de agrupamiento estad&#237;stico mucho m&#225;s refinado que recortar los bits a lo bruto.</p></li><li><p>La letra final indica el nivel de compresi&#243;n dentro de esa t&#233;cnica: <strong>Small, Medium o Large</strong>. Las cuantizaciones K-quants superan consistentemente a las compresiones uniformes tradicionales bajo el mismo nivel de bits.</p></li></ul><p>Una regla que suelo usar para elegir la cuantizaci&#243;n es bastante sencilla: Si tienes memoria RAM de sobra, tira a por <strong>Q8 porque es lo m&#225;s cercano a la calidad original</strong>. <strong>Para un uso diario y constante, Q4_K_M</strong> es sin duda el sweet spot entre velocidad, tama&#241;o y fiabilidad. Si la falta de memoria te afecta mucho, puedes probar Q3 asumiendo cierto riesgo de alucinaci&#243;n, pero te dir&#237;a que huyas de Q2 para cualquier tarea medianamente seria.</p><p>Hay un resultado que choca bastante la primera vez que lo escuchas: <strong>Un modelo grande de 8B comprimido fuertemente a Q4 rinde mejor en la mayor&#237;a de tareas cotidianas que un modelo peque&#241;o de 3B ejecutado en m&#225;xima calidad FP16</strong>.</p><p>La cuantizaci&#243;n introduce p&#233;rdida de informaci&#243;n, s&#237;, pero la inteligencia base de una arquitectura m&#225;s grande suele compensar con creces esa p&#233;rdida. <strong>Elegir un modelo pesado muy cuantizado suele ser mejor estrategia que elegir un modelo ligero sin comprimir</strong>.</p><div><hr></div><p>Por &#250;ltimo, tenemos que hablar de ese sufijo <strong>A3B</strong>, que es propio de los modelos <strong>MoE</strong> (<a href="https://www.ibm.com/es-es/think/topics/mixture-of-experts">Mixture of Experts</a>). </p><p>En nuestro anterior ejemplo de <code>Qwen3-30B-A3B-Q4_K_M.gguf l</code>o que te est&#225; diciendo ese nombre es: este modelo tiene 30.000 millones de par&#225;metros f&#237;sicos en total, pero su dise&#241;o interno hace que <strong>solo active unos 3.000 millones de par&#225;metros</strong> durante cada salto de c&#225;lculo.</p><p>Esto significa que seguimos necesitando cargar los 30.000 millones de par&#225;metros en memoria pero el esfuerzo de c&#225;lculo recae solo sobre los par&#225;metros activos.</p><p>En resumen, un modelo <strong>30B-A3B</strong> va a requerir unos pesados 18 GB de memoria en Q4 para simplemente arrancar, pero a la hora de generar palabras, se sentir&#225; casi tan r&#225;pido como un modelo de 3B.</p><p></p><h2>Optimizaci&#243;n avanzada de modelos en local</h2><p>Si has llegado hasta aqu&#237; y tu modelo corre fluido y hace lo que le pides con precisi&#243;n, puedes saltarte tranquilamente esta secci&#243;n.</p><p>Si quieres trastear con los par&#225;metros principales del modelo, te recomiendo hacerlo usando las opciones de la API, ya que suelen ser m&#225;s estables entre actualizaciones que usar flags sueltas en la terminal.</p><p>Puedes fijar el tama&#241;o de la ventana de contexto (num_ctx), forzar el n&#250;mero de capas que se env&#237;an a la gr&#225;fica (num_gpu) o ajustar el tama&#241;o del lote (num_batch) de forma sencilla. Par&#225;metros como la temperatura o el top_p solo modifican la aleatoriedad de las respuestas creativas, no vas a conseguir un mejor rendimiento, as&#237; que d&#233;jalos por defecto a menos que sepas lo que haces o tienes un caso especial donde aprovecharlo. Si quieres profundizar sobre estos par&#225;metros avanzados te recomiendo esta <a href="https://rpubs.com/silvosus/1256240">gu&#237;a</a>.</p><div><hr></div><p>Otra cosa que te recomiendo plantearte es aplicar cuantizaci&#243;n directamente a la cach&#233; KV, comprimi&#233;ndola a Q8 o Q4. Esto es casi obligatorio en el momento que quieras trabajar con ventanas de contexto grandes de 32K en adelante sin fundirte toda tu memoria RAM. Sobre este tema te recomiendo este <a href="https://introl.com/es/blog/kv-cache-optimization-memory-efficiency-production-llms-guide">art&#237;culo</a>.</p><div><hr></div><p>Finalmente, de nada sirve obsesionarse con la m&#233;trica de tokens por segundo o TTFT si luego no rinde con las tareas reales del d&#237;a a d&#237;a. Aqu&#237; lo mejor es que hagas tus pruebas y tus benchmarks.</p><p>En funci&#243;n de para lo que lo uses de forma diaria, p&#237;dele que formatee una salida en JSON con campos muy espec&#237;ficos, p&#233;gale un art&#237;culo largo y hazle una pregunta trampa sobre un detalle del &#250;ltimo p&#225;rrafo para poner a prueba su recuperaci&#243;n de memoria (test de <a href="https://github.com/gkamradt/LLMTest_NeedleInAHaystack">Needle In A Haystack</a>).</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BOhK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 424w, /__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 848w, /__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BOhK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png" width="1033" height="1522" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1522,&quot;width&quot;:1033,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1399307,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/197087442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 424w, /__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 848w, /__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BOhK!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fcc371-f494-461f-8e7d-af4a65fee31b_1033x1522.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Glosario t&#233;cnico</figcaption></figure></div><div><hr></div><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://github.com/ggerganov/ggml/blob/master/docs/gguf.md">Especificaci&#243;n del formato GGUF</a> - Documentaci&#243;n oficial sobre la estructura y metadatos de los archivos GGUF</p></li><li><p><a href="https://github.com/ggerganov/llama.cpp">Llama.cpp en GitHub</a> - Repositorio principal y documentaci&#243;n del motor de inferencia nativo en C/C++</p></li><li><p><a href="https://github.com/ollama/ollama/blob/main/docs/api.md">Documentaci&#243;n de la API de Ollama</a> - Referencia completa de los endpoints y par&#225;metros configurables en peticiones REST</p></li><li><p><a href="https://github.com/ml-explore/mlx">MLX de Apple Research</a> - Repositorio oficial del framework de machine learning optimizado para la arquitectura de memoria unificada de Apple Silicon</p></li><li><p>Michael Guo (<a href="https://x.com/Michaelzsguo">X</a>): Perfil de X de Michael. Todas las im&#225;genes salvo la portada son originalmente de su propiedad y han sido traducidas al espa&#241;ol con IA.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[OpenAI Privacy Filter: Evita filtraciones de datos personales]]></title><description><![CDATA[Te explico c&#243;mo OpenAI Privacy Filter utiliza una arquitectura bidireccional y mezcla de expertos para enmascarar datos sensibles con un modelo local excelente]]></description><link>https://lvrpiz.substack.com/p/openai-privacy-filter-evita-filtraciones</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/openai-privacy-filter-evita-filtraciones</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 06 May 2026 15:17:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BtIB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Seguramente hayas copiado y pegado logs, c&#243;digo o pdfs personales son informaci&#243;n sensible y la has volcado a un modelo de IA sin darte cuenta&#8230; o peor a&#250;n: has implementado un sistema para tu empresa y est&#225;s mandado datos sensibles de tus clientes como sus correos electr&#243;nicos, n&#250;meros de tel&#233;fono, contrase&#241;as, tokens&#8230;. ya sabes.</p><p>Es el gran dilema actual cuando integramos inteligencia artificial en entornos de producci&#243;n es que queremos aprovechar al m&#225;ximo la capacidad de razonamiento de los modelos, pero nos preocupa filtrar datos sensibles. Hasta ahora, la soluci&#243;n pasaba por crear pipelines de limpieza de datos basadas en regex principalmente.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BtIB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BtIB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40593,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/195720185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!BtIB!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa20f99fe-a044-4f6a-a9d8-cffedb7603e3_1200x630.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>OpenAI Privacy Filter es un <strong>modelo de lenguaje de pesos abiertos especializado en detectar y enmascarar informaci&#243;n de identificaci&#243;n personal (PII)</strong> en textos no estructurados de forma r&#225;pida y local.</p><ul><li><p>Funciona con 1<strong>500 millones de par&#225;metros</strong>, pero activa solo 50 millones por cada inferencia gracias a una arquitectura de mezcla de expertos dispersa.</p></li><li><p>Procesa contextos masivos de hasta 128000 tokens en una &#250;nica pasada bidireccional, entendiendo el contexto en lugar de buscar coincidencias exactas.</p></li><li><p>Soporta la detecci&#243;n de <strong>ocho categor&#237;as de datos sensibles</strong>, desde n&#250;meros de cuenta bancaria hasta tokens de APIs.</p></li><li><p>Se ejecuta enteramente en local con Python o directamente en el navegador del usuario utilizando Transformers.js y WebGPU.</p></li></ul><p></p><h2>&#191;C&#243;mo filtr&#225;bamos los datos sensibles hasta ahora?</h2><p>La protecci&#243;n de la privacidad en los sistemas de software tradicionales siempre ha dependido de la <strong>coincidencia de patrones</strong>. Si quer&#237;as ocultar un n&#250;mero de tel&#233;fono en un registro del servidor, escrib&#237;as una expresi&#243;n regular que buscara secuencias de nueve d&#237;gitos o ciertos prefijos internacionales. Si quer&#237;as ofuscar un correo electr&#243;nico, buscabas cadenas de texto que contuvieran una arroba rodeada de caracteres alfanum&#233;ricos.</p><p><strong>El gran inconveniente de este enfoque</strong> determinista es que es muy r&#237;gido frente a la realidad de los datos. En un entorno controlado funciona de maravilla, pero en el mundo real la informaci&#243;n es ruidosa. A veces los usuarios escriben los n&#250;meros de tel&#233;fono con separaciones extra&#241;as, a&#241;aden comentarios en mitad de un formulario, o utilizan formatos de contrase&#241;as que tu script simplemente no contempla.</p><p>Y lo m&#225;s cr&#237;tico para el filtrado de datos es que <strong>las expresiones regulares carecen de la capacidad de entender el contexto que rodea a la informaci&#243;n</strong>. Un script cl&#225;sico no es capaz de distinguir entre un correo gen&#233;rico de soporte p&#250;blico de una gran empresa que debe conservarse para mantener el sentido del texto, y la direcci&#243;n de correo personal de un cliente que debe ser eliminada obligatoriamente por normativas como el RGPD.</p><p>Aqu&#237; es exactamente donde entra en juego OpenAI Privacy Filter, planteando una soluci&#243;n basada en redes neuronales sensibles al contexto en lugar de reglas est&#225;ticas.</p><p></p><h2>Qu&#233; es OpenAI Privacy Filter y por qu&#233; cambia el paradigma</h2><p>Estamos hablando de un <strong>modelo de pesos abiertos publicado recientemente bajo la licencia permisiva Apache 2.0.</strong> Esto significa, en t&#233;rminos pr&#225;cticos, que cualquier equipo de desarrollo puede descargarlo, modificarlo, integrarlo en su infraestructura privada y utilizarlo en entornos comerciales sin tener que pagar licencias ni depender de llamadas a una API externa.</p><p>Su objetivo principal es actuar como una barrera de seguridad, un filtro previo de privacidad. <strong>La idea es que lo instales en tu propia red y hagas que todo el texto generado por los usuarios o extra&#237;do de tus bases de datos pase por &#233;l antes de ser enviado a APIs de modelos de lenguaje externos</strong>, antes de ser indexado en bases de datos vectoriales para alimentar sistemas RAG de recuperaci&#243;n aumentada, o antes de ser almacenado de forma persistente en los registros de tu servidor.</p><p>Al ejecutar el <strong>modelo localmente</strong>, te aseguras de que l<strong>a informaci&#243;n de identificaci&#243;n personal se enmascara o se censura por completo</strong> sin que esos datos lleguen a salir de tu equipo o de tu servidor seguro.</p><p></p><h2>Arquitectura de OpenAI Privacy Filter</h2><p>El reto de OpenAI era crear algo lo bastante peque&#241;o como para ejecutarse sin problemas en el port&#225;til de un desarrollador, pero con la suficiente profundidad de par&#225;metros como para entender matices ling&#252;&#237;sticos complejos y evitar falsos positivos.</p><p>Privacy Filter es un modelo de clasificaci&#243;n de tokens bidireccional. La gran mayor&#237;a de los modelos de lenguaje a los que estamos acostumbrados, como ChatGPT, Claude o Gemini, <strong>son de naturaleza autorregresiva</strong>: leen el contexto izquierdo y generan texto de forma secuencial, prediciendo palabra por palabra.</p><p>Privacy Filter tiene un enfoque distinto donde los investigadores de OpenAI partieron de un punto de control preentrenado autorregresivo, con una arquitectura similar a gpt-oss, le quitaron la cabeza final de modelado de lenguaje y la sustituyeron por una cabeza de clasificaci&#243;n de tokens.</p><p>Al entrenarlo de forma bidireccional, <strong>el modelo no genera texto nuevo</strong>. Lee toda la secuencia de entrada de golpe, analizando tanto el contexto previo como el posterior de cada palabra, y <strong>asigna una etiqueta de privacidad a cada token en una sola</strong> pasada hacia adelante.</p><p>A nivel de dise&#241;o estructural, nos encontramos ante un transformer compuesto por ocho bloques repetidos y una dimensi&#243;n de incrustaci&#243;n de 640. Pero el verdadero rendimiento proviene de dos optimizaciones fundamentales.</p><p></p><h2>&#191;C&#243;mo etiqueta los datos Privacy Filter?</h2><p>Asignar etiquetas de privacidad a los tokens de forma completamente individual acarrea problemas severos de consistencia. Imagina que tienes en tu texto el nombre completo Alice Smith. Un modelo puramente individualista podr&#237;a analizar la palabra Alice y etiquetarla correctamente como el comienzo de un nombre propio. Luego leer&#237;a el espacio en blanco, se confundir&#237;a perdiendo el contexto, y podr&#237;a clasificar Smith como un nombre com&#250;n o ignorarlo por completo. El resultado ser&#237;a una m&#225;scara fragmentada, in&#250;til para proteger la identidad del usuario.</p><p>Para solucionar esta inestabilidad en los l&#237;mites de los datos, Privacy Filter incorpora un <strong>sistema de decodificaci&#243;n de secuencias restringidas apoyado en el algoritmo de <a href="https://www.cis.upenn.edu/~cis2620/notes/Example-Viterbi-DNA.pdf">Viterbi</a></strong>, sustituyendo a la tradicional selecci&#243;n de la probabilidad m&#225;xima independiente.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hI_k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 424w, /__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 848w, /__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hI_k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png" width="1456" height="1093" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1093,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:332424,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/195720185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 424w, /__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 848w, /__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hI_k!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192de994-cd56-4a07-a43d-776127deb31a_2238x1680.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ejemplo del algoritmo de Viterbi</figcaption></figure></div><p></p><p>El mecanismo funciona de tal manera que la cabeza de clasificaci&#243;n no decide simplemente si una palabra es privada o no, sino que emite 33 predicciones probabil&#237;sticas por cada token. El n&#250;mero <strong>33</strong> (pura coincidencia &#128521;) surge de utilizar el esquema de etiquetado de l&#237;mites BIOES. Este sistema descompone cada una de las ocho categor&#237;as de datos sensibles del modelo en cuatro etiquetas posicionales. </p><ul><li><p>La letra B se&#241;ala el inicio del dato.</p></li><li><p>La letra I marca el interior de una frase privada.</p></li><li><p>La letra E define el final de la cadena.</p></li><li><p>La letra S indica que el dato sensible ocupa un &#250;nico token.</p></li></ul><p>Si multiplicas <strong>ocho categor&#237;as de privacidad</strong> por estas <strong>cuatro posiciones</strong> espaciales, y <strong>le sumas la clase de fondo que representa el texto no confidencial</strong>, obtienes exactamente los <strong>33 valores de salida</strong>.</p><p>El decodificador de Viterbi toma esta matriz de probabilidades y no se queda con el valor m&#225;s alto de la columna. Eval&#250;a todas las rutas l&#243;gicas posibles a lo largo de la oraci&#243;n completa, penalizando las transiciones absurdas. <strong>Es matem&#225;ticamente imposible que el modelo marque el final de un n&#250;mero de cuenta si antes no ha marcado el inicio.</strong> Este control global sobre la secuencia garantiza que las m&#225;scaras generadas sean continuas, precisas y extremadamente coherentes incluso frente a textos desordenados.</p><p>Adem&#225;s, este sistema param&#233;trico permite a los desarrolladores ajustar el punto de funcionamiento del modelo en tiempo de ejecuci&#243;n. Alterando los sesgos de transici&#243;n, <strong>puedes decidir si prefieres configurar un sistema altamente restrictivo que enmascare ante la m&#225;s m&#237;nima duda para blindar el recall, o un sistema m&#225;s permisivo que busque una precisi&#243;n milim&#233;trica para no borrar contexto valioso.</strong></p><p></p><h2>Las 8 categor&#237;as de detecci&#243;n y el enmascaramiento sem&#225;ntico</h2><p>&#191;Qu&#233; tipo de informaci&#243;n es capaz de detectar la arquitectura actual? El modelo ha sido entrenado, a trav&#233;s de conjuntos de datos p&#250;blicos y sint&#233;ticos masivos, para clasificar el texto en ocho categor&#237;as de privacidad cr&#237;ticas para cualquier flujo de trabajo.</p><p>Identifica <strong>personas privadas</strong>, <strong>direcciones postales particulares</strong>, <strong>correos electr&#243;nicos, n&#250;meros de tel&#233;fono, URLs de entornos privados y fechas asociadas a informaci&#243;n personal</strong>. Adem&#225;s, hay dos categor&#237;as especiales de especial relevancia:</p><p>La primera es la etiqueta <strong>account_number.</strong> Va mucho m&#225;s all&#225; de una simple b&#250;squeda de n&#250;meros de cuenta bancaria o patrones de tarjetas de cr&#233;dito de 16 d&#237;gitos. Engloba una enorme variedad de identificadores de bases de datos, claves primarias de facturaci&#243;n e informaci&#243;n financiera que las expresiones regulares suelen ignorar sistem&#225;ticamente.</p><p>La segunda, y probablemente la m&#225;s importante para la seguridad de la infraestructura, es la etiqueta <strong>secret</strong>. Esta categor&#237;a est&#225; espec&#237;ficamente adiestrada para localizar <strong>contrase&#241;as en texto plano</strong>, <strong>tokens</strong> de autorizaci&#243;n, <strong>claves de acceso</strong> a APIs, y cadenas alfanum&#233;ricas de alta entrop&#237;a que suelen quedarse olvidadas en el c&#243;digo fuente, en los mensajes de confirmaci&#243;n de los repositorios o en los volcados de memoria tras un fallo del sistema.</p><p>Para que veas la capacidad del modelo frente a un texto no estructurado, observa este ejemplo proporcionado en la documentaci&#243;n t&#233;cnica oficial. Partimos de un correo electr&#243;nico laboral cotidiano lleno de datos sensibles.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;a866a208-8f53-4265-baea-1ec0e0201afb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Asunto: Seguimiento de la planificaci&#243;n del T2

Hola, Jordan:

Gracias de nuevo por la reuni&#243;n de esta ma&#241;ana. Quer&#237;a comentarte el calendario revisado para el despliegue del T2 y confirmar que el lanzamiento del producto est&#225; previsto para el 18 de septiembre de 2026. Como referencia, el archivo del proyecto figura con el c&#243;digo 4829-1037-5581. Si cambia algo por tu parte, escr&#237;beme a maya.chen@example.com o ll&#225;mame al +1 (415) 555-0124.

Atentamente,

Maya Chen</code></pre></div><p>Si pasamos el texto crudo por el filtro de privacidad configurado para sustituir las detecciones por <strong>etiquetas delimitadoras</strong>, obtenemos una versi&#243;n totalmente higienizada, lista para ser analizada por cualquier inteligencia artificial de terceros sin comprometer el cumplimiento normativo.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;9aadf41e-d6ec-4d81-98b9-0c988972ed74&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Asunto: Seguimiento de la planificaci&#243;n del T2

Hola, [PRIVATE_PERSON]:

Gracias de nuevo por la reuni&#243;n de esta ma&#241;ana. Quer&#237;a comentarte el calendario revisado para el despliegue del T2 y confirmar que el lanzamiento del producto est&#225; previsto para el [PRIVATE_DATE]. Como referencia, el archivo del proyecto figura con el c&#243;digo [ACCOUNT_NUMBER]. Si cambia algo por tu parte, escr&#237;beme a [PRIVATE_EMAIL] o ll&#225;mame al [PRIVATE_PHONE].

Atentamente,

[PRIVATE_PERSON]</code></pre></div><p></p><h2>&#191;C&#243;mo usar OpenAI Privacy Filter? Ejemplos</h2><p>Entendida la teor&#237;a y la arquitectura, la siguiente parada l&#243;gica es ver c&#243;mo lo implementamos t&#233;cnicamente. OpenAI ha puesto el modelo a disposici&#243;n de la comunidad a trav&#233;s de los repositorios de <a href="https://huggingface.co/openai/privacy-filter/tree/main">Hugging Face</a>.</p><p>Si tu backend principal est&#225; construido en Python, la forma m&#225;s r&#225;pida de arrancar es utilizando Transformers.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;23fad87b-a8dc-4533-87be-8c0b5351c0f7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from transformers import pipeline

classifier = pipeline(
    task="token-classification",p
    model="openai/privacy-filter",
)
classifier("My name is Alice Smith")
</code></pre></div><p>Este fragmento es perfecto para probar el modelo y validar los conceptos. Ahora bien, si est&#225;s construyendo una pipeline de datos para un entorno de producci&#243;n exigente donde necesitas un control absoluto sobre la asignaci&#243;n de la memoria de los tensores, el enrutamiento de los dispositivos o el mapeo espec&#237;fico de las identificaciones de los tokens a las etiquetas de texto, la mejor estrategia es <strong>instanciar la clase de clasificaci&#243;n de tokens y el tokenizador de manera manual.</strong> </p><p>Presta atenci&#243;n a c&#243;mo se extraen las predicciones aplicando una funci&#243;n argmax sobre la &#250;ltima dimensi&#243;n de la matriz de los logits generados por el modelo.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;0a4e4186-aec7-4a8d-a0d3-71f542b97cf3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import torch
from transformers import AutoModelForTokenClassification, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("openai/privacy-filter")
model = AutoModelForTokenClassification.from_pretrained("openai/privacy-filter", device_map="auto")

inputs = tokenizer("My name is Alice Smith", return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

predicted_token_class_ids = outputs.logits.argmax(dim=-1)
predicted_token_classes = [model.config.id2label[token_id.item()] for token_id in predicted_token_class_ids[0]]
print(predicted_token_classes)
</code></pre></div><p>Y aqu&#237; llegamos a la parte que considero m&#225;s importante ya que puedes <strong>ejecutar el filtro de privacidad directamente en el navegador</strong> del cliente utilizando Transformers.js.</p><p>Si integras esto en tu aplicaci&#243;n web frontend, <strong>los datos altamente sensibles ni siquiera llegan a abandonar el dispositivo local del usuario para ser procesados.</strong> La evaluaci&#243;n y el enmascaramiento ocurren de manera descentralizada aprovechando la capacidad de la tarjeta gr&#225;fica del propio equipo mediante la API de WebGPU. Combinando esto con una cuantizaci&#243;n de nivel q4 para comprimir los pesos del modelo y reducir la ocupaci&#243;n de memoria RAM se obtiene un rendimiento bastante bueno:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;fb9c7bd6-ac06-458b-8373-13cbca04a5d3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">import { pipeline } from "@huggingface/transformers";

const classifier = await pipeline(
  "token-classification", "openai/privacy-filter",
  { device: "webgpu", dtype: "q4" },
);

const input = "My name is Harry Potter and my email is harry.potter@hogwarts.edu.";
const output = await classifier(input, { aggregation_strategy: "simple" });
console.dir(output, { depth: null });
</code></pre></div><p></p><h2>Rendimiento y benchmarks</h2><p>En las pruebas de evaluaci&#243;n contra el benchmark est&#225;ndar de la industria PII-Masking-300k, el Privacy Filter obtiene una <strong>puntuaci&#243;n F1 del 96 por ciento</strong> (94,04% de precisi&#243;n y 98,04% de recall).</p><p>Adem&#225;s, si operas en un sector de nicho con convenciones de nombres at&#237;picas o identificadores de bases de datos heredadas con formatos muy particulares, puedes reentrenar el modelo con un conjunto de datos interno peque&#241;o. En las pruebas de adaptaci&#243;n de dominio, el modelo fue capaz de elevar su precisi&#243;n desde un modesto <strong>54% hasta rozar el 96% </strong>tras someterlo a un ajuste fino concentrado, acerc&#225;ndose r&#225;pidamente a la saturaci&#243;n de aprendizaje.</p><p></p><h2>Limitaciones y responsabilidades de cumplimiento</h2><p>OpenAI Privacy Filter es una buena herramienta pero no es algo seguro ni una garant&#237;a legal de anonimizaci&#243;n absoluta bajo ninguna jurisdicci&#243;n.</p><p>Como ocurre con cualquier red neuronal, este modelo <strong>es susceptible a cometer errores de clasificaci&#243;n</strong>. Puede pasar por alto convenciones de nombres regionales poco comunes, iniciales aisladas o referencias ambiguas que requerir&#237;an conocimientos previos sobre las personas involucradas.</p><p>Es por todo esto que, en entornos de despliegue cr&#237;tico con alta sensibilidad de datos, como pueden ser los sistemas de historiales m&#233;dicos hospitalarios, las auditor&#237;as legales profundas o la gesti&#243;n de transacciones financieras internacionales, tanto la revisi&#243;n humana peri&#243;dica como las auditor&#237;as de exactitud en dominio siguen siendo un eslab&#243;n insustituible.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://openai.com/es-ES/index/introducing-openai-privacy-filter/">OpenAI Privacy Filter - Anuncio Oficial</a> - Art&#237;culo fundacional sobre el lanzamiento, el ecosistema de seguridad y los casos de uso sugeridos.</p></li><li><p><a href="https://huggingface.co/openai/privacy-filter">Hugging Face - Tarjeta del modelo Privacy Filter</a> - Repositorio oficial con la arquitectura detallada, instrucciones de instalaci&#243;n, descargas y pesos abiertos.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Load balancers aplicados a inferencia de IA, LLMs]]></title><description><![CDATA[Tradicionalmente, si tienes un front hecho en Node y desplegado en un Nginx puedes escalarlo con un Load balancer sencillo estilo round-robin pero, &#191;podemos hacer lo mismo con modelos de lenguaje?]]></description><link>https://lvrpiz.substack.com/p/load-balancers-aplicados-a-inferencia</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/load-balancers-aplicados-a-inferencia</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 29 Apr 2026 14:59:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zbov!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tradicionalmente, si tienes un front hecho en Node y desplegado en un Nginx puedes escalarlo con un Load balancer sencillo estilo round-robin pero, &#191;podemos hacer lo mismo con modelos de lenguaje?</p><p>No tiene absolutamente nada que ver balancear una API o un front o un servidor para inferencia de LLMs. Si pones un balanceador round-robin de toda la vida delante de tus r&#233;plicas de GPU, la latencia se disparar&#225; y los costes de inferencia se multiplican. &#191;Y esto por qu&#233; ocurre? Por el <a href="/__u/lvrpiz.substack.com/p/prompt-caching-como-dejar-de-tirar">prompt caching</a>, un t&#233;rmino del que te he hablado varias veces en el blog y hoy volvemos a &#233;l.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zbov!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zbov!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41821,&quot;alt&quot;:&quot;Balanceador de carga para IA en LLMs&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/194683463?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Balanceador de carga para IA en LLMs" title="Balanceador de carga para IA en LLMs" srcset="/__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!zbov!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3a7400-e896-4419-a25e-bce0c587adc3_1200x630.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#191;C&#243;mo balancear carga de un LLM?</figcaption></figure></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>El balanceo de carga especializado para LLMs resuelve el problema de la fragmentaci&#243;n de memoria al distribuir las peticiones bas&#225;ndose en el contexto previo almacenado en las GPUs de inferencia.</p><ul><li><p>El enrutamiento cl&#225;sico tipo round-robin <strong>anula las ventajas del prompt caching</strong>, reduciendo el hit rate de forma casi lineal al escalar el cl&#250;ster.</p></li><li><p>La soluci&#243;n t&#233;cnica pasa por un <strong>enrutamiento consciente de la cach&#233;</strong> que analiza los tokens y env&#237;a la petici&#243;n a la instancia que ya tiene ese contexto en su VRAM.</p></li><li><p>El proceso de inferencia se divide en dos fases con necesidades de hardware distintas: <strong>Prefill</strong> y <strong>Decode</strong>.</p></li><li><p>Para contextos enormes, la industria de la IA est&#225; adoptando arquitecturas desagregadas, separando los <strong>nodos de procesamiento</strong> de los <strong>nodos de generaci&#243;n</strong>.</p></li></ul><p></p><h2>&#191;Por qu&#233; el balanceo de carga cl&#225;sico no funciona en infraestructuras de IA?</h2><p>En una arquitectura web tradicional, el balanceo de carga es bastante predecible: Hay un balanceador que reparte el tr&#225;fico entre los N servidores que tengas usando algoritmos como round-robin, enviando una petici&#243;n a cada m&#225;quina de forma secuencial. Como la mayor&#237;a de estos servicios guardan el estado o las sesiones en una <strong>base de datos externa, da exactamente igual qu&#233; servidor atienda la petici&#243;n</strong> en la mayor&#237;a de los casos.</p><p>Pero <strong>los LLMs no funcionan as&#237;</strong>. El estado aqu&#237; no vive en una base de datos externa tradicional, vive en la memoria de la GPU en forma de contexto.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xU1p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 424w, /__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 848w, /__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xU1p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png" width="1456" height="876" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:876,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diagrama funcionamiento Load balancer&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagrama funcionamiento Load balancer" title="Diagrama funcionamiento Load balancer" srcset="/__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 424w, /__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 848w, /__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xU1p!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c817a7-260d-4b6e-82fb-aa3efa251168_1600x963.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Diagrama funcionamiento Load Balancer</figcaption></figure></div><p>Aqu&#237; es donde entra el <a href="/__u/lvrpiz.substack.com/p/prompt-caching-como-dejar-de-tirar">prompt caching</a>. Esta t&#233;cnica es la que reduce los costes de los tokens de entrada entre un 50% y un 90%. Adem&#225;s, recorta el tiempo hasta el primer token (<a href="/__u/lvrpiz.substack.com/p/prompt-caching-como-dejar-de-tirar">TTFT</a>) hasta en un 80%.</p><p>El problema es que estos ahorros de costes asumen que la petici&#243;n del usuario llega exactamente a la r&#233;plica (servidor) que ya tiene ese prefijo de contexto concreto almacenado en su cach&#233;.</p><p>F&#237;jate en lo que pasa si usas un balanceador aleatorio o un round-robin ingenuo en una flota de N r&#233;plicas. <strong>Tu probabilidad de aprovechar la cach&#233; es de 1 dividido entre N</strong>.</p><p>Es decir, a medida que escalas tu infraestructura para soportar m&#225;s tr&#225;fico, la eficiencia de cach&#233; cae en picado de forma lineal. <strong>El balanceador cl&#225;sico no sabe qu&#233; hay en la memoria de cada nodo</strong>, as&#237; que termina enviando peticiones ciegas a m&#225;quinas que no tienen el contexto del usuario.</p><p></p><h2>C&#243;mo procesan los tokens los motores de inferencia: Prefill y Decode</h2><p>Para entender c&#243;mo solucionar el enrutamiento, primero hay que entender qu&#233; pasa dentro de motores de inferencia como vLLM, SGLang o TensorRT. Cuando lanzas una petici&#243;n HTTP, el motor ejecuta <strong>dos fases muy diferenciadas</strong>.</p><ul><li><p>La primera es la fase de <strong>Prefill</strong>. Aqu&#237; el prompt se tokeniza y se procesa de golpe en una sola pasada hacia adelante. Es una fase que requiere mucha capacidad de c&#225;lculo bruto. Durante este paso se calculan los tensores Key y Value (KV) especiales y se devuelve el primer token de salida.</p></li><li><p>La segunda es la fase de <strong>Decode</strong>. Este es el bucle auto-regresivo donde se genera un token, se actualizan los tensores KV, y se repite hasta llegar al l&#237;mite de longitud o al token de fin de secuencia. A diferencia del Prefill, el Decode est&#225; limitado casi exclusivamente por el ancho de banda de la memoria de la GPU, no por el c&#243;mputo puro.</p></li></ul><p></p><div><hr></div><p>Enviar peticiones a servidores al azar es tirar dinero y recursos. La industria de la IA para solucionar este problema empez&#243; usando el <strong>hashing</strong> aunque seguramente hay&#225;is le&#237;do m&#225;s el t&#233;rmino de <strong>sticky sessions</strong> que consiste en vincular el identificador de un usuario a un servidor en concreto. Funciona bastante bien para historiales de chat largos, pero la primera petici&#243;n del usuario sigue siendo una loter&#237;a y puede caer en una m&#225;quina completamente fr&#237;a.</p><p>La evoluci&#243;n natural de esta soluci&#243;n fue el <strong>enrutamiento consciente de la cach&#233;</strong>. Aqu&#237; el router mantiene una estructura de datos, para cada instancia de tal mod que cuando llega un prompt, itera sobre la estructura de datos para encontrar la instancia con el prefijo coincidente m&#225;s largo.</p><p>Esta soluci&#243;n puede sonar genial en la teor&#237;a, pero en la pr&#225;ctica no funciona tan bien ya que genera desincronizaci&#243;n.</p><p></p><h2>El enrutamiento preciso de prefijos</h2><p>Para solucionar este problema de desincronizaci&#243;n entra en juego <strong>el enrutamiento preciso de prefijos</strong> conscientes de la cach&#233; (<a href="https://github.com/llm-d/llm-d/blob/main/guides/precise-prefix-cache-aware/README.md">precise prefix cache-aware routing</a>).</p><p>La diferencia respecto al resto de soluciones es que este sistema elimina las suposiciones por completo. En lugar de que el router adivine qu&#233; tiene cada servidor en su memoria, <strong>captura eventos reales de la KV cach&#233;</strong>. Es decir, los propios motores de inferencia avisan al router en tiempo real sobre qu&#233; informaci&#243;n guardan y cu&#225;l descartan.</p><p>Pero claro, para aprovechar esta precisi&#243;n y saber exactamente a qu&#233; m&#225;quina enviar la petici&#243;n, el router tiene que comunicarse con las GPUs por lo que debe asumir un peque&#241;o trabajo extra que consiste en tokenizar el prompt de entrada antes de buscar la coincidencia de prefijos en su &#225;rbol de datos.</p><p>A&#241;adir este paso de procesamiento en el balanceador podr&#237;a parecer una mala idea, pero tokenizar es una muy barata a nivel computacional. Si lo comparamos con el tiempo y dinero que cuesta hacer la fase de inferencia completa por haber mandado la petici&#243;n a una m&#225;quina fr&#237;a, el balance final compensa:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-EWX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 424w, /__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 848w, /__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-EWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png" width="1456" height="641" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:641,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;image alt text&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="image alt text" title="image alt text" srcset="/__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 424w, /__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 848w, /__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-EWX!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa045850a-bd52-4c2b-bdad-a1530383af59_1554x684.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>En los benchmarks de la comunidad, este tipo de enrutamiento logra aumentar el rendimiento hasta un 108% (usando la misma configuraci&#243;n de hardware), simplemente asegurando que cada petici&#243;n llega donde ya existe el contexto.</p><p></p><h2>Servidores desagregados para secuencias kilom&#233;tricas</h2><p>Llega un punto donde tener el router perfecto no es suficiente. Imag&#237;nate que le inyectas a un modelo un documento enorme de unos 100.000 tokens de contexto solo para generar una respuesta corta de 1.000 tokens, un caso extremo.</p><p>La fase inicial de procesar todo ese texto de golpe (<strong>Prefill</strong>) requiere mucha fuerza bruta de c&#225;lculo pero luego la fase de generar la respuesta token por token (<strong>Decode</strong>) no necesita tanta capacidad de c&#225;lculo, pero exige una memoria muy r&#225;pida. Si usas el mismo tipo de GPU para las dos tareas, estar&#225;s desperdiciando recursos.</p><p>La soluci&#243;n para optimizar esto a gran escala es el <strong>serving desagregado</strong>. La idea consiste en separar f&#237;sicamente las m&#225;quinas para que <strong>unas se dediquen en exclusiva a procesar la entrada</strong> y <strong>otras solo a generar la salida</strong>.</p><p>Pero claro, la m&#225;quina que escribe la respuesta necesita disponer del contexto (la <strong>cach&#233; KV</strong>) que acaba de calcular la m&#225;quina que proces&#243; la entrada. Mover toda esta informaci&#243;n de un servidor a otro tiene que hacerse a una velocidad muy r&#225;pida para evitar latencia. Para lograrlo la industria utiliza tecnolog&#237;as de transferencia por red muy espec&#237;ficas como <a href="https://developer.nvidia.com/nccl">NCCL de Nvidia</a> o <a href="https://rocm.docs.amd.com/projects/rccl/en/latest/">RCCL de AMD</a>.</p><p>Por muy avanzado que sea el cable de red, <strong>transferir datos de un equipo a otro siempre ser&#225; m&#225;s lento que leerlos directamente de la memoria local de una GPU</strong>. Por eso <strong>esta separaci&#243;n f&#237;sica solo compensa cuando los contextos de entrada son extremadamente grandes</strong>. Si trabajas con secuencias peque&#241;as o interacciones de chat normales, el tiempo que se pierde moviendo la cach&#233; por la red perjudica el rendimiento. En la gran mayor&#237;a de casos comunes, es mucho m&#225;s r&#225;pido dejar que una sola m&#225;quina haga todo el trabajo.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://www.digitalocean.com/blog/load-balancing-scaling-llm-serving">Load Balancing and Scaling LLM Serving</a> - An&#225;lisis t&#233;cnico detallado sobre el funcionamiento de las fases de inferencia, estrategias de enrutamiento basado en &#225;rboles Radix y arquitectura desagregada.</p></li></ol><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Crea tu Wiki personal usando LLMs: Estructura tu conocimiento]]></title><description><![CDATA[Descubre la arquitectura de tres capas para organizar tus fuentes, notas y esquemas de forma que la inteligencia artificial trabaje por ti]]></description><link>https://lvrpiz.substack.com/p/crea-tu-wiki-personal-usando-llms</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/crea-tu-wiki-personal-usando-llms</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 22 Apr 2026 14:59:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PTJ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Imagina que tuvieras todas tus notas en un sistema tipo Obsidian y pudieras montar un sistema RAG para intentar organizar todo y hacer preguntas a una IA, la inteligencia artificial tiene que buscar los fragmentos de texto, unirlos y responderte desde cero. Si le preguntas algo relacionado ma&#241;ana, vuelve a hacer exactamente el mismo proceso. Es ineficiente y el sistema no acumula contexto real sobre tus cosas.</p><p>Hace poco <a href="/__u/lvrpiz.substack.com/p/autoresearch-el-agente-de-andrej">Andrej Karpathy</a> del que ya os he hablado varias veces en el blog, comparti&#243; una idea sobre c&#243;mo est&#225; utilizando los LLMs &#250;ltimamente y me encant&#243;.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>En lugar de usar herramientas de recuperaci&#243;n de datos o bases de datos vectoriales, est&#225; usando modelos locales para construir y mantener una base de conocimiento personal en formato texto plano.</p><p>&#201;l lo llama una <a href="https://x.com/karpathy/status/2039805659525644595?s=46">LLM Wiki</a>. La premisa es que t&#250; te encargas de investigar y el <strong>modelo se encarga de hacer el trabajo sucio de mantener los enlaces, crear res&#250;menes y estructurar la informaci&#243;n</strong>. He estado probando este sistema durante las &#250;ltimas semanas y hoy vengo a explicarte por qu&#233; t&#250; tambi&#233;n deber&#237;as.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PTJ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PTJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44138,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/194166612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!PTJ7!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd36aff-bc26-4a27-bf1f-faaf38c8fdab_1200x630.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>Este sistema sustituye los flujos tradicionales de RAG por una <strong>base de conocimiento persistente donde el modelo de lenguaje act&#250;a como bibliotecario automatizado de tus archivos locales</strong>. En lugar de buscar en documentos cada vez que preguntas algo, el modelo compila, enlaza y mantiene notas estructuradas que crecen con el tiempo.</p><ul><li><p>Los <strong>documentos originales</strong> se guardan en una carpeta de fuentes y <strong>nunca se modifican</strong>.</p></li><li><p>El modelo lee esas fuentes, extrae la informaci&#243;n clave y <strong>genera p&#225;ginas de la wiki en formato Markdown conectadas entre s&#237;</strong>.</p></li><li><p>Utilizas <a href="https://obsidian.md">Obsidian</a> como entorno visual para leer y navegar por el grafo de conocimiento que la m&#225;quina ha creado.</p></li><li><p>Empleas agentes de terminal como Claude Code para <strong>ejecutar consultas</strong>, generar nuevos documentos y realizar tareas de mantenimiento directamente sobre tu sistema de archivos.</p></li></ul><p></p><h2>&#191;Por qu&#233; el RAG tradicional no es eficiente para este problema?</h2><p>La inmensa mayor&#237;a de las implementaciones que vemos hoy en d&#237;a para interactuar con documentos funcionan bajo el mismo patr&#243;n de <a href="https://aws.amazon.com/es/what-is/retrieval-augmented-generation/">Retrieval-Augmented Generation</a> o RAG de hecho herramientas como NotebookLM o la subida de archivos de ChatGPT operan as&#237;. Tienes un mont&#243;n de documentos, haces una consulta, el sistema busca los p&#225;rrafos m&#225;s similares sem&#225;nticamente, los inyecta en el contexto y te da una respuesta.</p><p>Esto <strong>funciona bien para consultas puntuales</strong>, pero tiene un fallo de dise&#241;o cuando se trata de conocimiento personal que evoluciona: el <strong>modelo redescubre la informaci&#243;n desde cero en cada consulta</strong>. <strong>No hay acumulaci&#243;n de saber.</strong> Si haces una pregunta sutil que requiere sintetizar cinco documentos distintos, el sistema tiene que encontrar y unir esos fragmentos en ese preciso instante. Nada se construye a largo plazo.</p><p>La idea de la LLM Wiki es que en lugar de recuperar informaci&#243;n de los documentos tal cual en el momento de la consulta, e<strong>l modelo construye de forma incremental y mantiene una wiki persistente</strong>. </p><p>Cuando a&#241;ades un nuevo art&#237;culo sobre un tema a tus notas, <strong>el modelo no se limita a indexarlo para buscarlo luego</strong>. Lo lee, <strong>extrae la informaci&#243;n clave</strong> y la integra en la wiki existente. Actualiza las p&#225;ginas de los conceptos, revisa los res&#250;menes de los temas, anota d&#243;nde los nuevos datos contradicen afirmaciones antiguas y fortalece la s&#237;ntesis general. <strong>El conocimiento se compila una sola vez y se mantiene actualizado</strong>.</p><p>&#128073;&#127995; La <strong>wiki es un artefacto compuesto y persistente</strong>. Las referencias cruzadas ya est&#225;n hechas. Y lo mejor de todo es que t&#250; casi nunca escribes en la wiki. <strong>El modelo escribe y mantiene todo</strong>. T&#250; te encargas del abastecimiento de datos, la exploraci&#243;n y de hacer las preguntas correctas. El modelo hace el trabajo de crear la base de conocimiento para sea realmente &#250;til con el paso de los meses.</p><p></p><h2>&#191;Por qu&#233; usamos Markdown?</h2><p>La mayor&#237;a de aplicaciones de notas est&#225;n dise&#241;adas para la lectura humana, est&#225;n optimizadas para que t&#250; encuentres las cosas manualmente.</p><p>Una LLM Wiki est&#225; optimizada para que el modelo lea en tu nombre. Ese peque&#241;o cambio de paradigma cambia c&#243;mo estructuramos la informaci&#243;n. El modelo no entiende de carpetas de colores, etiquetas visuales o bases de datos relacionales bloqueadas tras una interfaz web. <strong>El modelo lee texto. Por tanto, el Markdown, que no deja de ser texto plano con una sintaxis m&#237;nima, es el formato perfecto.</strong></p><p>Adem&#225;s, la mayor&#237;a de los modelos han sido entrenados con cantidades masivas de <a href="https://arxiv.org/html/2501.15000v1">contenido en Markdown</a> procedente de repositorios de GitHub, documentaci&#243;n t&#233;cnica y foros. La sintaxis es parte nativa de su comprensi&#243;n. Un encabezado, una lista de vi&#241;etas, un bloque de c&#243;digo o un texto en negrita son interpretados por el modelo como estructura jer&#225;rquica pura, no como ruido visual.</p><p></p><h2>La arquitectura de LLM Wiki: Fuentes, Wiki y Esquema</h2><p>Karpathy propone una arquitectura minimalista pero muy estricta basada en tres capas l&#243;gicas para que sea un sistema que no se vuelva un caos a los meses de usarlo.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NarF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NarF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188594,&quot;alt&quot;:&quot;Arquitectura de LLM Wiki: Fuentes, Wiki y Esquema&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/194166612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Arquitectura de LLM Wiki: Fuentes, Wiki y Esquema" title="Arquitectura de LLM Wiki: Fuentes, Wiki y Esquema" srcset="/__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!NarF!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4da140f-b1fe-4367-ada3-9e30eac888c6_2816x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Arquitectura de LLM Wiki: Fuentes, Wiki y Esquema (Generado con IA)</figcaption></figure></div><ol><li><p><strong>La primera capa son las fuentes originales.</strong> Esta es tu colecci&#243;n curada de documentos originales. Pueden ser art&#237;culos web descargados, papers en PDF, repositorios de c&#243;digo, im&#225;genes o archivos de datos. <strong>Esta carpeta es inmutable</strong>. El modelo lee de aqu&#237; pero <strong>jam&#225;s modifica un archivo de esta carpeta</strong>. Es tu fuente de verdad absoluta.</p></li><li><p><strong>La segunda capa es la wiki en s&#237; misma</strong>. Es un directorio lleno de archivos Markdown <strong>generados &#237;ntegramente por el modelo</strong>. Aqu&#237; encontrar&#225;s res&#250;menes, p&#225;ginas de entidades, p&#225;ginas de conceptos t&#233;cnicos, tablas comparativas y documentos de s&#237;ntesis. El modelo es el due&#241;o absoluto de esta capa. Crea p&#225;ginas, las actualiza cuando llegan nuevas fuentes, mantiene los enlaces internos y asegura la consistencia. </p></li><li><p><strong>La tercera capa es el esquema</strong>. Este es el cerebro del sistema operativo. Consiste en un archivo de configuraci&#243;n, t&#237;picamente llamado CLAUDE.md si usas la herramienta de Anthropic, que le dice al modelo c&#243;mo est&#225; estructurada la wiki, cu&#225;les son las convenciones de nombrado y qu&#233; flujos de trabajo debe seguir al procesar fuentes o responder preguntas. T&#250; y el modelo evolucion&#225;is este archivo con el tiempo a medida que descubres qu&#233; funciona mejor para tus necesidades concretas.</p></li></ol><p></p><h2>C&#243;mo operan los modelos sobre tu sistema de ficheros</h2><p>El valor de LLM Wiki viene de las operaciones que el modelo ejecuta sobre los documentos originales. Existen tres flujos de trabajo principales que automatizan casi por completo la gesti&#243;n del conocimiento.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kqhZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kqhZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:285281,&quot;alt&quot;:&quot;Operaciones del modelo sobre tu sistema de archivos&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/194166612?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Operaciones del modelo sobre tu sistema de archivos" title="Operaciones del modelo sobre tu sistema de archivos" srcset="/__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!kqhZ!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45c74cbd-6755-476a-8797-6af8b1f54412_2816x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Operaciones del modelo sobre tu sistema de archivos (Generado con IA)</figcaption></figure></div><ol><li><p>La <strong>ingesta de datos</strong>. Dejas un paper, PDF o lo que sea en la carpeta y le dices al agente de terminal que la procese. El flujo normal ser&#237;a que el modelo lea el documento, discuta contigo las conclusiones clave, escriba una p&#225;gina de resumen en la wiki, actualice el archivo de &#237;ndice general, modifique las p&#225;ginas de conceptos relevantes en toda la wiki y finalmente a&#241;ada una entrada al registro de actividad.</p></li><li><p>Las <strong>consultas</strong>. Le haces preguntas al modelo contra el directorio de la wiki. El agente busca las p&#225;ginas relevantes, las lee y sintetiza una respuesta con citas directas a tus propios archivos. Aqu&#237; es donde las respuestas no tienen por qu&#233; ser simplemente texto en la terminal. Puedes pedirle que genere un nuevo archivo Markdown con la respuesta, que cree una presentaci&#243;n de diapositivas usando el formato Marp, o que genere un script en Python que pinte un gr&#225;fico con matplotlib basado en los datos de tus notas. </p></li><li><p><strong>Mantenimiento y linting</strong>. Peri&#243;dicamente, le pides al modelo que haga un chequeo de de toda la wiki. Le pides que busque contradicciones entre p&#225;ginas, afirmaciones obsoletas que hayan sido superadas por fuentes m&#225;s recientes, p&#225;ginas hu&#233;rfanas sin enlaces entrantes, conceptos importantes que se mencionan mucho pero no tienen su propia p&#225;gina dedicada, o huecos de informaci&#243;n que podr&#237;an requerir una b&#250;squeda en internet.</p></li></ol><p>Para facilitar todo esto, el sistema depende de dos archivos de control:</p><ul><li><p>Un archivo <strong>index.md</strong> que act&#250;a como un cat&#225;logo de todo el contenido, organizado por categor&#237;as y con res&#250;menes de una l&#237;nea. El modelo lee este &#237;ndice primero para saber d&#243;nde buscar sin tener que procesar gigabytes de texto.</p></li><li><p>Archivo <strong>log.md</strong> que es un registro cronol&#243;gico de todo lo que ha pasado. Si cada entrada del log empieza con un prefijo consistente, puedes usar herramientas de terminal b&#225;sicas para revisarlo.</p></li></ul><p></p><h2>Gu&#237;a paso a paso: Construye tu LLM Wiki con Obsidian y Claude Code</h2><p>Implementar todo esto que te he contado es r&#225;pido y no necesitas configurar nada complejo como en otras soluciones. Vamos a montar un entorno funcional en menos de cinco minutos utilizando <strong>Obsidian como interfaz gr&#225;fica</strong> y <strong>Claude Code como motor de procesamiento</strong>.</p><p>(1) Lo primero es instalar Obsidian y crear tu vault. Descargas la aplicaci&#243;n desde su web oficial y creas un nuevo vault en una carpeta accesible de tu equipo (en Obsidian, un vault no es m&#225;s que una carpeta normal del sistema operativo)</p><p>(2) El segundo paso es <strong>definir una plantilla base</strong>. La consistencia es lo que permite que el modelo pueda consultar los datos de forma fiable. Crea una carpeta llamada _templates y dentro un archivo note.md con una estructura estandarizada. Algo como esto:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;ee172f5e-64d5-4df1-83cd-4fbe26bab1c9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># {{title}}

**Resumen**: Una sola frase describiendo el contenido de esta nota.
**Etiquetas**: #tema1 #tema2
**Fecha de creaci&#243;n**: {{date}}
**&#218;ltima actualizaci&#243;n**: {{date}}

---

## Contenido
Desarrollo principal de la nota.

## Notas relacionadas
- [[T&#237;tulo de otra nota]]
</code></pre></div><p>No hace falta que uses exactamente esta estructura, ad&#225;ptalo a tus necesidades pero es <strong>muy importante</strong> que cada nota tenga una l&#237;nea de <strong>resumen</strong> y etiquetas en la cabecera. Estas peque&#241;as pistas dan al modelo se&#241;ales r&#225;pidas sobre la relevancia de un documento sin obligarle a leer el archivo completo cada vez.</p><p>(3) El tercer paso es <strong>organizar la jerarqu&#237;a b&#225;sica de carpetas</strong>. Empieza con cuatro o cinco carpetas de nivel superior. Una carpeta <strong>_templates</strong> para las plantillas, una carpeta <strong>_fuentes</strong> para los documentos inmutables, una carpeta <strong>proyectos</strong>, una de <strong>investigacion</strong> y finalmente un <strong>inbox</strong>. La carpeta inbox es el caj&#243;n desastre donde tiras notas r&#225;pidas que a&#250;n no est&#225;n procesadas. M&#225;s adelante, el modelo te ayudar&#225; a clasificarlas.</p><p>(4) El cuarto paso es instalar el agente. Necesitas tener Node.js instalado en tu equipo. Abre la terminal y ejecuta el comando de instalaci&#243;n de Claude Code.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;5fd31c61-d3bb-4574-aec6-98ea50d9b9fd&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">npm install -g @anthropic-ai/claude-code
</code></pre></div><p>Una vez instalado, te pedir&#225; que te autentiques con tu cuenta de Anthropic. Este agente funciona directamente en tu terminal y tiene permisos para leer y escribir en el directorio donde lo ejecutes.</p><p>(5) El &#250;ltimo paso es empezar a consultar tu wiki. Navegas con la terminal hasta la carpeta de tu vault y lanzas el agente.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;92265cf5-b689-4ee7-9358-89d37f33d840&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">cd ~/Documentos/llm-wiki
claude</code></pre></div><p>A partir de este momento, puedes empezar a darle &#243;rdenes. Puedes pedirle cosas como: <em>&#8220;Revisa todos los documentos de la carpeta de investigaci&#243;n relacionados con Kubernetes y hazme un resumen comparativo de las herramientas mencionadas, guardando el resultado en un nuevo archivo llamado comparativa-k8s.md&#8221;.</em> El agente leer&#225; los archivos, procesar&#225; la informaci&#243;n, redactar&#225; el documento y lo guardar&#225; en tu disco. Si tienes Obsidian abierto a un lado de la pantalla, ver&#225;s aparecer el archivo en tiempo real.</p><p></p><h2>Buenas pr&#225;cticas para estructurar tus notas y evitar alucinaciones</h2><p>A medida que tu base de datos crezca, la calidad de las respuestas del modelo depender&#225; directamente de c&#243;mo est&#233;n tus archivos. Aqu&#237; te dejo varias claves que comparte Karpathy:</p><ul><li><p>Escribir <strong>res&#250;menes expl&#237;citos</strong> es probablemente la pr&#225;ctica m&#225;s rentable. Cuando haces una consulta grande, el modelo a menudo lee primero las cabeceras de muchos archivos para decidir cu&#225;les merecen una lectura profunda. <strong>Un buen resumen te cuesta diez segundos escribirlo y ahorra un mont&#243;n de tokens y tiempo de inferencia evitando lecturas innecesarias</strong>.</p></li><li><p>La <strong>consistencia terminol&#243;gica</strong> es otro factor clave. Si en unas notas escribes K8s y en otras Kubernetes, los modelos actuales son lo bastante inteligentes para conectarlo la mayor&#237;a de las veces, pero obtendr&#225;s resultados mucho m&#225;s limpios y un grafo de conocimiento m&#225;s robusto si eliges un t&#233;rmino y lo mantienes.</p></li><li><p>Obliga al modelo a enlazar las notas entre s&#237;. El formato de enlaces de Obsidian usando dobles corchetes <code>[[Nombre de la nota]]</code> crea conexiones expl&#237;citas. Un modelo navegando por tu sistema de archivos puede seguir estas conexiones. <strong>Una wiki bien enlazada le da a la m&#225;quina un grafo relacional rico sobre el que razonar,</strong> en lugar de una simple colecci&#243;n plana de archivos aislados.</p></li><li><p>Mant&#233;n las <strong>notas enfocadas en un solo tema</strong>. Un documento enorme de diez mil palabras que abarca cinco proyectos distintos es una pesadilla para el an&#225;lisis posterior. Si una nota empieza a cubrir m&#250;ltiples conceptos claramente diferenciados, p&#237;dele al modelo que la divida en archivos m&#225;s peque&#241;os e interconectados. <strong>Cuanto m&#225;s espec&#237;fica sea cada p&#225;gina, con mayor precisi&#243;n podr&#225; el modelo localizarla y aplicar su contenido a tus futuras preguntas.</strong></p></li></ul><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview">Claude Code Documentation</a> - Gu&#237;a oficial de instalaci&#243;n y uso del agente de terminal de Anthropic.</p></li><li><p><a href="https://obsidian.md/">Obsidian</a> - Entorno de desarrollo y visualizaci&#243;n de conocimiento en formato Markdown local.</p></li><li><p><a href="https://marp.app/">Marp for VS Code / Obsidian</a> - Ecosistema de herramientas para crear presentaciones t&#233;cnicas directamente desde archivos Markdown.</p></li><li><p><a href="https://github.com/blacksmithgu/obsidian-dataview">Dataview Plugin GitHub Repository</a> - Documentaci&#243;n t&#233;cnica del motor de consultas y visualizaci&#243;n de metadatos para Obsidian.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[La actualización más importante de AWS S3]]></title><description><![CDATA[Amazon anuncia S3 Files, haciendo los buckets S3 sean accesibles como sistemas de archivos]]></description><link>https://lvrpiz.substack.com/p/la-actualizacion-mas-importante-de</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/la-actualizacion-mas-importante-de</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 15 Apr 2026 15:02:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TgjX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>S3 es almacenamiento de <strong>objetos</strong>, <strong>no un sistema de ficheros</strong>, por lo tanto, no se puede montar como si fuera un disco duro normal en una EC2 y si quer&#237;as hacerlo te tocaba pelearte con herramientas de terceros que se ca&#237;an cada dos por tres o reescribir tu c&#243;digo para usar la API oficial.</p><p>La semana pasada, AWS lanz&#243; oficialmente <strong>Amazon S3 Files</strong>. Y la comunidad ya est&#225; diciendo que es la actualizaci&#243;n m&#225;s grande e importante que ha recibido S3 en sus veinte a&#241;os de historia. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Despu&#233;s de estudiar y probar esta actualizaci&#243;n te cuento qu&#233; es AWS S3 Files, c&#243;mo funciona, c&#243;mo usarlo y por qu&#233; es tan importante como dicen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TgjX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TgjX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31726,&quot;alt&quot;:&quot;AWS S3 Files Actualizaci&#243;n 2026&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/193881825?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AWS S3 Files Actualizaci&#243;n 2026" title="AWS S3 Files Actualizaci&#243;n 2026" srcset="/__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!TgjX!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F864e532d-3b42-42ac-b757-2e02a7c36b28_1200x630.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AWS S3 Files Actualizaci&#243;n 2026</figcaption></figure></div><p></p><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p><strong>Amazon S3 Files sirve para montar buckets de S3 como sistemas de ficheros nativos en tus instancias EC2</strong>, contenedores o funciones Lambda, eliminando la necesidad de herramientas de terceros o sincronizaciones complejas.</p><p>Las ideas clave de esta actualizaci&#243;n son:</p><ul><li><p>AWS permite ahora acceso completo de sistema de ficheros a tus buckets de S3, reflejando autom&#225;ticamente los cambios en el almacenamiento de objetos.</p></li><li><p>Funciona utilizando Amazon EFS por debajo para ofrecer latencias de submilisegundo en los datos activos.</p></li><li><p>Soporta operaciones <strong>NFS v4.1+</strong> y permisos POSIX nativos (UID/GID), integr&#225;ndose directamente con IAM y KMS.</p></li><li><p>Es ideal para sistemas de IA ag&#233;nticos y pipelines de machine learning que necesitan mutar datos de forma compartida sin duplicarlos.</p></li><li><p>Se configura <strong>creando un sistema de ficheros</strong> y puntos de montaje en tu VPC, accesibles mediante comandos est&#225;ndar de Linux.</p></li></ul><p></p><h2>El problema hist&#243;rico con el almacenamiento de objetos</h2><p>Para entender por qu&#233; este lanzamiento es tan importante, tenemos que dar un paso atr&#225;s y ver c&#243;mo hemos estado trabajando hasta ahora. Estamos acostumbrados a interactuar con ficheros en nuestro ordenador. Abres un archivo, modificas una l&#237;nea, lo guardas y listo.</p><p>Pero <strong>Amazon S3 nunca ha funcionado as&#237;</strong>. S3 es un almac&#233;n de objetos. Como explicaba el propio equipo de AWS, la mejor analog&#237;a es comparar los objetos de S3 con los libros de una biblioteca. Si quieres editar una p&#225;gina de un libro en esa biblioteca, no puedes ir con un bol&#237;grafo y cambiarla: tienes que sacar el libro entero, escribir un libro nuevo con la correcci&#243;n y poner el libro nuevo en la estanter&#237;a sustituyendo al anterior. En cambio, los ficheros de tu ordenador s&#237; te permiten modificar p&#225;gina a p&#225;gina.</p><p>Si ten&#237;as una aplicaci&#243;n legacy que escrib&#237;a logs a&#241;adiendo l&#237;neas al final de un fichero, no pod&#237;as apuntarla a S3 directamente. Ten&#237;as que usar un disco EBS, llenar el disco y luego hacer un volcado peri&#243;dico al bucket.</p><p></p><h2>Qu&#233; es exactamente Amazon S3 Files</h2><p>Lo que <a href="https://aws.amazon.com/es/blogs/aws/launching-s3-files-making-s3-buckets-accessible-as-file-systems/">AWS ha presentado con S3 Files</a> es el primer y &#250;nico almac&#233;n de objetos en la nube que ofrece acceso completo y de alto rendimiento como sistema de ficheros. B&#225;sicamente, <strong>hace que tus buckets sean accesibles como sistemas de ficheros nativos</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!5TgL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 424w, /__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 848w, /__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5TgL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Amazon S3 Files&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Amazon S3 Files" title="Amazon S3 Files" srcset="/__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 424w, /__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 848w, /__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5TgL!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043b7f31-f9fe-44c4-9932-55ceaa9b2f1e_4000x2250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Esto significa que a partir de ahora, S3 se convierte en un centro de datos real que es <strong>accesible directamente desde cualquier instancia de computaci&#243;n, contenedor o funci&#243;n en AWS</strong>. Cualquier cambio que hagas en los datos a trav&#233;s del sistema de ficheros se refleja autom&#225;ticamente en el bucket de S3, y adem&#225;s tienes control detallado sobre c&#243;mo ocurre esa sincronizaci&#243;n.</p><p>Puedes acceder a cualquier bucket de prop&#243;sito general como un sistema de ficheros nativo desde tus instancias Amazon EC2, contenedores corriendo en Amazon ECS o Amazon EKS, o incluso funciones AWS Lambda. El sistema presenta tus objetos de S3 como ficheros y directorios normales, soportando todas las operaciones del protocolo Network File System (NFS) v4.1 y superiores. <strong>Puedes crear, leer, actualizar y borrar ficheros exactamente igual que har&#237;as en tu terminal de Linux local</strong>.</p><p></p><h2>C&#243;mo funciona la arquitectura de AWS S3 Files</h2><p>AWS no ha reinventado nada sino que ha combinado dos de sus servicios m&#225;s robustos de una forma muy inteligente. S3 Files utiliza la tecnolog&#237;a de Amazon Elastic File System (Amazon <strong>EFS</strong>) para entregar latencias cercanas al milisegundo para los datos activos.</p><p>Cuando trabajas con ficheros y directorios espec&#237;ficos a trav&#233;s de este nuevo montaje, los metadatos y el contenido de esos ficheros se colocan en un almacenamiento de alto rendimiento propio del sistema de ficheros. Por defecto, los ficheros que se benefician de un acceso de baja latencia se almacenan y se sirven desde esta capa r&#225;pida.</p><p>Peeero, AWS sabe que mover terabytes de datos a una capa r&#225;pida es caro e ineficiente si no los vas a usar todos a la vez. Por eso, para los ficheros que no est&#225;n almacenados en la capa de alto rendimiento, como aquellos que necesitan grandes lecturas secuenciales, <strong>S3 Files los sirve autom&#225;ticamente de forma directa desde Amazon S3 para maximizar el ancho de banda</strong>.</p><p>Para las lecturas de rangos de bytes espec&#237;ficos el sistema solo transfiere los bytes solicitados, minimizando el movimiento de datos. Si tienes un fichero de video de 50 GB y tu aplicaci&#243;n solo necesita leer los metadatos de la cabecera, no te descargas los 50 GB por ejemplo.</p><p>Adem&#225;s, el sistema soporta un mecanismo inteligente de pre-fetching para anticiparse a tus necesidades de acceso a los datos. Te da control granular sobre qu&#233; se almacena en la capa de alto rendimiento, permiti&#233;ndote decidir si quieres cargar los datos completos del fichero o &#250;nicamente sus metadatos. Esto te permite optimizar el sistema para tus patrones de acceso espec&#237;ficos.</p><p></p><h2>C&#243;mo impacta AWS S3 Files a los Agentes de IA y Machine Learning</h2><p>Todo esto de los sistemas de ficheros est&#225; muy bien para aplicaciones legacy, pero donde S3 Files creo que va a destacar mucho es en el desarrollo de Inteligencia Artificial.</p><p>Piensa en c&#243;mo funcionan los agentes de IA hoy en d&#237;a. Si est&#225;s construyendo un sistema ag&#233;ntico, probablemente est&#233;s usando herramientas que dependen de librer&#237;as de Python. Librer&#237;as como Pandas, NumPy o utilidades de l&#237;nea de comandos esperan interactuar con un disco local. Esperan poder hacer un simple open() y leer un archivo CSV.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!cm2D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!cm2D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Amazon S3 Files&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Amazon S3 Files" title="Amazon S3 Files" srcset="/__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!cm2D!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15220767-fee8-4d8a-89c9-6c109d85aea5_1280x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Antes, para que tu agente leyera un dataset de S3, ten&#237;as que escribir c&#243;digo con la librer&#237;a <a href="https://aws.amazon.com/es/sdk-for-python/">Boto3</a> para descargar el objeto, guardarlo en el disco temporal de la instancia, procesarlo con el agente y luego volver a subir el resultado. </p><p>Ahora, con S3 Files, los agentes de IA pueden colaborar a trav&#233;s de herramientas basadas en ficheros leyendo y escribiendo directamente en el montaje <strong>como si fuera un disco local.</strong> Ahora podemos <strong>acceder a esos mismos objetos a trav&#233;s de la API est&#225;ndar de S3 mientras los agentes mutan la informaci&#243;n</strong>.</p><p>Para los pipelines de entrenamiento de Machine Learning todo vuelve a cambiar cuando queremos procesar datasets inmensos de forma colaborativa. Ahora tienes acceso compartido a trav&#233;s de cl&#250;steres de computaci&#243;n sin tener que duplicar los datos. El pipeline de ML entrena leyendo directamente de la ruta montada, con latencias de submilisegundo, y los resultados o los pesos del modelo se escriben directamente en el mismo directorio, sincroniz&#225;ndose autom&#225;ticamente con el bucket.</p><p></p><h2>C&#243;mo probar y montar tu primer bucket de S3 Files</h2><p>Crear el primer sistema de ficheros de Amazon S3, montarlo y usarlo desde una instancia EC2 es un proceso bastante directo.</p><p>AWS permite hacer esto mediante la consola de administraci&#243;n, a trav&#233;s de la interfaz de l&#237;nea de comandos (AWS CLI) o utilizando infraestructura como c&#243;digo (IaC). Vamos a repasar el flujo usando la consola para entender bien las piezas involucradas. Este es el diagrama de arquitectura de ejemplo que seguir&#233; de AWS:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!AiXU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 424w, /__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 848w, /__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!AiXU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png" width="1024" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;S3 Files demo architecture&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="S3 Files demo architecture" title="S3 Files demo architecture" srcset="/__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 424w, /__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 848w, /__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AiXU!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa42f414-f394-4ae5-b058-9edfae9fb18c_1024x596.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Paso 1: Crear el sistema de ficheros en la consola</h3><p>Lo primero que necesitas es tener una instancia EC2 y un bucket de prop&#243;sito general ya creados.</p><p>Te vas a la secci&#243;n de Amazon S3 en la consola de AWS. All&#237; ver&#225;s una nueva opci&#243;n llamada File systems (Sistemas de ficheros). Haces clic ah&#237; y luego seleccionas Create file system.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ACbc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 424w, /__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 848w, /__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ACbc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png" width="1024" height="581" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:581,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;S3 Files create file system&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="S3 Files create file system" title="S3 Files create file system" srcset="/__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 424w, /__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 848w, /__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ACbc!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f3fa42-b793-4f19-bf14-c199c9aad057_1024x581.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>El sistema te pedir&#225; que <strong>introduzcas el nombre del bucket que quieres exponer como un sistema de ficheros.</strong> Simplemente pones el nombre de tu bucket y confirmas la creaci&#243;n.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!y4Z2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 424w, /__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 848w, /__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!y4Z2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png" width="1024" height="526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:526,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;S3 Files create file system, part 2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="S3 Files create file system, part 2" title="S3 Files create file system, part 2" srcset="/__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 424w, /__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 848w, /__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y4Z2!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb3a967-80cb-4ce4-90d8-b08cbfafa307_1024x526.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3>Paso 2: Configurar los puntos de montaje en tu red</h3><p>Aqu&#237; entra en juego la parte de red. Para que tu servidor pueda hablar con este nuevo sistema de ficheros, necesitas un target de montaje (mount target). Un <strong>mount target</strong> es un <strong>endpoint de red que vivir&#225; dentro de tu Nube Privada Virtual (VPC) y es lo que permite que tu instancia EC2 acceda al sistema de ficheros de S3</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!M4cU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 424w, /__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 848w, /__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 1272w, /__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!M4cU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png" width="1024" height="581" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:581,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 424w, /__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 848w, /__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 1272w, /__u/substackcdn.com/image/fetch/$s_!M4cU!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6157a2-b52f-4896-b693-1a33a2d880a6_1024x581.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Si usas la consola web, estos puntos de montaje se crean autom&#225;ticamente. Solo tienes que ir a la pesta&#241;a de Mount targets y apuntar los IDs que se han generado, porque los necesitar&#225;s luego.</p><p></p><h3>Paso 3: Montar el sistema en tu instancia EC2</h3><p>Una vez que tienes el ID del sistema de ficheros y el punto de montaje en tu VPC, te conectas a tu instancia EC2.</p><p>El proceso es id&#233;ntico a montar cualquier otro disco de red en Linux. Primero creas el directorio donde quieres que aparezcan tus datos:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;a5ef4f1c-a9df-443c-8b11-55eca5274226&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">sudo mkdir /home/ec2-user/s3files</code></pre></div><p>Y luego ejecutas el comando de montaje indicando que el tipo es s3files y pasando el <strong>ID de tu sistema de ficheros</strong>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;3b6f588f-78d4-4d49-a602-993ef5176d03&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">sudo mount -t s3files fs-0aa860d05df9afdfe:/ /home/ec2-user/s3files</code></pre></div><p>A partir de ese momento, <strong>puedes trabajar con tus datos de S3 directamente a trav&#233;s de ese directorio montado usando operaciones de fichero est&#225;ndar</strong>.</p><p>Si haces un echo &#8220;Hola&#8221; &gt; s3files/test.txt, el archivo se crea localmente. <strong>S3 gestiona autom&#225;ticamente las actualizaciones y exporta esos cambios como un nuevo objeto (o una nueva versi&#243;n si tienes el versionado activado) de vuelta a tu bucket de S3</strong> en cuesti&#243;n de segundos.</p><p>Si el cambio se hace a la inversa, es decir, si alguien sube un objeto directamente al bucket de S3 v&#237;a API, esos cambios son visibles en el sistema de ficheros montado en unos pocos segundos, aunque a veces puede tardar un minuto o algo m&#225;s en reflejarse seg&#250;n Amazon.</p><p></p><h2>Seguridad, permisos POSIX y monitorizaci&#243;n</h2><p>En cuanto a control de acceso, S3 Files se integra de forma nativa con <strong>IAM</strong> para que puedas utilizar pol&#237;ticas de identidad y pol&#237;ticas de recursos para gestionar los permisos tanto a nivel del sistema de ficheros como a nivel del propio objeto.</p><p>Los <strong>datos siempre viajan cifrados en tr&#225;nsito utilizando el protocolo TLS 1.3.</strong> Para los datos en reposo, el sistema utiliza cifrado mediante claves gestionadas por Amazon S3 (SSE-S3) o mediante claves gestionadas por el cliente utilizando AWS Key Management Service (AWS KMS).</p><p>Un detalle t&#233;cnico importante si vas a usar esto en instancias antiguas: <strong>debes asegurarte de tener instalada la &#250;ltima versi&#243;n del driver de EFS</strong>, el paquete amazon-efs-utils. Si usas las im&#225;genes oficiales de Amazon (AMI), este paquete ya viene preinstalado, pero siempre conviene actualizarlo a la &#250;ltima versi&#243;n disponible.</p><p></p><h2>S3 Files VS. Amazon FSx, &#191;Cu&#225;l elegir?</h2><p>AWS ya tiene muchos servicios de almacenamiento que se solapan entre ellos . Si S3 ahora act&#250;a como un sistema de ficheros, &#191;qu&#233; pasa con Amazon FSx?</p><p>Siguiendo el blog de Amazon, <strong>S3 Files funciona mejor cuando necesitas acceso interactivo y compartido a datos que ya viven o deben vivir en Amazon S3</strong>, utilizando una interfaz de sistema de ficheros de alto rendimiento. Como dec&#237;amos antes, es la opci&#243;n ideal cuando m&#250;ltiples recursos de computaci&#243;n necesitan leer, escribir y mutar datos de forma colaborativa.</p><p>Por otro lado, <strong>Amazon FSx sigue siendo la herramienta adecuada para cargas de trabajo espec&#237;ficas</strong>. Si est&#225;s migrando entornos NAS locales (on-premises) a la nube, FSx te proporciona las caracter&#237;sticas familiares y la compatibilidad estricta que necesitas.</p><p>A nivel de facturaci&#243;n, <strong>con S3 Files vas a pagar por la porci&#243;n de datos que est&#233; almacenada en tu sistema de ficheros</strong>, por las operaciones de <strong>lectura</strong> de ficheros peque&#241;os, por todas las operaciones de <strong>escritura</strong> al sistema de ficheros, y por las peticiones de S3 generadas durante la <strong>sincronizaci&#243;n</strong> de datos entre el sistema de ficheros y el bucket.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://aws.amazon.com/es/blogs/aws/launching-s3-files-making-s3-buckets-accessible-as-file-systems/">Launching S3 Files, making S3 buckets accessible as file systems</a> - Anuncio oficial y gu&#237;a t&#233;cnica de implementaci&#243;n en el blog de AWS.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Prompt caching: Cómo dejar de tirar dinero en cada llamada a la API]]></title><description><![CDATA[Te explico c&#243;mo ahorrar un 90% en tokens de entrada reutilizando el prefill y evitando que la IA procese todo desde cero.]]></description><link>https://lvrpiz.substack.com/p/prompt-caching-como-dejar-de-tirar</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/prompt-caching-como-dejar-de-tirar</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 08 Apr 2026 15:00:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cWom!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!cWom!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!cWom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44440,&quot;alt&quot;:&quot;Prompt caching tutorial 2026&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/193580820?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Prompt caching tutorial 2026" title="Prompt caching tutorial 2026" srcset="/__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 424w, /__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 848w, /__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!cWom!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e11c733-da03-41e4-aebd-4f49d9e3aef2_1200x630.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Prompt caching</figcaption></figure></div><p>&#191;Alguna vez has pensado la cantidad de dinero que tiramos a la basura repitiendo las mismas instrucciones en cada llamada a una API de IA? <strong>Es una de esas ineficiencias que, cuando escalas un proyecto, se convierte en un pozo de dinero en tu factura a tu proveedor de IA</strong>. Llevamos un par de a&#241;os aceptando que, cada vez que enviamos un prompt de 10.000 tokens, el modelo tiene que procesar esos 10.000 tokens desde cero, aunque el 90% del contenido sea exactamente igual al que enviamos hace cinco minutos.</p><p>El prompt caching ha venido a solucionar este problema (por lo menos en parte). Ya no es solo una optimizaci&#243;n t&#233;cnica para que la respuesta tarde menos en salir, es un cambio estructural en c&#243;mo dise&#241;amos la arquitectura de nuestros prompts y c&#243;mo gestionamos el flujo de caja de nuestras aplicaciones. <strong>Si no est&#225;s usando prompt caching, est&#225;s pagando un recargo por desconocimiento t&#233;cnico.</strong></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>El <strong>prompt caching es una t&#233;cnica que permite a los modelos de IA reutilizar el trabajo computacional ya realizado sobre partes de un prompt que se repiten entre diferentes peticiones</strong>. En lugar de recalcular la atenci&#243;n de todo el texto, el sistema guarda un estado matem&#225;tico (KV Cache) del prefijo compartido.</p><ul><li><p>Permite <strong>ahorrar hasta un 90% en los costes de tokens de entrada</strong> y reducir la latencia del primer token (TTFT) en un 80%.</p></li><li><p>Funciona mediante la <strong>coincidencia exacta de prefijos</strong> de al menos 1024 tokens, con incrementos de 128 tokens.</p></li><li><p>La optimizaci&#243;n cr&#237;tica consiste en mantener el contenido est&#225;tico (instrucciones, herramientas, esquemas) al principio y lo vol&#225;til (entrada del usuario) al final.</p></li><li><p>OpenAI permite mejorar la tasa de acierto mediante el par&#225;metro prompt_cache_key, que ayuda a dirigir peticiones similares al mismo servidor f&#237;sico.</p></li></ul><p></p><h2>&#191;Qu&#233; es y c&#243;mo funciona el prompt caching?</h2><p>Para entender por qu&#233; el prompt caching ahorra dinero, hay que bajar un momento al barro de c&#243;mo funciona un Transformer. Cuando env&#237;as un texto a un modelo como GPT-4o o GPT-5, el proceso se divide en dos fases: el prefill y la generaci&#243;n. En el prefill, el modelo lee todo tu prompt de golpe para entender el contexto. Aqu&#237; es donde ocurre el proceso de la atenci&#243;n: <strong>cada token mira a todos los dem&#225;s tokens para establecer relaciones sem&#225;nticas</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IS6P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 424w, /__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 848w, /__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IS6P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic" width="1438" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56343,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/193580820?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 424w, /__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 848w, /__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!IS6P!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2a6e06-bcfc-49d2-b422-42c0cd1f1406_1438x760.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>T&#233;cnicamente, el modelo genera tres vectores por cada token: una consulta (<strong>Query</strong>), una clave (<strong>Key</strong>) y un valor (<strong>Value</strong>).</p><p>El <strong>prompt caching</strong> se enfoca espec&#237;ficamente en los vectores Key y Value (la famosa <a href="/__u/lvrpiz.substack.com/p/turboquant-el-algoritmo-de-google">KV Cache</a> de la que te hablaba la semana pasada). Si env&#237;as una instrucci&#243;n de 5.000 tokens sobre c&#243;mo debe comportarse un agente legal, el modelo calcula esos vectores para esos 5.000 tokens. Si un segundo despu&#233;s env&#237;as otra pregunta con esa misma instrucci&#243;n, &#191;por qu&#233; deber&#237;amos calcularlo otra vez? </p><p>El <strong>prompt caching permite que el sistema detecte que el prefijo del mensaje es id&#233;ntico a uno procesado recientemente</strong>. En lugar de encender los n&#250;cleos de la GPU para volver a calcular la atenci&#243;n de esos 5.000 tokens, <strong>simplemente carga los vectores K y V desde la memoria.</strong> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!vI0Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 424w, /__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 848w, /__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!vI0Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic" width="645" height="358" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:645,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18609,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/193580820?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 424w, /__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 848w, /__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!vI0Y!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63fbb81c-3831-46ed-b8cb-802e698fc484_645x358.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Esto cambia la complejidad del prefill. Tradicionalmente, <strong>procesar el prompt tiene un coste computacional que escala de forma cuadr&#225;tica o lineal-pesada con la longitud</strong>. Con la cach&#233;, si el hit es total, <strong>el tiempo de procesamiento del prompt tiende a cero</strong>, y la latencia total de la respuesta pasa a depender casi exclusivamente de cu&#225;ntos tokens nuevos tiene que generar el modelo.</p><p></p><h2>&#191;Cu&#225;nto podemos ahorrar usando Prompt Caching?</h2><p>Hablemos de dinero, que es lo que suele convencer a los managers para priorizar estas tareas. OpenAI y Anthropic han implementado estructuras de precios donde <strong>los tokens servidos desde la cach&#233; tienen un descuento masivo</strong>. No es una peque&#241;a rebaja del 5%; estamos hablando de &#243;rdenes de magnitud que cambian la viabilidad de ciertos productos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zp_5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 424w, /__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 848w, /__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zp_5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png" width="1456" height="441" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:441,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82252,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/193580820?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 424w, /__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 848w, /__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zp_5!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81c8414d-2d1f-4d45-b056-6bbb846cb0ce_1842x558.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tabla de precios OpenAI (abril 2026) con descuentos por caching</figcaption></figure></div><p>En los modelos m&#225;s recientes de OpenAI, como gpt-5-nano o gpt-5.2, <strong>el descuento por cach&#233; llega al 90%</strong>. Para que te hagas una idea, si el mill&#243;n de tokens de entrada te cuesta 2 euros, el mill&#243;n de tokens de cach&#233; te cuesta 0.20 euros. En modelos de audio en tiempo real, la diferencia es todav&#237;a m&#225;s rid&#237;cula, con descuentos que superan el 98% en algunos casos.</p><p>Vaya, que si tienes un chatbot que gestiona conversaciones largas donde el historial se reenv&#237;a en cada turno, tu factura puede pasar de ser inasumible a ser un gasto residual. Lo interesante es que, a diferencia de otras optimizaciones, <strong>esto no requiere que cambies de modelo ni que sacrifiques calidad. Est&#225;s usando la misma inteligencia, el mismo razonamiento, pero de forma m&#225;s eficiente.</strong></p><p>&#9888;&#65039; Hay un peque&#241;o detalle que mucha gente pasa por alto que es el umbral m&#237;nimo. En OpenAI, el prompt debe tener al menos 1024 tokens para que la cach&#233; empiece a funcionar. Si tus prompts son cortos, de 300 o 400 tokens, <strong>la cach&#233; no se activa y pagas el precio completo</strong>. He visto casos donde sale a cuenta alargar un poco el prompt con contexto &#250;til o ejemplos de few-shot para superar los 1024 tokens y empezar a disfrutar de los descuentos. Si pasas de 900 tokens (precio completo) a 1100 tokens con un 70% de cach&#233;, la llamada te sale m&#225;s barata siendo el prompt m&#225;s largo.</p><p></p><h2>Latencia y el muro del Time To First Token (TTFT)</h2><p>El gran enemigo de las aplicaciones de IA es el <strong>tiempo que pasa desde que el usuario pulsa Enter hasta que aparece la primera palabra en pantalla</strong>. Ese tiempo es conocido como TTFT de <em>Time to First Token</em>.</p><p>En prompts masivos de 100.000 o 200.000 tokens (pensemos en analizar un repositorio de c&#243;digo o un libro entero), el TTFT puede ser de varios segundos solo para procesar el texto de entrada. He visto benchmarks donde, para prompts de unos 150.000 tokens, la cach&#233; reduce la latencia de respuesta en un 67% como en este ejemplo de OpenAI:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!k8lP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 424w, /__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 848w, /__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 1272w, /__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!k8lP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png" width="1456" height="917" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:917,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:421726,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/193580820?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 424w, /__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 848w, /__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 1272w, /__u/substackcdn.com/image/fetch/$s_!k8lP!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63a4957b-5120-4f32-8d9b-a48366673949_1730x1090.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">TTFT vs Promot Tokens</figcaption></figure></div><p>Esto ocurre porque <strong>el sistema se salta la fase de prefill compute</strong>. Cuando el hit de cach&#233; es exitoso, el modelo empieza a muestrear y generar el primer token casi de forma instant&#225;nea. Si est&#225;s construyendo agentes que necesitan iterar r&#225;pido, la cach&#233; es lo que permite que el bucle de razonamiento no se rompa por culpa de la espera.</p><p></p><h2>La importancia del prefijo y c&#243;mo gestionarlo correctamente</h2><p>Para que la cach&#233; funcione, <strong>el prefijo debe ser exactamente igual, token por token</strong>. Cualquier cambio m&#237;nimo, un espacio extra, un salto de l&#237;nea o un timestamp din&#225;mico, <strong>invalida toda la cach&#233; a partir de ese punto</strong>.</p><p>&#128073;&#127995; <strong>La regla de oro es</strong>: pon lo que no cambia al principio y lo vol&#225;til al final. La estructura ideal de un prompt optimizado para cach&#233; sigue este orden:</p><ol><li><p>Instrucciones del sistema (System Prompt).</p></li><li><p>Definiciones de herramientas y funciones (Tools).</p></li><li><p>Esquemas de salida (Structured Outputs).</p></li><li><p>Contexto est&#225;tico (documentaci&#243;n, ejemplos fijos).</p></li><li><p>Historial de la conversaci&#243;n (mensajes anteriores).</p></li><li><p>Entrada espec&#237;fica del usuario actual.</p></li></ol><p>Un error com&#250;n que comenta OpenAI es meter la fecha y hora actual o el ID del usuario al principio del prompt. Si haces eso, <strong>cada petici&#243;n ser&#225; &#250;nica desde el token 1 y nunca tendr&#225;s un hit de cach&#233;</strong>. Mueve esa informaci&#243;n a los metadatos de la petici&#243;n o m&#233;tela al final del todo, justo antes de la pregunta del usuario.</p><p>Otro truco que menciona la gente de OpenAI es el orden de las herramientas. <strong>Si tienes un array de herramientas (tools), el orden en el que aparecen en el JSON importa</strong>. Si en una llamada pones primero la funci&#243;n de clima y luego la de calendario, y en la siguiente las inviertes, has roto la cach&#233;. Mant&#233;n tus definiciones de herramientas estables y consistentes.</p><p></p><h2>prompt_cache_key: Optimizando la afinidad del servidor</h2><p>Este es uno de los conceptos m&#225;s avanzados y potentes de la API de OpenAI. <strong>Para que haya un hit de cach&#233;, no basta con que el prompt sea igual sino que la petici&#243;n tiene que caer en la misma m&#225;quina f&#237;sica que proces&#243; el prompt anterior.</strong> OpenAI tiene miles de servidores, y por defecto, las peticiones se distribuyen para equilibrar la carga.</p><p>Si env&#237;as dos peticiones id&#233;nticas pero caen en centros de datos o servidores distintos, no hay cach&#233; que valga. Aqu&#237; es donde entra <em>prompt_cache_key</em>. Este par&#225;metro le da una pista al sistema de enrutamiento para que intente mandar peticiones con la misma clave al mismo motor de inferencia.</p><p>&#191;C&#243;mo elegir una buena clave? Si la clave es demasiado gen&#233;rica (una sola clave para todos tus usuarios), saturar&#225;s un servidor y el sistema tendr&#225; que desbordar las peticiones a otras m&#225;quinas, perdiendo la cach&#233;. Si la clave es demasiado espec&#237;fica (un ID &#250;nico por cada mensaje), las peticiones se dispersar&#225;n tanto que nunca coincidir&#225;n en el mismo sitio.</p><p>Para casos de uso de programaci&#243;n, <strong>lo ideal suele ser una clave por repositorio</strong> o <strong>por usuario activo.</strong> Si quieres profundizar en este tema te recomiendo leer esta <a href="https://developers.openai.com/cookbook/examples/prompt_caching_201#44-use-prompt_cache_key-to-improve-routing-stickiness">secci&#243;n</a> de la gu&#237;a de OpenAI.</p><h2></h2><h2>El conflicto con el Context Engineering</h2><p>El context engineering busca reducir el n&#250;mero total de tokens eliminando mensajes antiguos o resumiendo la conversaci&#243;n para que el modelo no se pierda. Pero, cada vez que resumes o eliminas un mensaje intermedio, <strong>cambias el prefijo del prompt</strong> y, por tanto, destruyes la cach&#233;.</p><p>Te toca decidir: &#191;Prefieres ahorrar tokens reduciendo la longitud total mediante compactaci&#243;n agresiva o prefieres mantener el historial intacto para aprovechar los descuentos de la cach&#233;? Depende del modelo que uses y de lo caro que sea el token de entrada frente al de cach&#233;. <strong>En modelos como gpt-4o-mini, a veces sale m&#225;s a cuenta no compactar nada y dejar que la cach&#233; haga su trabajo</strong>, porque el coste del token de cach&#233; es despreciable frente a la inteligencia que pierdes al resumir.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://developers.openai.com/cookbook/examples/prompt_caching_201">Prompt Caching 201: Fundamentals and Optimization</a> - Gu&#237;a avanzada de OpenAI sobre el funcionamiento interno de la KV Cache.</p></li><li><p><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">Anthropic: Context Caching Guide</a> - Documentaci&#243;n oficial sobre la implementaci&#243;n manual de puntos de cach&#233; en modelos Claude.</p></li><li><p><a href="https://jalammar.github.io/illustrated-gpt2/">Deep dive into KV Caching in Transformers</a> - Explicaci&#243;n visual de c&#243;mo se almacenan las proyecciones de atenci&#243;n en arquitecturas de lenguaje.</p></li><li><p><a href="https://openai.com/api/pricing/">Pricing and Model Limits for Prompt Caching</a> - Tabla de precios actualizada para los diferentes modelos de la familia GPT.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[TurboQuant: El algoritmo de Google que cambia la IA para siempre]]></title><description><![CDATA[Te explico c&#243;mo el algoritmo TurboQuant reduce seis veces el consumo de memoria de los modelos de IA sin perder precisi&#243;n]]></description><link>https://lvrpiz.substack.com/p/turboquant-el-algoritmo-de-google</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/turboquant-el-algoritmo-de-google</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 01 Apr 2026 15:03:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zEaR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cada vez que le env&#237;as un mensaje largo a un modelo grande para no tener que volver a leer y procesar toda la conversaci&#243;n desde cero se hace una peque&#241;a trampa: con cada nueva palabra que genera, el modelo guarda un apunte temporal en memoria.</p><p>El problema es que ese apunte temporal para un solo usuario en una conversaci&#243;n medianamente larga puede llegar a ocupar unos 40 GB de memoria (por contexto esto es m&#225;s de la mitad de una GPU H100 que cuesta unos 30.000&#8364;).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Aqu&#237; es donde la econom&#237;a de la inteligencia artificial se rompe y el modelo de negocio se vuelve insostenible. Todo esto ha sido as&#237; hasta que Google ha presentado su algoritmo de compresi&#243;n <a href="https://research.google/blog/turboquant-redefining-ai-efficiency-with-extreme-compression/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=social_post&amp;utm_content=gr-acct">TurboQuant</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zEaR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zEaR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:658482,&quot;alt&quot;:&quot;Google TurboQuant tutorial&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/192321604?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Google TurboQuant tutorial" title="Google TurboQuant tutorial" srcset="/__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!zEaR!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd0d69a-226d-43de-ba5a-6c75c08a8eb7_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Google TurboQuant</figcaption></figure></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>TurboQuant es un algoritmo de compresi&#243;n desarrollado por Google que reduce dr&#225;sticamente el consumo de memoria de los modelos de inteligencia artificial al <strong>hacer m&#225;s eficiente su cach&#233; de contexto</strong>.</p><ul><li><p>Reduce el tama&#241;o de la memoria cach&#233; en 6 veces, bajando hasta los 3 bits por valor num&#233;rico.</p></li><li><p>Mantiene un <strong>0% de p&#233;rdida de precisi&#243;n en las respuestas</strong> del modelo en todos los benchmarks de contexto largo probados.</p></li><li><p>No requiere reentrenar ni afinar los modelos existentes y funciona como un reemplazo directo en la arquitectura.</p></li><li><p>Multiplica por 8 la velocidad de c&#225;lculo de atenci&#243;n en hardware moderno como las aceleradoras Nvidia H100.</p></li><li><p>Permite a los proveedores dar servicio a aproximadamente 6 veces m&#225;s usuarios simult&#225;neos en el mismo servidor.</p></li></ul><p></p><h2>Primero, &#191;Qu&#233; es el KV Cache?</h2><p>Para entender la magnitud del anuncio que acaba de hacer Google con TurboQuant, primero tenemos que entender <strong>c&#243;mo funciona la inferencia en un modelo de lenguaje grande</strong> (LLM).</p><p>La inferencia es el proceso de usar el modelo ya entrenado para generar texto. Hoy en d&#237;a, <strong>la inferencia representa el 55% de todo el gasto en computaci&#243;n de inteligencia artificial a nivel mundial.</strong> Las grandes tecnol&#243;gicas planean inyectar cerca de 700.000 millones de d&#243;lares en infraestructura de IA para 2026 y la mayor parte de ese hardware se va a dedicar a servir respuestas a usuarios.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mOh-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 424w, /__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 848w, /__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mOh-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png" width="1404" height="488" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6241970f-87fd-47df-862b-61453566a4d0_1404x488.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:488,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Topic 23: What is LLM Inference, it's challenges and solutions for it&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Topic 23: What is LLM Inference, it's challenges and solutions for it" title="Topic 23: What is LLM Inference, it's challenges and solutions for it" srcset="/__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 424w, /__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 848w, /__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mOh-!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6241970f-87fd-47df-862b-61453566a4d0_1404x488.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Funcionamiento del proceso de inferencia en un LLM</figcaption></figure></div><p>Los LLMs generan texto de forma autorregresiva. Esto significa que <strong>predicen la siguiente palabra bas&#225;ndose en todas las palabras anteriores</strong>, luego a&#241;aden esa nueva palabra a la lista y vuelven a predecir la siguiente. El mecanismo principal que les permite entender el contexto se llama <strong>atenci&#243;n</strong> o self-attention.</p><p>Durante este c&#225;lculo de atenci&#243;n, el modelo convierte cada palabra (&#8771;token) en vectores matem&#225;ticos llamados Keys y Values. A medida que la conversaci&#243;n avanza, el modelo <strong>guarda estas claves y valores en un espacio de memoria dedicado que conocemos como KV Cache</strong>. Si le has pasado un PDF de 100 p&#225;ginas, el modelo calcula los Keys y Values de ese PDF una sola vez y los guarda en la memoria de la GPU.</p><p>El problema es que estos vectores son enormes. En un modelo de 70 mil millones de par&#225;metros, cada token genera miles de n&#250;meros en coma flotante de alta precisi&#243;n. Si multiplicas esos n&#250;meros por miles de tokens de contexto y luego por miles de usuarios conectados simult&#225;neamente, llegas a un muro conocido como el <strong>memory wall</strong>.</p><p>La <strong>GPU tiene mucha capacidad de c&#225;lculo, pero se queda sin memoria RAM para almacenar el KV Cache de los usuarios</strong>. De nada sirve tener un procesador ultra r&#225;pido si no tienes d&#243;nde guardar los datos que necesita procesar. Cuando el servidor llega a este l&#237;mite, simplemente deja de aceptar nuevas peticiones, lo que encarece much&#237;simo el servicio.</p><p></p><h2>&#191;C&#243;mo se solucionaba el problema de KV Cache hasta 2026?</h2><p>Hasta ahora, la forma de lidiar con esto era la <strong>cuantizaci&#243;n</strong>. Cuantizar es b&#225;sicamente redondear n&#250;meros. Si tienes un n&#250;mero muy preciso como 3.14159265 (que ocupa 32 bits en memoria), lo redondeas a 3.14 (que ocupa 16 u 8 bits). Ahorras espacio, pero <strong>pierdes detalle</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LJpt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 424w, /__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 848w, /__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LJpt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png" width="714" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:714,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Blog elhacker.NET: &#191;Qu&#233; es la cuantizaci&#243;n, los par&#225;metros y la temperatura  en los LLM?&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Blog elhacker.NET: &#191;Qu&#233; es la cuantizaci&#243;n, los par&#225;metros y la temperatura  en los LLM?" title="Blog elhacker.NET: &#191;Qu&#233; es la cuantizaci&#243;n, los par&#225;metros y la temperatura  en los LLM?" srcset="/__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 424w, /__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 848w, /__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LJpt!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f473b12-374a-4a07-88f9-f4c2ed412764_714x303.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cuantizaci&#243;n en LLMs</figcaption></figure></div><p>En el mundo de los LLMs, pasar el KV Cache de 16 bits a 8 bits o incluso a 4 bits es una pr&#225;ctica com&#250;n. El problema es que <strong>a medida que bajas la precisi&#243;n, el modelo se vuelve menos preciso</strong>. Empieza a olvidar detalles sutiles del contexto, falla en tareas de razonamiento l&#243;gico y sufre alucinaciones. </p><p>Para que la cuantizaci&#243;n cl&#225;sica funcione, el sistema tiene que guardar metadatos adicionales (factores de escala y puntos cero) para cada peque&#241;o bloque de n&#250;meros, de forma que sepa c&#243;mo reconstruir el valor original aproximado. Esta sobrecarga a veces a&#241;ade 1 o 2 bits extra por cada n&#250;mero. Si intentas cuantizar a 4 bits, pero necesitas 2 bits de metadatos, <strong>en realidad est&#225;s usando 6 bits</strong> y perdiendo mucha precisi&#243;n por el camino.</p><p>Aqu&#237; es donde entra el equipo de investigaci&#243;n de Google con su publicaci&#243;n sobre <a href="https://research.google/blog/turboquant-redefining-ai-efficiency-with-extreme-compression/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=social_post&amp;utm_content=gr-acct">TurboQuant</a>. Han conseguido <strong>comprimir este KV Cache a solo 3 bits por valor</strong>. Y lo m&#225;s sorprendente no es la compresi&#243;n en s&#237;, sino que <strong>afirman haber logrado cero p&#233;rdida de precisi&#243;n en los resultados finales del modelo</strong>.</p><p></p><h2>PolarQuant: La soluci&#243;n de Google para comprimir el KV Cache sin p&#233;rdida</h2><p>Para lograr esta compresi&#243;n sin cargarse la inteligencia del modelo, Google dividi&#243; el problema en dos partes. La primera tecnolog&#237;a clave se llama <strong>PolarQuant</strong>.</p><p>Normalmente, los vectores dentro de un modelo de inteligencia artificial se representan en un sistema de coordenadas cartesianas. Piensa en el cl&#225;sico eje X, Y, Z que d&#225;bamos en el instituto. Un vector te dice la posici&#243;n exacta indicando distancias en l&#237;nea recta.</p><p>La analog&#237;a que da la propia Google es muy buena. En un sistema cartesiano, dar una direcci&#243;n ser&#237;a algo como: &#8220;Avanza 3 calles hacia el este y 4 calles hacia el norte&#8221;.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;0da7d82a-5993-46b7-b187-de9deacce8ed&quot;,&quot;duration&quot;:null}"></div><p>PolarQuant coge estos vectores y <strong>los convierte a un sistema de coordenadas polares</strong>. En lugar de usar distancias en una cuadr&#237;cula, usa un radio y un &#225;ngulo. La misma direcci&#243;n de antes se expresar&#237;a como: &#8220;Avanza 5 calles en un &#225;ngulo de 37 grados&#8221;.</p><p>Parece un cambio menor, pero en espacios de alta dimensionalidad como con los que trabajan los LLMs con vectores con miles de dimensiones, este cambio matem&#225;tico lo es todo para la compresi&#243;n. El radio representa la magnitud de los datos centrales, mientras que el &#225;ngulo indica la direcci&#243;n, que es lo que realmente define el significado sem&#225;ntico del vector en los c&#225;lculos de similitud del modelo.</p><p></p><h2>QJL: La correcci&#243;n de errores en un solo bit para PolarQuant</h2><p>Por muy eficiente que sea PolarQuant, <strong>la compresi&#243;n siempre genera peque&#241;os errores residuales</strong>. Si dejas esos errores sin tratar, se acumulan a lo largo de las capas de la red neuronal y terminan destrozando la salida del modelo.</p><p>Para solucionar esto, TurboQuant aplica una segunda capa matem&#225;tica llamada <strong>QJL (Quantized Johnson-Lindenstrauss)</strong>.</p><p>El lema de Johnson-Lindenstrauss es un principio matem&#225;tico cl&#225;sico que demuestra que puedes proyectar puntos de un espacio de muchas dimensiones a un espacio de menos dimensiones manteniendo casi intactas las distancias relativas entre esos puntos.</p><p>La capa QJL coge los peque&#241;os errores residuales que dej&#243; PolarQuant y les aplica este principio, reduciendo cada valor resultante a un &#250;nico bit de signo: un +1 o un -1. Es una especie de bit de correcci&#243;n de errores de baj&#237;sima resoluci&#243;n que act&#250;a como contrapeso matem&#225;tico.</p><p>Durante el c&#225;lculo de la atenci&#243;n, el modelo utiliza un estimador especial que cruza la consulta original (que se mantiene en alta precisi&#243;n) con estos datos ultra comprimidos y corregidos. El resultado final es una puntuaci&#243;n de atenci&#243;n precisa que le dice a la red neuronal qu&#233; partes del texto son importantes y cu&#225;les puede ignorar, pero calculada consumiendo una fracci&#243;n min&#250;scula de la memoria original.</p><p></p><h2>Benchmarks y rendimiento en hardware real</h2><p>En el mundo de la inteligencia artificial importan (y mucho) los benchmarks objetivos. Google puso a prueba TurboQuant contra modelos de c&#243;digo abierto muy utilizados como Llama (de Meta), Gemma (su propio modelo) y Mistral.</p><p>Los investigadores pasaron estos modelos por pruebas dise&#241;adas espec&#237;ficamente para medir el rendimiento con contextos muy largos. Pruebas como LongBench, ZeroSCROLLS o la famosa Needle In A Haystack de la que te habl&#233; en el blog hace unas semanas. Esta &#250;ltima prueba consiste en esconder un dato muy espec&#237;fico en medio de decenas de miles de palabras de texto irrelevante y pedirle al modelo que lo recupere.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0ar9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 424w, /__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 848w, /__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0ar9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png" width="1250" height="561" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:561,&quot;width&quot;:1250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132036,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/192321604?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 424w, /__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 848w, /__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0ar9!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d71dbe0-dfd7-43db-b7af-6bd6c01054c0_1250x561.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rendimiento de TurboQuant en LongBench en relaci&#243;n con varios m&#233;todos de compresi&#243;n en el modelo Llama-3.1-8B-Instruct</figcaption></figure></div><p>Los resultados muestras que TurboQuant logr&#243; puntuaciones perfectas en estas pruebas de recuperaci&#243;n de datos manteniendo la calidad original del modelo, pero reduciendo el tama&#241;o del KV Cache por un factor de 6.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XDGw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 424w, /__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 848w, /__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XDGw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png" width="1250" height="725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:725,&quot;width&quot;:1250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88764,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/192321604?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 424w, /__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 848w, /__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XDGw!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b79fb4-b2cb-422d-b9e4-6abb3f931ee1_1250x725.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">TurboQuant muestra un aumento sustancial en el rendimiento en los logits de atenci&#243;n de computaci&#243;n dentro de la cach&#233; de valor clave en varios niveles de ancho de bits</figcaption></figure></div><p>Y aqu&#237; viene el beneficio secundario que a veces es incluso m&#225;s importante que la memoria: la <strong>velocidad</strong>. Mover datos desde la memoria de la GPU hasta los n&#250;cleos de procesamiento es una de las operaciones m&#225;s lentas en hardware moderno. Al reducir el tama&#241;o de los datos 6 veces, el ancho de banda de memoria deja de ser un problema tan grave.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FRex!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 424w, /__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 848w, /__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FRex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png" width="1250" height="1074" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1074,&quot;width&quot;:1250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:267016,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/192321604?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 424w, /__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 848w, /__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FRex!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d49877-0eb4-49b7-b799-e4e82d53bd81_1250x1074.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rendimientos de recuperaci&#243;n de TurboQuant, logrando la relaci&#243;n de recuperaci&#243;n &#243;ptima de 1@k en el conjunto de datos GloVe</figcaption></figure></div><p>Google midi&#243; el rendimiento en GPUs de Nvidia H100 y report&#243; un <strong>aumento de velocidad de hasta 8 veces en el c&#225;lculo de los logits de atenci&#243;n utilizando TurboQuant a 4 bits en comparaci&#243;n con el uso de claves no cuantizadas a 32 bits</strong>. </p><p>Es decir, tenemos un modelo que ocupa una sexta parte de la memoria y hace los c&#225;lculos matem&#225;ticos pesados ocho veces m&#225;s r&#225;pido.</p><p></p><h2>El impacto de TurboQuant en las bases de datos vectoriales</h2><p>Ojo, porque el impacto de esta tecnolog&#237;a no se limita a chatear con un LLM. Hay otro campo enorme en la IA que se beneficia directamente de esto que es la b&#250;squeda vectorial y los sistemas RAG (Retrieval-Augmented Generation).</p><p>Hoy en d&#237;a, las b&#250;squedas modernas (incluyendo la del propio Google) ya no se basan &#250;nicamente en palabras clave exactas, <strong>sino en buscar por significado</strong>. Esto se hace convirtiendo todo el contenido indexado en vectores de alta dimensionalidad y <strong>buscando cu&#225;les son los m&#225;s cercanos matem&#225;ticamente a la consulta del usuario</strong>.</p><p>Google procesa miles de millones de estas b&#250;squedas diariamente. Para hacerlo r&#225;pido, necesitan mantener &#237;ndices vectoriales gigantescos en la memoria RAM de sus servidores. El coste de infraestructura de mantener bases de datos vectoriales a escala global es astron&#243;mico.</p><p>TurboQuant se prob&#243; en tareas de b&#250;squeda en alta dimensionalidad contra m&#233;todos tradicionales evaluando el ratio de recuperaci&#243;n. El algoritmo demostr&#243; ser capaz de acelerar dr&#225;sticamente el proceso de construcci&#243;n de &#237;ndices y de b&#250;squeda, operando con la eficiencia de un sistema de 3 bits pero manteniendo la precisi&#243;n de modelos mucho m&#225;s pesados.</p><p>Esto significa que <strong>los motores de b&#250;squeda sem&#225;ntica pueden indexar bases de datos corporativas enormes consumiendo poqu&#237;sima memoria y con tiempos de preprocesamiento casi nulos.</strong></p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma">Lema de Johnson-Lindenstrauss</a> - Fundamento matem&#225;tico cl&#225;sico sobre la proyecci&#243;n de espacios de alta dimensionalidad.</p></li><li><p><a href="https://research.google/blog/turboquant-redefining-ai-efficiency-with-extreme-compression/?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=social_post&amp;utm_content=gr-acct">TurboQuant</a>: Redefiniendo la eficiencia de la IA con una compresi&#243;n extrema - Post oficial de Google.</p></li><li><p><a href="https://github.com/THUDM/LongBench">LongBench: A Bilingual, Multitask Benchmark for Long Context Understanding</a> - Repositorio oficial del benchmark utilizado para evaluar el rendimiento de contexto largo.</p></li><li><p><a href="https://ai.google.dev/gemma">Modelos Gemma de Google</a> - Documentaci&#243;n oficial de la familia de modelos abiertos utilizados en las pruebas del KV Cache.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Autoresearch: El agente de Andrej Karpathy del que todos hablan]]></title><description><![CDATA[Te explico c&#243;mo funciona el proyecto de Karpathy de Autoresearch y c&#243;mo puedes utilizarlo t&#250; mismo]]></description><link>https://lvrpiz.substack.com/p/autoresearch-el-agente-de-andrej</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/autoresearch-el-agente-de-andrej</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 25 Mar 2026 15:57:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/192ff618-e27d-45ae-8ac5-394bb9fa1132_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>La mayor&#237;a de las demos de investigaci&#243;n aut&#243;noma con IA s&#243;lo te ense&#241;an la parte bonita. Un agente que edita un poco de c&#243;digo, ejecuta un experimento y te muestra un resultado en la terminal. Lo que casi nunca ves es la parte que realmente determina si el sistema sirve para algo en un entorno de producci&#243;n. &#191;Qu&#233; est&#225; optimizando exactamente el arn&#233;s de ejecuci&#243;n? &#191;C&#243;mo de estable y reproducible es la evaluaci&#243;n? &#191;Y qu&#233; pasa cuando el agente falla introduciendo un bug?</p><p>Hoy analizamos el proyecto Autoresearch de Andrej Karpathy que merece que lo analicemos a fondo.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!y-Gm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!y-Gm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Is Andrej Karpathy Right About Overhyped AI? &#8212; The Information&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Is Andrej Karpathy Right About Overhyped AI? &#8212; The Information" title="Is Andrej Karpathy Right About Overhyped AI? &#8212; The Information" srcset="/__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!y-Gm!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5466c0c8-1887-470c-aebd-9957cecd58e9_1860x1046.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Andrej Karpathy</figcaption></figure></div><p>Estamos en un punto donde la narrativa de los agentes de programaci&#243;n nos vende que le puedes dar acceso a tu repositorio a un modelo y te va a resolver la vida. En mis <a href="/__u/lvrpiz.substack.com/p/tendencias-ia-2026-analisis">predicciones de IA para 2026</a> critiqu&#233; mucho estos agentes y es que la realidad es que Autoresearch no intenta ser un cient&#237;fico de IA de prop&#243;sito general ni un desarrollador senior aut&#243;nomo. Es un <strong>sistema peque&#241;o</strong>, muy restringido y dise&#241;ado para un trabajo muy espec&#237;fico: permitir que un agente modifique un script de entrenamiento, ejecute un experimento acotado, mida el resultado, mantenga el cambio si ayuda y lo descarte si empeora las cosas.</p><p>El repositorio es enano, apenas tiene dos scripts en Python de pocas l&#237;neas, pero el dise&#241;o que hay detr&#225;s es uno de los ejemplos m&#225;s limpios que he visto sobre c&#243;mo construir un arn&#233;s de mejora aut&#243;noma que realmente funciona sin que tengas que estar vigil&#225;ndolo de reojo cada cinco minutos. En este art&#237;culo vamos a ver c&#243;mo funciona Autoresearch por dentro y, lo m&#225;s importante, qu&#233; nos ense&#241;a sobre la construcci&#243;n de sistemas ag&#233;nticos fiables.</p><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>Autoresearch es un <strong>sistema de investigaci&#243;n aut&#243;noma de IA</strong> dise&#241;ado por Andrej Karpathy que transforma la experimentaci&#243;n abierta en un problema de optimizaci&#243;n estrictamente delimitado.</p><ul><li><p>El agente <strong>no navega por internet</strong> ni dise&#241;a arquitecturas desde cero, su &#250;nico trabajo es <strong>modificar un archivo espec&#237;fico de entrenamiento</strong> para mejorar una m&#233;trica concreta.</p></li><li><p>Cada experimento tiene un <strong>l&#237;mite de tiempo fijo de 5 minutos</strong>, forzando al modelo a optimizar el rendimiento por unidad de tiempo real en lugar de por pasos de entrenamiento.</p></li><li><p>El sistema utiliza un sistema inmutable para garantizar que la evaluaci&#243;n no sea manipulada por el agente y se mantenga consistente.</p></li><li><p>El flujo de trabajo y la toma de decisiones se controlan mediante un <strong>documento en texto plano</strong>, demostrando que los prompts estructurados son ahora una pieza arquitect&#243;nica fundamental.</p></li><li><p>Los sistemas aut&#243;nomos m&#225;s &#250;tiles a d&#237;a de hoy son aquellos que tienen las restricciones m&#225;s severas y el margen de error m&#225;s acotado.</p></li></ul><p></p><h2>Qu&#233; es Autoresearch y por qu&#233; deber&#237;as prestarle atenci&#243;n</h2><p>A un nivel alto, Autoresearch convierte la investigaci&#243;n en IA en un problema de optimizaci&#243;n acotado.</p><p>Como comentaba antes, el agente no est&#225; navegando por internet leyendo papers, ni creando teor&#237;as originales sobre el futuro del deep learning, ni decidiendo qu&#233; deber&#237;a importar. Su trabajo es much&#237;simo m&#225;s acotado.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!d5Bm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 424w, /__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 848w, /__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!d5Bm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;GitHub - karpathy/autoresearch: AI agents running research on single-GPU  nanochat training automatically &#183; GitHub&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub - karpathy/autoresearch: AI agents running research on single-GPU  nanochat training automatically &#183; GitHub" title="GitHub - karpathy/autoresearch: AI agents running research on single-GPU  nanochat training automatically &#183; GitHub" srcset="/__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 424w, /__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 848w, /__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!d5Bm!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af136a-cb51-4584-bf8e-5410f3805ee4_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Autoresearch de Andrej Karpathy</figcaption></figure></div><p>El ciclo de vida de Autoresearch se reduce a unos pasos muy marcados.</p><ol><li><p>Primero edita el c&#243;digo de entrenamiento.</p></li><li><p>Segundo, ejecuta un experimento durante una cantidad de tiempo fija.</p></li><li><p>Tercero, mide el resultado utilizando una m&#233;trica inamovible.</p></li><li><p>Cuarto, guarda el commit si mejora la puntuaci&#243;n anterior.</p></li><li><p>Quinto, revierte los cambios mediante git si el resultado es peor. Y sexto, repite el proceso en bucle.</p></li></ol><p>Este enfoque importa mucho ya que en lugar de tratar la investigaci&#243;n y el desarrollo de software como una tarea creativa abierta donde el modelo puede perderse por las ramas, Autoresearch lo trata como un siste,a de b&#250;squeda disciplinado sobre una superficie muy bien definida.</p><p>La configuraci&#243;n es m&#237;nima por dise&#241;o, el agente solo tiene permiso para modificar un archivo concreto del repositorio. La preparaci&#243;n de los datos, la tokenizaci&#243;n y la evaluaci&#243;n final se mantienen completamente fuera del espacio de b&#250;squeda.</p><p></p><h2>C&#243;mo funciona la arquitectura de Autoresearch</h2><p>Para entender por qu&#233; este sistema funciona tambi&#233;n vamos a analizar su c&#243;digo por encima. Autoresearch gira en torno a <strong>tres archivos fundamentales</strong>. La interacci&#243;n entre estos tres componentes es lo que permite que el sistema opere durante horas sin supervisi&#243;n.</p><h3>prepare.py: Gesti&#243;n del entorno</h3><p>Este archivo se encarga de descargar los fragmentos del dataset, entrenar el tokenizador, construir el dataloader y definir la evaluaci&#243;n. <strong>El agente no tiene permiso para tocar este archivo bajo ninguna circunstancia</strong>.</p><p>Si revisamos el c&#243;digo, vemos que define constantes cr&#237;ticas que dictan las reglas del juego. Por ejemplo, establece la longitud del contexto con <code>MAX_SEQ_LEN = 2048</code> y el presupuesto de tiempo con <code>TIME_BUDGET = 300</code> (los famosos 5 minutos que te comentaba antes).</p><p>Sobre las m&#233;tricas, Autoresearch eval&#250;a los modelos utilizando bits por byte (bpb) en lugar de la cl&#225;sica p&#233;rdida de validaci&#243;n (validation loss).</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;1ff9b4de-1c8c-467e-a8d8-82213d18cd63&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">@torch.no_grad()
def evaluate_bpb(model, tokenizer, batch_size):
    token_bytes = get_token_bytes(device="cuda")
    val_loader = make_dataloader(tokenizer, batch_size, MAX_SEQ_LEN, "val")
    steps = EVAL_TOKENS // (batch_size * MAX_SEQ_LEN)
    total_nats = 0.0
    total_bytes = 0
    for _ in range(steps):
        x, y, _ = next(val_loader)
        loss_flat = model(x, y, reduction='none').view(-1)
        y_flat = y.view(-1)
        nbytes = token_bytes[y_flat]
        mask = nbytes &gt; 0
        total_nats += (loss_flat * mask).sum().item()
        total_bytes += nbytes.sum().item()
    return total_nats / (math.log(2) * total_bytes)
</code></pre></div><p></p><h3>train.py</h3><p>Este fichero contiene el modelo GPT, el optimizador, las tasas de aprendizaje, los hiperpar&#225;metros y la propia l&#243;gica del bucle de entrenamiento. Aqu&#237; es donde el agente experimenta a sus anchas y ocn libertad.</p><p>El agente puede cambiar la profundidad de la red, alterar la tasa de aprendizaje, modificar el tama&#241;o del lote, simplificar la arquitectura borrando bloques enteros o ajustar los coeficientes del optimizador. Todo tiene que ocurrir dentro de este archivo delimitado. Si rompe la sintaxis de Python o introduce una operaci&#243;n que causa un desbordamiento de memoria (OOM) en la GPU, la ejecuci&#243;n fallar&#225;, pero el impacto est&#225; contenido localmente.</p><p></p><h3>program.md: Programando al investigador, no al modelo</h3><p>Lo que gestiona el agente y el proyecto no es el c&#243;digo Python. Es el archivo <code>program.md</code> que es el documento que <strong>le dice al agente c&#243;mo debe comportarse</strong>. En otras palabras, el humano no est&#225; programando &#250;nicamente al modelo de lenguaje, el humano est&#225; programando al investigador virtual.</p><p>Este archivo es el manual de instrucciones que le indica al agente c&#243;mo configurar una ejecuci&#243;n, qu&#233; archivos est&#225;n dentro de su alcance, qu&#233; tiene permitido modificar, c&#243;mo registrar los experimentos, cu&#225;ndo mantener o descartar un commit y c&#243;mo recuperarse de los fallos. </p><p>Un fragmento de este fichero que me llam&#243; la atenci&#243;n (traducido al espa&#241;ol):</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;969739b6-4a6e-4ebd-a376-b20879ef4139&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">A igualdad de condiciones, lo m&#225;s simple es mejor.
Una peque&#241;a mejora que a&#241;ade complejidad fea no vale la pena.
Por el contrario, eliminar algo y obtener resultados iguales o mejores es un gran resultado.
Una mejora de 0.001 val_bpb que a&#241;ade 20 l&#237;neas de c&#243;digo sucio probablemente no merezca la pena.
&#191;Una mejora de 0.001 obtenida al borrar c&#243;digo? Definitivamente qu&#233;datela.&#8221;</code></pre></div><p>Esto es espectacular porque le estamos dando al agente un marco de desarrollo. Le estamos diciendo que el c&#243;digo limpio y mantenible tiene valor intr&#237;nseco, evitando que el script evolucione hacia una amalgama incomprensible de condicionales y parches espagueti solo para rascar una mil&#233;sima en la m&#233;trica final.</p><h2></h2><h2>4 lecciones de dise&#241;o para construir agentes de IA &#250;tiles basados en Autoresearch</h2><p>Analizar Autoresearch es importante porque demuestra que de nada sirve tener un modelo de lenguaje con capacidades de razonamiento alt&#237;simas si el entorno en el que opera le permite desviarse del objetivo o corromper el sistema.</p><p>Basado en este dise&#241;o, aqu&#237; tienes cinco lecciones clave si est&#225;s construyendo sistemas basados en agentes o flujos de trabajo automatizados.</p><h3>1. Las restricciones hacen que el agente sea mejor</h3><p>Existe la falsa creencia de que un agente de IA necesita libertad absoluta en tu m&#225;quina para ser &#250;til y autoresearch nos demuestra lo contrario. El agente edita un solo archivo, persigue una &#250;nica m&#233;trica, opera dentro de un espacio fijo y solo avanza cuando la puntuaci&#243;n mejora emp&#237;ricamente. </p><p>Muchos sistemas de agentes fallan porque intentan maximizar la libertad de acci&#243;n demasiado pronto. Les dan acceso a terminales completas, a internet, a sistemas de archivos enteros, MCPs... M&#225;s libertad generalmente significa una superficie de error inmensamente mayor.</p><h3>2. Los prompts son parte de la arquitectura del sistema</h3><p>En este proyecto, el archivo <code>program.md</code> no es contexto secundario alrededor del c&#243;digo en Python, es la parte central del agente que define el flujo de trabajo, los l&#237;mites del sistema, la persistencia de los datos, el registro de errores, los protocolos de recuperaci&#243;n y los criterios de selecci&#243;n.</p><p>A medida que los productos basados en agentes maduren en los pr&#243;ximos meses, veremos que una mayor parte de la arquitectura real vivir&#225; en esta capa. No solo escribiremos c&#243;digo de aplicaci&#243;n tradicional, sino que redactaremos instrucciones operativas de alto nivel para trabajadores aut&#243;nomos que act&#250;an como middleware entre nuestras intenciones y la ejecuci&#243;n t&#233;cnica. De hecho esto ya lo estamos viviendo en GitHub con Copilot Review.</p><h3>3. El l&#237;mite de tiempo</h3><p>La decisi&#243;n de imponer un l&#237;mite de tiempo de 5 minutos es una de las ideas m&#225;s brillantes del repositorio porque en los sistemas reales de producci&#243;n, el tiempo suele ser la verdadera restricci&#243;n limitante. Hablamos de latencia de red, costes de computaci&#243;n en la nube, velocidad de iteraci&#243;n en despliegues o simplemente la paciencia del usuario final.</p><p>Los bucles delimitados por tiempo obligan al sistema a optimizar para la utilidad en el mundo real en lugar del rendimiento idealizado. Si pides a un agente que redacte un informe perfecto, podr&#237;a pasarse 10 horas iterando. Si le das 5 minutos, se ver&#225; forzado a encontrar las herramientas m&#225;s eficientes para entregar el m&#225;ximo valor en ese intervalo restrictivo.</p><h3>4. Observabilidad y reversibilidad</h3><p>Autoresearch hace que los experimentos fallidos sean baratos de descartar y hace que cada iteraci&#243;n sea auditable a trav&#233;s de los registros de terminal, el historial de commits y el archivo TSV de resultados.</p><p>Si una ejecuci&#243;n defectuosa deja el sistema en un estado irrecuperable o corrompe la base de datos, el agente no podr&#225; explorar agresivamente el espacio de soluciones por miedo a romper algo cr&#237;tico. Del mismo modo, si el sistema no te deja un rastro claro de qu&#233; acciones tom&#243;, con qu&#233; par&#225;metros y por qu&#233; fall&#243;, te ser&#225; imposible confiar en &#233;l o mejorar sus instrucciones base.</p><p></p><h2>Limitaciones actuales del experimento de Karpathy</h2><p>Son varias las limitaciones del sistema de Autoresearch:</p><p>La primera limitaci&#243;n obvia es que optimiza para un benchmark extremadamente local. El agente intenta mejorar la m&#233;trica de validaci&#243;n bajo un presupuesto estricto de 5 minutos en una configuraci&#243;n de hardware muy espec&#237;fica. <strong>Que el agente encuentre una mejora aqu&#237; no significa autom&#225;ticamente que est&#233; descubriendo estrategias de entrenamiento superiores a nivel general aplicables a modelos de trillones de par&#225;metros</strong>. Es muy posible que simplemente est&#233; sobreajustando el c&#243;digo para encontrar lo que funciona mejor bajo las peculiaridades de este arn&#233;s concreto.</p><p>La segunda limitaci&#243;n es el hardware. El proyecto est&#225; construido mentalmente alrededor de una &#250;nica GPU de gama ultra alta, concretamente una <strong>NVIDIA H100</strong>. El c&#243;digo asume capacidades computacionales masivas, utilizando n&#250;cleos de tensores de &#250;ltima generaci&#243;n y versiones de Flash Attention que solo funcionan bien en arquitecturas recientes. Aunque en el repositorio oficial se mencionan forks adaptados para MacBooks usando <strong>MLX</strong>, la experiencia por defecto est&#225; claramente sesgada hacia hardware que la mayor&#237;a de los mortales no tiene en casa.</p><p>La tercera limitaci&#243;n es que somos nosotros los que definimos la m&#233;trica, delimitamos qu&#233; archivos se pueden tocar, preparamos la canalizaci&#243;n de datos y escribimos las instrucciones operativas. <strong>El sistema no tiene iniciativa propia fuera de esa definici&#243;n</strong>. Los sistemas aut&#243;nomos a corto plazo son mucho m&#225;s valiosos cuando operan dentro de andamiajes fuertes, no cuando se les da libertad ilimitada y objetivos vagos.</p><div><hr></div><p>Si est&#225;s trabajando en la integraci&#243;n de agentes en tu empresa, esta es la lecci&#243;n que deber&#237;as robar sin miramientos. No empieces pregunt&#225;ndote c&#243;mo hacer que el agente de IA sea m&#225;s inteligente o tenga m&#225;s autonom&#237;a. Empieza pregunt&#225;ndote c&#243;mo hacer que el sistema que lo rodea sea m&#225;s restrictivo, seguro y fiable.</p><p>Porque en la pr&#225;ctica, los mejores sistemas aut&#243;nomos rara vez son los que tienen mayor libertad de acci&#243;n. <strong>Suelen ser los que tienen las restricciones m&#225;s severas</strong>.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://github.com/karpathy/autoresearch">Repositorio oficial de Autoresearch</a> - C&#243;digo fuente completo del experimento documentado por Andrej Karpathy.</p></li><li><p><a href="https://github.com/karpathy/nanochat">Nanochat / NanoGPT</a> - Repositorio padre del cual se simplific&#243; el script de entrenamiento para este proyecto, &#250;til para entender implementaciones m&#237;nimas de modelos de lenguaje.</p></li><li><p><a href="https://github.com/Dao-AILab/flash-attention">Flash Attention 3</a> - Repositorio de la implementaci&#243;n optimizada de atenci&#243;n utilizada en el c&#243;digo base para acelerar el entrenamiento en GPUs Hopper.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Docker Scratch: ¿Cómo se crean las imágenes base?]]></title><description><![CDATA[Te cuento qu&#233; es Docker scratch y c&#243;mo crear im&#225;genes base desde cero. Aprende a reducir el tama&#241;o de tus contenedores y mejorar la seguridad en producci&#243;n.]]></description><link>https://lvrpiz.substack.com/p/docker-scratch-guia-completa</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/docker-scratch-guia-completa</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 18 Mar 2026 16:01:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/32d46a84-61eb-4109-8e0d-1d0dc23192b5_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#191;De d&#243;nde vienen las im&#225;genes base de Docker? Alguien tendr&#225; que crear las im&#225;genes base desde la que todos construimos nuestras aplicaciones. &#191;De d&#243;nde nacen absolutamente todas las im&#225;genes de Docker que usamos a diario? &#191;Hay una <strong>imagen original de la que nacen todas</strong>?</p><p>Llevaba un par de semanas con la duda y me he puesto a investigar y descubr&#237; la imagen scratch de Docker que viene a solucionar esto y la verdad me ha sorprendido porque tiene muchas m&#225;s aplicaciones pr&#225;cticas de lo que pensaba.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!RV3f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!RV3f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:625227,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/190266817?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RV3f!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb76b5bf-3ebd-4617-b751-af7aea7d2d74_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Im&#225;genes Scratch de Docker</figcaption></figure></div><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>La imagen <code>scratch</code> es el punto de partida reservado y completamente vac&#237;o de Docker, dise&#241;ado para construir contenedores ultra minimalistas o crear tus propias im&#225;genes base de sistemas operativos desde cero.</p><ul><li><p>Es una <strong>palabra clave reservada que le dice al motor de Docker que no a&#241;ada ninguna capa previa al sistema de archivos</strong>.</p></li><li><p>F&#237;sicamente est&#225; vac&#237;a, <strong>no contiene archivos ni carpetas</strong>, lo que obliga a usar ejecutables compilados est&#225;ticamente y autocontenidos.</p></li><li><p><strong>Reduce dr&#225;sticamente el tama&#241;o final de los contenedores</strong> y minimiza la superficie de ataque, siendo ideal para entornos regulados o dispositivos edge con conectividad limitada.</p></li><li><p>Permite crear im&#225;genes base funcionales (como Debian) mediante la directiva <code>ADD</code>, la cual extrae autom&#225;ticamente un archivo comprimido para formar el sistema de archivos ra&#237;z.</p></li><li><p>Su principal limitaci&#243;n es la <strong>enorme dificultad para depurar errores</strong>, ya que carece por completo de herramientas b&#225;sicas del sistema como terminales, <code>ping</code> o <code>curl</code>.</p></li></ul><p></p><h2>&#191;Qu&#233; es exactamente Docker scratch?</h2><p>Para entender qu&#233; es esta imagen original, primero hay que desaprender lo que creemos saber sobre m&#225;quinas virtuales. Cuando trabajamos con hipervisores tradicionales, <strong>siempre partimos de una ISO virtualizada que contiene un kernel propio</strong>, un sistema de arranque y un disco duro emulado.</p><p>Un <strong>contenedor de Docker NO es una m&#225;quina virtual</strong>.</p><p>La contenerizaci&#243;n virtualiza a nivel de aplicaci&#243;n y <strong>utiliza directamente el kernel del sistema anfitri&#243;n</strong>. Esto significa que, en realidad, <strong>un contenedor solo necesita un proceso para existir</strong> y los archivos estrictamente necesarios para que ese proceso se ejecute de forma aislada. Sabiendo esto, el concepto de imagen base cobra otro sentido.</p><p>Puedes utilizar la imagen m&#237;nima y reservada de Docker, llamada <code>scratch</code>, <strong>como punto de partida para construir tus propios contenedores</strong>. Al usar esta palabra clave, le est&#225;s enviando una se&#241;al directa al proceso de construcci&#243;n indic&#225;ndole que el siguiente comando en tu archivo ser&#225;, literalmente, la primera capa del sistema de archivos de tu imagen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XR_F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XR_F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7025858,&quot;alt&quot;:&quot;Infograf&#237;a t&#233;cnica sobre Docker Scratch con est&#233;tica de planos t&#233;cnicos en colores blanco, negro y azul. Explica la diferencia entre m&#225;quinas virtuales y contenedores, destacando que \&quot;scratch\&quot; es una imagen vac&#237;a, sin binarios ni carpetas, que sirve como punto de partida minimalista para construir im&#225;genes base mediante una operaci&#243;n nula (no-op).&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/190266817?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Infograf&#237;a t&#233;cnica sobre Docker Scratch con est&#233;tica de planos t&#233;cnicos en colores blanco, negro y azul. Explica la diferencia entre m&#225;quinas virtuales y contenedores, destacando que &quot;scratch&quot; es una imagen vac&#237;a, sin binarios ni carpetas, que sirve como punto de partida minimalista para construir im&#225;genes base mediante una operaci&#243;n nula (no-op)." title="Infograf&#237;a t&#233;cnica sobre Docker Scratch con est&#233;tica de planos t&#233;cnicos en colores blanco, negro y azul. Explica la diferencia entre m&#225;quinas virtuales y contenedores, destacando que &quot;scratch&quot; es una imagen vac&#237;a, sin binarios ni carpetas, que sirve como punto de partida minimalista para construir im&#225;genes base mediante una operaci&#243;n nula (no-op)." srcset="/__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XR_F!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2765e85a-e95f-4be8-a335-e83420989cfc_2816x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Funcionamiento imagen scratch Docker. *Generada con Inteligencia Artificial.</figcaption></figure></div><p>Construir desde este punto significa referenciar una imagen que crea el entorno m&#225;s peque&#241;o posible, el cual, para ser exactos, est&#225; completamente vac&#237;o y no contiene absolutamente ning&#250;n archivo ni carpeta.</p><p>Vaya, que no hay nada. Ni un binario, ni un gestor de paquetes, ni un directorio <code>/bin</code>.</p><p>La verdad es que tiene un comportamiento especial a nivel interno. A partir de la versi&#243;n 1.5.0 de Docker, utilizar esta referencia act&#250;a como una operaci&#243;n nula en el archivo de construcci&#243;n y no crea ninguna capa extra en tu imagen. Aunque veas que aparece en los repositorios oficiales del Hub de Docker, es imposible descargarla, ejecutarla o etiquetar cualquier otra imagen con ese nombre. <strong>Simplemente est&#225; ah&#237; para ser referenciada en tus construcciones</strong>.</p><p></p><h2>C&#243;mo funciona Docker Scratch: El kernel del host y el sistema de archivos</h2><p>Si un contenedor est&#225; dise&#241;ado para iniciar un &#250;nico proceso y no hay procesos del sistema operativo corriendo por debajo, &#191;c&#243;mo es posible que im&#225;genes como Ubuntu o Busybox funcionen partiendo de un entorno vac&#237;o?</p><p>La respuesta est&#225; en c&#243;mo Docker maneja la descompresi&#243;n de archivos.</p><p>Si miras el c&#243;digo fuente de una imagen oficial de Debian, ver&#225;s que <strong>empieza con la referencia vac&#237;a</strong> y luego usa un comando para a&#241;adir un archivo llamado <code>rootfs.tar.xz</code>. Muchos desarrolladores asumen que con solo copiar un archivo comprimido, la imagen resultante no deber&#237;a volverse ejecutable m&#225;gicamente. Y tendr&#237;an raz&#243;n si usaran el comando de copia tradicional.</p><p>Existe una <strong>diferencia fundamental entre los comandos </strong><code>ADD</code><strong> y </strong><code>COPY</code>, y ese comportamiento espec&#237;fico es lo que hace que todo esto funcione.</p><p>Si utilizas el comando de <strong>copia est&#225;ndar</strong> para mover ese archivo comprimido a la ra&#237;z, simplemente <strong>tendr&#237;as un archivo inerte depositado en el contenedor</strong>. Peeero, la directiva <code>ADD</code> tiene una funci&#243;n adicional: si detecta un archivo comprimido (como un <code>.zip</code>, <code>.tgz</code> o <code>tar.xz</code>), <strong>lo expande autom&#225;ticamente</strong>.</p><p>En la pr&#225;ctica, esto significa que la directiva extrae los binarios y archivos de configuraci&#243;n holgadamente en una capa de la imagen, la cual debe incluir todo lo necesario para satisfacer las dependencias del proceso principal. <strong>Descomprime el sistema de archivos ra&#237;z completo</strong>, dando como resultado una imagen ejecutable capaz de lanzar una terminal interactiva.</p><p></p><h2>&#191;Deber&#237;a usar im&#225;genes scratch en mis proyectos?</h2><p>Hay dos motivos por los que podr&#237;as elegir trabajar con la imagen scratch de Docker: peso y seguridad.</p><p>El primer motivo es el <strong>peso</strong>. Las im&#225;genes que usamos normalmente vienen cargadas de utilidades de red, editores de texto, bibliotecas compartidas y gestores de paquetes que en la mayor&#237;a de casos no aprovechamos y usamos. Todo ese peso muerto ralentiza los despliegues.</p><p>Disponer de im&#225;genes peque&#241;as permite realizar actualizaciones mucho m&#225;s r&#225;pidas en entornos que sufren de conectividad limitada a internet.</p><p>El segundo motivo, y para m&#237; el m&#225;s importante, es la <strong>seguridad</strong>.</p><p>Cada binario que existe en tu contenedor es un posible vector de ataque. Si un atacante logra comprometer tu aplicaci&#243;n y ejecutar c&#243;digo de forma remota, lo primero que har&#225; ser&#225; buscar una terminal o herramientas para descargar scripts. Si tu contenedor no tiene sistema operativo, no hay terminal. No hay forma de descargar nada. Tienes el control absoluto de todo lo que hay dentro de la imagen, lo cual es vital en entornos altamente regulados.</p><h3>&#191;Puedo desplegar cualquier aplicaci&#243;n con scratch?</h3><p>Hay que tener en cuenta que <strong>no siempre es posible</strong> desplegar nuestra app en un contenedor scratch debido a la naturaleza de los lenguajes de programaci&#243;n.</p><ul><li><p>Los lenguajes <strong>compilados</strong> como Go o Rust permiten generar <strong>binarios est&#225;ticos que incluyen todas sus dependencias en un &#250;nico archivo ejecutable</strong>, por lo que pueden correr perfectamente sobre una imagen vac&#237;a.</p></li><li><p>Los lenguajes <strong>interpretados</strong> como Python, Node.js o Ruby necesitan que el contenedor incluya obligatoriamente su int&#233;rprete y una serie de bibliotecas din&#225;micas del sistema para funcionar, lo que hace inviable el uso de <code>scratch</code> de forma directa.</p></li></ul><p>Entonces puedes usar im&#225;genes vac&#237;as si tu c&#243;digo es capaz de ser totalmente independiente, pero te ver&#225;s obligado a usar im&#225;genes base m&#225;s completas si tu tecnolog&#237;a depende de un entorno de ejecuci&#243;n externo.</p><p></p><h2>Ejemplo pr&#225;ctico de imagen Scratch desplegando una API en Go desde cero</h2><p>El lenguaje Go es perfecto para este caso de uso por lo que te acabo de comentar de los binarios.</p><p>Imagina una aplicaci&#243;n peque&#241;a escrita en Go que expone un &#250;nico punto de enlace <code>/hello</code>. Si consultas ese punto, te devuelve un mensaje JSON de respuesta simple para el ejemplo.</p><p>Primero, necesitamos establecer un punto de referencia construyendo la imagen con un sistema base convencional como Alpine en su versi&#243;n 3.18. Para hacerlo correctamente y poder comparar, utilizamos un <strong>Dockerfile en dos etapas</strong>: una para compilar la aplicaci&#243;n y otra para ejecutarla.</p><p>En la etapa de construcci&#243;n partimos de la imagen <code>golang:1.21.6-alpine3.18</code>. Definimos el directorio de trabajo, copiamos el c&#243;digo fuente, descargamos los m&#243;dulos necesarios y compilamos el binario para Linux.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;dockerfile&quot;,&quot;nodeId&quot;:&quot;dac58e17-003d-4d76-ba2e-94bef72ed60a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-dockerfile">FROM golang:1.21.6-alpine3.18 AS build
WORKDIR /go/src/app
COPY ./src/* .
RUN go mod download
RUN GOOS=linux go build -o /go/bin/app -v .

FROM golang:1.21.6-alpine3.18 
COPY --from=build /go/bin/app /go/bin/app
EXPOSE 8080
ENTRYPOINT [ "/go/bin/app" ]
</code></pre></div><p>Al compilar esta imagen de referencia, el proceso toma unos <strong>12.3 segundos</strong> y el <strong>tama&#241;o resultante se dispara hasta los 230MB</strong>.</p><p>Ahora, vamos a probar a compilar la segunda fase con la imagen scratch.</p><p>Tomamos el Dockerfile anterior como base cambiamos el comando de compilaci&#243;n, donde a&#241;adimos banderas de enlazado espec&#237;ficas para eliminar la informaci&#243;n de depuraci&#243;n y otros detalles innecesarios y <strong>cambiamos la imagen base</strong> de la etapa final por nuestra referencia vac&#237;a de scratch.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;dockerfile&quot;,&quot;nodeId&quot;:&quot;c5b60e90-53ce-47e8-9f44-68f2acb06e1a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-dockerfile">FROM golang:1.21.6-alpine3.18 AS build
WORKDIR /go/src/app
COPY ./src/* .
RUN go mod download
RUN GOOS=linux go build -ldflags="-s" -o /go/bin/app -v .

FROM scratch
COPY --from=build /go/bin/app /go/bin/app
EXPOSE 8080
ENTRYPOINT [ "/go/bin/app" ]
</code></pre></div><p>Al ejecutar la construcci&#243;n, <strong>el tiempo baja ligeramente a 10 segundos</strong> que no est&#225; mal pero el cambio importante es el tama&#241;o de la imagen que se desploma a tan solo 6.8MB.</p><p>Reducimos el tama&#241;o a un 3% del original y si arrancamos el contenedor podemos comprobar con una petici&#243;n local que el servidor responde perfectamente al punto de enlace esperado. </p><p></p><h3>El problema del usuario root en Docker Scratch</h3><p>Si has probado este ejemplo te habr&#225;s dado cuenta que solo hay un proceso activo, pero <strong>se est&#225; ejecutando bajo el usuario administrador por defecto</strong>.</p><p>Dejar que una aplicaci&#243;n web corra con los m&#225;ximos privilegios es una mala pr&#225;ctica. Para prevenir posibles escaladas de privilegios, necesitamos que el proceso se ejecute con un usuario sin permisos de administraci&#243;n.</p><p>Pero hay un problema un problema y es que nuestro entorno final est&#225; vac&#237;o. No existe el comando para a&#241;adir usuarios, ni grupos, ni consola.</p><p>La <strong>soluci&#243;n pasa por crear el usuario durante la etapa inicial de compilaci&#243;n</strong> (que s&#237; tiene un sistema operativo base) y <strong>luego copiar el archivo de contrase&#241;as resultante a la imagen final</strong>.</p><p>A&#241;adimos este paso en la primera etapa: <code>RUN adduser --disabled-password -u 10001 appuser</code>. Y en la etapa final, justo despu&#233;s de copiar el binario, copiamos el registro del usuario y le decimos a Docker que lo utilice:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;dockerfile&quot;,&quot;nodeId&quot;:&quot;644c96e7-43d2-4380-88de-aa1413baf8a0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-dockerfile">COPY --from=build /etc/passwd /etc/passwd
USER appuser
</code></pre></div><p>Ojo, hay una forma todav&#237;a m&#225;s sencilla de hacer esto. En lugar de ejecutar el comando de creaci&#243;n de usuarios que genera varios archivos de configuraci&#243;n en el sistema, podemos crear un archivo de contrase&#241;as desde cero que solo contenga el usuario que necesitamos.</p><p>Simplemente inyectamos la cadena de texto exacta en un archivo temporal durante la construcci&#243;n: <code>RUN echo "appuser:x:10001:10001:App User:/:/sbin/nologin" &gt; /etc/minimal-passwd</code>.</p><p>Luego, en la etapa final, copiamos ese archivo m&#237;nimo renombr&#225;ndolo en el destino:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;dockerfile&quot;,&quot;nodeId&quot;:&quot;2ffb588e-71f8-4870-b5f4-87248f7488c4&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-dockerfile">FROM scratch
COPY --from=build /go/bin/app /go/bin/app
COPY --from=build /etc/minimal-passwd /etc/passwd
USER appuser
EXPOSE 8080
ENTRYPOINT [ "/go/bin/app" ]
</code></pre></div><p>Si inspeccionas los bytes exactos de las im&#225;genes generadas, ver&#225;s que esta t&#233;cnica de copiar un archivo <strong>apenas supone un incremento de 47 bytes en el tama&#241;o total</strong>.</p><p>Al arrancar nuevamente el contenedor e inspeccionar los procesos, confirmamos que la aplicaci&#243;n se ejecuta <strong>correctamente bajo el identificador de usuario 10001</strong>, sin necesidad de saber el nombre del usuario porque el sistema subyacente no tiene contexto sobre &#233;l.</p><h3></h3><h2>Curiosidades y limitaciones t&#233;cnicas de Docker Scratch</h2><p>Al trabajar con Docker Scratch te dar&#225;s cuenta que <strong>hay limitaciones impuestas</strong> por la propia naturaleza del entorno que debes tener en cuenta antes de migrar toda tu infraestructura.</p><p>El principal inconveniente que vas a sufrir es un <strong>aumento significativo en la dificultad para investigar problemas</strong>, dado que las t&#237;picas utilidades comunes para comprobar la red o descargar contenido no est&#225;n en el contenedor.</p><p>Si la aplicaci&#243;n falla no puedes simplemente abrir una sesi&#243;n interactiva en el contenedor y empezar a lanzar comandos para ver qu&#233; falla: no tienes consola, ni herramientas de diagn&#243;stico, est&#225;s completamente ciego frente a lo que ocurre en el sistema de archivos en tiempo real.</p><p><strong>Toda la observabilidad y depuraci&#243;n debe estar integrada en el propio c&#243;digo de la aplicaci&#243;n</strong>.</p><p></p><h2>Alternativas a scratch: &#191;Cu&#225;ndo usar distroless o Alpine?</h2><p>usar una imagen scratch no siempre es necesario ni justificable para todos los equipos.</p><p>Si buscas seguridad extrema y tama&#241;os reducidos, pero tu aplicaci&#243;n requiere ciertas librer&#237;as din&#225;micas o utilizas lenguajes que no pueden compilarse de forma est&#225;tica pura, <strong>existen alternativas intermedias muy maduras en la industria</strong>.</p><p>Las im&#225;genes distroless que fueron popularizadas por Google, son un punto intermedio ya que contienen &#250;nicamente la aplicaci&#243;n y sus dependencias de ejecuci&#243;n directas y no tienen gestores de paquetes, ni consolas, ni programas est&#225;ndar de Linux. A nivel de seguridad ofrecen ventajas casi id&#233;nticas al entorno vac&#237;o, pero proporcionan versiones preconfiguradas para Java, Node.js o Python que facilitan enormemente el trabajo.</p><p>Por otro lado, im&#225;genes como <strong>Alpine Linux ofrecen un sistema operativo completo y funcional en apenas 5 megabytes</strong>. </p><p>Al final, la decisi&#243;n arquitect&#243;nica debe basarse en tus necesidades reales. Entender c&#243;mo funciona la capa m&#225;s profunda de la virtualizaci&#243;n de aplicaciones te da las herramientas necesarias para tomar esa decisi&#243;n con criterio.</p><p>Ahora lo bueno es que la pr&#243;xima vez que escribas un archivo de configuraci&#243;n para Docker, sabr&#225;s exactamente qu&#233; hay debajo de ese sistema operativo base.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://hub.docker.com/_/scratch">Docker Hub: Repositorio oficial de la imagen base reservada</a> - Documentaci&#243;n oficial sobre la palabra clave reservada y su comportamiento sin capas.</p></li><li><p><a href="https://medium.com/@m0v_3r/building-container-images-from-scratch-with-the-scratch-base-image-8ff56812124b">Construyendo im&#225;genes de contenedores desde un entorno vac&#237;o</a> - An&#225;lisis detallado sobre la compilaci&#243;n est&#225;tica de binarios en Go y la gesti&#243;n de usuarios sin privilegios.</p></li><li><p><a href="https://forums.docker.com/t/what-is-the-scratch-image/86050">Comunidad Docker: Discusi&#243;n t&#233;cnica sobre el funcionamiento interno de contenedores y directivas de extracci&#243;n</a> - Explicaci&#243;n arquitect&#243;nica sobre la diferencia entre hipervisores y aislamiento a nivel de aplicaci&#243;n, junto con el an&#225;lisis de comandos de expansi&#243;n de archivos comprimidos.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[GitHub Agentic Workflows: Guía Completa]]></title><description><![CDATA[Aprende a configurar GitHub Agentic Workflows para automatizar tu repositorio con lenguaje natural en lugar de YAML]]></description><link>https://lvrpiz.substack.com/p/github-agentic-workflows-guia-completa</link><guid isPermaLink="false">https://lvrpiz.substack.com/p/github-agentic-workflows-guia-completa</guid><dc:creator><![CDATA[Álvaro]]></dc:creator><pubDate>Wed, 11 Mar 2026 15:59:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a884346e-d994-45cd-80eb-02606f9c531f_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>La semana pasada te comentaba las novedades que GitHub hab&#237;a presentado este 2026 para poder escalar runners sin Kubernetes con el nuevo Scale Set Client, si no lo has le&#237;do te lo dejo por aqu&#237; &#128071;&#127995;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8f62d184-51e3-4058-8c14-9f3495eb0255&quot;,&quot;caption&quot;:&quot;La automatizaci&#243;n de despliegues ha dejado de ser un extra en muchos equipos para convertirse en el est&#225;ndar, y ver c&#243;mo herramientas como GitHub Actions siguen evolucionando cada mes confirma que estamos en el mejor momento para dedicarnos a esto, ahorr&#225;ndonos muchas horas que antes se iban en procesos manuales y repetitivos.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Co&#769;mo escalar runners de GitHub sin Kubernetes con el nuevo Scale Set Client&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:119866725,&quot;name&quot;:&quot;&#193;lvaro&quot;,&quot;bio&quot;:&quot;DevOps y Cloud @ Santander Group | Ingeniero Inform&#225;tico y Economista | Divulgaci&#243;n e Investigaci&#243;n sobre IA y DevOps&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6396df49-e701-4302-bd62-0ca43dcaae8a_1000x1000.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-07T09:35:40.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb250f7c-8a03-4736-b9a9-291f3954e0b2_1200x630.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lvrpiz.substack.com/p/como-escalar-runners-de-github-sin-26-02-07&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:188252640,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7938672,&quot;publication_name&quot;:&quot;IA y DevOps para Profesionales&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!PnMp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fb2152-2c75-4612-9a7f-714fedb7aeae_750x750.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>GitHub Actions es una tecnolog&#237;a que me encanta, pero en el momento que escala tienes que pelearte con archivos YAML interminables para configurar nuestras integraciones continuas. La l&#243;gica se vuelve m&#225;s compleja y fr&#225;gil que el propio c&#243;digo de la aplicaci&#243;n que intenta desplegar. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Lo que acaba de lanzar GitHub en technical preview es conceptualmente diferente e interesante. Han presentado los <strong>GitHub Agentic Workflows</strong>, una iniciativa de GitHub Next y Microsoft Research que nos permite definir flujos de automatizaci&#243;n en repositorios escribiendo en lenguaje natural (<strong>Markdown</strong>) en lugar de YAML puro. Y lo m&#225;s importante: ejecut&#225;ndolos bajo un entorno altamente seguro, aislado y auditable dentro de la infraestructura de GitHub Actions que ya conocemos.</p><p>Ojo, esto no es un sustituto de GitHub Actions. Piensa en ello como un complemento para acciones peri&#243;dicas no deterministas.</p><p></p><h2>Resumen ejecutivo (TL;DR)</h2><p>GitHub Agentic Workflows es una nueva capa de abstracci&#243;n para crear automatizaciones en repositorios usando lenguaje natural en lugar de programaci&#243;n imperativa, ejecutada por modelos de IA con fuertes medidas de seguridad.</p><ul><li><p>Permite describir la intenci&#243;n de un workflow como &#8220;revisa este issue&#8221; o &#8220;crea un reporte de estado cada d&#237;a a X hora&#8221; en un archivo Markdown, y el agente decide la mejor manera de ejecutarlo.</p></li><li><p>Introduce el concepto de <strong>Continuous AI</strong>, dise&#241;ado para complementar, no reemplazar, a tu CI/CD determinista tradicional.</p></li><li><p>Prioriza la seguridad ejecutando los modelos con permisos de solo lectura por defecto y utilizando un mecanismo de <code>safe-outputs</code> para autorizar expl&#237;citamente operaciones de escritura como crear Pull Requests o comentar.</p></li><li><p>Requiere un paso de compilaci&#243;n local que traduce tus instrucciones en un archivo <code>.lock.yml</code> blindado, el cual es interpretado finalmente por GitHub Actions.</p></li></ul><p></p><h2>El problema del YAML y el nacimiento del Continuous AI</h2><p>Si lo piensas fr&#237;amente, GitHub Actions tradicional te obliga a pensar como una m&#225;quina. Tienes que definir el paso exacto, la herramienta exacta, el comando bash exacto y c&#243;mo procesar la salida con <code>jq</code> o <code>awk</code>. Esto es ideal para compilar un binario de Go o ejecutar tests unitarios porque quieres que <strong>el resultado sea determinista</strong>: la misma entrada debe producir la misma salida siempre.</p><p>Sin embargo, en el d&#237;a a d&#237;a del mantenimiento de un repositorio <strong>hay cientos de tareas que no son deterministas.</strong> Piensa en las <strong>issues</strong>, la actualizaci&#243;n de la <strong>documentaci&#243;n</strong> cuando cambia el c&#243;digo, la revisi&#243;n de accesibilidad o la sugerencia de refactorizaciones menores. Son tareas que requieren contexto, comprensi&#243;n del lenguaje natural y un cierto grado de conocimiento t&#233;cnico.</p><p>Aqu&#237; es donde entra el concepto de <strong>Continuous AI</strong>.</p><ul><li><p>El <strong>CI/CD</strong> se encarga de las tareas predecibles y repetitivas.</p></li><li><p>El <strong>continuous AI</strong> se encarga de aplicar inteligencia automatizada y sistem&#225;tica a la colaboraci&#243;n de software.</p></li></ul><p>Los Agentic Workflows son la primera implementaci&#243;n real y nativa de este concepto en GitHub, permitiendo que <strong>agentes como Claude Code, OpenAI Codex o GitHub Copilot act&#250;en como colaboradores as&#237;ncronos en tu equipo</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!8_5I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8_5I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;GitHub Next | Continuous AI&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub Next | Continuous AI" title="GitHub Next | Continuous AI" srcset="/__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8_5I!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F727a0fc1-4812-4bc2-a8e1-933337d775c6_1200x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">M&#225;s sobre Continuous AI: https://githubnext.com/projects/continuous-ai/</figcaption></figure></div><p></p><h2>Diferencia entre Workflows Tradicionales vs Ag&#233;nticos</h2><p>En un workflow tradicional de GitHub Actions, t&#250; defines un conjunto de reglas imperativas (si pasa X, ejecuta el script Y). La m&#225;quina no entiende lo que est&#225; haciendo, <strong>solo sigue instrucciones</strong>.</p><p>En un workflow ag&#233;ntico, <strong>t&#250; defines el estado final deseado</strong> usando lenguaje natural y <strong>proporcionas herramientas</strong> (tools), mientras que la IA se encarga de leer el contexto, analizar la situaci&#243;n y tomar decisiones sobre c&#243;mo alcanzar ese estado.</p><p>La trampa en la que cae mucha gente es pensar que podemos simplemente meter un script de Python que llame a la API de OpenAI dentro de un Action normal y corriente. Y s&#237;, poder se puede, pero es un peligro a nivel de arquitectura. Hacer eso otorga a un agente de IA un acceso excesivo y sin restricciones a tu entorno de ejecuci&#243;n. Los Agentic Workflows solucionan este problema de ra&#237;z integr&#225;ndose con GitHub Actions desde una filosof&#237;a de dise&#241;o centrada en la seguridad y el principio de m&#237;nimo privilegio.</p><p></p><h2>Seguridad: C&#243;mo evitar que la IA destruya tu repositorio</h2><p>De nada sirve tener un agente muy inteligente si un usuario puede hacer un ataque de prompt injection en un issue y lograr que la IA borre tu base de datos o filtre secretos del repositorio (si, si que se puede&#8230; ).</p><p>La arquitectura de seguridad de GitHub Agentic Workflows se basa en defensa en profundidad en 4 capas:</p><ol><li><p><strong>Aislamiento y solo lectura por defecto:</strong> Cuando el agente se ejecuta en el contenedor de GitHub Actions, lo hace en un entorno aislado (sandboxed) y sus permisos son estrictamente de solo lectura. No puede hacer <code>git push</code> ni modificar el repositorio directamente.</p></li><li><p><strong>Safe Outputs (Salidas seguras):</strong> Si el agente est&#225; en modo solo lectura, hace su trabajo mediante un concepto llamado <code>safe-outputs</code>.</p><p>T&#250; defines en la configuraci&#243;n qu&#233; operaciones tiene permitidas (por ejemplo, <code>create-pull-request</code> o <code>create-issue</code>).</p><p>El agente solo puede solicitar que se ejecute esa acci&#243;n preaprobada con el contenido sanitizado, y es la infraestructura la que realiza la escritura, no el modelo de IA. Esto garantiza que <strong>siempre quede un rastro auditable</strong> (una PR, un comentario) y que nosotros, los humanos tengamos siempre la &#250;ltima palabra antes de integrar c&#243;digo.</p></li><li><p><strong>Integraci&#243;n con MCP (Model Context Protocol):</strong> Ya hemos hablado de <a href="/__u/lvrpiz.substack.com/p/model-context-protocol-guia">MCP</a> anteriormente en la newsletter. Este protocolo permite conectar modelos de IA con fuentes de datos externas de forma segura. Los Agentic Workflows exponen capacidades espec&#237;ficas del entorno de GitHub (leer archivos, consultar issues) mediante servidores MCP controlados y aislados en la red.</p></li><li><p><strong>Compilaci&#243;n y Lock Files:</strong> El c&#243;digo fuente de tu workflow es un archivo Markdown (<code>.md</code>), pero GitHub Actions no sabe leer Markdown. La herramienta de l&#237;nea de comandos <code>gh aw compile</code> procesa tu Markdown, valida la seguridad, revisa los permisos y <strong>genera un archivo </strong><code>.lock.yml</code> que es el que realmente se ejecuta. Este archivo bloqueado es el que evita inyecciones en tiempo de ejecuci&#243;n.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Hwgn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Hwgn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png" width="1456" height="149" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:149,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:92125,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lvrpiz.substack.com/i/188909890?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hwgn!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc2a12e-0153-4c16-adc4-5e27e1ded93a_2488x254.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Flujo de dise&#241;o a implementaci&#243;n de un workflow ag&#233;ntico de GitHub</figcaption></figure></div><p>Si quieres profundizar en la parte de seguridad de los Workflows ag&#233;nticos te recomiento esta <a href="https://github.github.com/gh-aw/introduction/architecture/">p&#225;gina de documentaci&#243;n de GitHub</a>.</p><p></p><h2>Multi-Agente por dise&#241;o: Copilot, Claude o COdex</h2><p>Un detalle  que me encanta es la neutralidad del motor de IA. Aunque por defecto utiliza GitHub Copilot, la arquitectura est&#225; dise&#241;ada para ser agn&#243;stica respecto al agente que haya por debajo.</p><p>Puedes configurar el flujo para que el motor de inferencia sea <strong>Claude de Anthropic</strong> o <strong>Codex de OpenAI</strong>. Esto es vital porque evita el <em>vendor lock-in</em> a nivel de prompt. Mantienes tu workflow en lenguaje natural intacto y simplemente cambias el motor en la configuraci&#243;n para comparar resultados, evaluar costes o aprovechar las fortalezas espec&#237;ficas de cada modelo.</p><p></p><h2>Gu&#237;a paso a paso: C&#243;mo crear tu primer Agentic Workflow</h2><p>Lo primero, necesitas preparar tu entorno local porque la generaci&#243;n del YAML final ocurre en tu m&#225;quina.</p><p>Primero, aseg&#250;rate de tener instalado la <a href="https://cli.github.com">CLI de GitHub</a> (<code>gh</code>) y luego instala la extensi&#243;n espec&#237;fica para flujos ag&#233;nticos:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;1a93b311-2e34-4a5d-ac5d-e47da04801df&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">gh extension install github/gh-aw</code></pre></div><p>Ahora necesitas autenticar el entorno para que pueda hacer llamadas al modelo de IA. Debes generar un <a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens">Personal Access Token (PAT)</a> en la configuraci&#243;n de desarrollador de GitHub asegur&#225;ndote de marcar el scope <code>Copilot Requests</code>. Una vez lo tengas, gu&#225;rdalo como secreto en tu repositorio usando la CLI:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;b65973ed-2f40-4526-827e-26519167729a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">gh aw secrets set COPILOT_GITHUB_TOKEN --value TU_PAT_AQUI</code></pre></div><p>La estructura b&#225;sica se compone de un archivo Markdown ubicado en la ruta habitual <code>.github/workflows/nombre-del-flujo.md</code>. Este archivo tiene dos partes claramente diferenciadas: un <em>Frontmatter</em> en formato YAML en la cabecera (donde defines las reglas estrictas) y el cuerpo en Markdown (donde defines la l&#243;gica ag&#233;ntica). Si leiste el post sobre <a href="/__u/lvrpiz.substack.com/p/agent-skills-guia-completa-skillsmd">Agent Skills</a> seguramente te resulte familiar este formato.</p><p></p><h2>Ejemplo real de un workflow ag&#233;ntico: Solucionar Issues del repositorio</h2><p>Para ense&#241;arte un ejemplo de c&#243;mo se combinan el determinismo y la IA, f&#237;jate en este ejemplo adaptado de un flujo para mejorar la calidad de los issues entrantes a un repositorio.</p><p>Imagina que un usuario abre un issue con muy poca informaci&#243;n, sin etiquetas y con un t&#237;tulo vago. El objetivo es que la IA lo analice, le d&#233; un formato estructurado y asigne etiquetas pertinentes.</p><p>Primero creamos el archivo <code>.github/workflows/mejorar-issues.md</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;f824dd37-2d64-4218-b2e0-66368c3db429&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"># Esta primera secci&#243;n es el Frontmatter
---
on:
  issues:
    types: [opened]
permissions:
  issues: read
safe-outputs:
  update-issue:
    title:
    body:
tools:
  github:
    toolsets: [issues]
---
# Mejorador de Calidad de Issues

Tu objetivo es mejorar los nuevos issues para que sean claros, est&#233;n bien estructurados y sean f&#225;ciles de entender para el equipo de desarrollo.

## Contexto del Issue
| Campo  | Valor          |
| ------ | -------------- |
| N&#250;mero | #$ISSUE_NUMBER |
| Autor  | @$ISSUE_AUTHOR |
| T&#237;tulo | $ISSUE_TITLE   |
| Cuerpo | $ISSUE_BODY    |

## Tareas a realizar

1. Obtener contexto:
   - Lee el archivo README para entender el prop&#243;sito del proyecto.
   - Lista las etiquetas disponibles en el repositorio.

2. Traducci&#243;n y Claridad:
   - Si el issue NO est&#225; en ingl&#233;s, trad&#250;celo al ingl&#233;s manteniendo intactos todos los detalles t&#233;cnicos y logs de error.

3. Mejora del T&#237;tulo:
   - A&#241;ade un prefijo estandarizado basado en el tipo de issue detectado (Bug, Feature, Docs, Refactor).
   - Ejemplo: "[Bug] Error de login con caracteres especiales".

4. Reestructuraci&#243;n del Cuerpo:
   - Utiliza secciones claras en formato Markdown.
   - Para bugs, aseg&#250;rate de crear las secciones "Descripci&#243;n", "Pasos para reproducir" y "Comportamiento esperado vs actual".

5. Aplicar cambios:
   - Utiliza la herramienta de salida segura para actualizar el issue #$ISSUE_NUMBER con el nuevo t&#237;tulo y cuerpo.
   - A&#241;ade un comentario breve resumiendo los cambios realizados.
   - Asigna entre 1 y 3 etiquetas relevantes basadas en el contexto del repositorio.

## Reglas estrictas
- Nunca cambies el significado t&#233;cnico original reportado por el usuario.
- Si el issue ya est&#225; perfectamente redactado, realiza cambios m&#237;nimos o ninguno.
- Mant&#233;n un tono de ayuda profesional.</code></pre></div><p>Aqu&#237; hay varios elementos de dise&#241;o que merecen un an&#225;lisis profundo.</p><ul><li><p>En el <em>Frontmatter</em>, utilizamos el trigger est&#225;ndar de GitHub Actions (<code>on: issues</code>), muy similar a como lo hacemos en GitHub Actions. La secci&#243;n <code>permissions</code> est&#225; restringida &#250;nicamente a lectura, limitando la superficie de ataque si algo sale mal.</p></li><li><p>En <code>safe-outputs</code> le estamos diciendo a la infraestructura de ejecuci&#243;n: &#8220;<em>El modelo de IA tiene permiso exclusivo para actualizar el t&#237;tulo y el cuerpo de un issue existente</em>&#8221; (<code>update-issue</code>). Si el agente alucina e intenta borrar una rama del repositorio, la petici&#243;n ser&#225; interceptada y bloqueada en la capa de seguridad porque no est&#225; declarada expl&#237;citamente como una salida segura.</p></li><li><p>En la secci&#243;n de <code>tools</code>, limitamos <strong>el servidor MCP de GitHub</strong> &#250;nicamente al conjunto de herramientas (<code>toolsets</code>) relacionadas con issues, evitando que la IA pierda tiempo o recursos explorando partes irrelevantes de la API de GitHub.</p></li><li><p>Finalmente, el cuerpo del documento mezcla variables de entorno inyectadas en tiempo real (<code>$ISSUE_TITLE</code>, <code>$ISSUE_BODY</code>) dentro de una tabla de contexto, seguidas de instrucciones paso a paso muy precisas y reglas de restricci&#243;n.</p></li></ul><p></p><h3>&#191;C&#243;mo lanzar el workflow ag&#233;ntico? Compilaci&#243;n y ejecuci&#243;n</h3><p>El archivo Markdown de arriba no hace nada por s&#237; solo. Tienes que compilarlo ejecutando:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;9db64f54-b63a-4983-a3cd-372a7bd57488&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">gh aw compile</code></pre></div><p>Este comando analiza tu archivo Markdown, valida que las herramientas y los safe-outputs solicitados existen y son seguros, y genera un archivo <code>.github/workflows/mejorar-issues.lock.yml</code> junto con una carpeta interna <code>.github/aw</code>. El archivo YAML generado es ilegible para un humano (y no se debe editar), pero contiene toda la l&#243;gica de orquestaci&#243;n, aprovisionamiento de contenedores y proxy MCP necesarios para ejecutar el flujo de manera segura en la infraestructura de Actions.</p><p>Debes hacer un commit y hacer push tanto del <code>.md</code> como del <code>.lock.yml</code> a tu repositorio. A partir de ese momento, cada vez que alguien abra un issue, GitHub Actions levantar&#225; el entorno y ejecutar&#225; la l&#243;gica ag&#233;ntica.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IbXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_webp, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IbXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;GitHub Agentic Workflows are now in technical preview - GitHub Changelog&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub Agentic Workflows are now in technical preview - GitHub Changelog" title="GitHub Agentic Workflows are now in technical preview - GitHub Changelog" srcset="/__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_424, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_848, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_1272, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!IbXZ!, /__u/lvrpiz.substack.com/w_1456, /__u/lvrpiz.substack.com/c_limit, /__u/lvrpiz.substack.com/f_auto, /__u/lvrpiz.substack.com/q_auto:good, /__u/lvrpiz.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd696f8ee-e32e-46b7-9e7c-d1741c21a96b_2064x1084.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">GitHub Agentic Workflows</figcaption></figure></div><p></p><h2>Patrones de dise&#241;o para casos de uso reales: &#191;Qu&#233; es DailyOps y MultiRepoOps?</h2><p>Una vez que entiendes la mec&#225;nica, las posibilidades son muchas y seguro que ya tienes alguna idea en mente de c&#243;mo integrarlo en alg&#250;n repositorio.</p><p>Al basarse en la lectura de contexto natural, se abren patrones de automatizaci&#243;n que antes eran imposibles de mantener mediante scripts bash. La propia documentaci&#243;n oficial categoriza estos casos de uso en varios patrones, siendo <strong>DailyOps</strong> y <strong>Continuous Documentation</strong> los m&#225;s potentes.</p><p>F&#237;jate en este ejemplo de un workflow programado diariamente para generar un reporte de estado del equipo:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;fb17178c-ba45-4c51-8f4d-a022c0c0dc22&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">---
on:
  schedule: daily
permissions:
  contents: read
  issues: read
  pull-requests: read
safe-outputs:
  create-issue:
    title-prefix: "[estado-equipo] "
    labels: [reporte, estado-diario]
    close-older-issues: true
---

## Reporte Diario de Issues

Genera un reporte de estado diario positivo y estructurado para el equipo en forma de issue de GitHub.

## Qu&#233; debes incluir

- Actividad reciente del repositorio (issues, PRs, discusiones, releases, cambios en el c&#243;digo).
- Seguimiento del progreso, recordatorios de objetivos del sprint y aspectos destacados.
- Estado general del proyecto y recomendaciones.
- Pr&#243;ximos pasos accionables para los mantenedores.
</code></pre></div><p>Este workflow se levanta cada ma&#241;ana, el agente consume el estado actual del repositorio, obtiene los datos de los Pull Requests mergeados, lee los comentarios de los issues cerrados y sintetiza todo en un formato sencillo de leer.</p><p>Otros patrones de dise&#241;o que se est&#225;n explorando incluyen:</p><ul><li><p><strong>Continuous QA:</strong> Diagn&#243;stico autom&#225;tico de fallos en la integraci&#243;n continua (CI), an&#225;lisis de logs de errores complejos y propuestas de parches (fixes) mediante PRs.</p></li><li><p><strong>Continuous Documentation:</strong> Mantenimiento activo de los archivos README y de la documentaci&#243;n t&#233;cnica para asegurar que siempre reflejen los &#250;ltimos cambios del c&#243;digo fuente, evitando el cl&#225;sico problema de documentaci&#243;n obsoleta.</p></li><li><p><strong>MultiRepoOps:</strong> Flujos que sincronizan estados, caracter&#237;sticas o m&#233;tricas a trav&#233;s de m&#250;ltiples repositorios de una misma organizaci&#243;n, actuando como un orquestador inteligente.</p></li><li><p>Si quieres ver la lista completa de agentes de dise&#241;o, GitHub los ha recopilado <a href="https://github.github.com/gh-aw/patterns/central-repo-ops/">aqu&#237;</a>.</p></li></ul><p></p><h2>Costes y limitaciones de GitHub Agentic Workflows</h2><p>Respecto los compromisos t&#233;cnicos. Ejecutar IA dentro de un pipeline de integraci&#243;n tiene un coste directo en cuanto a costes de facturaci&#243;n y de precisi&#243;n.</p><p>Cuando utilizas GitHub Copilot con la configuraci&#243;n por defecto, cada ejecuci&#243;n de un Agentic Workflow suele incurrir en dos llamadas de tipo <strong>premium request</strong>: una para <strong>procesar la tarea principal del agente</strong> y otra independiente para <strong>validar la seguridad y los guardrails a trav&#233;s de los safe-outputs</strong>. A escala empresarial, si lanzas un flujo ag&#233;ntico en cada <em>push</em> a cualquier rama, la factura puede escalar r&#225;pidamente.</p><p>La recomendaci&#243;n oficial de GitHub es comenzar vinculando estos flujos a eventos de baja frecuencia como tareas programadas diarias, creaci&#243;n de releases o a triggers manuales <code>workflow_dispatch</code> antes de automatizarlos completamente por evento.</p><p>Otro aspecto vital es el factor humano. La IA es una herramienta de asistencia, no un desarrollador aut&#243;nomo infalible como ya todos habremos comprobado. Un principio de dise&#241;o fundamental de GitHub Agentic Workflows es que los Pull Requests generados por agentes nunca se mergeen autom&#225;ticamente, siempre debe haber un humano responsable (el famoso Human-in-the-loop) que <strong>revise</strong>, <strong>valide</strong> y <strong>apruebe</strong> los cambios propuestos por la IA. Las alucinaciones en modelos de lenguaje siguen siendo una realidad t&#233;cnica.</p><p>El c&#243;digo fuente en Markdown de estos flujos debe tratarse con el mismo rigor que el c&#243;digo de producci&#243;n. Debes aplicar code reviews, iterar sobre las instrucciones progresivamente y versionar los cambios con cuidado. A veces, alterar una sola frase en el Markdown puede cambiar dr&#225;sticamente el comportamiento del agente.</p><p></p><h2>Referencias t&#233;cnicas</h2><ol><li><p><a href="https://github.com/github/gh-aw">Repositorio oficial y documentaci&#243;n de GitHub Agentic Workflows</a> - Especificaciones t&#233;cnicas, CLI y gu&#237;a de configuraci&#243;n inicial.</p></li><li><p><a href="https://github.github.com/gh-aw/introduction/how-they-work/">Documentaci&#243;n sobre c&#243;mo funcionan bajo el cap&#243; (How they work)</a> - Explicaci&#243;n profunda de la compilaci&#243;n WASM, aislamiento y dependencias.</p></li><li><p><a href="https://github.blog/ai-and-ml/automate-repository-tasks-with-github-agentic-workflows/">Art&#237;culo de lanzamiento en el Blog de GitHub</a> - Contexto sobre el concepto de Continuous AI y ejemplos de aplicaci&#243;n en la industria.</p></li><li><p><a href="https://githubnext.com/projects/agentic-workflows/">Portal de GitHub Next: Agentic Workflows</a> - Estado de la investigaci&#243;n, filosof&#237;a de dise&#241;o y modelos soportados.</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://lvrpiz.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer IA y DevOps para Profesionales! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>