<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://development-wec.wiline.com/docs/es/news/</id>
    <title>WiLine Edge Cloud — AI News</title>
    <updated>2026-09-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://development-wec.wiline.com/docs/es/news/"/>
    <subtitle>Short, high-signal takes on what is changing in AI infrastructure — and what it means for self-hosting on WiLine.</subtitle>
    <icon>https://development-wec.wiline.com/docs/es/img/Logo_icon_blue.svg</icon>
    <entry>
        <title type="html"><![CDATA[Jev: un modelo de decisión que pones delante de tus LLM para enrutar el tráfico]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/"/>
        <updated>2026-09-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Jev es el primer modelo de TypeSafe — no conversa, decide. Le das una petición y devuelve una etiqueta estructurada en unos 127 ms. LiteLLM lo conectó a su Auto Router como clasificador y lo midió 5.43x más rápido y 96% más barato que un Haiku haciendo el mismo trabajo. Esto es qué es Jev, cómo funciona el enrutado, dónde falla de verdad el clasificador LLM, y dónde encaja delante de tus modelos en WEC.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Enrutado · AI News</span><h2 class="newsHero__title">Jev decide, tus LLM responden</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Llega una petición</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">El modelo correcto, en 127 ms</span></div></div>
<p>TypeSafe <a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" target="_blank" rel="noopener noreferrer" class="">lanzó su primer modelo el 15 de septiembre</a>,
y lo interesante de Jev es lo que se niega a hacer. No te escribe un párrafo. Le das
una petición y te devuelve un valor estructurado — una etiqueta, una clase, una
decisión — en, según ellos, 70 a 500 ms. La frase más clara del post es de su
fundador, Diogo Almeida: <em>"Think of Jev as a frontier-intelligence function call:
unstructured state in, typed probabilistic decisions out."</em></p>
<p>La mayoría de los modelos están hechos para hablar con personas. Jev está hecho para
que lo llame el código — y el primer trabajo que le encaja esa forma es el enrutado.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="un-modelo-hecho-para-decidir-no-para-hablar">Un modelo hecho para decidir, no para hablar<a href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/#un-modelo-hecho-para-decidir-no-para-hablar" class="hash-link" aria-label="Enlace directo al Un modelo hecho para decidir, no para hablar" title="Enlace directo al Un modelo hecho para decidir, no para hablar" translate="no">​</a></h2>
<p>El nombre cuenta la historia dos veces. "System One" es el término de Kahneman para
el juicio rápido y automático — la decisión instantánea — frente a "System Two", el
razonamiento lento y deliberado para el que recurrimos a un LLM grande. Y "Jev" es por
<strong>William Stanley Jevons</strong>, el economista de la paradoja de la eficiencia: abarata
algo y la gente lo usa mucho más. TypeSafe apuesta a que las decisiones de máquina
baratas se usarán en todas partes.</p>
<p>Un modelo de chat genera tokens uno a uno hasta que existe un párrafo. Jev hace lo
contrario — TypeSafe dice que "gives up string generation", muestrea todas las salidas
en una única consulta paralela, y devuelve un valor de un conjunto que defines de
antemano. Salen dos propiedades, y ambas importan para el enrutado:</p>
<ul>
<li class=""><strong>La salida es tipada y estructurada</strong>, de un conjunto conocido (<code>SIMPLE</code>,
<code>MEDIUM</code>, <code>COMPLEX</code>, <code>REASONING</code>), no prosa que tengas que parsear. TypeSafe afirma
que "never makes type errors" — y conviene ser preciso, porque ellos lo son: ese 0%
<em>"is not empirical. Schema matching is guaranteed, thus we can confidently add 0%."</em>
Es una propiedad de restringir la salida a un esquema, no un resultado medido.</li>
<li class=""><strong>Cada decisión lleva una probabilidad calibrada</strong> — "higher confidence means
higher accuracy", entrenada con un método que llaman Reinforcement Learning for
Calibrated Decisions (RLCD). Si eso se sostiene, el código puede actuar sobre el
número: toma la etiqueta con confianza, escala cuando no.</li>
</ul>
<p>Sus cifras estrella ("40x-200x faster", salida "too cheap to meter", una workflow eval
a "193.6x faster, 444.6x cheaper") son afirmaciones del proveedor sobre sus propias
evals, y para su crédito señalan el sesgo — las evals fueron "made by individuals on
our model capabilities team". Trátalas como afirmaciones hasta que alguien
independiente las repita.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cómo-funciona-el-enrutado-y-por-qué-el-que-decide-es-el-problema">Cómo funciona el enrutado, y por qué el que decide es el problema<a href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/#c%C3%B3mo-funciona-el-enrutado-y-por-qu%C3%A9-el-que-decide-es-el-problema" class="hash-link" aria-label="Enlace directo al Cómo funciona el enrutado, y por qué el que decide es el problema" title="Enlace directo al Cómo funciona el enrutado, y por qué el que decide es el problema" translate="no">​</a></h2>
<p>Enrutar modelos es una jugada de coste. No toda petición necesita tu modelo más
grande, así que pones un modelo barato y uno caro detrás de un mismo endpoint y algo
delante decide cuál responde. Los turnos fáciles van al nivel barato; los difíciles al
caro; la factura baja. Ese "algo delante" es un clasificador:</p>
<!-- -->
<p>Construye ese clasificador de la forma habitual — pregúntale a <em>otro</em> LLM "¿esto es
simple o complejo?" — y cada petición paga por una llamada a un LLM <strong>antes</strong> de pagar
por la respuesta. Esa llamada es lenta y cuesta tokens, en cada petición, haya acabado
en el nivel barato o no. La decisión que debía ahorrar dinero lo está gastando en
silencio.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jev-en-el-hueco-del-que-decide">Jev en el hueco del que decide<a href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/#jev-en-el-hueco-del-que-decide" class="hash-link" aria-label="Enlace directo al Jev en el hueco del que decide" title="Enlace directo al Jev en el hueco del que decide" translate="no">​</a></h2>
<p>Jev encaja en ese hueco. No le pides que responda — le pides a qué nivel pertenece la
petición, y la pasarela enruta según la etiqueta:</p>
<figure class="stageFlow"><div class="stageFlow__track"><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.050);border-color:rgba(var(--primary-rgb), 0.250)"><span class="stageFlow__stage">1</span><span class="stageFlow__title">Llega la petición</span><span class="stageFlow__tag">a la pasarela</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.123);border-color:rgba(var(--primary-rgb), 0.383)"><span class="stageFlow__stage">2</span><span class="stageFlow__title">Jev la etiqueta</span><span class="stageFlow__tag">~127 ms, un nivel</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.197);border-color:rgba(var(--primary-rgb), 0.517)"><span class="stageFlow__stage">3</span><span class="stageFlow__title">La pasarela enruta</span><span class="stageFlow__tag">al modelo que toca</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.270);border-color:rgba(var(--primary-rgb), 0.650)"><span class="stageFlow__stage">4</span><span class="stageFlow__title">El modelo responde</span><span class="stageFlow__tag">pequeño o grande</span></div></div><figcaption class="stageFlow__caption">El clasificador es el paso 2. Hazlo barato y el montaje compensa; hazlo un LLM y grava cada llamada.</figcaption></figure>
<p>En el Auto Router de LiteLLM eso es un cambio de configuración, no código nuevo —
nombras los niveles, mapeas cada uno a un modelo, y pones <code>classifier_type: jev</code>:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> jev</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">openai_small</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">openai_large</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">anthropic</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">REASONING</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">anthropic_large</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> jev</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cuánto-vale-el-cambio--y-dónde-falla-el-llm">Cuánto vale el cambio — y dónde falla el LLM<a href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/#cu%C3%A1nto-vale-el-cambio--y-d%C3%B3nde-falla-el-llm" class="hash-link" aria-label="Enlace directo al Cuánto vale el cambio — y dónde falla el LLM" title="Enlace directo al Cuánto vale el cambio — y dónde falla el LLM" translate="no">​</a></h2>
<p>El 20 de septiembre, Moe Khalil, de LiteLLM,
<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark" target="_blank" rel="noopener noreferrer" class="">publicó un benchmark</a>
titulado <em>"JEV Classifier: 5.43x as Fast as Haiku, 96% Lower Cost."</em> Corrió 80 casos
tres veces cada uno — 240 llamadas — con Jev (<code>jev-1.13.0</code>) contra Claude Haiku 4.5
como línea base de "clasificar con un LLM":</p>
<div class="metricCompare"><div class="metricCard"><span class="metricCard__label">Latencia del clasificador (p50)</span><span class="metricCard__factor">5.43× más rápido</span><div class="metricCard__rows"><div class="metricCard__row metricCard__row--a"><span class="metricCard__name">Clasificador Haiku 4.5</span><span class="metricCard__val">688.40 ms</span></div><div class="metricCard__row metricCard__row--b"><span class="metricCard__name">Clasificador Jev</span><span class="metricCard__val">126.81 ms</span></div></div></div><div class="metricCard"><span class="metricCard__label">Acertó el nivel esperado</span><span class="metricCard__factor">+21 pts</span><div class="metricCard__rows"><div class="metricCard__row metricCard__row--a"><span class="metricCard__name">Clasificador Haiku 4.5</span><span class="metricCard__val">73.75% (177/240)</span></div><div class="metricCard__row metricCard__row--b"><span class="metricCard__name">Clasificador Jev</span><span class="metricCard__val">95.00% (228/240)</span></div></div></div><div class="metricCard"><span class="metricCard__label">Coste de 240 llamadas</span><span class="metricCard__factor">~96% más barato</span><div class="metricCard__rows"><div class="metricCard__row metricCard__row--a"><span class="metricCard__name">Clasificador Haiku 4.5</span><span class="metricCard__val">$0.1985</span></div><div class="metricCard__row metricCard__row--b"><span class="metricCard__name">Clasificador Jev</span><span class="metricCard__val">$0.0077</span></div></div></div></div>
<p>La media esconde el hallazgo real, que está en los números por nivel. En <code>SIMPLE</code>
ambos fueron perfectos (100%). Pero en <code>MEDIUM</code> Haiku se desplomó a <strong>38.33%</strong> donde
Jev aguantó <strong>85%</strong>, y en <code>REASONING</code> Haiku logró <strong>76.67%</strong> frente al <strong>100%</strong> de
Jev. Dicho de otro modo, el clasificador LLM distingue bien lo trivial de lo no
trivial, y es poco fiable justo en la banda intermedia donde las decisiones de
enrutado de verdad te ahorran o te cuestan dinero.</p>
<p>Dos salvedades, ambas de LiteLLM, dichas claramente: los niveles esperados "were
authored with the synthetic prompts, without independent review", y el benchmark midió
<strong>la decisión de enrutado, no la calidad de la respuesta final</strong> — "downstream answer
quality was not measured". Para su crédito, publicaron un
<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark" target="_blank" rel="noopener noreferrer" class="">archivo de reproducción</a>
congelado y verificado por hash para poder re-analizar la corrida. Léelo como "Jev
eligió el nivel rápido, barato y como esperaban", no como "tus respuestas salen un 96%
más baratas de extremo a extremo".</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dónde-encaja-en-wec">Dónde encaja en WEC<a href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/#d%C3%B3nde-encaja-en-wec" class="hash-link" aria-label="Enlace directo al Dónde encaja en WEC" title="Enlace directo al Dónde encaja en WEC" translate="no">​</a></h2>
<p>Construimos este mismo montaje en el tutorial de
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/litellm-complexity-routing/">enrutado por complejidad</a> — una pasarela
delante de la WEC Inference API que puntúa cada petición y la manda al nivel correcto,
Qwen3.5:9B para los turnos simples y Qwen3.5:122B para los difíciles. Y ya mostramos
cómo un clasificador se equivoca <a class="" href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/">con un simple "yes"</a>,
mandando trabajo al modelo equivocado.</p>
<p>En ambos, el clasificador es la parte que nadie cuenta. Pon un LLM en ese hueco y
añades dos tercios de segundo y un cargo en tokens a cada llamada antes siquiera de
elegir el modelo real. Un modelo como Jev es una apuesta a que la decisión delante de
tus modelos puede ser casi gratis — para que enrutar compense en lugar de cobrarse a
sí mismo.</p>
<p>Es pronto, está alojado, y los números todavía necesitan que alguien independiente los
repita. Para un stack WEC que mantiene la inferencia en casa, "alojado" es el
verdadero signo de interrogación — estarías mandando la decisión de enrutado de cada
petición a un tercero. Pero la forma es lo que viaja: un modelo que decide en
milisegundos, sentado delante de los modelos que responden.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fuentes">Fuentes<a href="https://development-wec.wiline.com/docs/es/news/router-classifier-tax-system-one-jev/#fuentes" class="hash-link" aria-label="Enlace directo al Fuentes" title="Enlace directo al Fuentes" translate="no">​</a></h2>
<ul>
<li class="">Diogo Almeida, TypeSafe — <a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" target="_blank" rel="noopener noreferrer" class=""><em>Introducing System One Models and Jev</em></a> (15 de septiembre de 2026)</li>
<li class="">Moe Khalil, LiteLLM — <a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark" target="_blank" rel="noopener noreferrer" class=""><em>JEV Classifier: 5.43x as Fast as Haiku, 96% Lower Cost</em></a> (20 de septiembre de 2026)</li>
</ul>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="routing" term="routing"/>
        <category label="cost" term="cost"/>
        <category label="litellm" term="litellm"/>
        <category label="models" term="models"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[El bug que redujo a la mitad el throughput de un gateway sin un solo error]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/"/>
        <updated>2026-09-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Un ingeniero escribió una opción que decía no cifres esta conexión. El sistema la cifró igual, y después se quedó esperando una respuesta que nunca llegó. El throughput cayó a la mitad, cada petición siguió devolviendo éxito, y ningún dashboard mostró problema alguno. Pfizer y LiteLLM publicaron la historia — y la causa son cuatro líneas de código que cualquiera puede leer.]]></summary>
        <content type="html"><![CDATA[<figure class="newsHero newsHero--image"><span class="newsHero__chip">Gateways · AI News</span><img src="https://development-wec.wiline.com/docs/es/img/news/litellm-cover.webp" alt="Un gateway perdiendo la mitad de su throughput sin reportar errores" loading="eager"></figure>
<p>Pfizer opera un gateway de IA — el único servicio con el que habla cada herramienta
interna cuando quiere un modelo. Durante una verificación rutinaria de actualización,
su throughput cayó a la mitad. Sin errores. Sin peticiones fallidas. Nada raro en
ningún dashboard.</p>
<p>Publicaron <a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency" target="_blank" rel="noopener noreferrer" class="">lo que encontraron</a>
junto al equipo de LiteLLM, y la causa es lo bastante pequeña como para caber en un
párrafo: alguien escribió una opción que decía <em>no cifres esta conexión</em>, y el sistema
la cifró igual.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-salió-mal-exactamente">Qué salió mal exactamente<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#qu%C3%A9-sali%C3%B3-mal-exactamente" class="hash-link" aria-label="Enlace directo al Qué salió mal exactamente" title="Enlace directo al Qué salió mal exactamente" translate="no">​</a></h2>
<p>El gateway mantiene una caché — un almacén lateral rápido llamado Redis que consulta
antes de hacer trabajo costoso. La conexión a esa caché puede ir cifrada o no, y eso
es una opción que escribes en un archivo de configuración.</p>
<p>El operador escribió la opción en <strong>off</strong>. Conexión plana, sin cifrado.</p>
<p>El código que leía esa opción comprobaba si la opción <em>existía</em>, no a qué estaba
puesta. Escribir <code>off</code> crea la opción. La opción ahora existe. Así que la comprobación
pasó, y el gateway abrió una conexión cifrada — contra una caché que no esperaba
ninguna.</p>
<p>Aquí está la parte que lo vuelve peligroso y no solo incorrecto. Cuando un programa
intenta iniciar una conversación cifrada con algo que no habla cifrado, no lo rechazan.
Dice hola y espera una respuesta que nunca llega. No rechazado — ignorado.</p>
<p>Así que la caché no estaba <em>caída</em>. La caché estaba <strong>lenta</strong>. Y lo lento es mucho más
difícil de ver.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="las-cuatro-líneas">Las cuatro líneas<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#las-cuatro-l%C3%ADneas" class="hash-link" aria-label="Enlace directo al Las cuatro líneas" title="Enlace directo al Las cuatro líneas" translate="no">​</a></h2>
<p>Para quien quiera mirarlo directamente, esto es
<a href="https://github.com/BerriAI/litellm/blob/v1.89.2/litellm/_redis.py#L701" target="_blank" rel="noopener noreferrer" class=""><code>get_redis_connection_pool</code></a>
tal como estaba en la versión afectada:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">connection_class </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> async_redis</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Connection</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"ssl"</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> redis_kwargs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    connection_class </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> async_redis</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">SSLConnection</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    redis_kwargs</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"ssl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    redis_kwargs</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"connection_class"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> connection_class</span><br></div></code></pre></div></div>
<p><code>"ssl" in redis_kwargs</code> pregunta <em>¿existe esta clave?</em>. Existe — la creaste tú al
ponerla en false. La rama se ejecuta, y obtienes la conexión cifrada que acabas de
desactivar explícitamente.</p>
<p>Omite la opción por completo y todo funciona. Escríbela y di que no, y se rompe. La
configuración cuidadosa es la que está rota.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-nadie-recibió-un-error">Por qué nadie recibió un error<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#por-qu%C3%A9-nadie-recibi%C3%B3-un-error" class="hash-link" aria-label="Enlace directo al Por qué nadie recibió un error" title="Enlace directo al Por qué nadie recibió un error" translate="no">​</a></h2>
<p>Cada capa por encima de la caché está construida para tolerar que la caché no responda,
y ese diseño es correcto — si la caché no está disponible, haces el trabajo por la vía
lenta y sigues adelante. Que es precisamente lo que convierte esto en silencio:</p>
<blockquote>
<p>Redis timeout errors appeared in the proxy's internal logs, but the gateway still
returned HTTP 200 to every caller</p>
</blockquote>
<p>HTTP 200 significa <em>éxito</em>. Cada una de las peticiones reportó éxito, durante todo el
episodio. El post es preciso sobre dónde cayó el daño:</p>
<blockquote>
<p>Redis operations were stalling on TLS handshake timeouts in the async hot path,
degrading throughput without surfacing HTTP-level errors</p>
</blockquote>
<p>Las cifras reportadas: throughput de unas 300 peticiones por segundo a unas 156 —
aproximadamente la mitad — con tiempo de respuesta mediano bajo carga en 4.200 ms,
medido contra 750 usuarios concurrentes simulados durante una ejecución sostenida de
60 segundos.</p>
<p>Esas mediciones vienen de las pruebas internas de Pfizer y se reportan en el post, no
son reproducibles de forma independiente. El código es otra cosa — puedes abrir el
archivo en esa versión y leerlo tú mismo.</p>
<p>Su propio resumen en una línea es la mejor frase del artículo:</p>
<blockquote>
<p>A throughput drop with a 0% HTTP error rate is the worst kind of regression to
catch after the fact</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-bug-ya-estaba-ahí">El bug ya estaba ahí<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#el-bug-ya-estaba-ah%C3%AD" class="hash-link" aria-label="Enlace directo al El bug ya estaba ahí" title="Enlace directo al El bug ya estaba ahí" translate="no">​</a></h2>
<p>Quise saber si esto llegó con la actualización que lo expuso. No fue así. Comparé el
archivo relevante entre la versión que rendía bien y la que no — son idénticos byte a
byte. El post dice lo mismo:</p>
<blockquote>
<p>The underlying Redis bug existed in older versions too, but surfaced during
Pfizer's v1.89.2 upgrade validation under this workload</p>
</blockquote>
<p>Ese es el detalle que vale la pena masticar. Esto no era una release mala que pudieras
revertir. El fallo llevaba tiempo en el código de conexión, atravesando versiones que
rendían perfectamente bien en los benchmarks. Necesitó una configuración concreta y una
carga concreta antes de hacer daño visible — y entonces costó la mitad de la capacidad
de un gateway en producción sin levantar nada.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cómo-lo-encontraron-en-realidad">Cómo lo encontraron en realidad<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#c%C3%B3mo-lo-encontraron-en-realidad" class="hash-link" aria-label="Enlace directo al Cómo lo encontraron en realidad" title="Enlace directo al Cómo lo encontraron en realidad" translate="no">​</a></h2>
<p>No con monitoreo, y no rastreando cambios recientes de código. Apagando y encendiendo
funcionalidades hasta que el número se movió:</p>
<blockquote>
<p>Enabled Redis caching. Median latency jumped to 4,200ms. That isolated it to the
Redis connection path.</p>
</blockquote>
<p>Un equipo con tráfico real en producción, observabilidad real y línea directa con el
proveedor encontró esto <em>a mano</em>. No había señal en la tasa de error, porque no había
errores. Nada en los códigos de estado, porque todos decían éxito. El único lugar donde
aparecía era el tiempo de respuesta bajo carga sostenida — que solo ves si vas a
buscarlo a propósito.</p>
<p>Eso coincide con lo que me encontré a una escala mucho menor cuando hice un
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/load-test-llm-gateway-blocking-callback/">load test a un gateway para encontrar el atasco que la mediana esconde</a>:
en este tipo de infraestructura, los fallos que más te cuestan son los que nunca
levantan un error. Un callback bloqueante y una conexión atascada esperando un
handshake son bugs completamente distintos con la misma huella — el throughput se
desploma, las peticiones más lentas se vuelven mucho más lentas, y la tasa de error
nunca se mueve.</p>
<p>Debo ser honesto sobre los límites aquí: no opero nada a la escala de Pfizer, así que no
puedo reproducir sus mediciones. Lo que sí puedo hacer es leer el código, y el código es
público.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-arreglo">El arreglo<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#el-arreglo" class="hash-link" aria-label="Enlace directo al El arreglo" title="Enlace directo al El arreglo" translate="no">​</a></h2>
<p>Una línea, en la versión actual:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> redis_kwargs</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"ssl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    redis_kwargs</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"connection_class"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> async_redis</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">SSLConnection</span><br></div></code></pre></div></div>
<p>Esta versión lee el <em>valor</em> de la opción en lugar de limitarse a notar que existe. Off
ahora significa off.</p>
<p>Está registrado como <em>"Redis ssl handling — Presence check → value check"</em> bajo LIT-4307
y <a href="https://github.com/BerriAI/litellm/pull/32590" target="_blank" rel="noopener noreferrer" class="">PR #32590</a>, publicado en v1.93.0. El
título del pull request lo dice sin rodeos: <em>honor ssl value instead of key presence
when building async connection pool</em>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-llevarse-de-esto">Qué llevarse de esto<a href="https://development-wec.wiline.com/docs/es/news/pfizer-gateway-silent-throughput-bug/#qu%C3%A9-llevarse-de-esto" class="hash-link" aria-label="Enlace directo al Qué llevarse de esto" title="Enlace directo al Qué llevarse de esto" translate="no">​</a></h2>
<p>Dos cosas, si operas algo con una caché detrás.</p>
<p><strong>Comprueba qué hizo tu sistema en realidad, no qué le dijiste que hiciera.</strong> Escribir
una opción y que esa opción surta efecto son eventos distintos, y este es un ejemplo
limpio de esa brecha. La conexión que obtuvo Pfizer era la contraria a la que pidieron,
y nada en ninguna parte lo dijo.</p>
<p><strong>Si tus pruebas miden promedios, no pueden ver esto.</strong> Tampoco las alertas construidas
sobre tasas de error. Carga sostenida, tiempos de las peticiones más lentas, y
throughput comparado contra una línea base conocida son lo que convierte un atasco
silencioso en algo visible.</p>
<p>Los dashboards siguieron en verde durante todo el episodio. Eso no es una brecha de
monitoreo que cierres añadiendo otra alerta sobre errores — no había ninguno sobre el
que alertar.</p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="litellm" term="litellm"/>
        <category label="gateway" term="gateway"/>
        <category label="redis" term="redis"/>
        <category label="observability" term="observability"/>
        <category label="infrastructure" term="infrastructure"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[El Arreglo de MCP para los Catálogos de Herramientas Inflados Tiene una Factura — Y Está en los Docs, No en el Roadmap]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/"/>
        <updated>2026-09-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[El roadmap de MCP nombra el inflado del catálogo de herramientas como prioridad. La documentación de clientes ya trae el arreglo — descubrimiento progresivo, con una meta-herramienta search_tools — y esa misma página advierte que puede costar más de lo que ahorra, porque cargar definiciones a mitad de conversación invalida la caché de prompt del proveedor. Tres capas de caché, y el protocolo solo especifica una; la que muerde es la de tu proveedor de modelo.]]></summary>
        <content type="html"><![CDATA[<figure class="newsHero newsHero--image"><span class="newsHero__chip">Protocolos · Noticias de IA</span><img src="https://development-wec.wiline.com/docs/es/img/news/mcp-drops-sessions-retires-three-core-features-16x9.webp" alt="Descubrimiento progresivo de herramientas y la caché de prompt del proveedor" loading="eager"></figure>
<p>El <a href="https://blog.modelcontextprotocol.io/posts/mcp-roadmap/" target="_blank" rel="noopener noreferrer" class="">roadmap actual</a> de los
mantenedores de MCP nombra un problema que la mayoría de quienes construyen agentes
ha sentido sin medirlo: el catálogo de herramientas de un servidor se le cobra al
modelo antes de que alguien pregunte nada. Bajo <em>Improved primitives</em>, el artículo es
directo al respecto — <em>"Connecting to a server with a hundred tools means the model
pays for that entire surface before the user has asked a single question, and tool
selection tends to get worse as the list grows."</em></p>
<p>Lo que hace que esto valga la pena no es el roadmap. Es que el arreglo ya está
escrito, en la documentación de clientes, junto a una advertencia de que puede costar
más que el problema que resuelve — y esa advertencia recibe mucha menos atención que
el arreglo al que pone condiciones.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-número-que-los-docs-le-ponen">El número que los docs le ponen<a href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/#el-n%C3%BAmero-que-los-docs-le-ponen" class="hash-link" aria-label="Enlace directo al El número que los docs le ponen" title="Enlace directo al El número que los docs le ponen" translate="no">​</a></h2>
<p>La <a href="https://modelcontextprotocol.io/docs/2026-07-28/develop/clients/client-best-practices" target="_blank" rel="noopener noreferrer" class="">página de buenas prácticas para clientes</a>
que salió con la especificación 2026-07-28 describe el <strong>descubrimiento progresivo</strong>:
el host sigue llamando a <code>tools/list</code> como siempre, pero posterga inyectar esas
definiciones en el contexto del modelo. En su lugar le entrega al modelo una sola
meta-herramienta liviana, <code>search_tools</code>, y carga los esquemas completos solo de lo
que vuelva.</p>
<p>El propio diagrama de la página pone cifras a la diferencia — unos <strong>150.000 tokens</strong>
consumidos solo por las definiciones cuando se carga todo por adelantado, contra unos
<strong>2.000</strong> con descubrimiento progresivo. Esa es la ilustración de la documentación, no
un benchmark publicado, así que trátala como el orden de magnitud que afirman los
mantenedores y no como una medición que puedas reproducir. Aun así la forma sirve: dos
órdenes de magnitud, pagados antes de que empiece la conversación.</p>
<p>Los docs también dan un umbral en lugar de dejarlo al gusto:</p>
<blockquote>
<p>Implement a threshold as a percentage of the context window. For example, 1%-5%.</p>
</blockquote>
<p>Por debajo de eso, cargar todo está bien. Por encima, cambia de estrategia.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-trampa">La trampa<a href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/#la-trampa" class="hash-link" aria-label="Enlace directo al La trampa" title="Enlace directo al La trampa" translate="no">​</a></h2>
<p>Aquí está la frase que cambia cómo construirías esto. En la misma página, bajo
<em>Interaction with Prompt Caching</em>:</p>
<blockquote>
<p>Adding or removing tool definitions mid-conversation invalidates that cache, and
the resulting miss can cost more tokens than the definitions you removed.</p>
</blockquote>
<p>La mayoría de los proveedores cachea el prefijo del prompt, y el arreglo <code>tools</code> vive
cerca del principio de ese prefijo. Así que el mecanismo que te ahorra 148.000 tokens
de definiciones por adelantado funciona <em>mutando el prefijo</em> — que es exactamente lo
que una caché de prompt no tolera. Una caché de prefijo solo vale hasta lo primero que
cambió: edita el arreglo en el turno seis y se va todo lo cacheado a partir de ahí, que
en una conversación larga es casi todo.</p>
<p>Las mitigaciones que dan los propios docs conviene leerlas como restricciones de
diseño más que como consejos: añadir las definiciones nuevas estrictamente <em>después</em>
del punto de corte de la caché en vez de reordenar el arreglo <code>tools</code>, o enrutar cada
llamada por una única meta-herramienta estable <code>call_tool({name, args})</code> para que el
arreglo no cambie nunca. Y tratar la desconexión de un servidor como una frontera de
conversación, no como una operación por turno.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tres-cachés-y-solo-una-es-del-protocolo">Tres cachés, y solo una es del protocolo<a href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/#tres-cach%C3%A9s-y-solo-una-es-del-protocolo" class="hash-link" aria-label="Enlace directo al Tres cachés, y solo una es del protocolo" title="Enlace directo al Tres cachés, y solo una es del protocolo" translate="no">​</a></h2>
<p>Aquí es donde se vuelve genuinamente confuso, y vale la pena separar las capas porque
es fácil colapsarlas en una.</p>
<p><strong>La caché de transporte.</strong> Los resultados de <code>tools/list</code> llevan pistas <code>ttlMs</code> y
<code>cacheScope</code>, definidas en la utilidad de caché de la especificación. Un cliente que
las respete se salta el viaje HTTP. Esta sí es de MCP, en el sentido de que el
protocolo la especifica.</p>
<p><strong>El memo del lado del host.</strong> Consejo, no protocolo — una línea en las guías de
implementación de la documentación de clientes, que recomienda memoizar una definición
ya obtenida para que reinyectarla después no requiera otra llamada. Describe qué debe
hacer un host con su propio estado; nada cruza el cable. La página es explícita sobre
lo que <em>no</em> hace: <em>"This is separate from what's currently in the
model's context."</em></p>
<p><strong>La caché de prompt del proveedor.</strong> No es de MCP en absoluto. Es de quien sirve tu
modelo, se indexa por el prefijo, y la invalida exactamente aquello que el
descubrimiento progresivo hace para vivir.</p>
<p>Con la primera nos topamos por la vía difícil al escribir la
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/mcp-governed-tools-agent-elicitation/">Parte 3 de la serie de LangGraph</a> —
un <code>cache=True</code> del lado del cliente no hace nada si el servidor no anuncia un TTL, y
nada te avisa. Habiendo leído ahora esta página con calma, la lección más útil es que
incluso acertando con eso lo que compras es un viaje de ida y vuelta y nada más. Los
esquemas siguen aterrizando en el contexto. Son problemas distintos con arreglos
distintos, y confundirlos es el error por defecto.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-significa-si-acotas-herramientas-a-mano">Qué significa si acotas herramientas a mano<a href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/#qu%C3%A9-significa-si-acotas-herramientas-a-mano" class="hash-link" aria-label="Enlace directo al Qué significa si acotas herramientas a mano" title="Enlace directo al Qué significa si acotas herramientas a mano" translate="no">​</a></h2>
<p>La <a class="" href="https://development-wec.wiline.com/docs/es/tutorials/scoped-mcp-tools-per-agent/">Parte 4</a> partió un servidor MCP entre un
agente de agenda y uno de facturación filtrando el catálogo por rol — una lista de
permitidos estática, decidida antes de la corrida y fija durante toda ella.</p>
<p>Leído contra estos docs, eso resulta tener una propiedad que vale nombrar: como la
lista no cambia a mitad de conversación, no toca el prefijo del prompt, así que
esquiva por completo el problema de invalidación de caché. Es un instrumento más tosco
que <code>search_tools</code> — decides por adelantado en lugar de dejar que el modelo busque —
pero para un catálogo pequeño repartido entre roles conocidos, "tosco y estable
respecto a la caché" puede ser simplemente el intercambio correcto. Los docs dicen
algo equivalente en la otra dirección: por debajo del umbral del 1–5%, cargar todo
está bien.</p>
<p>No generalizaría más allá de eso. No hemos medido el costo de un fallo de caché contra
el costo de las definiciones en la WEC Inference API, y la posición honesta es que el
punto de cruce depende del tamaño de tu catálogo, del largo de tus conversaciones y
del comportamiento de caché de tu proveedor. Lo que los docs establecen es que ese
punto de cruce <em>existe</em>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sobre-que-el-roadmap-no-tenga-fechas">Sobre que el roadmap no tenga fechas<a href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/#sobre-que-el-roadmap-no-tenga-fechas" class="hash-link" aria-label="Enlace directo al Sobre que el roadmap no tenga fechas" title="Enlace directo al Sobre que el roadmap no tenga fechas" translate="no">​</a></h2>
<p>El roadmap nombra cinco áreas prioritarias y no se compromete a ninguna fecha de
lanzamiento ni número de versión en ninguna parte. Es justo preguntar por qué, y la
respuesta más justa viene de los propios mantenedores. Soria Parra, en el
<a href="https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/" target="_blank" rel="noopener noreferrer" class="">roadmap de marzo</a>:</p>
<blockquote>
<p>A release-oriented roadmap implies a level of predictability that open-standards
work rarely has.</p>
</blockquote>
<p>Es una postura razonable para una especificación que se desarrolla en grupos de trabajo, y
el propio historial de marzo la respalda. "Transport Evolution and Scalability" era una de
sus cuatro áreas prioritarias, y nombró el problema con precisión — llevar MCP a escala
había dejado al descubierto <em>"a consistent set of gaps: stateful sessions fight with load
balancers, horizontal scaling requires workarounds"</em> — sin comprometerse a ninguna fecha
para arreglarlo. La especificación de julio entregó ese núcleo sin estado, cinco meses
después.</p>
<p>El caché es otra historia. No aparece en ninguna parte del roadmap de marzo, y el
descubrimiento progresivo llegó como documentación para clientes sin haber estado en
ningún roadmap — algo que conviene tener en cuenta antes de tratar cualquiera de los dos
roadmaps como un índice fiable de lo que viene.</p>
<p>La recepción no ha sido uniformemente cálida. El
<a href="https://news.ycombinator.com/item?id=49399591" target="_blank" rel="noopener noreferrer" class="">hilo de Hacker News</a> sobre el roadmap
llegó a 270 puntos y 161 comentarios, y la crítica va en tres direcciones, no en una. El
costo del vaivén pasado, de <code>colingauvin</code>:</p>
<blockquote>
<p>It's unreal how bad the initial rollout was between HTTP/streaming and stdio,
bearer auth and OAuth. Virtually every client/MCP server pair had a different
portion of that matrix implemented.</p>
</blockquote>
<p>El diseño en sí, de <code>nprateem</code>:</p>
<blockquote>
<p>The real disaster was making it stateful. Need to get some adults in the room.</p>
</blockquote>
<p>Y si el protocolo justifica su complejidad, de <code>zackify</code>: <em>"I think the spec
overcomplicates everything honestly."</em></p>
<p>La primera es la que atañe a este post. Es un reclamo legítimo sobre la deriva entre
implementaciones, y es el riesgo a vigilar también con el descubrimiento progresivo: hoy es
un patrón <em>del lado del cliente</em>, con estrategias recomendadas en lugar de especificadas,
lo que significa que dos hosts pueden ser ambos razonables y comportarse distinto.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-versión-corta">La versión corta<a href="https://development-wec.wiline.com/docs/es/news/mcp-progressive-discovery-prompt-cache/#la-versi%C3%B3n-corta" class="hash-link" aria-label="Enlace directo al La versión corta" title="Enlace directo al La versión corta" translate="no">​</a></h2>
<p>El roadmap te dice que el inflado del catálogo de herramientas está en la lista de los
mantenedores. La documentación te dice qué hacer al respecto ahora y — hay que
reconocérselo — te dice en la misma frase que el arreglo tiene una factura. Si estás
cargando un catálogo grande en cada conversación, lee esa página antes de construir
una capa de descubrimiento, y averigua dónde está el punto de corte de caché de tu
proveedor antes de decidir que las cuentas de tokens te favorecen.</p>
<hr>
<p>📖 <strong>Fuentes:</strong> <a href="https://blog.modelcontextprotocol.io/posts/mcp-roadmap/" target="_blank" rel="noopener noreferrer" class="">Blog del Model Context Protocol — The New MCP Roadmap</a> · <a href="https://modelcontextprotocol.io/docs/2026-07-28/develop/clients/client-best-practices" target="_blank" rel="noopener noreferrer" class="">Docs de MCP — Client Best Practices</a> · <a href="https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/" target="_blank" rel="noopener noreferrer" class="">Blog del Model Context Protocol — The 2026 MCP Roadmap</a> · <a href="https://news.ycombinator.com/item?id=49399591" target="_blank" rel="noopener noreferrer" class="">Hacker News — New MCP Roadmap</a></p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="mcp" term="mcp"/>
        <category label="agentes" term="agentes"/>
        <category label="protocols" term="protocols"/>
        <category label="context-engineering" term="context-engineering"/>
        <category label="infrastructure" term="infrastructure"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[LangChain Acaba de Hacer MCP de Primera Clase — Lo Ejecutamos el Mismo Día, y Tres Cosas Todavía No Funcionan]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/"/>
        <updated>2026-09-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[El soporte de MCP se movió hoy al paquete langchain, construido sobre FastMCP, con elicitación como interrupt de LangGraph y un catálogo de herramientas cacheable. Lo instalamos esa misma tarde y lo apuntamos a un servidor que escribimos contra la nueva especificación. El anuncio es correcto; el ecosistema alrededor no se ha puesto al día, y uno de los huecos convierte una puerta de aprobación humana en una frase que el modelo se inventa.]]></summary>
        <content type="html"><![CDATA[<figure class="newsHero newsHero--image"><span class="newsHero__chip">Frameworks de Agentes · Noticias de IA</span><img src="https://development-wec.wiline.com/docs/es/img/news/6a99a7d831c3788cf2516870_110.png" alt="El soporte de MCP llega al paquete principal de LangChain" loading="eager"></figure>
<p>En julio <a class="" href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/">la especificación de MCP arrancó las sesiones</a>.
Escribimos entonces que el cambio era infraestructura, no changelog — que un núcleo
sin estado dejaría a los servidores sentarse detrás de balanceadores de carga
corrientes y sobrevivir a los redespliegues, y que los clientes tendrían que ponerse
al día.</p>
<p>Hoy LangChain se puso al día. El soporte de MCP salió del paquete separado
<code>langchain-mcp-adapters</code> y entró en <code>langchain</code> mismo, reconstruido sobre FastMCP,
con dos funciones que la especificación vieja hacía imposibles: <strong>elicitación como
interrupt de LangGraph</strong> y un <strong>catálogo de herramientas cacheable</strong>.</p>
<p>Lo instalamos esa misma tarde y lo apuntamos a un servidor que escribimos contra la
nueva especificación. El anuncio es correcto. El ecosistema alrededor no está listo —
y uno de los huecos convierte silenciosamente una puerta de aprobación humana en una
frase que el modelo se inventa.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-realmente-salió">Lo que realmente salió<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#lo-que-realmente-sali%C3%B3" class="hash-link" aria-label="Enlace directo al Lo que realmente salió" title="Enlace directo al Lo que realmente salió" translate="no">​</a></h2>
<p><code>pip install "langchain[mcp]"</code>, que requiere <strong>1.4.0 o superior</strong>, y en beta — lo dice
al importar, como puedes ver en nuestras capturas más abajo. Python hoy, TypeScript
"poco después".</p>
<ul>
<li class=""><strong>Una clase, en el paquete principal.</strong> <code>MultiServerMCPClient</code> se colapsa en
<code>MCPAdapter</code>. <code>async with MCPAdapter(url) as adapter:</code> y luego
<code>await adapter.list_tools()</code>, y lo que vuelve son herramientas de LangChain
corrientes que van a donde van las herramientas.</li>
<li class=""><strong>Construido sobre FastMCP</strong>, así que transportes, autenticación (bearer, OAuth 2.1,
máquina a máquina, CIMD, o cualquier <code>httpx2.Auth</code>), gestión de conexiones y
negociación de protocolo vienen del cliente de debajo. MCP tiene ahora dos <strong>eras</strong>
— el protocolo con handshake del 2025-11-25 y el sin estado del 2026-07-28 — y el
cliente de FastMCP elige una <strong>por conexión</strong>: "prueba el protocolo nuevo y recae en
el handshake para un servidor que no se ha actualizado".</li>
<li class=""><strong>Elicitación vía interrupts.</strong> Cuando una herramienta del servidor MCP no puede
terminar sin preguntarle a un humano, la ejecución de tu agente se pausa como un
<code>interrupt()</code> de LangGraph, y la reanudas con una respuesta estructurada. Esto solo
es posible porque la especificación sin estado convirtió una pregunta a mitad de
llamada en una ronda reintentable en lugar de algo mantenido abierto en un socket.</li>
<li class=""><strong>Caché del lado del cliente.</strong> <code>fastmcp.Client(url, cache=True)</code> respeta las pistas
de frescura del servidor para que el catálogo de herramientas no se vuelva a pedir
en cada ejecución.</li>
<li class=""><strong><code>ClientGroup</code></strong> para varios servidores a la vez, cada uno conservando su propia era
y sus credenciales, con los nombres de herramienta prefijados por servidor —
<code>billing_search</code> y <code>docs_search</code> se mantienen distintos.</li>
</ul>
<p>El encuadre del anuncio es el mismo que usamos en julio: <em>"un redespliegue ya no mata
sesiones vivas, porque no hay ninguna."</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-la-especificación-sin-estado-realmente-quitó">Lo que la especificación sin estado realmente quitó<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#lo-que-la-especificaci%C3%B3n-sin-estado-realmente-quit%C3%B3" class="hash-link" aria-label="Enlace directo al Lo que la especificación sin estado realmente quitó" title="Enlace directo al Lo que la especificación sin estado realmente quitó" translate="no">​</a></h2>
<p>Una llamada a una herramienta, antes y después, es la imagen más clara de lo que
cambió — así que aquí está, con un tercer panel para lo que realmente obtuvimos:</p>
<p><span class="zoomImage__wrap"><img alt="Tres diagramas de secuencia comparando una llamada a herramienta. Bajo la era del handshake del 2025-11-25 el agente envía initialize, recibe un session id, y luego envía tools/call con ese id. Bajo la especificación sin estado del 2026-07-28 no hay handshake y el agente envía tools/call directamente. Contra un servidor FastMCP por defecto en la nueva especificación, la misma petición es rechazada con Bad Request: Missing session ID." src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5MDAgNjkwIiB3aWR0aD0iOTAwIiBoZWlnaHQ9IjY5MCIgZm9udC1mYW1pbHk9InN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLHNhbnMtc2VyaWYiPgo8dGl0bGU+Q2FsbGluZyBvbmUgdG9vbDogdGhlIGhhbmRzaGFrZSBlcmEsIHRoZSBzdGF0ZWxlc3Mgc3BlYywgYW5kIGEgZGVmYXVsdCBGYXN0TUNQIHNlcnZlciB0aGF0IHN0aWxsIHdhbnRzIGEgc2Vzc2lvbiBJRDwvdGl0bGU+CjxzdHlsZT4KICAuaW5rICAgeyBmaWxsOiAjMGYxNzJhOyB9CiAgLm11dGVkIHsgZmlsbDogIzY0NzQ4YjsgfQogIC5hY2NlbnR7IGZpbGw6ICMyNTYzZWI7IH0KICAuYmFkICAgeyBmaWxsOiAjZGMyNjI2OyB9CiAgLnBhbmVsIHsgZmlsbDogI2Y4ZmFmYzsgc3Ryb2tlOiAjY2JkNWUxOyB9CiAgLmJveCAgIHsgZmlsbDogI2ZmZmZmZjsgc3Ryb2tlOiAjOTRhM2I4OyB9CiAgLmJveGhpIHsgZmlsbDogI2ZmZmZmZjsgc3Ryb2tlOiAjMjU2M2ViOyB9CiAgLmJveGJhZHsgZmlsbDogI2ZmZmZmZjsgc3Ryb2tlOiAjZGMyNjI2OyB9CiAgLmxpZmUgIHsgc3Ryb2tlOiAjOTRhM2I4OyB9CiAgLmFycm93IHsgc3Ryb2tlOiAjMjU2M2ViOyB9CiAgLmFycm93YmFkIHsgc3Ryb2tlOiAjZGMyNjI2OyB9CiAgLm1vbm8gIHsgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxDb25zb2xhcyxtb25vc3BhY2U7IH0KICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAuaW5rICAgeyBmaWxsOiAjZTJlOGYwOyB9CiAgICAubXV0ZWQgeyBmaWxsOiAjOTRhM2I4OyB9CiAgICAuYWNjZW50eyBmaWxsOiAjNjBhNWZhOyB9CiAgICAuYmFkICAgeyBmaWxsOiAjZjg3MTcxOyB9CiAgICAucGFuZWwgeyBmaWxsOiAjMGYxNzJhOyBzdHJva2U6ICMzMzQxNTU7IH0KICAgIC5ib3ggICB7IGZpbGw6ICMxZTI5M2I7IHN0cm9rZTogIzY0NzQ4YjsgfQogICAgLmJveGhpIHsgZmlsbDogIzFlMjkzYjsgc3Ryb2tlOiAjNjBhNWZhOyB9CiAgICAuYm94YmFkeyBmaWxsOiAjMWUyOTNiOyBzdHJva2U6ICNmODcxNzE7IH0KICAgIC5saWZlICB7IHN0cm9rZTogIzY0NzQ4YjsgfQogICAgLmFycm93IHsgc3Ryb2tlOiAjNjBhNWZhOyB9CiAgICAuYXJyb3diYWQgeyBzdHJva2U6ICNmODcxNzE7IH0KICB9Cjwvc3R5bGU+CjxkZWZzPgogIDxtYXJrZXIgaWQ9ImFoIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj4KICAgIDxwYXRoIGQ9Ik0wLDEgTDksNSBMMCw5IHoiIGZpbGw9IiMyNTYzZWIiLz4KICA8L21hcmtlcj4KICA8bWFya2VyIGlkPSJhaGJhZCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+CiAgICA8cGF0aCBkPSJNMCwxIEw5LDUgTDAsOSB6IiBmaWxsPSIjZGMyNjI2Ii8+CiAgPC9tYXJrZXI+CjwvZGVmcz4KCjx0ZXh0IHg9IjI0IiB5PSIzNCIgY2xhc3M9ImluayIgZm9udC1zaXplPSIyMyIgZm9udC13ZWlnaHQ9IjYwMCI+Q2FsbGluZyBvbmUgdG9vbDwvdGV4dD4KPHRleHQgeD0iMjQiIHk9IjU4IiBjbGFzcz0ibXV0ZWQgbW9ubyIgZm9udC1zaXplPSIxNC41Ij53aGF0IGl0IHRha2VzIHRvIHJlYWNoIHRoZSBzZXJ2ZXI8L3RleHQ+Cgo8IS0tID09PT09PT09PT09PT09PT09PT09PSBQYW5lbCAxIOKAlCBoYW5kc2hha2UgZXJhID09PT09PT09PT09PT09PT09PT09PSAtLT4KPHJlY3QgeD0iMTYiIHk9IjgwIiB3aWR0aD0iODY4IiBoZWlnaHQ9IjIxMiIgcng9IjEyIiBjbGFzcz0icGFuZWwiLz4KPHRleHQgeD0iNDAiIHk9IjExMiIgY2xhc3M9ImFjY2VudCBtb25vIiBmb250LXNpemU9IjE1Ij4yMDI1LTExLTI1PC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMTM0IiBjbGFzcz0iaW5rIiBmb250LXNpemU9IjE0LjUiIGZvbnQtd2VpZ2h0PSI2MDAiPmEgaGFuZHNoYWtlIGJlZm9yZSBhbnkgd29yazwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjE1OCIgY2xhc3M9Im11dGVkIiBmb250LXNpemU9IjEzIj50aGUgc2Vzc2lvbiBwaW5zIHRoZSBhZ2VudCB0byB0aGU8L3RleHQ+Cjx0ZXh0IHg9IjQwIiB5PSIxNzYiIGNsYXNzPSJtdXRlZCIgZm9udC1zaXplPSIxMyI+b25lIGluc3RhbmNlIHRoYXQgaXNzdWVkIGl0PC90ZXh0PgoKPHJlY3QgeD0iMzkyIiB5PSIxMDAiIHdpZHRoPSIxMDQiIGhlaWdodD0iMzYiIHJ4PSI4IiBjbGFzcz0iYm94Ii8+Cjx0ZXh0IHg9IjQ0NCIgeT0iMTI0IiBjbGFzcz0iaW5rIG1vbm8iIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiPmFnZW50PC90ZXh0Pgo8cmVjdCB4PSI3NTIiIHk9IjEwMCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSIzNiIgcng9IjgiIGNsYXNzPSJib3giLz4KPHRleHQgeD0iODA0IiB5PSIxMjQiIGNsYXNzPSJpbmsgbW9ubyIgZm9udC1zaXplPSIxNCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+c2VydmVyPC90ZXh0PgoKPGxpbmUgeDE9IjQ0NCIgeTE9IjEzNiIgeDI9IjQ0NCIgeTI9IjI4MiIgY2xhc3M9ImxpZmUiIHN0cm9rZS1kYXNoYXJyYXk9IjMgNCIvPgo8bGluZSB4MT0iODA0IiB5MT0iMTM2IiB4Mj0iODA0IiB5Mj0iMjgyIiBjbGFzcz0ibGlmZSIgc3Ryb2tlLWRhc2hhcnJheT0iMyA0Ii8+Cgo8dGV4dCB4PSI2MjQiIHk9IjE2MyIgY2xhc3M9ImluayBtb25vIiBmb250LXNpemU9IjEzLjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiPmluaXRpYWxpemU8L3RleHQ+CjxsaW5lIHgxPSI0NDQiIHkxPSIxNzIiIHgyPSI3OTgiIHkyPSIxNzIiIGNsYXNzPSJhcnJvdyIgc3Ryb2tlLXdpZHRoPSIxLjkiIG1hcmtlci1lbmQ9InVybCgjYWgpIi8+Cgo8dGV4dCB4PSI2MjQiIHk9IjE5OSIgY2xhc3M9ImluayBtb25vIiBmb250LXNpemU9IjEzLjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnNlc3Npb24gaWQ8L3RleHQ+CjxsaW5lIHgxPSI4MDQiIHkxPSIyMDgiIHgyPSI0NTAiIHkyPSIyMDgiIGNsYXNzPSJhcnJvdyIgc3Ryb2tlLXdpZHRoPSIxLjkiIHN0cm9rZS1kYXNoYXJyYXk9IjYgNSIgbWFya2VyLWVuZD0idXJsKCNhaCkiLz4KCjx0ZXh0IHg9IjYyNCIgeT0iMjM1IiBjbGFzcz0iaW5rIG1vbm8iIGZvbnQtc2l6ZT0iMTMuNSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+dG9vbHMvY2FsbCArIHNlc3Npb24gaWQ8L3RleHQ+CjxsaW5lIHgxPSI0NDQiIHkxPSIyNDQiIHgyPSI3OTgiIHkyPSIyNDQiIGNsYXNzPSJhcnJvdyIgc3Ryb2tlLXdpZHRoPSIxLjkiIG1hcmtlci1lbmQ9InVybCgjYWgpIi8+Cgo8dGV4dCB4PSI2MjQiIHk9IjI3MSIgY2xhc3M9ImluayBtb25vIiBmb250LXNpemU9IjEzLjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnJlc3VsdDwvdGV4dD4KPGxpbmUgeDE9IjgwNCIgeTE9IjI4MCIgeDI9IjQ1MCIgeTI9IjI4MCIgY2xhc3M9ImFycm93IiBzdHJva2Utd2lkdGg9IjEuOSIgc3Ryb2tlLWRhc2hhcnJheT0iNiA1IiBtYXJrZXItZW5kPSJ1cmwoI2FoKSIvPgoKPCEtLSA9PT09PT09PT09PT09PT09PT09PT0gUGFuZWwgMiDigJQgc3RhdGVsZXNzIHNwZWMgPT09PT09PT09PT09PT09PT09PT09IC0tPgo8cmVjdCB4PSIxNiIgeT0iMzA0IiB3aWR0aD0iODY4IiBoZWlnaHQ9IjE2NCIgcng9IjEyIiBjbGFzcz0icGFuZWwiLz4KPHRleHQgeD0iNDAiIHk9IjMzNiIgY2xhc3M9ImFjY2VudCBtb25vIiBmb250LXNpemU9IjE1Ij4yMDI2LTA3LTI4PC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMzU4IiBjbGFzcz0iaW5rIiBmb250LXNpemU9IjE0LjUiIGZvbnQtd2VpZ2h0PSI2MDAiPm9uZSByZXF1ZXN0LCBzdHJhaWdodCB0byB3b3JrPC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMzgyIiBjbGFzcz0ibXV0ZWQiIGZvbnQtc2l6ZT0iMTMiPml0IGNhcnJpZXMgaXRzIG93biB2ZXJzaW9uIGFuZDwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjQwMCIgY2xhc3M9Im11dGVkIiBmb250LXNpemU9IjEzIj5pZGVudGl0eSwgc28gYW55IGluc3RhbmNlIGFuc3dlcnM8L3RleHQ+Cgo8cmVjdCB4PSIzOTIiIHk9IjMyNCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSIzNiIgcng9IjgiIGNsYXNzPSJib3hoaSIvPgo8dGV4dCB4PSI0NDQiIHk9IjM0OCIgY2xhc3M9ImluayBtb25vIiBmb250LXNpemU9IjE0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5hZ2VudDwvdGV4dD4KPHJlY3QgeD0iNzUyIiB5PSIzMjQiIHdpZHRoPSIxMDQiIGhlaWdodD0iMzYiIHJ4PSI4IiBjbGFzcz0iYm94aGkiLz4KPHRleHQgeD0iODA0IiB5PSIzNDgiIGNsYXNzPSJpbmsgbW9ubyIgZm9udC1zaXplPSIxNCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+c2VydmVyPC90ZXh0PgoKPGxpbmUgeDE9IjQ0NCIgeTE9IjM2MCIgeDI9IjQ0NCIgeTI9IjQ1OCIgY2xhc3M9ImxpZmUiIHN0cm9rZS1kYXNoYXJyYXk9IjMgNCIvPgo8bGluZSB4MT0iODA0IiB5MT0iMzYwIiB4Mj0iODA0IiB5Mj0iNDU4IiBjbGFzcz0ibGlmZSIgc3Ryb2tlLWRhc2hhcnJheT0iMyA0Ii8+Cgo8dGV4dCB4PSI2MjQiIHk9IjM4NiIgY2xhc3M9Im11dGVkIG1vbm8iIGZvbnQtc2l6ZT0iMTMuNSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bm8gaGFuZHNoYWtlPC90ZXh0PgoKPHRleHQgeD0iNjI0IiB5PSI0MTUiIGNsYXNzPSJpbmsgbW9ubyIgZm9udC1zaXplPSIxMy41IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj50b29scy9jYWxsPC90ZXh0Pgo8bGluZSB4MT0iNDQ0IiB5MT0iNDI0IiB4Mj0iNzk4IiB5Mj0iNDI0IiBjbGFzcz0iYXJyb3ciIHN0cm9rZS13aWR0aD0iMS45IiBtYXJrZXItZW5kPSJ1cmwoI2FoKSIvPgoKPHRleHQgeD0iNjI0IiB5PSI0NDciIGNsYXNzPSJpbmsgbW9ubyIgZm9udC1zaXplPSIxMy41IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5yZXN1bHQ8L3RleHQ+CjxsaW5lIHgxPSI4MDQiIHkxPSI0NTYiIHgyPSI0NTAiIHkyPSI0NTYiIGNsYXNzPSJhcnJvdyIgc3Ryb2tlLXdpZHRoPSIxLjkiIHN0cm9rZS1kYXNoYXJyYXk9IjYgNSIgbWFya2VyLWVuZD0idXJsKCNhaCkiLz4KCjwhLS0gPT09PT09PT09PT09PT09PT09PT09IFBhbmVsIDMg4oCUIHdoYXQgd2UgYWN0dWFsbHkgZ290ID09PT09PT09PT09PT09PT09PT09PSAtLT4KPHJlY3QgeD0iMTYiIHk9IjQ4MCIgd2lkdGg9Ijg2OCIgaGVpZ2h0PSIxODgiIHJ4PSIxMiIgY2xhc3M9InBhbmVsIi8+Cjx0ZXh0IHg9IjQwIiB5PSI1MTIiIGNsYXNzPSJiYWQgbW9ubyIgZm9udC1zaXplPSIxNSI+MjAyNi0wNy0yODwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjUzMiIgY2xhc3M9Im11dGVkIiBmb250LXNpemU9IjEyLjUiPuKApmFnYWluc3QgYSBkZWZhdWx0IEZhc3RNQ1Agc2VydmVyPC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iNTU4IiBjbGFzcz0iYmFkIiBmb250LXNpemU9IjE0LjUiIGZvbnQtd2VpZ2h0PSI2MDAiPnRoZSBjbGllbnQgbW92ZWQgb24uIHRoZSBzZXJ2ZXIgZGlkbid0LjwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjU4MiIgY2xhc3M9Im11dGVkIG1vbm8iIGZvbnQtc2l6ZT0iMTMiPnN0YXRlbGVzc19odHRwPVRydWU8L3RleHQ+Cjx0ZXh0IHg9IjQwIiB5PSI2MDAiIGNsYXNzPSJtdXRlZCIgZm9udC1zaXplPSIxMyI+aXMgb3B0LWluLCBhbmQgb2ZmIGJ5IGRlZmF1bHQ8L3RleHQ+Cgo8cmVjdCB4PSIzOTIiIHk9IjUwMCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSIzNiIgcng9IjgiIGNsYXNzPSJib3hoaSIvPgo8dGV4dCB4PSI0NDQiIHk9IjUyNCIgY2xhc3M9ImluayBtb25vIiBmb250LXNpemU9IjE0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5hZ2VudDwvdGV4dD4KPHJlY3QgeD0iNzUyIiB5PSI1MDAiIHdpZHRoPSIxMDQiIGhlaWdodD0iMzYiIHJ4PSI4IiBjbGFzcz0iYm94YmFkIi8+Cjx0ZXh0IHg9IjgwNCIgeT0iNTI0IiBjbGFzcz0iaW5rIG1vbm8iIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnNlcnZlcjwvdGV4dD4KCjxsaW5lIHgxPSI0NDQiIHkxPSI1MzYiIHgyPSI0NDQiIHkyPSI2NTAiIGNsYXNzPSJsaWZlIiBzdHJva2UtZGFzaGFycmF5PSIzIDQiLz4KPGxpbmUgeDE9IjgwNCIgeTE9IjUzNiIgeDI9IjgwNCIgeTI9IjY1MCIgY2xhc3M9ImxpZmUiIHN0cm9rZS1kYXNoYXJyYXk9IjMgNCIvPgoKPHRleHQgeD0iNjI0IiB5PSI1NjIiIGNsYXNzPSJtdXRlZCBtb25vIiBmb250LXNpemU9IjEzLjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiPm5vIGhhbmRzaGFrZTwvdGV4dD4KCjx0ZXh0IHg9IjYyNCIgeT0iNTkxIiBjbGFzcz0iaW5rIG1vbm8iIGZvbnQtc2l6ZT0iMTMuNSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+dG9vbHMvY2FsbDwvdGV4dD4KPGxpbmUgeDE9IjQ0NCIgeTE9IjYwMCIgeDI9Ijc5OCIgeTI9IjYwMCIgY2xhc3M9ImFycm93IiBzdHJva2Utd2lkdGg9IjEuOSIgbWFya2VyLWVuZD0idXJsKCNhaCkiLz4KCjx0ZXh0IHg9IjYyNCIgeT0iNjI3IiBjbGFzcz0iYmFkIG1vbm8iIGZvbnQtc2l6ZT0iMTMuNSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+QmFkIFJlcXVlc3Q6IE1pc3Npbmcgc2Vzc2lvbiBJRDwvdGV4dD4KPGxpbmUgeDE9IjgwNCIgeTE9IjYzNiIgeDI9IjQ1MCIgeTI9IjYzNiIgY2xhc3M9ImFycm93YmFkIiBzdHJva2Utd2lkdGg9IjEuOSIgc3Ryb2tlLWRhc2hhcnJheT0iNiA1IiBtYXJrZXItZW5kPSJ1cmwoI2FoYmFkKSIvPgo8dGV4dCB4PSI2MjQiIHk9IjY1NiIgY2xhc3M9Im11dGVkIG1vbm8iIGZvbnQtc2l6ZT0iMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkhUVFAgNDAwIMK3IEpTT04tUlBDIOKIkjMyNjAwPC90ZXh0Pgo8L3N2Zz4K" width="900" height="690" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Los dos primeros paneles son la promesa, y la promesa es real. El tercero es lo que
hace un servidor recién creado la tarde en que sale el cliente.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tres-cosas-que-todavía-no-funcionan">Tres cosas que todavía no funcionan<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#tres-cosas-que-todav%C3%ADa-no-funcionan" class="hash-link" aria-label="Enlace directo al Tres cosas que todavía no funcionan" title="Enlace directo al Tres cosas que todavía no funcionan" translate="no">​</a></h2>
<p>Construimos un servidor MCP que expone una pequeña base de datos de citas y facturas,
apuntamos un agente de LangChain hacia él, y pusimos un reembolso detrás de un humano.
(El modelo del propio agente corre sobre un gateway autoalojado — eso está entre el
agente y el LLM, no entre el agente y MCP.) Funciona — ese es
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/mcp-governed-tools-agent-elicitation/">el tutorial</a>.
Llegar hasta ahí sacó a la luz tres huecos entre lo que está escrito y lo que corre.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-la-especificación-es-sin-estado-tu-servidor-no-por-defecto">1. La especificación es sin estado. Tu servidor no, por defecto.<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#1-la-especificaci%C3%B3n-es-sin-estado-tu-servidor-no-por-defecto" class="hash-link" aria-label="Enlace directo al 1. La especificación es sin estado. Tu servidor no, por defecto." title="Enlace directo al 1. La especificación es sin estado. Tu servidor no, por defecto." translate="no">​</a></h3>
<p>La primera petición a un servidor FastMCP 4.0.2 recién creado — aquí un <code>curl</code> simple
pidiendo <code>tools/list</code>, para que nada del lado del cliente cargue con la culpa:</p>
<p><span class="zoomImage__wrap"><img alt="Un POST con curl al endpoint MCP devolviendo Bad Request: Missing session ID con el código de error JSON-RPC -32600" src="https://development-wec.wiline.com/docs/es/assets/images/mcp-session-error-7897aebee33998b591bd27b4606a6e6b.png" width="666" height="75" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Un error sobre un concepto que la especificación borró hace cinco semanas. El cliente
es sin estado; el servidor sigue usando por defecto el transporte con estado.</p>
<p>El arreglo no es una cabecera, ni una opción del cliente, ni nada que tú envíes. Es un
argumento en la llamada que <strong>arranca tu servidor</strong> — la última línea del archivo del
servidor, donde <code>mcp</code> es tu instancia de <code>FastMCP</code>:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">office_tools.py</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> fastmcp </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> FastMCP</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">mcp </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> FastMCP</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"office-tools"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># ... tus funciones @mcp.tool ...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> __name__ </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"__main__"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># Sin stateless_http=True este servidor le responde a un cliente</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># del 2026-07-28 con "Bad Request: Missing session ID".</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    mcp</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">run</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">transport</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"http"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> host</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"127.0.0.1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> port</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">8770</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> stateless_http</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Nada en el anuncio lo dice — con razón, porque el post trata del cliente. Pero
significa que la mitad cliente de la actualización es un <code>pip install</code>, y la mitad
servidor es un flag que tienes que saber que existe.</p>
<p>Existen dos flags, y <code>run_http_async</code> (al que <code>mcp.run</code> llama para HTTP) acepta ambos.
De su propio docstring:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">stateless_http: Whether to use stateless HTTP (defaults to settings.stateless_http)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">stateless: Alias for stateless_http for CLI consistency</span><br></div></code></pre></div></div>
<p>Un interruptor, dos nombres, y el ajuste al que recae está apagado.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-ctxelicit-es-la-api-vieja--y-el-error-va-al-modelo-no-a-ti">2. <code>ctx.elicit</code> es la API vieja — y el error va al modelo, no a ti<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#2-ctxelicit-es-la-api-vieja--y-el-error-va-al-modelo-no-a-ti" class="hash-link" aria-label="Enlace directo al 2-ctxelicit-es-la-api-vieja--y-el-error-va-al-modelo-no-a-ti" title="Enlace directo al 2-ctxelicit-es-la-api-vieja--y-el-error-va-al-modelo-no-a-ti" translate="no">​</a></h3>
<p>Todos los ejemplos de elicitación que encontrarás llaman a
<code>await ctx.elicit(message, response_type)</code> dentro del cuerpo de la herramienta, donde
<code>ctx</code> es el objeto <code>Context</code> que FastMCP le pasa a tu herramienta. Ese es el mecanismo
<strong>de la era del handshake</strong>: bloquea a mitad de ejecución y habla por el canal de
retorno de la sesión — el canal de retorno que una conexión sin estado no tiene. La
documentación de FastMCP es explícita en que es para conexiones <code>≤ 2025-11-25</code>, y
promete que llamarlo en una moderna "lanza un error de era claro en lugar de fallar de
forma oscura".</p>
<p>Sí lanza uno. Ese no es el problema. Reconstruimos la herramienta de reembolso
alrededor de <code>ctx.elicit</code> y ejecutamos el mismo agente contra ella:</p>
<p><span class="zoomImage__wrap"><img alt="La ejecución del agente imprimiendo interrupt raised? False, tres mensajes de herramienta donde issue_refund tiene status=error llevando &amp;#39;elicitation via server-initiated requests is unavailable on 2026-07-28 connections&amp;#39;, el modelo respondiendo que ha iniciado el reembolso y que un humano debe aprobarlo, y una consulta sqlite3 mostrando la factura 2 todavía abierta" src="https://development-wec.wiline.com/docs/es/assets/images/mcp-elicit-old-api-ec02d789aa6970b70a130f83067c235b.png" width="1038" height="437" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Léelo en orden. FastMCP lanzó el error de era, exactamente como está documentado.
LangChain lo capturó y lo convirtió en un <code>ToolMessage</code> con <code>status="error"</code>. Eso es
deliberado: <code>langchain/mcp/tools.py</code> conecta un manejador cuyo docstring dice que
existe para entregarle al modelo el detalle del error del servidor "en lugar de
terminar la ejecución". El modelo leyó ese error y le dijo al usuario:</p>
<blockquote>
<p>He localizado a Maria Alvarez y he identificado su factura abierta (ID: 2) por
80,00 $. He <strong>iniciado la solicitud de reembolso</strong> para esta factura. Ten en cuenta
que <strong>un humano debe aprobar</strong> el importe y dar una razón para completar el reembolso.</p>
</blockquote>
<p>No se lanzó ningún interrupt. El proceso salió con 0. Nada está pendiente, nada está
esperando a un humano, y a nadie se le va a preguntar nunca — y la factura sigue
<code>open</code>, así que el reembolso tampoco ocurrió. Lo que obtienes no es una acción
destructiva colándose por una puerta; es un flujo de aprobación que silenciosamente no
existe, descrito en un español fluido por un modelo que leyó el error y lo parafraseó
como progreso.</p>
<p>El arreglo es que el patrón moderno hace que la herramienta <strong>devuelva</strong> un
<code>InputRequiredResult</code> describiendo lo que necesita, y salga. Tu agente lo expone como
el interrupt de LangGraph, un humano responde, y el cliente MCP reemite el mismo
<code>tools/call</code> con la respuesta adjunta. Pero el modo de fallo es la historia: un error
de era es algo estupendo que lanzarle a un programa, y algo terrible que entregarle a
un modelo de lenguaje al que se premia por sonar servicial.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-cachetrue-es-necesario-no-suficiente">3. <code>cache=True</code> es necesario, no suficiente<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#3-cachetrue-es-necesario-no-suficiente" class="hash-link" aria-label="Enlace directo al 3-cachetrue-es-necesario-no-suficiente" title="Enlace directo al 3-cachetrue-es-necesario-no-suficiente" translate="no">​</a></h3>
<p>La caché del cliente respeta las pistas <code>ttlMs</code> y <code>cacheScope</code> que un <strong>servidor</strong>
adjunta a su respuesta de <code>tools/list</code>, y solo contra servidores de la era moderna que
las envían. Un servidor FastMCP por defecto no envía ninguna — volcamos nuestra propia
respuesta de <code>tools/list</code> y no lleva pistas de caché en absoluto. Así que enciendes la
caché, llamas a <code>list_tools(cache_mode="use")</code> dos veces seguidas, cronometras ambas, y
obtienes:</p>
<p><span class="zoomImage__wrap"><img alt="Dos descubrimientos de cinco herramientas cada uno, cronometrados en 14,6 ms y 12,5 ms, sin efecto de caché" src="https://development-wec.wiline.com/docs/es/assets/images/mcp-cache-bbadf88f6b26a069ec15e3b3db635c02.png" width="801" height="125" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Concluyes que la caché está rota. No lo está — no había nada que cachear. Vale la pena
notar que la caché pertenece al <code>fastmcp.Client</code>, no a <code>MCPAdapter</code>, y que un cliente
por llamante evita que los catálogos se crucen entre inquilinos.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="y-dos-más-pequeñas-en-el-propio-anuncio">Y dos más pequeñas, en el propio anuncio<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#y-dos-m%C3%A1s-peque%C3%B1as-en-el-propio-anuncio" class="hash-link" aria-label="Enlace directo al Y dos más pequeñas, en el propio anuncio" title="Enlace directo al Y dos más pequeñas, en el propio anuncio" translate="no">​</a></h2>
<p><strong>El fragmento de elicitación lanza <code>AttributeError</code>.</strong> El post lee el interrupt como
<code>paused["__interrupt__"][0].value.requests[0]</code> — acceso por atributo. En
<code>langchain/mcp/elicitation.py</code> en 1.4.0:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">MCPElicitationInterrupt</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">TypedDict</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Literal</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"mcp_elicitation"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    tool_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    requests</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">list</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">MCPElicitationRequest</span><span class="token punctuation" style="color:#393A34">]</span><br></div></code></pre></div></div>
<p>Un <code>TypedDict</code> es un dict en tiempo de ejecución, así que <code>.requests</code> no resuelve. Es
<code>value["requests"]</code> — que el propio fragmento acierta unas líneas después, leyendo
<code>question["key"]</code> por subíndice.</p>
<p><strong>El enlace a la documentación de elicitación da 404.</strong> El post cierra la sección
apuntando a <code>docs.langchain.com/oss/python/langchain/mcp/elicitation</code> para "declinar una
pregunta, y poner herramientas destructivas detrás del mismo flujo de aprobación". Esa
página devuelve 404 al momento de publicar, mientras que la página padre y sus otras
hijas — <code>mcp</code>, <code>mcp/connections</code>, <code>mcp/tools</code>, <code>mcp/auth</code> — resuelven todas. Es,
inconvenientemente, la única página que habría documentado el flujo de aprobación que
el hueco 2 muestra cayéndose.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-esto-te-importa-a-ti-específicamente">Por qué esto te importa a ti, específicamente<a href="https://development-wec.wiline.com/docs/es/news/langchain-mcp-first-class/#por-qu%C3%A9-esto-te-importa-a-ti-espec%C3%ADficamente" class="hash-link" aria-label="Enlace directo al Por qué esto te importa a ti, específicamente" title="Enlace directo al Por qué esto te importa a ti, específicamente" translate="no">​</a></h2>
<p>Si consumes servidores MCP que ejecuta otra persona, esto son buenas noticias sin más y
notarás sobre todo la ruta de import más corta.</p>
<p>Si <strong>escribes</strong> servidores MCP, la revisión de julio movió el suelo y las herramientas
todavía se están asentando. Tres cosas son ahora tuyas para hacerlas bien: tu servidor
no se vuelve sin estado porque la especificación lo hiciera — pones un flag; una
herramienta que necesita entrada humana tiene que escribirse para ser <strong>reentrada</strong> en
lugar de reanudada — <code>interrupt()</code> desenrolla la llamada completa, así que el cuerpo de
la herramienta se ejecuta otra vez desde arriba cuando respondes; y cualquier ejemplo
de elicitación anterior a agosto te está enseñando una API cuyo fallo aterriza en el
contexto del modelo en lugar de en tus logs.</p>
<p>Eso último se generaliza más allá de MCP. A medida que los frameworks mejoran en
mantener vivos a los agentes a través de los errores, la clase de bug que termina una
ejecución se encoge y la clase que se le narra a un usuario crece. Una puerta que falla
cerrada es un bug que encuentras en pruebas. Una puerta que nunca se instaló, descrita
por un modelo como pendiente de tu aprobación, es una que encuentras en una auditoría.</p>
<p>La dirección es la correcta. El núcleo sin estado es lo que hace que la pausa de
aprobación humana de un agente sobreviva a un redespliegue, y eso es una capacidad real
más que una refactorización. Solo no esperes que tu primera petición funcione.</p>
<hr>
<p>📖 <strong>Fuentes:</strong> <a href="https://www.langchain.com/blog/mcp-in-langchain-stateless-protocol-elicitation-and-more" target="_blank" rel="noopener noreferrer" class="">LangChain — MCP en LangChain: protocolo sin estado, elicitación y más</a> · <a href="https://docs.langchain.com/oss/python/langchain/mcp" target="_blank" rel="noopener noreferrer" class="">Documentación de MCP en LangChain</a> · <a href="https://docs.langchain.com/oss/python/migrate/langchain-mcp-adapters" target="_blank" rel="noopener noreferrer" class="">Migrar desde langchain-mcp-adapters</a> · <a href="https://gofastmcp.com/clients/client" target="_blank" rel="noopener noreferrer" class="">Documentación del cliente FastMCP</a> · <a href="https://gofastmcp.com/servers/elicitation" target="_blank" rel="noopener noreferrer" class="">Elicitación en FastMCP</a> · <a href="https://modelcontextprotocol.io/specification/2026-07-28" target="_blank" rel="noopener noreferrer" class="">Especificación MCP 2026-07-28</a></p>
<p><em>Versiones probadas: <code>langchain</code> 1.4.0, <code>fastmcp</code> 4.0.2, <code>mcp</code> 2.1.1, modelo servido sobre un gateway autoalojado. La captura de <code>ctx.elicit</code> es un render de la salida real de esa ejecución, no una captura de pantalla.</em></p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="mcp" term="mcp"/>
        <category label="langchain" term="langchain"/>
        <category label="langgraph" term="langgraph"/>
        <category label="agentes" term="agentes"/>
        <category label="protocols" term="protocols"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Un agente puede reducir su propia búsqueda web, pero nunca ampliarla]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/"/>
        <updated>2026-08-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[AWS le dio a la búsqueda web de agentes una lista de sitios permitidos el 19 de agosto. El administrador define una lista, el agente puede definir otra, y cuando no coinciden la lista del agente solo puede hacer la búsqueda más pequeña. Esa única regla es la diferencia entre una barrera y una nota en el prompt.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Agentes · Noticias de IA</span><h2 class="newsHero__title">Solo reducir, nunca ampliar</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Por favor usa fuentes confiables</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Las fuentes confiables son las únicas que hay</span></div></div>
<p>Tu agente puede buscar en la web. Escribes en el prompt: <em>usa solo sec.gov y los grandes
medios financieros.</em> Normalmente obedece. Las veces que no lo hace son las veces en que
aprendes que una línea en un prompt es una petición, no una regla.</p>
<p>El 19 de agosto AWS añadió filtros de sitios a la herramienta de búsqueda web en Bedrock
AgentCore. Función pequeña. Pero la forma en que maneja un desacuerdo vale la pena
conocerla, porque es lo que la convierte en una barrera en lugar de una nota.</p>
<!-- -->
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>De quién es este producto</div><div class="admonitionContent_BuS1"><p>Esta es la documentación de AWS sobre un servicio de AWS, citada aquí. No corre en
nuestra infraestructura y no lo hemos probado. Lo que nos interesa es el diseño.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-obtienes">Lo que obtienes<a href="https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/#lo-que-obtienes" class="hash-link" aria-label="Enlace directo al Lo que obtienes" title="Enlace directo al Lo que obtienes" translate="no">​</a></h2>
<p>Dos filtros. Una lista de sitios a permitir y una lista a bloquear, más un rango de fechas
para cuándo se publicó una página.</p>
<p>El agente puede pasarlos en la propia llamada de búsqueda:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"method"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"tools/call"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"params"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"WebSearch"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"arguments"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"query"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"latest SEC enforcement actions 2026"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"filters"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"domainFilter"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"include"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"sec.gov"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"exclude"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"publishedDateFilter"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#36acaa">"from"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"2026-07-01T00:00:00Z"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#36acaa">"to"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"2026-08-04T23:59:59Z"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Un administrador define el mismo tipo de lista en el gateway, donde el agente no puede
verla ni cambiarla. Cada lista admite hasta 100 sitios.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-regla">La regla<a href="https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/#la-regla" class="hash-link" aria-label="Enlace directo al La regla" title="Enlace directo al La regla" translate="no">​</a></h2>
<p>Así que el administrador tiene una lista y el agente tiene una lista. ¿Qué pasa cuando no
coinciden?</p>
<blockquote>
<p>Las listas de permitidos se intersectan. Las listas de bloqueo se combinan.
<em>"Los filtros en tiempo de ejecución pueden reducir pero nunca ampliar el alcance
definido por un administrador."</em></p>
</blockquote>
<p>La lista del administrador es el techo. El agente puede pedir menos, nunca más. Y todo lo
que cualquiera de los dos bloquee queda bloqueado.</p>
<p>Dale la vuelta y verás por qué importa. Si las dos listas de permitidos simplemente se
sumaran, la lista del administrador sería una sugerencia inicial. Un agente que quisiera
otro sitio bastaría con nombrarlo en su propia llamada y lo obtendría. El filtro sería
papeleo.</p>
<p>Esa es la diferencia entre los dos lugares donde puedes poner una regla. Pedirle a un
modelo que se mantenga dentro de un límite significa pedirle que lo recuerde, a mitad de
un trabajo, después de leer quién sabe qué. Un gateway comparando dos listas no está
recordando nada.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-filtro-de-fecha-es-el-traicionero">El filtro de fecha es el traicionero<a href="https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/#el-filtro-de-fecha-es-el-traicionero" class="hash-link" aria-label="Enlace directo al El filtro de fecha es el traicionero" title="Enlace directo al El filtro de fecha es el traicionero" translate="no">​</a></h2>
<p>La lista de sitios recibe toda la atención. El rango de fechas puede importar más.</p>
<p>Una página vieja no parece vieja. Una página de cuatro años sobre una regla fiscal o una
API muerta se lee exactamente como una actual — mismo tono seguro, y ahora con una cita
adjunta, lo que hace que una respuesta equivocada sea más convincente en lugar de menos.
El modelo no puede juzgar qué tan fresca es una página cuando nada se lo dice. Definir una
ventana le da un dato que de otro modo nunca tuvo.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-detalle">El detalle<a href="https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/#el-detalle" class="hash-link" aria-label="Enlace directo al El detalle" title="Enlace directo al El detalle" translate="no">​</a></h2>
<p>La búsqueda cuesta <strong>7 USD por cada 1.000 consultas</strong> y corre en tres regiones. El
argumento de venta de AWS es que las consultas se quedan dentro de su red — <em>"sin enviar
los prompts de usuario ni las consultas de recuperación a proveedores de API de búsqueda
externos fuera de AWS."</em> Bueno si ya vives en AWS. Bastante irrelevante si no.</p>
<p>La idea viaja, sin embargo, porque la herramienta se alcanza sobre MCP: <em>"Web Search usa
un target de conector integrado en Bedrock AgentCore Gateway usando el Model Context
Protocol (MCP)."</em> Nada de <em>las listas de permitidos se intersectan, las de bloqueo se
combinan, el agente solo puede reducir</em> necesita a Amazon. Cualquier gateway puede
hacerlo, para cualquier herramienta — qué archivos puede leer algo, qué hosts puede
alcanzar, qué tablas puede consultar.</p>
<p>Así que la pregunta que hay que hacer sobre una herramienta no es si puedes restringirla.
Es dónde vive la restricción, y si el agente puede moverla.</p>
<p>Repasamos el protocolo que hay debajo de todo esto en
<a class="" href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/">la mayor actualización de MCP</a>, y le dimos a un modelo
búsqueda en vivo sin un servicio gestionado en
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/web-search-wiline-inference/">búsqueda web en WEC Inference</a>. El siguiente
tutorial de la serie de agentes pone las herramientas de un agente detrás de un gateway
que decide qué puede llamar.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fuentes">Fuentes<a href="https://development-wec.wiline.com/docs/es/news/agent-web-search-domain-allowlist/#fuentes" class="hash-link" aria-label="Enlace directo al Fuentes" title="Enlace directo al Fuentes" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://aws.amazon.com/blogs/machine-learning/domain-and-publish-date-filters-for-web-search-on-agentcore/" target="_blank" rel="noopener noreferrer" class="">Domain and publish date filters for Web Search on AgentCore</a> — 19 de agosto de 2026</li>
<li class=""><a href="https://aws.amazon.com/about-aws/whats-new/2026/08/web-search-amazon-bedrock/" target="_blank" rel="noopener noreferrer" class="">Web Search in Amazon Bedrock AgentCore adds domain and published date filtering, expands to Europe and Asia Pacific</a> — 19 de agosto de 2026</li>
<li class=""><a href="https://aws.amazon.com/blogs/aws/announcing-web-search-on-amazon-bedrock-agentcore-ground-your-ai-agents-in-current-accurate-web-knowledge/" target="_blank" rel="noopener noreferrer" class="">Announcing Web Search on Amazon Bedrock AgentCore</a> — 17 de junio de 2026</li>
</ul>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="agentes" term="agentes"/>
        <category label="mcp" term="mcp"/>
        <category label="guardrails" term="guardrails"/>
        <category label="gobernanza" term="gobernanza"/>
        <category label="web-search" term="web-search"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Un router que no puede ver la conversación no puede clasificar "yes"]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/"/>
        <updated>2026-08-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[LiteLLM ejecutó 5.600 llamadas de clasificación en tiempo vivo para responder una pregunta: ¿cuánto de la conversación necesita que vea un router de modelos? En las siguientes que solo tienen sentido contra el historial, el acuerdo pasó del 14% al 78% — y la factura de finalización más que se duplicó, porque dos tercios habían estado yendo al modelo más barato.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Enrutamiento · Noticias de IA</span><h2 class="newsHero__title">Clasificando la palabra "yes"</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Puntuación este mensaje</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Puntuación lo que aprueba</span></div></div>
<p>El trabajo de un router de modelos es leer una solicitud y decidir qué modelo debe responderla.
Las preguntas baratas van a un modelo pequeño, las difíciles a uno grande, y la factura baja. Todo el arreglo depende de poder distinguir.</p>
<p>Entonces un usuario escribe "yes".</p>
<p>O "continue". O "hazlo". Nada en estas dos o tres letras dice si el trabajo que se está aprobando es una corrección ortográfica o una migración de base de datos. Un router que puntúa el mensaje actual de forma aislada ve una cadena muy corta sin vocabulario técnico, y hace lo obvio: modelo más barato.</p>
<p><strong>Lo que significa que si rutas las solicitudes para ahorrar dinero, tu nivel más barato probablemente esté absorbiendo trabajo que nunca debería haber visto — y tu cifra de ahorro es en parte falsa.</strong> El 4 de agosto LiteLLM publicó un benchmark que mide ambas mitades de eso: qué tan mal se equivoca la ruta, y cuánto cuesta arreglarlo.</p>
<!-- -->
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Quiénes son estos números</div><div class="admonitionContent_BuS1"><p>Todo lo anterior es la propia medición de LiteLLM, publicada en su blog y citado aquí: v1.97, clasificador <code>gpt-5.4-mini</code>, sus tres conjuntos de datos, sus etiquetas de referencia. Ninguno de ellos se ejecutó en nuestra infraestructura, y no lo hemos reproducido.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-medición">La medición<a href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/#la-medici%C3%B3n" class="hash-link" aria-label="Enlace directo al La medición" title="Enlace directo al La medición" translate="no">​</a></h2>
<p>El recorrido: <strong>5.600 llamadas de clasificación en tiempo vivo contra proveedores reales</strong>, descritas como
<em>"dos recorridos de siete configuraciones cada una (<code>tamaño de la ventana de contexto del clasificador</code> de 0, 1, 2, 3, 5, 8, 10), uno con giros de asistentes en la ventana y otro sin, en tres conjuntos de datos multi-turno, con dos repeticiones por conversación."</em></p>
<p>La variable es cuántos giros anteriores puede ver el clasificador. Cero significa que juzga el mensaje actual solo. Diez significa que lee los diez giros anteriores primero.</p>
<p>Acuerdo con las capas de referencia, por tamaño de ventana:</p>
<table><thead><tr><th>Giros anteriores</th><th>Respuestas cortas de seguimiento</th><th>MT-Bench giros 2do</th><th>Compartir GPT multi-turno</th></tr></thead><tbody><tr><td>0</td><td>50.0%</td><td>49.4%</td><td>83.8%</td></tr><tr><td>1</td><td>71.2%</td><td>53.1%</td><td>84.4%</td></tr><tr><td>2</td><td>87.5%</td><td>53.1%</td><td>90.6%</td></tr><tr><td><strong>3 (predeterminado)</strong></td><td><strong>85.0%</strong></td><td><strong>55.0%</strong></td><td><strong>91.9%</strong></td></tr><tr><td>5</td><td>86.2%</td><td>53.8%</td><td>91.9%</td></tr><tr><td>8</td><td>87.5%</td><td>55.6%</td><td>91.2%</td></tr><tr><td>10</td><td>90.0%</td><td>55.6%</td><td>88.8%</td></tr></tbody></table>
<p><span class="zoomImage__wrap"><img alt="Gráfico de líneas del acuerdo del clasificador contra el número de giros de conversación anteriores, mostrando la subconjunto dependiente de la historia que aumenta del 14% al 78% en dos giros y permanece plano después de eso" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NjAgNDMwIiB3aWR0aD0iNzYwIiBoZWlnaHQ9IjQzMCIgZm9udC1mYW1pbHk9InN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLHNhbnMtc2VyaWYiPgo8dGl0bGU+Q2xhc3NpZmllciBhZ3JlZW1lbnQgd2l0aCByZWZlcmVuY2UgdGllcnMsIGJ5IG51bWJlciBvZiBwcmlvciBjb252ZXJzYXRpb24gdHVybnM8L3RpdGxlPgo8bGluZSB4MT0iNzgiIHkxPSIzMzAuMCIgeDI9IjczMCIgeTI9IjMzMC4wIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS1vcGFjaXR5PSIwLjMwIi8+Cjx0ZXh0IHg9IjY2IiB5PSIzMzQuMCIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzY0NzQ4YiI+MCU8L3RleHQ+CjxsaW5lIHgxPSI3OCIgeTE9IjI3MC44IiB4Mj0iNzMwIiB5Mj0iMjcwLjgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLW9wYWNpdHk9IjAuMzAiLz4KPHRleHQgeD0iNjYiIHk9IjI3NC44IiB0ZXh0LWFuY2hvcj0iZW5kIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4yMCU8L3RleHQ+CjxsaW5lIHgxPSI3OCIgeTE9IjIxMS42IiB4Mj0iNzMwIiB5Mj0iMjExLjYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLW9wYWNpdHk9IjAuMzAiLz4KPHRleHQgeD0iNjYiIHk9IjIxNS42IiB0ZXh0LWFuY2hvcj0iZW5kIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj40MCU8L3RleHQ+CjxsaW5lIHgxPSI3OCIgeTE9IjE1Mi40IiB4Mj0iNzMwIiB5Mj0iMTUyLjQiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLW9wYWNpdHk9IjAuMzAiLz4KPHRleHQgeD0iNjYiIHk9IjE1Ni40IiB0ZXh0LWFuY2hvcj0iZW5kIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj42MCU8L3RleHQ+CjxsaW5lIHgxPSI3OCIgeTE9IjkzLjIiIHgyPSI3MzAiIHkyPSI5My4yIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS1vcGFjaXR5PSIwLjMwIi8+Cjx0ZXh0IHg9IjY2IiB5PSI5Ny4yIiB0ZXh0LWFuY2hvcj0iZW5kIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj44MCU8L3RleHQ+CjxsaW5lIHgxPSI3OCIgeTE9IjM0LjAiIHgyPSI3MzAiIHkyPSIzNC4wIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS1vcGFjaXR5PSIwLjMwIi8+Cjx0ZXh0IHg9IjY2IiB5PSIzOC4wIiB0ZXh0LWFuY2hvcj0iZW5kIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4xMDAlPC90ZXh0Pgo8bGluZSB4MT0iNzgiIHkxPSIzMzAuMCIgeDI9IjczMCIgeTI9IjMzMC4wIiBzdHJva2U9IiM5NGEzYjgiLz4KPHRleHQgeD0iNzguMCIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4wPC90ZXh0Pgo8dGV4dCB4PSIxODYuNyIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4xPC90ZXh0Pgo8dGV4dCB4PSIyOTUuMyIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4yPC90ZXh0Pgo8dGV4dCB4PSI0MDQuMCIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4zPC90ZXh0Pgo8dGV4dCB4PSI1MTIuNyIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj41PC90ZXh0Pgo8dGV4dCB4PSI2MjEuMyIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj44PC90ZXh0Pgo8dGV4dCB4PSI3MzAuMCIgeT0iMzU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj4xMDwvdGV4dD4KPHRleHQgeD0iNDA0LjAiIHk9IjM4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMy41IiBmaWxsPSIjNjQ3NDhiIj5wcmlvciBjb252ZXJzYXRpb24gdHVybnMgdGhlIGNsYXNzaWZpZXIgY2FuIHNlZTwvdGV4dD4KPHBhdGggZD0iTTc4LjAsMjg4LjYgTDE4Ni43LDE5MC45IEwyOTUuMyw5OS4xIiBmaWxsPSJub25lIiBzdHJva2U9IiNkYzI2MjYiIHN0cm9rZS13aWR0aD0iMi42IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yOTUuMyw5OS4xIEw3MzAuMCw5OS4xIiBmaWxsPSJub25lIiBzdHJva2U9IiNkYzI2MjYiIHN0cm9rZS13aWR0aD0iMi42IiBzdHJva2UtZGFzaGFycmF5PSI3IDYiLz4KPHRleHQgeD0iNTEyLjciIHk9Ijg4LjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIuNSIgZmlsbD0iI2RjMjYyNiI+ZmxhdCB0byBOPTEwICh0aGVpciB3b3Jkcyk8L3RleHQ+CjxjaXJjbGUgY3g9Ijc4LjAiIGN5PSIyODguNiIgcj0iMy42IiBmaWxsPSIjZGMyNjI2Ii8+CjxjaXJjbGUgY3g9IjE4Ni43IiBjeT0iMTkwLjkiIHI9IjMuNiIgZmlsbD0iI2RjMjYyNiIvPgo8Y2lyY2xlIGN4PSIyOTUuMyIgY3k9Ijk5LjEiIHI9IjMuNiIgZmlsbD0iI2RjMjYyNiIvPgo8cGF0aCBkPSJNNzguMCwxODIuMCBMMTg2LjcsMTE5LjIgTDI5NS4zLDcxLjAgTDQwNC4wLDc4LjQgTDUxMi43LDc0LjggTDYyMS4zLDcxLjAgTDczMC4wLDYzLjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzI1NjNlYiIgc3Ryb2tlLXdpZHRoPSIyLjYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNzguMCIgY3k9IjE4Mi4wIiByPSIzLjYiIGZpbGw9IiMyNTYzZWIiLz4KPGNpcmNsZSBjeD0iMTg2LjciIGN5PSIxMTkuMiIgcj0iMy42IiBmaWxsPSIjMjU2M2ViIi8+CjxjaXJjbGUgY3g9IjI5NS4zIiBjeT0iNzEuMCIgcj0iMy42IiBmaWxsPSIjMjU2M2ViIi8+CjxjaXJjbGUgY3g9IjQwNC4wIiBjeT0iNzguNCIgcj0iMy42IiBmaWxsPSIjMjU2M2ViIi8+CjxjaXJjbGUgY3g9IjUxMi43IiBjeT0iNzQuOCIgcj0iMy42IiBmaWxsPSIjMjU2M2ViIi8+CjxjaXJjbGUgY3g9IjYyMS4zIiBjeT0iNzEuMCIgcj0iMy42IiBmaWxsPSIjMjU2M2ViIi8+CjxjaXJjbGUgY3g9IjczMC4wIiBjeT0iNjMuNiIgcj0iMy42IiBmaWxsPSIjMjU2M2ViIi8+CjxwYXRoIGQ9Ik03OC4wLDgyLjAgTDE4Ni43LDgwLjIgTDI5NS4zLDYxLjggTDQwNC4wLDU4LjAgTDUxMi43LDU4LjAgTDYyMS4zLDYwLjAgTDczMC4wLDY3LjIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIyLjYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNzguMCIgY3k9IjgyLjAiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8Y2lyY2xlIGN4PSIxODYuNyIgY3k9IjgwLjIiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8Y2lyY2xlIGN4PSIyOTUuMyIgY3k9IjYxLjgiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8Y2lyY2xlIGN4PSI0MDQuMCIgY3k9IjU4LjAiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8Y2lyY2xlIGN4PSI1MTIuNyIgY3k9IjU4LjAiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8Y2lyY2xlIGN4PSI2MjEuMyIgY3k9IjYwLjAiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8Y2lyY2xlIGN4PSI3MzAuMCIgY3k9IjY3LjIiIHI9IjMuNiIgZmlsbD0iIzA1OTY2OSIvPgo8cGF0aCBkPSJNNzguMCwxODMuOCBMMTg2LjcsMTcyLjggTDI5NS4zLDE3Mi44IEw0MDQuMCwxNjcuMiBMNTEyLjcsMTcwLjggTDYyMS4zLDE2NS40IEw3MzAuMCwxNjUuNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIuNiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSI3OC4wIiBjeT0iMTgzLjgiIHI9IjMuNiIgZmlsbD0iIzk0YTNiOCIvPgo8Y2lyY2xlIGN4PSIxODYuNyIgY3k9IjE3Mi44IiByPSIzLjYiIGZpbGw9IiM5NGEzYjgiLz4KPGNpcmNsZSBjeD0iMjk1LjMiIGN5PSIxNzIuOCIgcj0iMy42IiBmaWxsPSIjOTRhM2I4Ii8+CjxjaXJjbGUgY3g9IjQwNC4wIiBjeT0iMTY3LjIiIHI9IjMuNiIgZmlsbD0iIzk0YTNiOCIvPgo8Y2lyY2xlIGN4PSI1MTIuNyIgY3k9IjE3MC44IiByPSIzLjYiIGZpbGw9IiM5NGEzYjgiLz4KPGNpcmNsZSBjeD0iNjIxLjMiIGN5PSIxNjUuNCIgcj0iMy42IiBmaWxsPSIjOTRhM2I4Ii8+CjxjaXJjbGUgY3g9IjczMC4wIiBjeT0iMTY1LjQiIHI9IjMuNiIgZmlsbD0iIzk0YTNiOCIvPgo8cmVjdCB4PSI3OCIgeT0iNDA0IiB3aWR0aD0iMjAiIGhlaWdodD0iMyIgZmlsbD0iI2RjMjYyNiIvPgo8dGV4dCB4PSIxMDUiIHk9IjQxMCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzY0NzQ4YiI+MzYgaGlzdG9yeS1kZXBlbmRlbnQgZm9sbG93LXVwczwvdGV4dD4KPHJlY3QgeD0iMzUxLjEiIHk9IjQwNCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjMiIGZpbGw9IiMyNTYzZWIiLz4KPHRleHQgeD0iMzc4LjEiIHk9IjQxMCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzY0NzQ4YiI+U2hvcnQtcmVwbHkgc2V0PC90ZXh0Pgo8cmVjdCB4PSI1MTAuNiIgeT0iNDA0IiB3aWR0aD0iMjAiIGhlaWdodD0iMyIgZmlsbD0iIzA1OTY2OSIvPgo8dGV4dCB4PSI1MzcuNiIgeT0iNDEwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNjQ3NDhiIj5TaGFyZUdQVDwvdGV4dD4KPHJlY3QgeD0iNjIwLjQiIHk9IjQwNCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjMiIGZpbGw9IiM5NGEzYjgiLz4KPHRleHQgeD0iNjQ3LjQiIHk9IjQxMCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzY0NzQ4YiI+TVQtQmVuY2g8L3RleHQ+Cjwvc3ZnPg==" width="760" height="430" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p><strong>Figura 1.</strong> Acuerdo con las capas de referencia por ventana de contexto, extraído de las cifras publicadas en el benchmark de LiteLLM. La línea roja es el subconjunto de 36 giros que solo resuelve la dificultad contra el historial.</p>
<p>Tres historias en tres columnas, que es lo primero que resulta útil aquí.</p>
<p>ShareGPT comienza en 83.8% y gana ocho puntos. MT-Bench no se mueve mucho en absoluto — 49.4% a 55.6% en todo el recorrido — y su propia advertencia explica por qué:
<em>"El techo de MT-Bench refleja sus etiquetas de referencia más que el comportamiento del router."</em>
El conjunto de respuestas cortas es donde le da, 50% a 90%.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-número-que-vale-la-pena-citar-con-su-denominador">El número que vale la pena citar, con su denominador<a href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/#el-n%C3%BAmero-que-vale-la-pena-citar-con-su-denominador" class="hash-link" aria-label="Enlace directo al El número que vale la pena citar, con su denominador" title="Enlace directo al El número que vale la pena citar, con su denominador" translate="no">​</a></h2>
<p>Dentro de la primera columna se encuentra un subconjunto, y es el resultado más agudo en la publicación:</p>
<blockquote>
<p>Acuerdo de <strong>14% en N=0, 47% en N=1 y 78% en N=2</strong>, y plano desde allí hasta N=10.</p>
</blockquote>
<p>Catorce por ciento a setenta y ocho por ciento, logrado mostrando al clasificador dos giros anteriores.</p>
<p>Esta cifra describe <strong>36 seguimientos</strong> — los que <em>"su giro final solo resuelve contra el historial"</em> — es un subconjunto elegido deliberadamente, no una afirmación de precisión general, y leerlo como "los routers son 14% precisos" sería incorrecto. Lo que muestra es la forma del error: cuando la dificultad de un giro vive enteramente en lo que ha venido antes, un clasificador sin contexto es peor que adivinar, y casi todas las correcciones ocurren con el segundo giro de la historia.</p>
<p>La curva que permanece plana en N=2 es la parte prácticamente útil. Esto no es un resultado de "más contexto es mejor". Es un resultado de "dos giros es casi todo lo que necesitas".</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-costó-y-lo-que-costó-más">Lo que costó, y lo que costó <em>más</em><a href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/#lo-que-cost%C3%B3-y-lo-que-cost%C3%B3-m%C3%A1s" class="hash-link" aria-label="Enlace directo al lo-que-costó-y-lo-que-costó-más" title="Enlace directo al lo-que-costó-y-lo-que-costó-más" translate="no">​</a></h2>
<p>Esta es la mitad que hace que el hallazgo sea accionable, y donde la respuesta honesta es más interesante que "es barato".</p>
<p><strong>La ventana en sí es gratuita.</strong> Cada comparación emparejada contra la configuración de ventana cero tiene un intervalo de confianza bootstrap de 95% que abarca cero. Ventana 1 con giros de asistente desactivados llega a -17.8 ms, intervalo -68.9 a +29.6. Su explicación es que la ventana solo añade pre-relleno — la salida permanece una etiqueta de nivel pequeña y fija. En un rango de 318 a 1.043 prompts de tokens, los tokens y la latencia se correlacionan en r = 0.007.</p>
<p><strong>El clasificador no es gratis.</strong> Añadir historia no cuesta nada, pero pedirle a un modelo que clasifique a toda costa <em>"está a 600 ms en cada configuración"</em> — y eso está delante del final de la finalización. El clasificador aquí es <code>gpt-5.4-mini</code>, y se ejecuta a <strong>0.31–0.61 dólares por 1.000 solicitudes</strong> en todo el recorrido. Barato en dinero, medio segundo en tiempo.</p>
<p><strong>Y la precisión aumentó el coste.</strong> Esta es la parte que vale la pena reflexionar sobre. Para el conjunto de respuestas cortas, el coste modelado de la ruta aumentó con la ventana — de <strong>2.87 a 6.49 dólares por 1.000 solicitudes</strong>. No una regresión: la razón es <em>"una mezcla de nivel del 66% SIMPLE en N=0 contra 30% en N=2"</em>. Dos tercios de esas solicitudes de seguimiento se estaban sirviendo por el modelo más barato. Una vez que el clasificador podía ver lo que estaban aprobando, dejaron de hacerlo.</p>
<p>Así que la ruta era barata porque estaba equivocada. El ahorro era una factura que alguien más estaba pagando, en respuesta a calidad, en solicitudes que nadie estaba auditando. En los otros dos conjuntos de datos el efecto va al revés — el coste modelado de ShareGPT disminuye ligeramente, porque el contexto permite que el clasificador se establezca en MEDIO en lugar de por defecto a REASONING.</p>
<p>Esto es lo que vale la pena quedarse con ello: un mejor contexto no corta de forma fiable los gastos. Mueve los gastos hacia donde realmente estaba el trabajo.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dos-cosas-que-esto-no-resuelve">Dos cosas que esto no resuelve<a href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/#dos-cosas-que-esto-no-resuelve" class="hash-link" aria-label="Enlace directo al Dos cosas que esto no resuelve" title="Enlace directo al Dos cosas que esto no resuelve" translate="no">​</a></h2>
<p>La configuración predeterminada es 3, y 3 no es el mejor número en ninguna columna. Diez es mejor para respuestas cortas de seguimiento en 90.0%, y simultáneamente el <em>peor</em> resultado para ShareGPT más allá de N=2, cayendo a 88.8% de 91.9%. Más historia no es un resultado monótonamente mejor, y el nivel predeterminado enviado es una llamada de juicio en los conjuntos de datos que no están de acuerdo.</p>
<p>Y nombran sus propios límites, que es la marca de un benchmark digno de confianza: <em>"Las capas de referencia son llamadas de juicio"</em>, <em>"El coste de finalización del enrutamiento se modela más que se factura"</em>, <em>"Un clasificador de modelos fue recorrido"</em>, y <em>"La latencia se midió en una sola máquina virtual a una concurrencia de 10"</em>. Una concurrencia de 10 en una sola máquina no es de producción, y un clasificador de modelos más pesado tiene más latencia absoluta que el que usaron.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-importa-si-enruta-algo">Por qué importa si enruta algo<a href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/#por-qu%C3%A9-importa-si-enruta-algo" class="hash-link" aria-label="Enlace directo al Por qué importa si enruta algo" title="Enlace directo al Por qué importa si enruta algo" translate="no">​</a></h2>
<p>La lección sobrevive a la implementación específica. Si está eligiendo modelos por solicitud — con una heurística, un clasificador o una regla hecha a mano — los giros que le avergonzarán no son los largos técnicos. Son los cortos. Una ruta que puntúa "yes" como una pregunta trivial, ruta la aprobación de una migración de arquitectura al modelo más pequeño que tiene — y nada en sus registros lo señalará, porque una respuesta barata a una pregunta barata es exactamente lo que le pediste.</p>
<p>Su solución es una ventana de giros anteriores. La solución más barata, si su clasificador no tiene tal opción, es darse cuenta de que las respuestas cortas en una conversación establecida son la población para preocuparse y dejar de puntuarla en su propio contenido.</p>
<p>Lo tomamos el mismo router por el otro lado recientemente — las siete dimensiones de puntuación, el cálculo en un prompt real, y lo que un escáner de palabras clave gratuito pierde que un modelo captura — en <a class="" href="https://development-wec.wiline.com/docs/es/tutoriales/litellm-complejidad-routing/">ruta por complejidad</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fuentes">Fuentes<a href="https://development-wec.wiline.com/docs/es/news/llm-router-cannot-classify-yes/#fuentes" class="hash-link" aria-label="Enlace directo al Fuentes" title="Enlace directo al Fuentes" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.litellm.ai/blog/auto-router-context-and-benchmarks" target="_blank" rel="noopener noreferrer" class="">Auto Router v1.97: benchmarks de uso y mejor calidad para un menor coste</a> — 4 de agosto de 2026</li>
<li class=""><a href="https://docs.litellm.ai/docs/proxy/auto_routing" target="_blank" rel="noopener noreferrer" class="">Referencia de configuración de enrutamiento automático</a></li>
</ul>
<hr>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="enrutamiento" term="enrutamiento"/>
        <category label="evals" term="evals"/>
        <category label="coste" term="coste"/>
        <category label="litellm" term="litellm"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Enmascara tus registros, no tus indicaciones]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/"/>
        <updated>2026-08-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[El consejo de privacidad más común para LLM — eliminar datos personales de la indicación antes de que el modelo los vea — apunta al riesgo equivocado y hace que el modelo sea más tonto. Aquí está lo que realmente muestra la investigación y dónde debería estar el enmascaramiento.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Privacidad · Noticias de IA</span><h2 class="newsHero__title">Enmascara tus registros, no tus indicaciones</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Redactar antes del modelo</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Redactar antes de los registros</span></div></div>
<p>Casi cada guía de "asegura tu aplicación LLM" da el mismo consejo: antes de que una indicación llegue
al modelo, elimina los datos personales de ella — intercambia nombres, correos electrónicos y números de cuenta por
<code>[REDACTED]</code> o <code>&lt;PERSON&gt;</code>, <em>luego</em> llama al modelo.</p>
<p>Suena obviamente correcto. Yo también asumí que lo era. Luego fui y leí la investigación sobre lo que
realmente hace el enmascaramiento a un modelo, y los documentos apuntan en la dirección opuesta. La versión corta:
<strong>enmascara tus registros, no tus indicaciones.</strong></p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="primero-qué-estamos-protegiendo">Primero, ¿qué estamos protegiendo?<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#primero-qu%C3%A9-estamos-protegiendo" class="hash-link" aria-label="Enlace directo al Primero, ¿qué estamos protegiendo?" title="Enlace directo al Primero, ¿qué estamos protegiendo?" translate="no">​</a></h2>
<p><strong>PII</strong> es <em>información de identificación personal</em> — un nombre, un correo electrónico, un número de teléfono, un
ID de cuenta o gubernamental. Datos que apuntan a una persona específica.</p>
<p>Cuando las personas recurren al enmascaramiento previo a la llamada, generalmente están combinando dos preocupaciones diferentes en
una:</p>
<ol>
<li class=""><em>"No quiero enviar datos sensibles a quien ejecute el modelo."</em></li>
<li class=""><em>"No quiero almacenar datos sensibles en mis registros."</em></li>
</ol>
<p>El enmascaramiento previo a la llamada está dirigido a <strong>#1</strong>. Mantén eso — resulta que es importante.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="problema-1-una-indicación-enmascarada-es-un-modelo-confundido">Problema 1: una indicación enmascarada es un modelo confundido<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#problema-1-una-indicaci%C3%B3n-enmascarada-es-un-modelo-confundido" class="hash-link" aria-label="Enlace directo al Problema 1: una indicación enmascarada es un modelo confundido" title="Enlace directo al Problema 1: una indicación enmascarada es un modelo confundido" translate="no">​</a></h2>
<p>Aquí está el fallo más simple. Pon a tres personas en una indicación y enmascara a todas ellas como
<code>[REDACTED]</code>, y el modelo ya no puede diferenciarlas. ¿Quién firmó el contrato? ¿Quién
fue copiado? Las palabras que llevaban esas relaciones han desaparecido, por lo que la respuesta se degrada.</p>
<p>Esto no es solo intuición. Un benchmark de 2026 llamado <strong>RedacBench</strong> midió el compromiso
directamente, a través de 514 textos y 187 políticas. Incluso cuando un modelo <em>capaz</em> hace el enmascaramiento,
subir el dial de seguridad a ~81% de contenido sensible eliminado te deja conservando solo
<strong>37.6%</strong> del significado no sensible del texto. Descartas aproximadamente <strong>60% de lo que hacía
útil la indicación</strong> para obtener esa privacidad.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pero-yo-uso-tokenización-inteligente--aún-así-duele">"Pero yo uso tokenización inteligente" — aún así duele<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#pero-yo-uso-tokenizaci%C3%B3n-inteligente--a%C3%BAn-as%C3%AD-duele" class="hash-link" aria-label="Enlace directo al &quot;Pero yo uso tokenización inteligente&quot; — aún así duele" title="Enlace directo al &quot;Pero yo uso tokenización inteligente&quot; — aún así duele" translate="no">​</a></h2>
<p>La solución obvia es dejar de usar marcadores tontos. La tokenización determinista asigna el
mismo valor al mismo token cada vez — "John Smith" siempre se convierte en <code>PERSON_42</code>,
"Jane Doe" siempre en <code>PERSON_17</code> — así que el modelo aún puede rastrear quién hizo qué. Eso es genuinamente
mejor.</p>
<p>Pero tampoco es gratis. Un ingeniero realizó <strong>109 pruebas de enmascaramiento</strong> en flujos de trabajo de salud, legales,
financieros y de desarrollo y escribió dónde falló. <em>(Divulgación completa: él también
vende una herramienta de tokenización, así que toma su marco con un grano de sal — pero los fallos que
registró son concretos y fáciles de reproducir.)</em></p>
<ul>
<li class=""><strong>Rechazos por frases de contexto.</strong> Tokeniza un SSN en <code>GOV_ID_8x3m</code>, pero deja las palabras
"número de seguro social" al lado, y el filtro de seguridad del modelo puede rechazar toda la
solicitud — ve una etiqueta sensible junto a un token opaco y lo marca.</li>
<li class=""><strong>Falsos positivos.</strong> La palabra "Will" en <em>"esto actualizará el registro"</em> fue atrapada por el
detector de nombres.</li>
<li class=""><strong>Faltantes.</strong> Un nombre corto como "Li" en una fila de tabla, o un SSN enterrado en comentarios de código, pasó
desapercibido por el detector cuando no había suficiente contexto circundante.</li>
<li class=""><strong>Corrupción en streaming.</strong> Un nombre o SSN puede dividirse en dos o tres fragmentos de streaming;
procesarlos uno a la vez y estropeas la entidad.</li>
</ul>
<p>Su detección general resultó en <strong>89%</strong> — y su punto más agudo fue que el 11% que falta es donde duele: estás
forzado a bloquear una solicitud legítima o filtrar. No hay un valor predeterminado cómodo.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-nada-de-esto-es-sorprendente-mi-lectura-no-una-prueba">Por qué nada de esto es sorprendente (mi lectura, no una prueba)<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#por-qu%C3%A9-nada-de-esto-es-sorprendente-mi-lectura-no-una-prueba" class="hash-link" aria-label="Enlace directo al Por qué nada de esto es sorprendente (mi lectura, no una prueba)" title="Enlace directo al Por qué nada de esto es sorprendente (mi lectura, no una prueba)" translate="no">​</a></h2>
<p>Retrocede y encaja en un patrón que la investigación sigue encontrando: <strong>los modelos son frágiles a cómo se
formula una indicación.</strong></p>
<ul>
<li class=""><em>"Sobre el peor rendimiento de indicaciones de LLMs"</em> tomó la misma pregunta, la reformuló de
maneras semánticamente idénticas, y observó que la precisión de un modelo oscilaba en <strong>45 puntos</strong>
(en el peor de los casos, 9.38%).</li>
<li class="">El marco <strong>DETAIL</strong> encontró que las indicaciones <em>más específicas</em> razonan mejor, especialmente en
modelos más pequeños y tareas paso a paso.</li>
</ul>
<p>Ninguno de esos documentos probó el enmascaramiento de PII — así que este siguiente paso es <em>mi inferencia, no su
afirmación</em> — pero el enmascaramiento <strong>es</strong> una edición de indicación. Hace que la indicación sea menos específica y cambia su
redacción, que es exactamente la palanca a la que estos documentos muestran que los modelos son sensibles. Estás
tirando dados que no necesitas tirar.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-factura-oculta">La factura oculta<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#la-factura-oculta" class="hash-link" aria-label="Enlace directo al La factura oculta" title="Enlace directo al La factura oculta" translate="no">​</a></h2>
<p>El enmascaramiento también cuesta dinero de una manera que es fácil de pasar por alto, porque cambia la indicación en
<strong>cada</strong> llamada. Eso rompe silenciosamente <strong>el almacenamiento en caché de indicaciones</strong> — el descuento que obtienes cuando la apertura de una indicación es idéntica a una anterior.</p>
<p>Ambos proveedores principales almacenan en caché por prefijo, y ambos dicen que un cambio al principio lo invalida:</p>
<ul>
<li class="">OpenAI: <em>"Los aciertos de caché solo son posibles para coincidencias exactas de prefijo… un cambio antes del
punto de ruptura evitará un acierto de caché."</em></li>
<li class="">Anthropic: <em>"Los cambios en cada nivel invalidan ese nivel y todos los niveles subsiguientes."</em></li>
</ul>
<p>Una lectura de caché cuesta aproximadamente <strong>10% del precio normal de tokens de entrada</strong>. Así que cada indicación enmascarada
que no acierta en la caché paga cerca de <strong>diez veces más</strong> por esos tokens, y también renuncia al
primer token más rápido. Además, cuando un marcador enmascarado como <code>PERSON_42</code> se filtra
en una llamada a la herramienta, la herramienta lo rechaza y el agente vuelve a intentarlo — y un estudio de agentes de codificación
encontró que pequeños cambios en la redacción de la indicación pueden multiplicar el uso de tokens <strong>2.4–7.4×</strong> sin ganancia en
éxito. (De nuevo: no específicamente enmascaramiento, pero el mismo mecanismo.)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-replanteamiento-el-modelo-nunca-fue-el-riesgo">El replanteamiento: el modelo nunca fue el riesgo<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#el-replanteamiento-el-modelo-nunca-fue-el-riesgo" class="hash-link" aria-label="Enlace directo al El replanteamiento: el modelo nunca fue el riesgo" title="Enlace directo al El replanteamiento: el modelo nunca fue el riesgo" translate="no">​</a></h2>
<p>Aquí está la parte que tenía al revés. <strong>El problema nunca fue que el modelo <em>vea</em> los datos.</strong>
Un modelo que lee tu indicación para responderla simplemente está haciendo su trabajo — ese paso de inferencia no es
donde se filtran los datos. La verdadera pregunta es <strong>retención</strong>: qué se <em>almacena</em>, y dónde.</p>
<p>Una vez que lo ves de esa manera, la solución es obvia. Coloca el enmascaramiento donde realmente ocurre el almacenamiento
y donde tienes control: <strong>tus registros.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enmascara-tus-registros-no-tus-indicaciones">Enmascara tus registros, no tus indicaciones<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#enmascara-tus-registros-no-tus-indicaciones" class="hash-link" aria-label="Enlace directo al Enmascara tus registros, no tus indicaciones" title="Enlace directo al Enmascara tus registros, no tus indicaciones" translate="no">​</a></h2>
<p>El patrón — a menudo llamado <strong>solo registro</strong> — es simple:</p>
<ul>
<li class="">La indicación <strong>cruda</strong> llega al modelo, por lo que el razonamiento se mantiene intacto, la caché aún acierta, y
nada se rechaza.</li>
<li class="">Tu enmascaramiento de PII se ejecuta <strong>solo en el camino hacia el almacenamiento</strong> — los registros de solicitud/respuesta y
trazas que escribe tu puerta de enlace.</li>
</ul>
<p>Piensa en ello como tres peldaños, de peor a mejor:</p>
<ol>
<li class=""><strong>Enmascaramiento tonto</strong> (<code>[REDACTED]</code>) — destruye las relaciones de entidad.</li>
<li class=""><strong>Tokenización</strong> (<code>PERSON_42</code>) — mantiene identidades, pero aún activa rechazos y faltantes.</li>
<li class=""><strong>Solo registro</strong> — el modelo lee el texto real; el enmascaramiento ocurre donde descansan los datos.</li>
</ol>
<p>Una advertencia honesta: sea cual sea el proveedor al que envíes indicaciones, vale la pena conocer su política de retención — esa es una pregunta separada de lo que lee el modelo, y es el <em>lugar correcto para
poner esa preocupación.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="si-ejecutas-tu-propia-puerta-de-enlace">Si ejecutas tu propia puerta de enlace<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#si-ejecutas-tu-propia-puerta-de-enlace" class="hash-link" aria-label="Enlace directo al Si ejecutas tu propia puerta de enlace" title="Enlace directo al Si ejecutas tu propia puerta de enlace" translate="no">​</a></h2>
<p>La parte agradable: esto es una <strong>configuración</strong>, no una reescritura. Si ya has
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/deploy-llm-gateway-wec-instance/">desplegado una puerta de enlace en una instancia WEC</a>, la
barrera funciona en modo solo registro — indicación limpia hacia el modelo, copia enmascarada en los registros.
Un tutorial de seguimiento lo conectará de extremo a extremo.</p>
<p>Enmascarar una indicación antes del modelo te compra un checkbox de cumplimiento y vende silenciosamente la inteligencia de tu
modelo. Coloca el trabajo de privacidad donde los datos realmente descansan — en los registros — y
deja que el modelo lea lo real.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fuentes">Fuentes<a href="https://development-wec.wiline.com/docs/es/news/mask-your-logs-not-your-prompts/#fuentes" class="hash-link" aria-label="Enlace directo al Fuentes" title="Enlace directo al Fuentes" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://arxiv.org/abs/2603.20208" target="_blank" rel="noopener noreferrer" class="">RedacBench: ¿Puede la IA borrar tus secretos? — arXiv 2603.20208</a> — 80.9% de seguridad / 37.6% de utilidad con redacción agresiva</li>
<li class=""><a href="https://arxiv.org/abs/2406.10248" target="_blank" rel="noopener noreferrer" class="">Sobre el peor rendimiento de indicaciones de modelos de lenguaje grande — arXiv 2406.10248</a> — oscilación de 45.48%, 9.38% en el peor de los casos</li>
<li class=""><a href="https://arxiv.org/abs/2512.02246" target="_blank" rel="noopener noreferrer" class="">DETAIL importa: Especificidad de indicaciones y razonamiento — arXiv 2512.02246</a></li>
<li class=""><a href="https://arxiv.org/abs/2608.01347" target="_blank" rel="noopener noreferrer" class="">Desperdicio inducido por indicaciones en agentes de codificación — arXiv 2608.01347</a> — multiplicación de tokens de 2.4–7.4×</li>
<li class=""><a href="https://www.reddit.com/r/LLMDevs/comments/1sgvjrg/deterministic_tokenization_vs_masking_for_pii_in/" target="_blank" rel="noopener noreferrer" class="">Tokenización determinista vs. enmascaramiento para PII: 109 pruebas — r/LLMDevs</a> — informe de un practicante (el autor vende una herramienta de tokenización)</li>
<li class=""><a href="https://developers.openai.com/api/docs/guides/prompt-caching" target="_blank" rel="noopener noreferrer" class="">OpenAI — Almacenamiento en caché de indicaciones</a></li>
<li class=""><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" target="_blank" rel="noopener noreferrer" class="">Anthropic — Almacenamiento en caché de indicaciones</a></li>
</ul>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="privacy" term="privacy"/>
        <category label="pii" term="pii"/>
        <category label="guardrails" term="guardrails"/>
        <category label="gateway" term="gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Desarrollo guiado por especificaciones: ¿es la solución al Vibe Coding?]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/"/>
        <updated>2026-08-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Un kit de GitHub con 127 mil estrellas dice que deberías escribir la especificación antes del código, y dejar que el agente construya a partir de ella. Lo ejecuté, y luego leí a los dos ingenieros que lo probaron de verdad — y ambos recurrieron a la misma comparación: la última vez que nuestra industria intentó generar código a partir de documentos.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Práctica de ingeniería · Noticias de IA</span><h2 class="newsHero__title">Desarrollo guiado por especificaciones, probado</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Escribe el prompt</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Escribe el contrato</span></div></div>
<p>Alguien publicó el desarrollo guiado por especificaciones en LinkedIn esta semana como <em>la</em>
respuesta al vibe coding — a hacerle prompts a un agente, entendiendo a medias lo que estás
construyendo, y terminar con código del que no puedes responder. El kit enlazado tiene 127.000
estrellas y viene de GitHub mismo. El argumento convence.</p>
<p>Así que lo instalé y lo apunté a una tarea deliberadamente trivial. Uno de los tres principios
que escribió para mí fue una política de dependencias que nunca pedí — guarda ese pensamiento.</p>
<p>Veinte minutos no son un veredicto, sin embargo. Dos ingenieros lo han probado de verdad, en
problemas reales, durante suficiente tiempo para que se vean las costuras. Usaron herramientas
distintas, en continentes distintos, con siete meses de diferencia — y ambos recurrieron a la
misma comparación, sin que nadie se lo pidiera: la última vez que nuestra industria intentó
generar código funcional a partir de documentos. En la única pregunta que decide si algo de esto
sobrevive al contacto con funcionalidades de IA, se contradicen rotundamente. Ninguno de los dos
tiene una medición.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-es-el-desarrollo-guiado-por-especificaciones">Qué es el desarrollo guiado por especificaciones<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#qu%C3%A9-es-el-desarrollo-guiado-por-especificaciones" class="hash-link" aria-label="Enlace directo al Qué es el desarrollo guiado por especificaciones" title="Enlace directo al Qué es el desarrollo guiado por especificaciones" translate="no">​</a></h2>
<p>Si el término es nuevo para ti, la idea es simple. En lugar de hacerle prompts a un agente e
iterar hasta que el código se vea bien, escribes primero una especificación estructurada — qué
estás construyendo, por qué, y qué significa "terminado" — y el agente trabaja a partir de ese
documento en lugar de tu prompt. La especificación, no el código, se convierte en aquello a lo
que todos señalan.</p>
<p><strong>Spec Kit</strong> es la implementación de GitHub. Se instala en un repositorio una vez, no por tarea,
y le da a tu agente un conjunto de comandos: <code>constitution</code> para fijar los principios del
proyecto, y luego <code>specify</code>, <code>plan</code>, <code>tasks</code>, <code>implement</code>. Nada corre en segundo plano — deja
plantillas y definiciones de comandos en tu proyecto, y a partir de ahí estás hablando con tu
agente. Más cerca de una configuración de linter que de un producto.</p>
<!-- -->
<p>Antes de todo eso, sin embargo, viene <code>constitution</code> — escrita primero, antes de que nadie haya
visto el problema, y todo lo que viene después se juzga contra ella. Guarda eso también.</p>
<p>El paso de instalación te dice a qué apunta realmente:</p>
<p><span class="zoomImage__wrap"><img alt="El prompt de instalación de Spec Kit listando más de treinta integraciones de agentes de programación, incluyendo Claude Code, GitHub Copilot, Cursor, Gemini CLI, Devin, Grok e IBM Bob." src="https://development-wec.wiline.com/docs/es/assets/images/spec-kit-agents-f508d78c53fe54f1ad55cd522d110859.png" width="2236" height="1282" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Más de treinta agentes. Esta no es una herramienta solo para GitHub — quiere ser la capa a la
que se conecta todo agente de programación, lo que explica bastante el número de estrellas.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-pasa-realmente-cuando-lo-usas">Qué pasa realmente cuando lo usas<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#qu%C3%A9-pasa-realmente-cuando-lo-usas" class="hash-link" aria-label="Enlace directo al Qué pasa realmente cuando lo usas" title="Enlace directo al Qué pasa realmente cuando lo usas" translate="no">​</a></h2>
<p><strong>Birgitta Böckeler</strong>, Distinguished Engineer en Thoughtworks, probó tres de estas herramientas a
mano — Kiro, Spec Kit y Tessl — y
<a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html" target="_blank" rel="noopener noreferrer" class="">publicó lo que encontró</a>
en octubre de 2025.</p>
<p>Le pidió a Kiro que arreglara un error pequeño. Produjo cuatro historias de usuario y dieciséis
criterios de aceptación, incluyendo — literalmente — <em>"Como desarrollador, quiero que la función
de transformación maneje los casos límite con elegancia, para que el sistema siga siendo robusto
cuando se introduzcan nuevos formatos de categoría."</em> Su resumen: <em>"como usar un mazo para
partir una nuez."</em></p>
<p>Con Spec Kit y una funcionalidad real — unos días de trabajo, según su propia estimación — nunca
terminó la implementación, y calcula que podría haber construido la cosa a mano en el tiempo que
pasó revisando artefactos. La frase que resonará con cualquiera que haya hecho una revisión de
código:</p>
<blockquote>
<p>Para ser honesta, preferiría revisar código que todos estos archivos markdown.</p>
</blockquote>
<p>También encontró al agente ignorando los documentos que debían guiarlo. El paso de investigación
de Spec Kit catalogó correctamente las clases existentes; el agente entonces leyó esas
descripciones como una especificación y generó las clases otra vez, duplicadas. Y el fallo
inverso — el agente yéndose <em>"muy por encima porque estaba siguiendo las instrucciones con
demasiado entusiasmo (por ejemplo, uno de los artículos de la constitución)."</em></p>
<p><strong>Alex Punnen</strong> fue más estrecho y más profundo, y
<a href="https://github.com/alexcpn/speckit_test" target="_blank" rel="noopener noreferrer" class="">publicó la transcripción completa</a> con citas por
línea. Spec Kit v0.8.9, en un problema a escala real: consultar datos de elevación de Estados
Unidos en 1.756 mosaicos de mapa — 23 mil millones de mediciones, 180 GB.</p>
<p>Su hallazgo es más sutil que "la herramienta inventa cosas". Pidió principios que cubrieran
calidad de código, pruebas, consistencia y rendimiento, y dice claramente: <em>"Los principios en sí
mismos son razonables."</em> Lo que salió mal, argumenta, es que uno de ellos inclinó silenciosamente
todas las decisiones posteriores:</p>
<blockquote>
<p>Las nuevas dependencias DEBEN justificarse por escrito: problema resuelto, alternativas
consideradas, licencia verificada.</p>
</blockquote>
<p>Sensato en aislamiento. Pero como lo plantea Punnen, <em>"la opción de la biblioteca estándar siempre
gana los empates porque cuesta cero entradas de justificación."</em> Cuatro fases después el plan
eligió SQLite porque — primera razón listada — <em>"Biblioteca estándar, cero dependencias
nuevas… esa es la respuesta más barata posible."</em> Tres de las cuatro alternativas rechazadas
cayeron por esa misma regla. Su veredicto: <strong>"La constitución hizo el rechazo; el agente solo era
el micrófono."</strong></p>
<p>Luego viene la parte que me costó más quitarme de encima. Antes en el proceso el agente había
escrito un presupuesto de rendimiento de cinco minutos en la especificación — un número que
adivinó, sin ninguna medición detrás, archivado bajo la etiqueta SC-008. Más tarde, esa
adivinanza volvió como la razón por la que no se podía usar un mejor diseño: <em>"El costo de
transcodificación se pasa de SC-008."</em> Solo bajo presión directa concedió: <em>"Tienes razón en que
sobrevaloré la razón #2."</em> El mejor diseño, escribe Punnen, no necesitaba nada que no estuviera
ya en la especificación, <em>"excepto la disposición a revisar un número arbitrario que la propia
especificación produjo."</em></p>
<p>Su resumen de esa fase se aplica a toda la categoría:</p>
<blockquote>
<p>El artefacto parece terminado porque cada casilla de la plantilla está llena — no porque la
pregunta de ingeniería esté respondida.</p>
</blockquote>
<p>Dos cosas hacen que esto sea más que un caso aislado. Su prompt de constitución era esencialmente
<strong>el propio ejemplo documentado de GitHub</strong>, ligeramente adaptado — siguió la guía rápida. Y la
resistencia que encontró es en parte por diseño: el documento de metodología de GitHub llama a la
constitución <em>"un conjunto de <strong>principios inmutables</strong>,"</em> con una sección titulada <em>"El poder de
los principios inmutables."</em></p>
<p>Para ser precisos, el presupuesto de cinco minutos no era un principio constitucional — era un
criterio de éxito que el agente generó a partir de uno. El documento nunca afirma que esos sean
inmutables. Pero el número cargó esa autoridad de todos modos, y hizo falta un humano para
desalojarlo. La metodología argumenta a favor de fijar principios y no dice nada sobre qué pasa
cuando las adivinanzas derivadas de ellos heredan la misma jerarquía.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="los-tres-niveles-en-los-que-nadie-está-de-acuerdo">Los tres niveles en los que nadie está de acuerdo<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#los-tres-niveles-en-los-que-nadie-est%C3%A1-de-acuerdo" class="hash-link" aria-label="Enlace directo al Los tres niveles en los que nadie está de acuerdo" title="Enlace directo al Los tres niveles en los que nadie está de acuerdo" translate="no">​</a></h2>
<p>La contribución más útil de Böckeler es una distinción que el resto del debate se salta.
"Desarrollo guiado por especificaciones" cubre tres prácticas diferentes:</p>
<figure class="stageFlow"><div class="stageFlow__track"><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.050);border-color:rgba(var(--primary-rgb), 0.250)"><span class="stageFlow__stage">Spec-first</span><span class="stageFlow__title">La especificación se escribe primero, se usa para la tarea en cuestión</span><span class="stageFlow__tag">todas las herramientas hacen esto</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.160);border-color:rgba(var(--primary-rgb), 0.450)"><span class="stageFlow__stage">Spec-anchored</span><span class="stageFlow__title">La especificación se conserva y se mantiene después de la tarea</span><span class="stageFlow__tag">pocas herramientas llegan</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.270);border-color:rgba(var(--primary-rgb), 0.650)"><span class="stageFlow__stage">Spec-as-source</span><span class="stageFlow__title">Solo se edita la especificación; el humano nunca toca el código</span><span class="stageFlow__tag">solo Tessl</span></div></div><figcaption class="stageFlow__caption">La taxonomía de Böckeler, octubre de 2025. IBM publicó los mismos tres nombres siete meses después.</figcaption></figure>
<p>Su veredicto sobre dónde están realmente las herramientas: <em>"Todos los enfoques y definiciones de
SDD que he encontrado son spec-first, pero no todos aspiran a ser spec-anchored o
spec-as-source."</em> Incluido Spec Kit. La metodología de GitHub aspira mucho más alto — <em>"Las
especificaciones no sirven al código—el código sirve a las especificaciones"</em> — pero Spec Kit crea
una <strong>rama por especificación</strong>, así que una especificación vive lo que dura una solicitud de
cambio, no una funcionalidad. Su conclusión: <em>"spec-kit sigue siendo lo que yo llamaría
spec-first solamente, no spec-anchored en el tiempo."</em></p>
<p>Vale saber que IBM publicó <a href="https://www.ibm.com/think/topics/spec-driven-development" target="_blank" rel="noopener noreferrer" class="">la taxonomía idéntica de tres
niveles</a> siete meses después, con nota
al pie. Si la has visto atribuida a IBM, es de ella.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-obtuve-en-una-tarea-trivial">Lo que obtuve en una tarea trivial<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#lo-que-obtuve-en-una-tarea-trivial" class="hash-link" aria-label="Enlace directo al Lo que obtuve en una tarea trivial" title="Enlace directo al Lo que obtuve en una tarea trivial" translate="no">​</a></h2>
<p>Ejecuté Spec Kit en el commit <code>83883a2</code> con un prompt deliberadamente mínimo — <em>"Principios para
una pequeña utilidad de Python. Mantenlo mínimo — no tengo restricciones fuertes."</em></p>
<p><span class="zoomImage__wrap"><img alt="La fase de constitución de Spec Kit ejecutándose en una terminal, generando principios a partir de un prompt de una línea." src="https://development-wec.wiline.com/docs/es/assets/images/spec-kit-constitution-2e19dee68aab5c7e2a098a49a54edc1b.png" width="2176" height="1288" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Uno de los tres principios que escribió:</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token title important punctuation" style="color:#393A34">###</span><span class="token title important"> II. Minimal Dependencies</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Prefer the Python standard library. A third-party dependency MAY be added only when it</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">removes clearly more complexity than it introduces, and MUST be recorded in the project's</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">dependency file (e.g. </span><span class="token code-snippet code keyword" style="color:#00009f">`requirements.txt`</span><span class="token plain"> or </span><span class="token code-snippet code keyword" style="color:#00009f">`pyproject.toml`</span><span class="token plain">).</span><br></div></code></pre></div></div>
<p>Una política de dependencias, escrita en el lenguaje MUST/MAY de un estándar formal, a partir de
un prompt donde dije que no tenía restricciones. No está en la plantilla local ni en el archivo
de skill — pero el Artículo I de los nueve artículos constitucionales de GitHub sí pide
implementaciones <em>"con límites claros y <strong>dependencias mínimas</strong>."</em> Así que es consistente con la
filosofía publicada más que inventado en el momento. No puedo decirte el mecanismo, solo qué
entró y qué salió.</p>
<p>Una ejecución, una tarea trivial, y no me costó nada porque no había nada en juego. El caso de
Punnen muestra lo que cuesta este tipo de sesgo cuando el problema es lo bastante difícil para
que se equivoque. El mío solo muestra que aparece sin que se lo pidan — lo que importa porque,
como señala Böckeler, la constitución de Spec Kit es su <strong>banco de memoria</strong>, <em>"un archivo de
reglas muy poderoso"</em> aplicado a cada cambio. Una preferencia no solicitada no se queda en un
documento que vas a descartar. Se convierte en una regla permanente.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="los-dos-recurrieron-a-los-años-noventa">Los dos recurrieron a los años noventa<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#los-dos-recurrieron-a-los-a%C3%B1os-noventa" class="hash-link" aria-label="Enlace directo al Los dos recurrieron a los años noventa" title="Enlace directo al Los dos recurrieron a los años noventa" translate="no">​</a></h2>
<p>Esto es lo que me convenció de que vale la pena tomarlo en serio en lugar de descartarlo o
evangelizarlo.</p>
<p>Böckeler, que trabajó en desarrollo guiado por modelos al inicio de su carrera, ve MDD:</p>
<blockquote>
<p>Me pregunto si spec-as-source, e incluso spec-anchoring, podrían terminar con las desventajas
tanto de MDD como de los LLMs: inflexibilidad y no determinismo.</p>
</blockquote>
<p>Punnen, veinte años en telecomunicaciones, recurre independientemente a Rational Rose y UML —
<em>"tratado como la bala de plata de su década: dibuja cajas, flechas y diagramas, y la herramienta
mágicamente los convertiría en código funcional."</em></p>
<p>Ninguno cita al otro. Herramientas distintas, problemas distintos, países distintos. Ambos
aterrizan en la misma época: la última vez que nuestra industria creyó que un documento podía ser
la fuente y el código el resultado.</p>
<p>Böckeler es cuidadosa con la comparación — <em>"No siento nostalgia por mi experiencia con MDD."</em> Su
punto es que las herramientas de hoy dejan atrás las partes que hacían doloroso a MDD: ya no
necesitas un lenguaje especial de especificación ni un generador hecho a medida. Lo que se
pregunta es si el intercambio es bueno, ya que el enfoque antiguo al menos producía la misma
salida cada vez.</p>
<p>Punnen nombra la trampa que hay debajo:</p>
<blockquote>
<p>La especificación tiene que ser muy rigurosa desde el principio, pero para volverse rigurosa
necesita refinarse iterativamente junto con el código generado.</p>
</blockquote>
<p>Un Catch-22, en otras palabras: según él no puedes escribir una especificación rigurosa para un
problema que aún no entiendes, y el entendimiento llega mientras construyes. Rastrea la idea
hasta Fred Brooks, cuarenta años atrás: <em>"las descripciones de una entidad de software que
abstraen su complejidad a menudo abstraen su esencia."</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dónde-discrepan--y-por-qué-te-importa">Dónde discrepan — y por qué te importa<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#d%C3%B3nde-discrepan--y-por-qu%C3%A9-te-importa" class="hash-link" aria-label="Enlace directo al Dónde discrepan — y por qué te importa" title="Enlace directo al Dónde discrepan — y por qué te importa" translate="no">​</a></h2>
<p>En una pregunta estos dos están en oposición directa.</p>
<p>Böckeler, generando código repetidamente a partir de una especificación de Tessl: <em>"He visto el no
determinismo en acción… un ejercicio interesante iterar sobre la especificación y hacerla cada vez
más específica para aumentar la repetibilidad de la generación de código."</em></p>
<p>Punnen: <em>"Esto no es un problema mayor en la práctica. Los frameworks de SDD actúan como prompts
estructurados, y los modelos modernos producen salidas muy consistentes cuando son guiados por
ellos."</em></p>
<p>GitHub se pone del lado de Punnen y va más lejos, afirmando <em>"Consistencia entre LLMs: modelos de
IA diferentes producen código arquitectónicamente compatible."</em> No el mismo modelo dos veces —
modelos diferentes. Sin evidencia ofrecida.</p>
<p>Dos ingenieros experimentados, conclusiones opuestas, una afirmación de proveedor más fuerte que
cualquiera de las dos, y ni un número entre ellos. Importa más de lo que parece. Mantener una
especificación y su código sincronizados — la idea de spec-anchored — depende de pruebas
automatizadas que atrapen la deriva. Eso funciona para código determinista, donde la misma entrada
da la misma salida.</p>
<p>Apúntalo a una funcionalidad de LLM y la verificación deja de funcionar. <code>assert response == expected</code> no significa nada cuando la respuesta difiere en cada ejecución. A menos que cambies
pruebas por <strong>evaluaciones</strong>, donde cada criterio de aceptación se convierte en una afirmación
puntuada: ¿clasificó correctamente, devolvió JSON válido contra el esquema, se negó cuando debía?</p>
<p>Ese puente sobrevive al no determinismo, y es el arnés que he pasado varios tutoriales
construyendo sobre la WEC Inference API. También hace que el desacuerdo sea <em>medible</em>: escribe la
especificación, convierte sus criterios en afirmaciones de evaluación, y ejecútalas a lo largo de
una sesión larga para ver si la adherencia se mantiene o decae.</p>
<p>Ese es el siguiente post.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="si-vas-a-probarlo">Si vas a probarlo<a href="https://development-wec.wiline.com/docs/es/news/spec-driven-development-solution-to-vibe-coding/#si-vas-a-probarlo" class="hash-link" aria-label="Enlace directo al Si vas a probarlo" title="Enlace directo al Si vas a probarlo" translate="no">​</a></h2>
<p>Las conclusiones prácticas de Punnen son mejores que cualquier cosa que yo inventara, y se las
ganó:</p>
<ul>
<li class=""><strong>Trata las reglas de "sin dependencias nuevas" como sesgos, no como neutrales.</strong> Si la
respuesta correcta necesita una dependencia, vas a tener que defenderla — el framework no lo
hará.</li>
<li class=""><strong>Trata los criterios de éxito generados como adivinanzas</strong> hasta que un ingeniero los
ratifique. El agente te los va a citar después como si estuvieran medidos.</li>
<li class=""><strong>Lee cada menú de aclaración como una propuesta de diseño disfrazada.</strong> Si la opción que
quieres no está listada, ese es el fallo — no una invitación a elegir la mejor de tres.</li>
<li class=""><strong>Presiona durante la aclaración, no durante el plan.</strong> Los planes son largos, internamente
consistentes, y agotadores de revisar.</li>
</ul>
<p>Una mía: <strong>escribe tus principios con una fecha y una justificación, para que un tú posterior
pueda reemplazarlos.</strong> IBM sugiere tratar las especificaciones como <em>"artefactos versionados
apilables, como registros de decisiones de arquitectura"</em> — y un ADR es algo que puedes marcar
como reemplazado. La metodología llama a estos principios inmutables. Tu problema no lo es.</p>
<p>Añade la prueba de costo de IBM, la línea práctica más afilada que escribió cualquiera de ellos:
<em>el costo de refinar la especificación debería ser siempre menor que el costo de arreglar
malentendidos en la implementación. Cuando ese equilibrio se invierte, deja de pulir y empieza a
construir.</em></p>
<p>Y revisa la organización antes de instalar. El repositorio que circula en LinkedIn es un <strong>fork</strong>
con once estrellas; el proyecto real es
<a href="https://github.com/github/spec-kit" target="_blank" rel="noopener noreferrer" class=""><code>github/spec-kit</code></a>. Eso importa más aquí que en la mayoría de
herramientas: el trabajo de Spec Kit es escribir archivos de instrucciones que tu agente después
obedece, y en la primera ejecución apruebas esa carpeta con una tecla sin haberlos leído.</p>
<hr>
<p>Entonces, ¿reemplaza al vibe coding? No de la forma que sugiere el argumento de venta. No ayuda
cuando no entiendes tu problema — ayuda cuando lo entiendes y lo comunicas mal. Esos son fallos
diferentes, y solo uno de ellos tiene plantilla.</p>
<p>Ambos encontraron valor real en las fases iniciales — Punnen califica el paso de aclaración como
el más útil de todos — y ambos encontraron que los artefactos se veían más autoritativos
exactamente donde las decisiones debajo de ellos eran más arbitrarias. Punnen: <em>"son más
peligrosos cuando parecen más rigurosos."</em></p>
<p>Böckeler recurre a una palabra compuesta alemana para describirlo —
<strong>Verschlimmbesserung</strong>. Empeorar algo en el intento de mejorarlo.</p>
<p>La parte difícil nunca fue escribir el código.</p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="engineering-practice" term="engineering-practice"/>
        <category label="agentes" term="agentes"/>
        <category label="evals" term="evals"/>
        <category label="tooling" term="tooling"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Muse Glimmer: un modelo agentic de 30B que funciona en una GPU, sin necesidad de centro de datos]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/"/>
        <updated>2026-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Meta lanzó un modelo multimodal de 30B construido para cargas de trabajo locales de agentes — supera a Gemma4 y se mantiene frente a Qwen3.6 en benchmarks agentic, y cabe en una sola GPU de consumo. Aquí está lo que realmente es nuevo, y lo que se necesitaría para que llegue a WEC.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Modelos · Noticias de IA</span><h2 class="newsHero__title">Un agente serio, sin necesidad de centro de datos</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Agentes solo en la nube</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Una GPU, completamente local</span></div></div>
<p>La mayoría de los anuncios de modelos "ejecutarlo localmente" vienen con un asterisco: más pequeños, más débiles, una versión de juguete de la cosa real. El lanzamiento más reciente de Meta no lo tiene: <strong>Muse Glimmer</strong>, un modelo multimodal de 30B construido específicamente para trabajo agentic, cabe en una sola GPU de consumo y supera a modelos más grandes en los benchmarks que realmente miden el comportamiento de los agentes.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="arquitectura">Arquitectura<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#arquitectura" class="hash-link" aria-label="Enlace directo al Arquitectura" title="Enlace directo al Arquitectura" translate="no">​</a></h2>
<p>Muse Glimmer tiene <strong>30B parámetros en total</strong>: un codificador de visión estilo ViT de 2B acoplado a un decodificador de texto de 28B parámetros, 52 capas de transformadores utilizando un patrón de atención híbrido. Se destila del modelo más grande de Meta, Muse Spark: la capacidad de un modelo más grande, comprimida en algo que una sola GPU puede contener. Los datos de entrenamiento abarcan más de 100 idiomas, con un corte de conocimiento del 4 de enero de 2026.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="comprensión-multimodal">Comprensión multimodal<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#comprensi%C3%B3n-multimodal" class="hash-link" aria-label="Enlace directo al Comprensión multimodal" title="Enlace directo al Comprensión multimodal" translate="no">​</a></h2>
<ul>
<li class=""><strong>Texto, imagen y video</strong> — comprensión de video de hasta 96 fotogramas a 2 fps (sin pista de audio procesada).</li>
<li class=""><strong>Detección de objetos abierta</strong> — puede localizar e identificar objetos en una escena sin un conjunto de etiquetas predefinido, en lugar de solo reconocer una lista de categorías fijas.</li>
<li class=""><strong>Ventana de contexto de 131K+ tokens</strong>, lo suficientemente larga para sesiones de agentes extendidas o documentos grandes sin fragmentación externa.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="uso-de-herramientas-agentic">Uso de herramientas agentic<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#uso-de-herramientas-agentic" class="hash-link" aria-label="Enlace directo al Uso de herramientas agentic" title="Enlace directo al Uso de herramientas agentic" translate="no">​</a></h2>
<p>La característica principal: <strong>llamada a herramientas multimodal con salidas estructuradas</strong>. Puede mirar una imagen y decidir qué función llamar según lo que ve, no solo analizar instrucciones de texto — por ejemplo, inspeccionando una captura de pantalla y llamando a la API correcta según lo que se renderiza, no una descripción textual de ello. También genera y ejecuta código, y está construido con un comportamiento de recuperación de fallos explícito en lugar de asumir que cada llamada a la herramienta tiene éxito en el primer intento.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ejecución-local">Ejecución local<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#ejecuci%C3%B3n-local" class="hash-link" aria-label="Enlace directo al Ejecución local" title="Enlace directo al Ejecución local" translate="no">​</a></h2>
<ul>
<li class=""><strong>Cabe en una GPU de consumo</strong> — variantes cuantizadas funcionan en 24–32GB de VRAM.</li>
<li class=""><strong>Soporte Day-0</strong> en <code>transformers</code>, <code>llama.cpp</code>, <code>vLLM</code>, y Puntos de Inference — sin esperar a puertos comunitarios.</li>
<li class=""><strong>Decodificación especulativa DFlash</strong> — hasta 3x más rápida en hardware compatible.</li>
<li class="">No se requiere un viaje de ida y vuelta a la nube para ninguno de los anteriores; todo funciona en la máquina que posees.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="licenciamiento">Licenciamiento<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#licenciamiento" class="hash-link" aria-label="Enlace directo al Licenciamiento" title="Enlace directo al Licenciamiento" translate="no">​</a></h2>
<p><strong>Apache 2.0</strong> — sin restricciones de uso comercial, sin requisito de atribución, sin negociación de licencia separada para ejecutarlo en un producto. Vale la pena decirlo claramente porque no es algo dado en este momento: algunos modelos agentic de peso abierto recientes tienen restricciones de uso comercial que solo aparecen una vez que lees el texto de la licencia detenidamente. Este no las tiene.</p>
<p>Meta también realizó evaluaciones de seguridad para riesgos químicos/biológicos, ciberseguridad y pérdida de control — todos calificados como "moderados o inferiores".</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cómo-se-compara">Cómo se compara<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#c%C3%B3mo-se-compara" class="hash-link" aria-label="Enlace directo al Cómo se compara" title="Enlace directo al Cómo se compara" translate="no">​</a></h2>
<p>Los propios números publicados de Meta, contra Gemma4-31B y Qwen3.6-27B:</p>
<table><thead><tr><th>Benchmark</th><th>Muse Glimmer</th><th>Gemma4</th><th>Qwen3.6</th></tr></thead><tbody><tr><td>MCP Atlas (agentic)</td><td><strong>75.5</strong></td><td>54.2</td><td>62.5</td></tr><tr><td>DeepSearch QA</td><td><strong>74.6</strong></td><td>61.7</td><td>71.1</td></tr><tr><td>GAIA2</td><td><strong>43.3</strong></td><td>36.4</td><td>40.0</td></tr><tr><td>SWE-Bench Pro</td><td><strong>51.2</strong></td><td>36.9</td><td>50.2</td></tr><tr><td>SWE-Bench Verified</td><td>76.0</td><td>66.6</td><td><strong>77.2</strong></td></tr></tbody></table>
<p>No es una barrida limpia: Qwen3.6 lo supera en SWE-Bench Verified — pero contra Gemma4 la diferencia es amplia, y contra Qwen3.6 es competitivo o superior en la mayoría de los benchmarks específicos de agentic. <em>(Números de
<a href="https://huggingface.co/blog/muse-glimmer" target="_blank" rel="noopener noreferrer" class="">anuncio de Muse Glimmer de Meta</a>;
los benchmarks son direccionales, no evangelio.)</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-es-importante">Por qué es importante<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#por-qu%C3%A9-es-importante" class="hash-link" aria-label="Enlace directo al Por qué es importante" title="Enlace directo al Por qué es importante" translate="no">​</a></h2>
<p>La historia de la IA autoalojada siempre ha tenido un impuesto silencioso: los buenos modelos agentic necesitaban infraestructura real, por lo que "ejecutarlo tú mismo" a menudo significaba "ejecutar una versión peor de ello tú mismo". Un modelo que está genuinamente construido primero para agentes, se envía con licencia permisiva y cabe en hardware que una sola persona puede poseer es el cierre de la brecha en tiempo real: la misma tendencia en la que toda esta serie de tutoriales ha estado apostando.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="está-en-wec">¿Está en WEC?<a href="https://development-wec.wiline.com/docs/es/news/muse-glimmer-30b-local-agentic-model/#est%C3%A1-en-wec" class="hash-link" aria-label="Enlace directo al ¿Está en WEC?" title="Enlace directo al ¿Está en WEC?" translate="no">​</a></h2>
<p>Aún no — y no vamos a pretender lo contrario. Lo estamos ejecutando a través de nuestra propia suite de evaluación de modelos ahora, la misma que evalúa todo lo que ya está en WEC Models, antes de que gane un lugar en el catálogo. Si se mantiene frente a lo que ya está allí, espéralo pronto.</p>
<hr>
<p>📖 <strong>Fuentes:</strong> <a href="https://huggingface.co/blog/muse-glimmer" target="_blank" rel="noopener noreferrer" class="">anuncio de Muse Glimmer de Meta (Hugging Face)</a> · <a href="https://huggingface.co/meta-models/Muse-Glimmer-30B-GGUF" target="_blank" rel="noopener noreferrer" class="">Tarjeta del modelo</a></p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="models" term="models"/>
        <category label="open-weight" term="open-weight"/>
        <category label="agentes" term="agentes"/>
        <category label="local-inference" term="local-inference"/>
    </entry>
    <entry>
        <title type="html"><![CDATA['La ingeniería de bucles está muerta' — y la verdadera historia es más extraña que el obituario]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/"/>
        <updated>2026-08-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[En junio, 'la ingeniería de bucles' obtuvo un nombre. Seis semanas después fue declarada muerta — y la industria respondió con guías de proveedores, definiciones en competencia y una ola de SEO. Aquí está lo que realmente significan la ingeniería de bucles y la ingeniería de gráficos, por qué un libro de texto gratuito del MIT resuelve el argumento en la página 189, y qué debería enseñarte un ciclo de hype de seis semanas sobre lo que debes aprender.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero"><div class="newsHero__glow" aria-hidden="true"></div><span class="newsHero__eyebrow">Arquitectura · Noticias de IA</span><h2 class="newsHero__title">Bucles, gráficos y el obituario de seis semanas</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Ingeniería de bucles</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Ingeniería de gráficos</span></div></div>
<p>En junio de 2026, el mundo de la IA obtuvo una nueva palabra de moda: <strong>ingeniería de bucles</strong> — aproximadamente, el diseño disciplinado de un bucle de llamada a herramientas de un solo agente. Seis semanas después, supuestamente fue reemplazada por <strong>ingeniería de gráficos</strong> — conectando varios agentes a la vez — asesinada por doce palabras que 3.1 millones de personas vieron:</p>
<div class="xEmbed"><blockquote class="twitter-tweet" data-dnt="true" data-conversation="none"><p lang="en" dir="ltr"></p><p>¿Todavía estamos hablando de bucles o ya hemos cambiado a gráficos?</p><p></p>— <!-- -->Peter Steinberger 🦞<!-- --> (@<!-- -->steipete<!-- -->) <a href="https://twitter.com/steipete/status/2078277297791189132">18 de julio de 2026</a></blockquote></div>
<p>¿No sabes qué es la ingeniería de bucles? No te preocupes — la mayoría de las personas que la declararon muerta tampoco lo sabían. Aquí están ambos términos, cómo un nombre se convirtió en un obituario en seis semanas, y el giro que nadie verificó antes de escribir sobre ello.</p>
<!-- -->
<p>La división se muestra mejor en un trabajo con <strong>trabajo independiente que puede ejecutarse a la vez</strong> y donde una respuesta incorrecta es costosa — un <strong>informe de investigación</strong>: <em>"Reúne lo que sabemos sobre X — la web abierta, nuestra propia documentación y el repositorio — y dame un informe de una página con fuentes."</em></p>
<p>El <a class="" href="https://development-wec.wiline.com/docs/es/tutorials/deploy-openclaw-docker-compose/">agente OpenClaw</a> que configuras en estos tutoriales funciona de la manera <strong>de bucle</strong> — un agente ciclando a través de sus herramientas, un turno a la vez. La ingeniería de gráficos conecta a un equipo de especialistas en su lugar. Mismo trabajo, dos formas:</p>
<div class="newsThemedWrap newsThemedWrap--light"><p><span class="zoomImage__wrap"><img alt="Bucle: un agente ciclando a través de sus herramientas en secuencia. Gráfico: muchos agentes especialistas conectados en una red, cada uno poseyendo una herramienta." src="https://development-wec.wiline.com/docs/es/assets/images/loop-vs-graph-light-d1fd8017587aa7c27d81ad36a7ec1f0b.png" width="2564" height="1751" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p></div>
<div class="newsThemedWrap newsThemedWrap--dark"><p><span class="zoomImage__wrap"><img alt="Bucle: un agente ciclando a través de sus herramientas en secuencia. Gráfico: muchos agentes especialistas conectados en una red, cada uno poseyendo una herramienta." src="https://development-wec.wiline.com/docs/es/assets/images/loop-vs-graph-dark-f9ef88bb5be59e4d6a1396b3985067fd.png" width="2564" height="1751" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p></div>
<p>Lee el <strong>bucle</strong> a la izquierda como una rueda: un agente visita cada herramienta, luego vuelve. Empújalo más allá de tareas simples y aparecen dos grietas: es <strong>lento</strong> (tres búsquedas independientes aún se ejecutan una tras otra, un trabajador a la vez), y es <strong>difícil de confiar</strong> (el mismo agente buscó, leyó y escribió el informe, así que una afirmación incorrecta no tiene dirección — no puedes saber si la búsqueda fue superficial o si el agente la inventó).</p>
<p>El <strong>gráfico</strong> a la derecha soluciona ambos problemas: los especialistas dividen el trabajo, un planificador lo dirige. Las búsquedas ahora se inician <strong>al mismo tiempo</strong> — el informe llega en el tiempo de la más lenta, no la suma — y cada agente posee una fuente, por lo que una mala afirmación tiene una dirección. Un nodo de <strong>verificación de hechos</strong>, el paso que un bucle apresurado omite, se convierte en una verdadera puerta.</p>
<p>Nada de eso es gratis: un aviso se convierte en un planificador, cuatro agentes y un verificador — un nuevo modo de fallo donde la <em>coordinación misma</em> puede romperse. Problema de confianza cambiado por un problema de plomería. Y cada caja en el gráfico aún ejecuta su propio bucle interno: <strong>un gráfico contiene bucles</strong> — ese es el punto.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ambos-términos-en-una-imagen">Ambos términos, en una imagen<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#ambos-t%C3%A9rminos-en-una-imagen" class="hash-link" aria-label="Enlace directo al Ambos términos, en una imagen" title="Enlace directo al Ambos términos, en una imagen" translate="no">​</a></h2>
<!-- -->
<p><strong>La ingeniería de bucles</strong> trata sobre un solo agente. Un agente de IA es solo un modelo en un <code>while</code> loop con herramientas: dale un objetivo, elige una herramienta, tu código la ejecuta, el resultado vuelve a entrar, repite. ChatGPT respondiendo a una pregunta es una llamada. Un agente que edita un archivo, ejecuta las pruebas, las ve fallar y vuelve a intentarlo — ese es el bucle, cinco veces. La ingeniería de bucles es diseñar ese ciclo deliberadamente: qué lo desencadena, quién verifica el trabajo, cuándo se detiene, qué sucede en caso de fallo. El lema es bueno — <em>la inteligencia vive en el modelo, la fiabilidad vive en el bucle.</em></p>
<p><strong>La ingeniería de gráficos</strong> trata sobre varios agentes. Los nodos son agentes, los bordes son dependencias, además del estado compartido y los permisos entre ellos. Si la ingeniería de bucles es "hacer que un agente sea fiable", la ingeniería de gráficos es "hacer que diez agentes no se pisen entre sí."</p>
<p>Diferentes problemas, diferente escala. Así que <em>"la ingeniería de bucles está muerta, la ingeniería de gráficos la reemplazó"</em> nunca fue una frase sensata — es como decir que las ruedas reemplazaron a los coches.</p>
<p>El nombre para el primero llegó en junio de 2026, de
<a href="https://x.com/addyosmani/status/2064127981161959567" target="_blank" rel="noopener noreferrer" class="">Addy Osmani</a>. Se popularizó rápidamente porque todos ya lo estaban haciendo, mal, sin un vocabulario compartido. Recuerda esa fecha.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-libro-de-texto-lo-resuelve">El libro de texto lo resuelve<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#el-libro-de-texto-lo-resuelve" class="hash-link" aria-label="Enlace directo al El libro de texto lo resuelve" title="Enlace directo al El libro de texto lo resuelve" translate="no">​</a></h2>
<p>Aquí está la cosa que nadie verificó antes de escribir una guía: "gráfico" no es una invención de 2026, y los recibos están en un libro de texto gratuito del MIT. De <em>Mathematics for Computer Science</em> (6.042J), capítulo 6, página 189 — <strong>Definición 6.1.1</strong>:</p>
<blockquote>
<p>"Un gráfico dirigido G = (V, E) consiste en un conjunto no vacío de nodos V y un conjunto de bordes dirigidos E… Un gráfico dirigido es <strong>simple</strong> si no tiene <strong>bucles</strong> (es decir, bordes de la forma u→u) y no tiene bordes múltiples."</p>
</blockquote>
<p>La definición formal de un gráfico <em>ya contiene la palabra bucle</em>, como una característica ordinaria de los gráficos — no su opuesto. La definición 6.1.2 añade que un <strong>ciclo</strong> es un recorrido que regresa a donde comenzó, que es lo que es un bucle.</p>
<p><strong>Un bucle no es el opuesto de un gráfico. Es un gráfico que regresa a un nodo anterior.</strong> Las matemáticas han sabido esto desde que Euler caminó por Königsberg en 1736.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-realmente-sucedió-en-julio">Lo que realmente sucedió en julio<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#lo-que-realmente-sucedi%C3%B3-en-julio" class="hash-link" aria-label="Enlace directo al Lo que realmente sucedió en julio" title="Enlace directo al Lo que realmente sucedió en julio" translate="no">​</a></h2>
<p>La chispa no fue un descubrimiento de ingeniería — fue <strong>dos lanzamientos de productos colisionando.</strong>
DeepLearning.AI lanzó un curso sobre gráficos de conocimiento con sistemas multiagente, impartido por Andreas Kollegger de Neo4j. Al mismo tiempo, Linear lanzó una función de agente llamada — de todas las cosas — <strong>Bucles</strong>. Dos empresas, dos productos no relacionados, dos palabras que sonaban como filosofías rivales.</p>
<p>Luego Steinberger, quien construyó <a class="" href="https://development-wec.wiline.com/docs/es/tutorials/deploy-openclaw-docker-compose/">OpenClaw</a>, publicó sus doce palabras a las 9:34 PM del 17 de julio. <strong>Cuatro horas y media después</strong> Hamel Husain publicó un artículo en X titulado <em>"La ingeniería de bucles está muerta. Entra la ingeniería de gráficos,"</em> y <a href="https://x.com/svpino/status/2078516761318584774" target="_blank" rel="noopener noreferrer" class="">Santiago Valdarrama</a> lo recogió el mismo día. En 48 horas, el nuevo término tenía tres definiciones en competencia y una ola de publicaciones imitadoras.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-parte-que-debería-haberlo-terminado">La parte que debería haberlo terminado<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#la-parte-que-deber%C3%ADa-haberlo-terminado" class="hash-link" aria-label="Enlace directo al La parte que debería haberlo terminado" title="Enlace directo al La parte que debería haberlo terminado" translate="no">​</a></h3>
<p><strong>Ninguno de los posts fundacionales fue serio</strong> — los escritores que rastrearon el ciclo lo dicen abiertamente. Louis-François Bouchard lo expresó claramente: <em>"mi feed entero decidió que tenemos una nueva disciplina. Para ser honesto, ambos tweets eran bromas."</em> El propio seguimiento de Husain solo amplió la broma, prometiendo que el artículo <em>"no es lo que piensas que es."</em></p>
<p>Y casi nadie pudo verificar: el artículo estaba detrás del muro de pago Premium de X. El texto fundacional de un paradigma era algo que pocos de los que lo citaban habían leído realmente. Lo que se propagó no fue un argumento — fue una forma: un título impactante, una broma justo detrás de él, y una industria que respondió a una broma escribiendo documentación para ello.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="las-respuestas-fueron-más-inteligentes-que-los-anuncios">Las respuestas fueron más inteligentes que los anuncios<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#las-respuestas-fueron-m%C3%A1s-inteligentes-que-los-anuncios" class="hash-link" aria-label="Enlace directo al Las respuestas fueron más inteligentes que los anuncios" title="Enlace directo al Las respuestas fueron más inteligentes que los anuncios" translate="no">​</a></h2>
<p>La respuesta más aguda vino de fuera del grupo de agentes. <strong>David Khourshid</strong> creó <strong>XState</strong> — una biblioteca ampliamente utilizada para modelar exactamente este tipo de máquina de estados en código — y ha estado modelando estas estructuras durante una década:</p>
<div class="xEmbed"><blockquote class="twitter-tweet" data-dnt="true" data-conversation="none"><p lang="en" dir="ltr"></p><p>Primero fueron los bucles. Ahora son gráficos. El próximo mes será otra cosa. Aquí está la cosa: constantemente estamos redescubriendo patrones de ingeniería de software de décadas de antigüedad y reempaquetándolos como innovaciones o lo que sea, en lugar de simplemente aplicar lo que ya hemos sabido durante mucho tiempo.</p><p></p>— <!-- -->David Khourshid<!-- --> (@<!-- -->DavidKPiano<!-- -->) <a href="https://twitter.com/DavidKPiano/status/2079209887158989231">20 de julio de 2026</a></blockquote></div>
<p>Su explicación toma dos minutos. Una máquina de estados responde a una pregunta — <em>dado el estado actual, cuando ocurre un evento, ¿cuál es el siguiente estado?</em> Dibuja y los estados se convierten en nodos, las transiciones se convierten en bordes. Luego lo aplica al argumento de julio:</p>
<blockquote>
<p>"Sorpresa… los bucles son gráficos: dirigidos, cíclicos."</p>
</blockquote>
<p>Un bucle, señala, es la máquina de estados más básica que existe: dos estados, <code>looping</code> y <code>done</code>. Publicó un diagrama de ello con el título <strong>"Esta es la cosa tonta por la que todos ustedes hicieron hype durante semanas."</strong></p>
<!-- -->
<p>Ese es el objeto sobre el que se discutió durante seis semanas. Y los verdaderos agentes — los que vuelven a intentar, retroceden, esperan a un humano — nunca fueron secuenciales y nunca acíclicos desde el principio (<em>"lo siento, amantes de DAG"</em>).</p>
<p>El creador de LangChain llegó allí desde la dirección opuesta, su LangGraph siendo la implementación a la que todos seguían apuntando:</p>
<div class="xEmbed"><blockquote class="twitter-tweet" data-dnt="true" data-conversation="none"><p lang="en" dir="ltr"></p><p>Así que realmente no sabía qué es la ingeniería de gráficos, y todavía no lo sé… pero básicamente es solo langgraph?</p><p></p>— <!-- -->Harrison Chase<!-- --> (@<!-- -->hwchase17<!-- -->) <a href="https://twitter.com/hwchase17/status/2079219804951683380">20 de julio de 2026</a></blockquote></div>
<p>Cuatro días después, él y Sydney Runkle publicaron una respuesta más larga,
<a href="https://www.langchain.com/blog/3-years-of-graph-engineering-with-langgraph" target="_blank" rel="noopener noreferrer" class=""><em>3 Años de Ingeniería de Gráficos con LangGraph</em></a>,
que es lo más útil escrito durante todo el episodio. Su línea de apertura es la mejor descripción del fenómeno que he leído:</p>
<blockquote>
<p>"Es el último término que sale de la fábrica de contenido de IA de X, uniéndose a la ingeniería de prompts, la ingeniería de contexto, la ingeniería de harness y la ingeniería de bucles."</p>
</blockquote>
<p>Y luego, de las personas cuyo producto es literalmente el gráfico:</p>
<blockquote>
<p>"Los bucles son gráficos simples. La ingeniería de bucles no es una alternativa a los gráficos, sino una versión simple de ellos."</p>
</blockquote>
<p>También confirman lo que la mayoría de las publicaciones de julio entendieron al revés: <strong>los gráficos de agentes de producción generalmente no son DAGs.</strong> Los verdaderos agentes vuelven a intentar, piden información faltante, revisan después de la validación, hacen pausas para un humano. Los ciclos no son un defecto de diseño que deba eliminarse — son el trabajo.</p>
<p>El marco más claro de todos, sin embargo, vino de una respuesta:</p>
<div class="xEmbed"><blockquote class="twitter-tweet" data-dnt="true" data-conversation="none"><p lang="en" dir="ltr"></p><p>La ingeniería de gráficos es decidir a dónde se permite ir el trabajo. La ingeniería de bucles es hacer que el trabajo mejore cada vez que se ejecuta. El gráfico son los rieles. El bucle es el motor. Los rieles te evitan chocar. El motor es lo que realmente mueve.</p><p></p>— <!-- -->Eric Osiu<!-- --> (@<!-- -->ericosiu<!-- -->) <a href="https://twitter.com/ericosiu/status/2079991948106957131">22 de julio de 2026</a></blockquote></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cómo-está-la-situación-hoy">Cómo está la situación hoy<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#c%C3%B3mo-est%C3%A1-la-situaci%C3%B3n-hoy" class="hash-link" aria-label="Enlace directo al Cómo está la situación hoy" title="Enlace directo al Cómo está la situación hoy" translate="no">​</a></h2>
<p>Es 5 de agosto, aproximadamente dos semanas y media después del obituario. Nadie ganó. El debate no se resolvió y no murió — <strong>se absorbió en el marketing de contenido.</strong> Cada proveedor de infraestructura de agentes ahora tiene una "guía definitiva sobre la ingeniería de gráficos," y detrás de ellos una larga cola de páginas de SEO diciendo lo mismo en el mismo orden.</p>
<figure class="stageFlow"><div class="stageFlow__track"><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.050);border-color:rgba(var(--primary-rgb), 0.250)"><span class="stageFlow__stage">7 de junio</span><span class="stageFlow__title">Aparece un nombre</span><span class="stageFlow__tag">describe algo real</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.123);border-color:rgba(var(--primary-rgb), 0.383)"><span class="stageFlow__stage">Semanas 2–5</span><span class="stageFlow__title">Todos lo adoptan</span><span class="stageFlow__tag">el significado se desvía</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.197);border-color:rgba(var(--primary-rgb), 0.517)"><span class="stageFlow__stage">17 de julio</span><span class="stageFlow__title">Declarada muerta</span><span class="stageFlow__tag">aparentemente como una broma</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.270);border-color:rgba(var(--primary-rgb), 0.650)"><span class="stageFlow__stage">Agosto</span><span class="stageFlow__title">Los proveedores publican guías</span><span class="stageFlow__tag">el término se convierte en un embudo</span></div></div><figcaption class="stageFlow__caption">Nombrar a obituario a generación de leads, en seis semanas. No se realizó ningún benchmark en ningún momento.</figcaption></figure>
<p>Nada se <em>aprendió</em> en ese tiempo. No se realizó ningún benchmark, ningún sistema de producción demostró que un enfoque superara al otro. Dos empresas lanzaron productos no relacionados, dos desarrolladores bien seguidos hicieron una broma, y mucha gente acordó una palabra — luego acordaron una palabra diferente.</p>
<p>Eso tiene un costo real. Si intentaste mantenerte al día adoptando cada término a medida que se ponía de moda, reescribiste tu arquitectura dos veces en julio por razones que eran sociales, no técnicas. Mientras tanto, el ingeniero que ignoró ambas publicaciones y pasó ese mes añadiendo reglas de detención y estado tipado salió adelante, porque esas cosas importaban bajo cualquier etiqueta.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-fallo-que-nadie-está-vendiendo-una-guía">El fallo que nadie está vendiendo una guía<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#el-fallo-que-nadie-est%C3%A1-vendiendo-una-gu%C3%ADa" class="hash-link" aria-label="Enlace directo al El fallo que nadie está vendiendo una guía" title="Enlace directo al El fallo que nadie está vendiendo una guía" translate="no">​</a></h2>
<p>Una idea de este mes merece más atención que la guerra de nombres, y proviene de
<a href="https://www.linkedin.com/pulse/what-graph-engineering-really-towards-artificial-intelligence-e79ic/" target="_blank" rel="noopener noreferrer" class="">Towards AI's breakdown</a>:
<strong>más agentes no significa más juicio.</strong></p>
<p>Veinte agentes ejecutando el mismo modelo, leyendo el mismo contexto defectuoso y verificando contra la misma métrica rota estarán de acuerdo entre sí a escala industrial. Peor es la versión circular: un agente verifica un informe contra otro informe, un agente de auditoría verifica ambos contra un panel de control, y el panel de control se construyó a partir de los mismos datos. Cada nodo está de acuerdo. Nada tocó la realidad. El sistema <em>parece</em> bien gobernado, porque el diagrama tiene revisores en todas partes.</p>
<p>La solución es lo que ellos llaman <strong>anclas de realidad</strong> — evidencia del exterior del sistema de agentes. Pruebas que realmente se ejecutaron. Dinero que llegó al banco. Clientes que se quedaron. Reglas que el optimizador no puede reescribir silenciosamente. Su línea es la que pondría en la pared:</p>
<blockquote>
<p>"Sin anclas, un gráfico es una alucinación más grande con mejor gestión de proyectos."</p>
</blockquote>
<p>La misma trampa existe un nivel más abajo, dentro de un solo bucle: si el agente que realiza el trabajo también decide si el trabajo es bueno, has construido una máquina costosa para estar de acuerdo consigo misma. Un verificador solo cuenta si realmente puede fallarte.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-hacer-realmente">Qué hacer realmente<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#qu%C3%A9-hacer-realmente" class="hash-link" aria-label="Enlace directo al Qué hacer realmente" title="Enlace directo al Qué hacer realmente" translate="no">​</a></h2>
<p>La línea de Khourshid es el filtro, y no es cinismo: <em>el próximo mes será otra cosa.</em> Cuando llegue el próximo término, la pregunta nunca es <em>"¿es este el nuevo paradigma?"</em> Es <strong>"¿qué fallo específico nombra este término, y ya tengo ese fallo?"</strong></p>
<p>Diagnostica dónde está realmente tu cuello de botella:</p>
<ul>
<li class=""><strong>Un agente degradándose durante una sesión larga</strong> — olvidando, repitiendo llamadas a herramientas, quemando tokens? Ese es un problema de <strong>bucle</strong>: reglas de detención, qué salida de herramienta vuelve a entrar en el contexto, si los errores se muestran o se tragan. Ningún marco de gráfico soluciona nada de esto.</li>
<li class=""><strong>¿Varios agentes duplicando trabajo o bloqueándose en un estado compartido?</strong> Ese es un problema de <strong>coordinación</strong>, y necesita un plano de control explícito, sea cual sea su nombre.</li>
</ul>
<p>Y un caso para ninguno: si la tarea es genuinamente abierta — investigación, exploración — forzarla en caminos fijos es el movimiento equivocado. El equipo de LangChain hace este punto en contra de su propio producto: construyeron una investigación profunda temprana sobre flujos de trabajo de LangGraph predefinidos y luego se trasladaron a un bucle agente más suelto, y GPT Researcher hizo lo mismo. La estructura que no has ganado te cuesta.</p>
<p>Y cualquiera que tengas, estos sobreviven al vocabulario: cada bucle necesita una regla de detención; el estado necesita una forma y puntos de guardado; los nodos que actúan necesitan límites de permisos y una puerta humana en cualquier cosa irreversible; añade complejidad solo cuando un fallo real lo pida.</p>
<p>Si quieres los dos conceptos que valen la pena en todo esto, toma la recomendación de Khourshid sobre cualquiera del vocabulario de julio: <strong>máquinas de estados y el modelo de actores</strong>. Ambos preceden este argumento por décadas y sobrevivirán a lo que lo reemplace — probablemente en unas seis semanas.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fuentes">Fuentes<a href="https://development-wec.wiline.com/docs/es/news/loop-engineering-graph-engineering-what-survives/#fuentes" class="hash-link" aria-label="Enlace directo al Fuentes" title="Enlace directo al Fuentes" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://x.com/addyosmani/status/2064127981161959567" target="_blank" rel="noopener noreferrer" class="">Addy Osmani, nombrando "ingeniería de bucles" (junio de 2026) — X</a></li>
<li class=""><a href="https://x.com/steipete/status/2078277297791189132" target="_blank" rel="noopener noreferrer" class="">Publicación de Peter Steinberger — X</a></li>
<li class="">Hamel Husain, "La ingeniería de bucles está muerta. Entra la ingeniería de gráficos" — Artículo de X, 18 de julio de 2026 (detrás de X Premium) · <a href="https://x.com/HamelHusain/status/2078348097697263855" target="_blank" rel="noopener noreferrer" class="">su seguimiento público</a></li>
<li class=""><a href="https://x.com/svpino/status/2078516761318584774" target="_blank" rel="noopener noreferrer" class="">Santiago Valdarrama — X</a></li>
<li class=""><a href="https://x.com/DavidKPiano/status/2079209887158989231" target="_blank" rel="noopener noreferrer" class="">David Khourshid (XState), "Máquinas de estados en 2 minutos" — X</a></li>
<li class=""><a href="https://x.com/hwchase17/status/2079219804951683380" target="_blank" rel="noopener noreferrer" class="">Harrison Chase (LangChain) — X</a> · <a href="https://x.com/ericosiu/status/2079991948106957131" target="_blank" rel="noopener noreferrer" class="">Eric Osiu — X</a></li>
<li class=""><a href="https://www.louisbouchard.ai/graph-engineering-explained/" target="_blank" rel="noopener noreferrer" class="">Louis-François Bouchard, "Ingeniería de gráficos explicada: ¿Qué cambió realmente?"</a></li>
<li class=""><a href="https://ai.gopubby.com/two-engineers-made-a-joke-about-graph-engineering-six-days-later-it-had-courses-3c082a5900fd" target="_blank" rel="noopener noreferrer" class="">"Dos ingenieros hicieron una broma sobre la ingeniería de gráficos. Seis días después tenía cursos." — AI Advances</a></li>
<li class=""><a href="https://smartscope.blog/en/blog/graph-engineering-loop-engineering-logic-review/" target="_blank" rel="noopener noreferrer" class="">SmartScope, sobre si el "obituario" es verdadero</a></li>
<li class=""><a href="https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/e6db7638031b754f5f68012946af4763_MIT6_042JF10_chap06.pdf" target="_blank" rel="noopener noreferrer" class="">MIT 6.042J <em>Mathematics for Computer Science</em>, Ch. 6 "Gráficos Dirigidos" (PDF gratuito)</a> — Definiciones 6.1.1–6.1.2, pp. 189–191</li>
</ul>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="agentes" term="agentes"/>
        <category label="architecture" term="architecture"/>
        <category label="orchestration" term="orchestration"/>
        <category label="engineering-practice" term="engineering-practice"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[MCP Acaba de Lanzar Su Mayor Actualización — Esto es lo Que Realmente Cambia para los Ingenieros de Agentes de IA]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/"/>
        <updated>2026-07-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[La especificación MCP del 2026-07-28 elimina las sesiones y reescribe la autorización. Si construyes o ejecutas servidores MCP, esto cambia tu infraestructura, tu flujo de autorización y tu reloj de deprecación, ya sea que lo hayas solicitado o no.]]></summary>
        <content type="html"><![CDATA[<figure class="newsHero newsHero--image"><span class="newsHero__chip">Protocolos · Noticias de IA</span><img src="https://development-wec.wiline.com/docs/es/img/news/mcp-drops-sessions-retires-three-core-features-16x9.webp" alt="Modelo de Protocolo de Contexto — la especificación del 2026-07-28" loading="eager"></figure>
<p>El Modelo de Protocolo de Contexto acaba de tener su mayor revisión desde su lanzamiento. La especificación del 2026-07-28 no añade una característica — reescribe cómo cada servidor MCP se comunica con cada cliente. Si has desplegado un servidor MCP en algún lugar más allá de "funciona en mi laptop", este cambio afecta tu infraestructura, no solo tu registro de cambios.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-se-lanzó-realmente">Qué se lanzó realmente<a href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/#qu%C3%A9-se-lanz%C3%B3-realmente" class="hash-link" aria-label="Enlace directo al Qué se lanzó realmente" title="Enlace directo al Qué se lanzó realmente" translate="no">​</a></h2>
<p>El cambio principal: <strong>MCP ahora es sin estado en la capa de protocolo.</strong> Cada solicitud lleva su propia versión de protocolo, identidad del cliente y capacidades — ya no hay más apretón de manos <code>initialize</code>/<code>initialized</code>, no hay ID de sesión, no hay requisito de que la solicitud N+1 llegue a la misma instancia de servidor que manejó la solicitud N. El mantenedor principal David Soria Parra lo llamó
<a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" target="_blank" rel="noopener noreferrer" class="">"un salto en la prestación de servidores MCP escalables"</a>,
basado en 18 meses de ejecución de MCP más allá de la etapa de herramienta local.</p>
<p>Ese cambio desbloquea una cadena de cambios prácticos:</p>
<ul>
<li class=""><strong>Balanceo de carga simple.</strong> Un servidor que antes necesitaba sesiones pegajosas y un
almacén de sesiones compartido puede estar detrás de un balanceador de carga ordinario de round-robin.</li>
<li class=""><strong>Enrutamiento basado en encabezados.</strong> Las solicitudes ahora llevan los encabezados HTTP <code>Mcp-Method</code> y <code>Mcp-Name</code>,
por lo que las puertas de enlace y los cortafuegos pueden enrutar y limitar la tasa inspeccionando encabezados en lugar de analizar cada cuerpo JSON.</li>
<li class=""><strong>Resultados de lista cacheables.</strong> <code>tools/list</code>, <code>prompts/list</code>, <code>resources/list</code>,
y <code>resources/read</code> ahora devuelven <code>ttlMs</code> y <code>cacheScope</code>, para que los clientes sepan
cuánto tiempo se les permite omitir la reobtención.</li>
<li class=""><strong>Solicitudes de Múltiples Viajes (MRTR).</strong> El antiguo patrón de entrada de flujo mantenido abierto
iniciado por el servidor (confirmaciones, parámetros faltantes) ha desaparecido. Un servidor ahora devuelve <code>resultType: "input_required"</code>;
el cliente reintenta la misma llamada con <code>inputResponses</code> completado — no se requiere conexión persistente.</li>
</ul>
<p>El estado no desapareció, solo se volvió explícito: si tu herramienta realmente lo necesita,
crea un identificador y se lo devuelve al cliente para que lo pase en la siguiente
llamada, en lugar de ocultarlo en la capa de transporte.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-autorización-recibió-una-reescritura-real-no-un-parche">La autorización recibió una reescritura real, no un parche<a href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/#la-autorizaci%C3%B3n-recibi%C3%B3-una-reescritura-real-no-un-parche" class="hash-link" aria-label="Enlace directo al La autorización recibió una reescritura real, no un parche" title="Enlace directo al La autorización recibió una reescritura real, no un parche" translate="no">​</a></h2>
<p>Esta es la parte que debería llamar la atención de un ingeniero de IA antes de que lo haga el cambio de protocolo. La autorización de MCP ahora se alinea con OAuth 2.1 y OpenID
Connect en lugar de dejar que cada implementador conecte su propia
versión, <a href="https://workos.com/blog/mcp-2026-spec-agent-authentication" target="_blank" rel="noopener noreferrer" class="">como desglosa WorkOS</a>:</p>
<ul>
<li class="">Los servidores deben implementar <strong>Metadatos de Recursos Protegidos de OAuth 2.0</strong> (RFC 9728)
para descubrimiento y <strong>Indicadores de Recursos</strong> (RFC 8707) para que un token creado para
un servidor MCP no pueda ser reproducido contra otro.</li>
<li class=""><strong>La verificación del emisor ahora es obligatoria</strong> — los clientes deben verificar el parámetro <code>iss</code>
antes de canjear un código, cerrando la clase de errores de confusión del servidor de autorización.</li>
<li class=""><strong>Los Documentos de Metadatos de ID de Cliente (CIMD)</strong> reemplazan el Registro Dinámico de Clientes
como la ruta preferida (DCR sigue funcionando, por ahora).</li>
</ul>
<p>La consecuencia práctica: el problema del "deputado confundido" — una llamada a la herramienta ejecutándose
con credenciales destinadas a un servidor diferente — se cierra a nivel de protocolo en lugar de depender de que cada autor de servidor recuerde verificar.
Si estás ejecutando múltiples servidores MCP detrás de una puerta de enlace (lo cual, según nuestra propia
<a class="" href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/">cobertura de puerta de enlace</a>, es hacia donde todos se dirigen), esta es la parte de la actualización que realmente reduce tu superficie de riesgo,
no solo tu carga operativa.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-parte-honesta-esto-rompe-cosas-y-los-mantenedores-lo-dicen">La parte honesta: esto rompe cosas, y los mantenedores lo dicen<a href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/#la-parte-honesta-esto-rompe-cosas-y-los-mantenedores-lo-dicen" class="hash-link" aria-label="Enlace directo al La parte honesta: esto rompe cosas, y los mantenedores lo dicen" title="Enlace directo al La parte honesta: esto rompe cosas, y los mantenedores lo dicen" translate="no">​</a></h2>
<p>Nada de esto es compatible hacia atrás por accidente. Soria Parra, en
<a href="https://www.theregister.com/devops/2026/07/23/model-context-protocol-prepares-to-break-with-its-stateful-past/5276722" target="_blank" rel="noopener noreferrer" class="">el informe de The Register</a>,
no lo endulzó: <em>"Si construiste tu propia implementación, va a ser
mucho trabajo para corregir esto,"</em> y el rediseño sin estado, por su propia
admisión, <em>"hace que las cosas en la red sean un poco más complicadas de lo que solían ser"</em>
incluso mientras elimina el estado de sesión. Roots, Sampling y Logging están
ahora formalmente deprecados — Sampling por semánticas confusas, Roots como "algo muy
nicho," Logging por ser excesivamente verboso — con un <strong>mínimo de doce meses</strong>
antes de que realmente sean eliminados, junto con el transporte HTTP+SSE heredado.</p>
<p>Leído con benevolencia, esto es un protocolo madurando: una política de deprecación formal
significa que obtienes un año de aviso en lugar de una ruptura sorpresa. Leído con escepticismo
— y The Register lo hace — esto está solucionando problemas que solo aparecieron una vez
que MCP dejó las herramientas de desarrollo locales para el despliegue en la nube, lo que dice algo sobre
cuánta infraestructura de carga se construyó sobre el diseño anterior antes de que alguien lo sometiera a pruebas de estrés a gran escala. Ambas lecturas son verdaderas a la vez. Eso no es
una razón para entrar en pánico; es una razón para leer realmente la guía de migración antes de que
tus pruebas de integración lo hagan por ti.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-esto-importa-para-ti-específicamente">Por qué esto importa para ti, específicamente<a href="https://development-wec.wiline.com/docs/es/news/mcp-2026-07-28-spec/#por-qu%C3%A9-esto-importa-para-ti-espec%C3%ADficamente" class="hash-link" aria-label="Enlace directo al Por qué esto importa para ti, específicamente" title="Enlace directo al Por qué esto importa para ti, específicamente" translate="no">​</a></h2>
<p>Si estás construyendo agentes contra servidores MCP que no controlas, probablemente
no notes nada de inmediato — los SDK de Nivel 1 (TypeScript, Python, Go, C#, con
Rust en beta) manejan la negociación. Si <strong>ejecutas</strong> un servidor MCP — para un
pipeline RAG, un puente de herramienta interna, cualquier cosa más allá de una demostración — esto cambia
tres cosas que posees directamente: cómo se escala (sin estado significa que tu historia operativa
se vuelve más simple), cómo se asegura (la alineación con OAuth 2.1 significa menos de tu propio
código de autorización que puede estar mal), y tu reloj (doce meses para moverte de Roots,
Sampling, Logging y el transporte SSE antes de que desaparezcan). Ninguna de esas cosas es
opcional solo porque no solicitaste la reescritura.</p>
<hr>
<p>📖 <strong>Fuentes:</strong> <a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" target="_blank" rel="noopener noreferrer" class="">Blog del Modelo de Protocolo de Contexto — la especificación del 2026-07-28</a> · <a href="https://workos.com/blog/mcp-2026-spec-agent-authentication" target="_blank" rel="noopener noreferrer" class="">WorkOS — cambios de autenticación en la especificación MCP 2026-07-28</a> · <a href="https://www.theregister.com/devops/2026/07/23/model-context-protocol-prepares-to-break-with-its-stateful-past/5276722" target="_blank" rel="noopener noreferrer" class="">The Register — MCP rompe con su pasado con estado</a> · <a href="https://venturebeat.com/infrastructure/mcp-just-got-its-biggest-update-ever-heres-what-changes-for-ai-agents" target="_blank" rel="noopener noreferrer" class="">VentureBeat — la mayor actualización de MCP, qué cambia para los agentes de IA</a></p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="mcp" term="mcp"/>
        <category label="agentes" term="agentes"/>
        <category label="protocols" term="protocols"/>
        <category label="infrastructure" term="infrastructure"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[GPT-5.6: La nueva propuesta de OpenAI es más barata por tarea, no solo más inteligente — verifícalo en tu carga de trabajo antes de cambiar]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/"/>
        <updated>2026-07-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[GPT-5.6 (Luna, Terra, Sol) se lanza con una afirmación dirigida directamente a tu factura: puntuaciones de codificación de frontera en la mitad de los tokens de salida. Lo que eso significa para la economía de los agentes, por qué deberías verificarlo en tu propia carga de trabajo — y cómo construir para que la elección del modelo siga siendo un cambio de configuración.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero newsHero--bg newsHero--split"><div class="newsHero__bgSplit" aria-hidden="true"><div class="newsHero__panel newsHero__panel--a" style="background-image:url(/docs/es/img/news/gpt-5.6.png)"></div><div class="newsHero__panel newsHero__panel--b" style="background-image:url(/docs/es/img/news/chatgpt.avif)"></div><span class="newsHero__seam"></span><div class="newsHero__scrim"></div></div><span class="newsHero__eyebrow">Modelos · Noticias de IA</span><h2 class="newsHero__title">La carrera de frontera acaba de cambiar de carril: de más inteligente a más barato por tarea</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Puntos de referencia</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Economía de tokens</span></div></div>
<p>OpenAI lanzó <strong>GPT-5.6</strong> el 9 de julio — una familia de tres modelos (Luna, Terra, Sol) — y la
afirmación principal no es una puntuación de tabla de clasificación. Es un número de eficiencia: rendimiento de codificación de frontera
en <strong>menos de la mitad de los tokens de salida</strong>. Si construyes agentes, eso es una afirmación sobre tu factura,
no sobre derechos de fanfarronear. También es exactamente el tipo de afirmación que deberías medir tú mismo.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lo-que-se-lanzó">Lo que se lanzó<a href="https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/#lo-que-se-lanz%C3%B3" class="hash-link" aria-label="Enlace directo al Lo que se lanzó" title="Enlace directo al Lo que se lanzó" translate="no">​</a></h2>
<p>Tres niveles, del más barato al más fuerte, disponibles en ChatGPT, Codex y la API de OpenAI:</p>
<table><thead><tr><th>Modelo</th><th>Posicionamiento</th><th>Entrada / Salida (por 1M de tokens)</th></tr></thead><tbody><tr><td>Luna</td><td>más rápido, nivel de presupuesto</td><td>$1 / $6</td></tr><tr><td>Terra</td><td>nivel medio — "rendimiento competitivo con GPT-5.5"</td><td>$2.50 / $15</td></tr><tr><td>Sol</td><td>insignia, "el mejor modelo de codificación hasta ahora"</td><td>$5 / $30</td></tr></tbody></table>
<p>Las tres variantes incluyen el uso nativo de herramientas y razonamiento multimodal, con evaluaciones de contexto largo que llegan
hasta 1M de tokens; Sol también impulsa el nuevo nivel profesional ChatGPT Work. Las afirmaciones que vale la pena
conocer (de <a href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noopener noreferrer" class="">anuncio de OpenAI</a> — direccional, no
evangélica): Sol puntúa <strong>80 en el Índice de Agentes de Codificación de Análisis Artificial</strong>, 2.8 puntos por encima
del Fable 5 de Anthropic — <em>mientras usa menos de la mitad de los tokens de salida, en menos de la mitad del tiempo,
a aproximadamente un tercio del costo estimado</em> — y <strong>88.8% en Terminal-Bench 2.1</strong>. En <em>El Último Examen de Agentes</em>,
una evaluación de flujos de trabajo profesionales de larga duración en 55 campos, informan que Terra y
Luna superan a Fable 5 a alrededor de <strong>una dieciseisava parte del costo estimado</strong>. La formulación de Sam Altman: Sol
es "<strong>54% más eficiente en tokens</strong>" en tareas de codificación. El lanzamiento también se enfoca fuertemente en ciberseguridad
— "rendimiento de frontera con significativamente menos tokens."</p>
<p>Dos características de la API se lanzan bajo la misma bandera de eficiencia, y son la parte más relevante para los desarrolladores
del lanzamiento: <strong>Llamada de Herramienta Programática</strong>, donde el modelo escribe y ejecuta pequeños
programas en memoria que coordinan herramientas y procesan resultados intermedios — en lugar de pasar
cada respuesta de herramienta de vuelta a través del modelo, de modo que las tareas que requieren muchas herramientas consumen menos tokens y menos
viajes de ida y vuelta — y una <strong>beta de múltiples agentes</strong> en la API de Respuestas (la nueva configuración Sol Ultra ejecuta
cuatro agentes en paralelo por defecto).</p>
<p>Una primera más, enterrada en la línea de tiempo: GPT-5.6 estaba planeado para junio y se lanzó tres semanas
tarde porque una <strong>revisión del gobierno de EE. UU. bloqueó el lanzamiento</strong> — el Centro de Normas e Innovación de IA del Departamento de Comercio
realizó pruebas adicionales antes de que OpenAI obtuviera permiso para un lanzamiento público. Más sobre
por qué eso importa a continuación.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-la-eficiencia-de-tokens-es-la-verdadera-historia">Por qué la eficiencia de tokens es la verdadera historia<a href="https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/#por-qu%C3%A9-la-eficiencia-de-tokens-es-la-verdadera-historia" class="hash-link" aria-label="Enlace directo al Por qué la eficiencia de tokens es la verdadera historia" title="Enlace directo al Por qué la eficiencia de tokens es la verdadera historia" translate="no">​</a></h2>
<p>Para el chat, los tokens de salida son un error de redondeo. Para <strong>agentes</strong>, <em>son</em> la factura: una sesión de
codificación de agentes quema tokens en cada paso — planes, diferencias, reintentos, llamadas a herramientas — y los tokens de salida
cuestan 5–6× los tokens de entrada en cada tarjeta de precios anterior. Un modelo que resuelve la misma tarea con
la mitad de los tokens de salida sería efectivamente <strong>la mitad de precio y el doble de rápido con calidad igual</strong>,
incluso si solo es un par de puntos de referencia mejor. <em>Si</em> se mantiene en tus tareas — y ese
"si" es todo el tema de la siguiente sección — eso es un cambio real y bienvenido en lo que los proveedores
compiten.</p>
<p>Por eso "54% más eficiente en tokens" es un movimiento competitivo más agresivo que cualquier salto en la tabla de clasificación.
Y OpenAI no estaba sola — toda la frontera pasó esta semana compitiendo en precio por tarea:
<strong>Meta lanzó Muse Spark 1.1</strong> para codificación de agentes a <strong>$1.25/$4.25</strong> por 1M de tokens (con $20
de créditos gratuitos por cuenta), y <strong>SpaceXAI lanzó Grok 4.5</strong> — coentrenado con Cursor — a
<strong>$2/$6</strong>, comercializado como aproximadamente 6× más barato que modelos de frontera comparables. Incluso las
noticias de infraestructura de OpenAI apuntaron en la misma dirección: los ingenieros informaron que <strong>redujeron a la mitad los costos de inferencia
solo a través de la optimización del software</strong>. La carrera ha cambiado visiblemente de carril, de puntos de referencia
a costo por tarea.</p>
<p>La escalera de tres niveles importa por la misma razón. El patrón emergente es <strong>enrutamiento por dificultad de tarea</strong>: nivel barato para clasificación y extracción, nivel medio para generación cotidiana,
insignia solo para el trabajo difícil de múltiples pasos. Si ejecutas una puerta de enlace (hemos
<a class="" href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/">escrito sobre por qué esa capa importa</a>), esto es para lo que es.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="las-afirmaciones-de-los-proveedores-son-preguntas-de-evaluación">Las afirmaciones de los proveedores son preguntas de evaluación<a href="https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/#las-afirmaciones-de-los-proveedores-son-preguntas-de-evaluaci%C3%B3n" class="hash-link" aria-label="Enlace directo al Las afirmaciones de los proveedores son preguntas de evaluación" title="Enlace directo al Las afirmaciones de los proveedores son preguntas de evaluación" translate="no">​</a></h2>
<p>Aquí está la cosa sobre "54% más eficiente" y "2.8 puntos por encima": esos números provienen del
proveedor, medidos en el banco de pruebas elegido por el proveedor, con el arnés del proveedor. Eso no es una
acusación — los números son muy probablemente reales <em>en ese banco de pruebas</em>, y aplicamos el mismo
descuento a los de todos, incluidos los modelos de peso abierto que nos gustan (dijimos exactamente esto sobre
las tablas de GLM-5.2). Es un punto estructural: <strong>ningún banco de pruebas de proveedor puede conocer tu carga de trabajo.</strong></p>
<p>Ni siquiera tienes que salir de la propia tabla de codificación de OpenAI para verlo — y crédito para ellos por
publicar las filas mixtas en lugar de solo las halagadoras:</p>
<table><thead><tr><th>Evaluación de codificación (un proveedor, una tabla)</th><th>GPT-5.6 Sol</th><th>Claude Fable 5</th><th>Quién lidera</th></tr></thead><tbody><tr><td>Índice de Agentes de Codificación de Análisis Artificial v1.1</td><td><strong>80</strong></td><td>77.2</td><td>Sol, +2.8</td></tr><tr><td>Terminal-Bench 2.1</td><td><strong>88.8%</strong></td><td>83.1%</td><td>Sol, +5.7</td></tr><tr><td>DeepSWE v1.1</td><td><strong>72.7%</strong></td><td>69.7%</td><td>Sol, +3.0</td></tr><tr><td>SWE-Bench Pro</td><td>64.6%</td><td><strong>80%</strong></td><td>Fable 5, +15.4</td></tr></tbody></table>
<p><em>(Números del <a href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noopener noreferrer" class="">anuncio de OpenAI</a>.)</em></p>
<p>Cuatro bancos de pruebas de codificación, y "cuál es el mejor modelo de codificación" cambia dependiendo de la fila — con
la brecha más grande apuntando en la <em>otra</em> dirección. Eso no es un golpe a ninguno de los modelos o a la
tabla; es lo que son los bancos de pruebas. Si la propia página de un proveedor no puede producir una sola respuesta, un
título del día del lanzamiento ciertamente no puede decirte qué sucede en <strong>tu</strong> base de código. La eficiencia de tokens
complica el problema: varía enormemente según la forma de la tarea — un modelo que es conciso en refactorizaciones de Python
puede ser verboso en SQL o respuestas largas, y un arnés de agente diferente al del proveedor puede
borrar (o amplificar) toda la ventaja.</p>
<p>La buena noticia: este es un problema resuelto, y ya tienes las herramientas si seguiste nuestra
serie de evaluaciones. La misma configuración de Promptfoo de
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/eval-models-promptfoo-wiline-inference/">parte 1</a> compara cualquier par de puntos finales compatibles con OpenAI en <em>tus</em> prompts — con
<strong>aseveraciones de costo y latencia</strong>, no solo calificaciones de calidad.
Y el enfrentamiento que vale la pena ejecutar esta semana no es GPT-5.6 contra su propia tabla de lanzamiento — es
GPT-5.6 contra el modelo de peso abierto más fuerte que puedes servirte a ti mismo:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">el experimento que vale una tarde (parte-1 habilidad)</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">providers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> openai</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">chat</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">&lt;new</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">model</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">id</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic"># el retador del que todos están hablando</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">chat</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">gemma4              </span><span class="token comment" style="color:#999988;font-style:italic"># el modelo de peso abierto ya en WEC</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">apiBaseUrl</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//inference.wiline.com/v1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">apiKeyEnvar</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> WEC_API_KEY</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">defaultTest</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">assert</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> latency</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">threshold</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5000</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> cost</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">threshold</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.002</span><br></div></code></pre></div></div>
<p>Los mismos prompts, ambos modelos, y la evaluación informa calidad, tokens, latencia y costo uno al lado del otro.
Una tarde de esto te dice lo que ningún post de lanzamiento puede: si la afirmación de eficiencia sobrevive
el contacto con <em>tu</em> tráfico. (Y si el modelo respalda un servicio RAG o agente, constrúyelo como lo hicimos nosotros en
<a class="" href="https://development-wec.wiline.com/docs/es/tutorials/rag-docs-assistant-wiline-inference/">el proyecto final</a> — juzga por
semántica, regresiones determinísticas para errores conocidos.)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-subtexto-la-portabilidad-acaba-de-volverse-más-valiosa">El subtexto: la portabilidad acaba de volverse más valiosa<a href="https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/#el-subtexto-la-portabilidad-acaba-de-volverse-m%C3%A1s-valiosa" class="hash-link" aria-label="Enlace directo al El subtexto: la portabilidad acaba de volverse más valiosa" title="Enlace directo al El subtexto: la portabilidad acaba de volverse más valiosa" translate="no">​</a></h2>
<p>Dos cosas sucedieron alrededor de este lanzamiento que importan más juntas que por separado.</p>
<p>Primero, la <strong>puerta de gobierno</strong>: por primera vez, el lanzamiento público de un modelo de frontera necesitó una
revisión federal para proceder — y la preocupación no era abstracta. La misma semana, Sysdig documentó
<strong>JadePuffer</strong>, la primera operación de ransomware de agente de IA completamente autónoma, que explotó un
CVE de Langflow y luego realizó reconocimiento, movimiento lateral y extorsión por su cuenta,
recuperándose de intentos fallidos en segundos. Cualquiera que sean tus políticas, el hecho de ingeniería es que
el acceso a modelos de frontera cerrados ahora tiene una válvula más que no controlas — junto con
precios, deprecaciones y límites de tasa. Hicimos este argumento cuando <a class="" href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/">un modelo de peso abierto rompió
el top 10 propietario</a>; este lanzamiento lo hizo por nosotros.</p>
<p>En segundo lugar, el <strong>mundo de peso abierto también tuvo una semana ruidosa</strong>: Google lanzó <strong>Gemma 4</strong>, una
familia de peso abierto, nativamente multimodal de 2.3B a 31B de parámetros (variantes densas y MoE,
entrada de visión y audio, un modo de pensamiento); Mistral abrió acceso anticipado a una nueva familia de Mixture-of-Experts
de peso abierto dirigida directamente al vacío de frontera; y Together AI cerró una
<strong>Serie C de $800M</strong> con una valoración de $8.3B gracias a la inferencia de modelos abiertos — citando más de
$1B al año en reservas. El dinero está diciendo lo mismo que la demora de GPT-5.6 está diciendo: los modelos
que puedes descargar y ejecutar son una cobertura que vale la pena pagar.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-conclusión--y-algo-que-puedes-probar-hoy">La conclusión — y algo que puedes probar hoy<a href="https://development-wec.wiline.com/docs/es/news/gpt-5-6-token-economics/#la-conclusi%C3%B3n--y-algo-que-puedes-probar-hoy" class="hash-link" aria-label="Enlace directo al La conclusión — y algo que puedes probar hoy" title="Enlace directo al La conclusión — y algo que puedes probar hoy" translate="no">​</a></h2>
<p>La conclusión para los desarrolladores es la misma que ha mantenido toda la serie: <strong>mantén la elección del modelo como un cambio de configuración</strong>. Codifica contra la API compatible con OpenAI, coloca una puerta de enlace al frente, y cambiar modelos —
cerrados, abiertos, o lo que sea que llegue al <a class="" href="https://development-wec.wiline.com/docs/es/cloud_portal/platform/inference/models_hub/">catálogo de Modelos de WEC</a>
siguiente — es una edición de URL base y ID de modelo, no una reescritura. No ofrecemos GPT-5.6 en WEC hoy;
el punto es que si construyes de manera portátil y evalúas antes de migrar, ese hecho te constriñe
exactamente cero.</p>
<p>Porque aquí está la trampa en cada semana de lanzamiento: <em>nuevo</em> comienza a sentirse como una razón. No lo es —
es una hipótesis. La pregunta que tu evaluación debería responder es si el brillante modelo cerrado supera
a un modelo de peso abierto que controlas — en tus prompts, dentro de tu presupuesto de latencia, por dólar — por
suficiente como para valer la válvula en la que está la mano de otra persona. A veces lo hará, y entonces cambias
con evidencia en lugar de hype. Y a veces el modelo abierto mantiene la línea en las tareas que
realmente ejecutas, y acabas de ahorrarte una migración y una dependencia en una tarde.</p>
<p>Puedes ejecutar ese experimento hoy, porque
<a href="https://deepmind.google/models/gemma/gemma-4/" target="_blank" rel="noopener noreferrer" class=""><strong>Gemma 4</strong></a> — la familia de peso abierto, nativamente
multimodal que Google lanzó esta misma semana — <strong>ya está activa en la inferencia de WEC</strong>. Y es
un contraparte seria, no un premio de consolación. Lo que Gemma 4 aporta a la mesa:</p>
<ul>
<li class=""><strong>Nativamente multimodal</strong> — comprensión de imagen <em>y</em> audio en un modelo abierto, por lo que capturas de pantalla de documentos,
formularios escaneados y grabaciones de llamadas pasan por el mismo punto final que tus prompts de texto.</li>
<li class=""><strong>Variantes de pensamiento</strong> para las cadenas más difíciles de múltiples pasos — el mismo intercambio de "gastar tokens para razonar"
que GPT-5.6 está vendiendo, en pesos que controlas.</li>
<li class=""><strong>Una escalera de tamaño propia</strong> (tamaños E2B/E4B hasta 31B) — el mismo patrón de enrutamiento por dificultad
de arriba, sin un contrato de proveedor por nivel.</li>
<li class=""><strong>140+ idiomas</strong>, y bancos de pruebas de proveedores que colocan el 31B en compañía de frontera — Google afirma
un rendimiento comparable a modelos 10–30× más grandes. Se aplica el mismo descuento que a los números de OpenAI,
y la misma herramienta lo resuelve: ponlo en la evaluación.</li>
</ul>
<p>Un cambio de ID de modelo y estás en ello:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> https://inference.wiline.com/v1/chat/completions </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Authorization: Bearer </span><span class="token string variable" style="color:#36acaa">$WEC_API_KEY</span><span class="token string" style="color:#e3116c">"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-d</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'{ "model": "gemma4", "messages": [{"role":"user","content":"Resume este informe de incidentes…"}] }'</span><br></div></code></pre></div></div>
<p>El impulso de eficiencia de tokens de GPT-5.6 es una buena noticia para todos — incluso si nunca envías a OpenAI una
sola solicitud, arrastra a todo el mercado hacia la honestidad en los precios. Toma lo positivo al pie de la letra,
toma los números como hipótesis, y deja que tu propia evaluación — GPT-5.6 de un lado, Gemma 4 en
WEC del otro — tome la decisión.</p>
<hr>
<p>📖 <strong>Fuentes:</strong> <a href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noopener noreferrer" class="">OpenAI — anuncio de GPT-5.6</a> · <a href="https://deepmind.google/models/gemma/gemma-4/" target="_blank" rel="noopener noreferrer" class="">Google DeepMind — Gemma 4</a> · <a href="https://techcrunch.com/2026/07/09/openai-launches-its-new-family-of-models-with-gpt-5-6/" target="_blank" rel="noopener noreferrer" class="">TechCrunch — OpenAI lanza GPT-5.6</a> · <a href="https://www.cnbc.com/2026/07/08/openai-expanding-gpt-5point6-ai-model-release-ending-government-limits.html" target="_blank" rel="noopener noreferrer" class="">CNBC — lanzamiento público después de límites gubernamentales</a> · <a href="https://www.axios.com/2026/07/09/ai-openai-gpt-release" target="_blank" rel="noopener noreferrer" class="">Axios — GPT-5.6 y ChatGPT Work</a> · <a href="https://www.engadget.com/2210308/openai-rolls-out-gpt5-6-july-9/" target="_blank" rel="noopener noreferrer" class="">Engadget — tiempo de lanzamiento</a> · <a href="https://www.techtimes.com/articles/319798/20260706/mistral-ai-targets-frontier-gap-open-weight-model-entering-july-early-access.htm" target="_blank" rel="noopener noreferrer" class="">TechTimes — acceso anticipado de Mistral a MoE de peso abierto</a> · <a href="https://asanify.com/blog/news/open-weight-model-funding-july-7-2026/" target="_blank" rel="noopener noreferrer" class="">Asanify — ronda de $800M de Together AI</a> · <a href="https://medium.com/nlplanet/gpt-5-6-is-out-weekly-ai-newsletter-july-13th-2026-4502e4c324a7" target="_blank" rel="noopener noreferrer" class="">NLPlanet — boletín semanal de IA, 13 de julio</a> <em>(Muse Spark 1.1, Grok 4.5, Gemma 4, JadePuffer, artículos de costo de inferencia)</em></p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="models" term="models"/>
        <category label="openai" term="openai"/>
        <category label="token-efficiency" term="token-efficiency"/>
        <category label="evals" term="evals"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[GLM-5.2: el único modelo de pesos abiertos en el top 10 — y puedes correrlo en WiLine]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/"/>
        <updated>2026-06-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[GLM-5.2 es el único modelo de pesos abiertos y licencia MIT que se mide de tú a tú con la frontera propietaria — contexto de 1M tokens y los mejores puntajes de código open-source. Y está disponible en WiLine Edge Cloud.]]></summary>
        <content type="html"><![CDATA[<div class="newsHero newsHero--bg" style="background-image:linear-gradient(rgba(2,12,31,0.62), rgba(2,12,31,0.80)), url(/docs/es/img/news/glm-cover-a.webp)"><span class="newsHero__eyebrow">Modelos · Noticias de IA</span><h2 class="newsHero__title">Un modelo de pesos abiertos acaba de meterse en el top 10 propietario</h2><div class="newsHero__transition"><span class="newsHero__pill newsHero__pill--from">Frontera cerrada</span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right newsHero__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><span class="newsHero__pill newsHero__pill--to">Pesos abiertos</span></div></div>
<p>Mira casi cualquier ranking de modelos actual y la cima es un muro de Anthropic y
OpenAI. Y luego, dentro del top 10, hay un caso aparte que no es propietario en
absoluto: <strong>GLM-5.2</strong> de Z.ai — pesos abiertos, licencia MIT. Esa es la historia que
vale la pena mirar.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dónde-está-parado">Dónde está parado<a href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/#d%C3%B3nde-est%C3%A1-parado" class="hash-link" aria-label="Enlace directo al Dónde está parado" title="Enlace directo al Dónde está parado" translate="no">​</a></h2>
<p>En el <a href="https://arena.ai/leaderboard/agent" target="_blank" rel="noopener noreferrer" class="">ranking de agentes de Arena.ai</a>, GLM-5.2
(Max) aparece en el <strong>#10</strong> — el <strong>único modelo de pesos abiertos en el top 10</strong>,
rodeado por completo de modelos de frontera cerrados de Anthropic y OpenAI. (Los
rankings se mueven; esto es una foto del momento — <a href="https://arena.ai/leaderboard/agent" target="_blank" rel="noopener noreferrer" class="">revisa el ranking en vivo</a>.)</p>
<p><span class="zoomImage__wrap"><img alt="GLM-5.2 (Max) en el ranking de agentes de Arena.ai — el único modelo de pesos abiertos en el top 10" src="https://development-wec.wiline.com/docs/es/assets/images/glm-5-2-leaderboard-3f2c9fe86e103693aa80fdbcda6b054b.png" width="1400" height="837" class="zoomImage " loading="lazy"><span class="zoomImage__badge" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="7"></circle><path d="M21 21l-4.3-4.3"></path><path d="M11 8v6M8 11h6"></path></svg></span></span></p>
<p>Ese es el titular: no que encabece la tabla, sino que un <strong>modelo con licencia MIT
que puedes descargar, autoalojar y enviar comercialmente</strong> ya esté midiéndose con
modelos que solo puedes alquilar.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-es-glm-52-en-realidad">Qué es GLM-5.2 en realidad<a href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/#qu%C3%A9-es-glm-52-en-realidad" class="hash-link" aria-label="Enlace directo al Qué es GLM-5.2 en realidad" title="Enlace directo al Qué es GLM-5.2 en realidad" translate="no">​</a></h2>
<ul>
<li class=""><strong>Pesos abiertos, licencia MIT</strong> — sin límites regionales; descárgalo, autoalójalo, haz fine-tuning y úsalo en un producto comercial (<a href="https://huggingface.co/zai-org/GLM-5.2" target="_blank" rel="noopener noreferrer" class="">pesos en Hugging Face</a>).</li>
<li class=""><strong>Un sólido contexto de 1M tokens</strong> (~750k palabras), pensado para tareas de agente de largo horizonte. Su nueva atención <strong>IndexShare</strong> reutiliza un mismo indexer cada cuatro capas dispersas — Z.ai reporta <strong>~2,9× menos FLOPs por token con 1M de contexto</strong>, que es lo que mantiene esa ventana asequible de correr.</li>
<li class=""><strong>Dos niveles de esfuerzo de razonamiento (High / Max)</strong> para cambiar latencia por profundidad — <code>Max</code> para código complejo de varios pasos, <code>High</code> para trabajo más liviano y rápido.</li>
<li class=""><strong>API compatible con Anthropic/OpenAI</strong> — conéctalo a Claude Code, OpenClaw, Cline y otros con un cambio de base-URL + model-ID; tu harness y tus prompts quedan intactos.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cómo-se-compara">Cómo se compara<a href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/#c%C3%B3mo-se-compara" class="hash-link" aria-label="Enlace directo al Cómo se compara" title="Enlace directo al Cómo se compara" translate="no">​</a></h2>
<p>Los benchmarks publicados por Z.ai ponen a GLM-5.2 codo a codo con la frontera cerrada en código, y por delante en algo de razonamiento:</p>
<table><thead><tr><th>Benchmark</th><th>GLM-5.2</th><th>Claude Opus 4.8</th><th>GPT-5.5</th></tr></thead><tbody><tr><td>SWE-bench Pro</td><td>62.1</td><td>69.2</td><td>58.6</td></tr><tr><td>Terminal-Bench 2.1 (mejor harness)</td><td>82.7</td><td>78.9</td><td>83.4</td></tr><tr><td>FrontierSWE (dominance)</td><td>74.4</td><td>75.1</td><td>72.6</td></tr><tr><td>AIME 2026</td><td>99.2</td><td>95.7</td><td>98.3</td></tr></tbody></table>
<p>Le gana a Opus 4.8 en Terminal-Bench, a GPT-5.5 en FrontierSWE, a ambos en AIME, y
queda por detrás de Opus en SWE-bench Pro — notablemente cerca para un modelo que
simplemente puedes descargar. <em>(Cifras de los <a href="https://docs.z.ai/guides/llm/glm-5.2" target="_blank" rel="noopener noreferrer" class="">benchmarks de GLM-5.2 de Z.ai</a>; los benchmarks son orientativos, no dogma.)</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-qué-importa">Por qué importa<a href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/#por-qu%C3%A9-importa" class="hash-link" aria-label="Enlace directo al Por qué importa" title="Enlace directo al Por qué importa" translate="no">​</a></h2>
<p>La brecha entre los modelos de pesos abiertos y la frontera propietaria se ha venido
cerrando todo el año. Lo que cambió son los <strong>términos</strong>: con licencia MIT y una API
limpia, GLM-5.2 es algo que puedes <em>poseer y desplegar</em>, no solo invocar. Cuando el
acceso a los modelos cerrados puede cambiar de un día para otro por controles de
exportación o precios, un modelo de pesos abiertos con calidad de top 10 es una base
que no se mueve.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="córrelo-en-wiline-edge-cloud">Córrelo en WiLine Edge Cloud<a href="https://development-wec.wiline.com/docs/es/news/glm-5-2-open-weight-top-10/#c%C3%B3rrelo-en-wiline-edge-cloud" class="hash-link" aria-label="Enlace directo al Córrelo en WiLine Edge Cloud" title="Enlace directo al Córrelo en WiLine Edge Cloud" translate="no">​</a></h2>
<p>No necesitas una cuenta de terceros para probarlo — <strong>GLM-5.2 está disponible en
WiLine Edge Cloud a través de WEC Models</strong>, nuestra inferencia compatible con OpenAI.
Apunta cualquier herramienta compatible al endpoint de inferencia de WEC y usa
GLM-5.2 como modelo:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> https://inference.wiline.com/v1/chat/completions </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Authorization: Bearer </span><span class="token string variable" style="color:#36acaa">$WEC_API_KEY</span><span class="token string" style="color:#e3116c">"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-d</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'{ "model": "glm-5.2", "messages": [{"role":"user","content":"Refactor this for performance…"}] }'</span><br></div></code></pre></div></div>
<p>Si seguiste la <a class="" href="https://development-wec.wiline.com/docs/es/tutorials/">serie de Self-hosting OpenClaw</a>, este es el siguiente
paso natural: conserva tu agente, cambia el modelo — apunta OpenClaw a GLM-5.2 en WEC
en vez de a un proveedor cerrado, y estarás corriendo un modelo de top 10 que
controlas por completo.</p>
<hr>
<p>📖 <strong>Fuentes:</strong> <a href="https://arena.ai/leaderboard/agent" target="_blank" rel="noopener noreferrer" class="">ranking de agentes de Arena.ai</a> · <a href="https://huggingface.co/zai-org/GLM-5.2" target="_blank" rel="noopener noreferrer" class="">GLM-5.2 en Hugging Face</a> · <a href="https://docs.z.ai/guides/llm/glm-5.2" target="_blank" rel="noopener noreferrer" class="">docs del modelo de Z.ai</a> · <a href="https://arxiv.org/abs/2602.15763" target="_blank" rel="noopener noreferrer" class="">reporte técnico de GLM-5 (arXiv)</a></p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="models" term="models"/>
        <category label="open-weight" term="open-weight"/>
        <category label="glm" term="glm"/>
        <category label="inferencia" term="inferencia"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Por qué LiteLLM está reescribiendo su gateway en Rust — y por qué a los desarrolladores de IA debería importarles]]></title>
        <id>https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/</id>
        <link href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/"/>
        <updated>2026-06-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[LiteLLM está migrando su gateway de IA de Python a Rust. Es una señal de que los gateways de IA se están volviendo infraestructura crítica — con consecuencias reales en latencia, costo y fiabilidad sobre WiLine Edge Cloud.]]></summary>
        <content type="html"><![CDATA[<figure class="newsHero newsHero--image"><span class="newsHero__chip">Infraestructura · Noticias de IA</span><img src="https://development-wec.wiline.com/docs/es/img/news/litellm-rust.webp" alt="LiteLLM — migrando el gateway de IA a Rust" loading="eager"></figure>
<p>El ecosistema de IA está atravesando, en silencio, la misma transición que vivió la infraestructura web hace años: las piezas críticas para el rendimiento se están moviendo de runtimes interpretados a lenguajes de sistemas como Rust. <a href="https://docs.litellm.ai/blog/litellm-rust-launch" target="_blank" rel="noopener noreferrer" class="">Que LiteLLM reescriba su gateway de IA en Rust</a> es la evidencia más clara hasta ahora — y una señal de que el stack de IA está madurando de experimento a infraestructura de producción.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-gateway-se-está-volviendo-infraestructura-crítica">El gateway se está volviendo infraestructura crítica<a href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/#el-gateway-se-est%C3%A1-volviendo-infraestructura-cr%C3%ADtica" class="hash-link" aria-label="Enlace directo al El gateway se está volviendo infraestructura crítica" title="Enlace directo al El gateway se está volviendo infraestructura crítica" translate="no">​</a></h2>
<p>LiteLLM es el proxy de código abierto que muchos equipos colocan frente a sus modelos para obtener un único endpoint compatible con OpenAI sobre 100+ proveedores. Si alguna vez corriste uno en producción, esta frase del anuncio te resultará familiar:</p>
<blockquote>
<p>Bajo carga real, la CPU y la memoria suben con la concurrencia, y los pods reciben OOM-kill en el peor momento.</p>
</blockquote>
<p>Ese es el impuesto silencioso de un gateway: está en la ruta crítica de <em>cada</em> solicitud — cada completion, embedding, llamada de moderación y acción de agente pasa por ahí — así que su sobrecarga y su huella de memoria se multiplican entre pods y regiones. Durante años las conversaciones de IA giraron en torno a la calidad del modelo. A medida que los equipos llevan agentes, RAG y enrutamiento multi-modelo a producción, la capa <em>frente</em> al modelo se convierte en una preocupación de infraestructura de primer nivel. Moverla a Rust es cómo se ve esa realización en código.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="los-números">Los números<a href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/#los-n%C3%BAmeros" class="hash-link" aria-label="Enlace directo al Los números" title="Enlace directo al Los números" translate="no">​</a></h2>
<p>De los benchmarks publicados por LiteLLM (reproducibles — el harness viene con el post):</p>
<div class="metricCompare"><div class="metricCard"><span class="metricCard__label">Sobrecarga por solicitud</span><span class="metricCard__factor">~150× menos</span><div class="metricCard__rows"><div class="metricCard__row metricCard__row--a"><span class="metricCard__name">LiteLLM (Python)</span><span class="metricCard__val">~7,5 ms</span></div><div class="metricCard__row metricCard__row--b"><span class="metricCard__name">Gateway en Rust</span><span class="metricCard__val">~0,05 ms</span></div></div></div><div class="metricCard"><span class="metricCard__label">Throughput bajo carga</span><span class="metricCard__factor">~15× más</span><div class="metricCard__rows"><div class="metricCard__row metricCard__row--a"><span class="metricCard__name">LiteLLM (Python)</span><span class="metricCard__val">453 req/s</span></div><div class="metricCard__row metricCard__row--b"><span class="metricCard__name">Gateway en Rust</span><span class="metricCard__val">6.782 req/s</span></div></div></div><div class="metricCard"><span class="metricCard__label">Memoria pico bajo carga</span><span class="metricCard__factor">~11× más liviano</span><div class="metricCard__rows"><div class="metricCard__row metricCard__row--a"><span class="metricCard__name">LiteLLM (Python)</span><span class="metricCard__val">358,9 MB</span></div><div class="metricCard__row metricCard__row--b"><span class="metricCard__name">Gateway en Rust</span><span class="metricCard__val">31,7 MB</span></div></div></div></div>
<p>Esto mide la <em>ruta de reenvío</em> del gateway (transformar → reenviar → manejar la respuesta), no una carga de producción completa — pero esa es justamente la capa que no quieres que consuma CPU y memoria bajo concurrencia.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-verdadera-victoria-es-la-memoria-no-la-latencia">La verdadera victoria es la memoria, no la latencia<a href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/#la-verdadera-victoria-es-la-memoria-no-la-latencia" class="hash-link" aria-label="Enlace directo al La verdadera victoria es la memoria, no la latencia" title="Enlace directo al La verdadera victoria es la memoria, no la latencia" translate="no">​</a></h2>
<p>La mayoría se fijará en los <strong>150× menos de sobrecarga</strong>. Pero para cualquiera que <em>opere</em> un gateway, el número más consecuente es <strong>11× menos memoria</strong>: 359 MB → ~32 MB. La latencia es una mejora por solicitud; la memoria es lo que mueve tu factura y tu fiabilidad.</p>
<p>Un gateway que ocupa ~32 MB en vez de ~359 MB cambia la matemática operativa en todos los frentes:</p>
<ul>
<li class=""><strong>Dimensionamiento en Kubernetes</strong> — pods más pequeños, mayor densidad por nodo.</li>
<li class=""><strong>Costo de nube</strong> — esa huella se multiplica por cada pod, región y réplica que corres.</li>
<li class=""><strong>Autoescalado</strong> — memoria más baja y predecible significa menos vaivén de escalado.</li>
<li class=""><strong>Caídas por OOM</strong> — el modo de fallo que te tumba en el pico prácticamente desaparece.</li>
</ul>
<p>Cuando un componente está en la ruta crítica de cada solicitud, recortar un orden de magnitud en su memoria compone a escala mucho más que la cifra de latencia del titular.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="un-despliegue-de-bajo-riesgo">Un despliegue de bajo riesgo<a href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/#un-despliegue-de-bajo-riesgo" class="hash-link" aria-label="Enlace directo al Un despliegue de bajo riesgo" title="Enlace directo al Un despliegue de bajo riesgo" translate="no">​</a></h2>
<p>Esto <strong>no es un v2 ni una reescritura a la que tengas que migrar</strong>. Los archivos de configuración, el esquema de base de datos, las APIs de cliente y la cobertura de proveedores siguen igual. Lo están moviendo en etapas cuidadosas — primero un núcleo puro en Rust vía bindings PyO3 (transformación de datos, sin I/O), luego el servidor completo sobre axum/hyper — y cada ruta pasa a producción detrás de pruebas de paridad antes de empezar la siguiente:</p>
<figure class="stageFlow"><div class="stageFlow__track"><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.050);border-color:rgba(var(--primary-rgb), 0.250)"><span class="stageFlow__stage">Etapa 0 · Hoy</span><span class="stageFlow__title">Proxy en Python</span><span class="stageFlow__tag">0% Rust</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.123);border-color:rgba(var(--primary-rgb), 0.383)"><span class="stageFlow__stage">Etapa 1 · Núcleo en Rust</span><span class="stageFlow__title">Python impulsa los transforms vía PyO3</span><span class="stageFlow__tag">transforms + router</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.197);border-color:rgba(var(--primary-rgb), 0.517)"><span class="stageFlow__stage">Etapa 2 · Shell delgado</span><span class="stageFlow__title">Shell FastAPI, ruta crítica en Rust</span><span class="stageFlow__tag">~toda la ruta de reenvío</span></div><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right stageFlow__arrow" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg><div class="stageFlow__card" style="background:rgba(var(--primary-rgb), 0.270);border-color:rgba(var(--primary-rgb), 0.650)"><span class="stageFlow__stage">Etapa 3 · Rust puro</span><span class="stageFlow__title">Servidor axum, Python en un sidecar</span><span class="stageFlow__tag">100% Rust</span></div></div><figcaption class="stageFlow__caption">Cuatro etapas — cada una pasa a producción detrás de pruebas de paridad antes de empezar la siguiente.</figcaption></figure>
<p>El registro a la beta ya está abierto; la hoja de ruta apunta a las rutas de OCR para mediados de agosto de 2026, <code>/chat/completions</code> y <code>/messages</code> para septiembre, y el servidor completo para el <strong>1 de diciembre de 2026</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qué-significa-para-quienes-construyen-ia">Qué significa para quienes construyen IA<a href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/#qu%C3%A9-significa-para-quienes-construyen-ia" class="hash-link" aria-label="Enlace directo al Qué significa para quienes construyen IA" title="Enlace directo al Qué significa para quienes construyen IA" translate="no">​</a></h2>
<p>Para los desarrolladores que construyen sobre <strong>WiLine Edge Cloud</strong>, el gateway está justo entre tus aplicaciones y tus modelos — así que un gateway más liviano y rápido se traslada directo a las apps que entregas:</p>
<ul>
<li class=""><strong>APIs de IA más rápidas.</strong> Menos sobrecarga del proxy significa respuestas más rápidas donde la latencia del modelo ya es baja — embeddings, reranking, moderación, clasificación. En esas cargas el gateway <em>era</em> el impuesto; ahora casi no lo es.</li>
<li class=""><strong>Mejor fiabilidad.</strong> Menos presión de memoria reduce los OOM kills, los fallos de solicitudes y el vaivén de autoescalado — las cosas que erosionan en silencio el uptime de un producto de IA en producción.</li>
<li class=""><strong>Despliegues multi-modelo más eficientes.</strong> Si enrutas tráfico entre muchos proveedores, el costo del gateway deja de escalar tan agresivamente con el tráfico — sirves más sin que tu flota de proxies se infle.</li>
<li class=""><strong>Cimientos de infraestructura más sólidos.</strong> A medida que las apps de IA se vuelven sistemas de producción y no experimentos, las capas de infra debajo importan tanto como la calidad del modelo.</li>
</ul>
<p>Si seguiste la <a class="" href="https://development-wec.wiline.com/docs/es/tutorials/">serie de OpenClaw</a>, ya pusiste algo con forma de gateway en la ruta crítica — un proxy inverso, un enrutador de modelos, un runtime de agentes. La lección se generaliza.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="la-lección-de-fondo">La lección de fondo<a href="https://development-wec.wiline.com/docs/es/news/litellm-rust-gateway/#la-lecci%C3%B3n-de-fondo" class="hash-link" aria-label="Enlace directo al La lección de fondo" title="Enlace directo al La lección de fondo" translate="no">​</a></h2>
<p>Durante años, la mayor parte de la conversación sobre IA se centró en la calidad del modelo. Pero a medida que las organizaciones despliegan agentes, sistemas de recuperación y flujos multi-modelo en producción, <strong>la capa frente a tus modelos es infraestructura</strong> — y cada milisegundo y megabyte en la ruta crítica compone a escala. El movimiento de LiteLLM a Rust refleja una realización más amplia de la industria: la eficiencia de la infraestructura ya no es una nota al pie del rendimiento del modelo, es parte de él.</p>
<p><strong>Vale la pena observarlo, todavía no cambiar:</strong> está en beta y el proxy en Python no va a ninguna parte. Pero la dirección del viaje es clara.</p>
<hr>
<p>📖 <strong>Lee el anuncio completo</strong> — los benchmarks, el plan de migración ruta por ruta y los diagramas de arquitectura valen tu tiempo: <a href="https://docs.litellm.ai/blog/litellm-rust-launch" target="_blank" rel="noopener noreferrer" class="">LiteLLM — Building the fastest AI gateway in Rust</a>.</p>]]></content>
        <author>
            <name>Rafael Fernandes</name>
            <uri>https://www.linkedin.com/in/rafaelmacariofernandes/</uri>
        </author>
        <category label="ai-news" term="ai-news"/>
        <category label="gateways" term="gateways"/>
        <category label="performance" term="performance"/>
        <category label="autoalojamiento" term="autoalojamiento"/>
    </entry>
</feed>