Saltar al contenido
Air Automations
Todos los posts
Estrategia18 de septiembre de 2026lectura de 6 minutos

Los despliegues de artefactos en menos de un segundo acaban de romper el presupuesto de latencia de tu agente

El despliegue sin compilación de Vercel para artefactos bajo 10MB mueve el cuello de botella aguas arriba hacia la generación de agentes. Aquí están los patrones que sobreviven a las nuevas matemáticas de latencia.

By the airautomations team

El cuello de botella se acaba de mover: el despliegue ya no es el paso lento

La ruta sin compilación de Vercel para artefactos estáticos bajo 10MB colapsa lo que solía ser un impuesto de latencia significativo. Hace cinco años, enviar un artefacto generado por agente significaba: generar → serializar a S3 → esperar la propagación de CloudFront → devolver una URL firmada → dejar que el usuario haga polling o use webhooks para completar. Ese patrón de entrega te costaba 2–4 segundos de tiempo real, divididos entre TTFB de almacenamiento de objetos (típicamente 400–800ms), calentamiento de caché de CDN y gastos generales de fan-out de webhooks.

Ahora que Vercel omite completamente el paso de compilación para activos estáticos pequeños, ese impuesto de 2–4 segundos se ha evaporado. Empujas bytes al borde en menos de 100ms. El problema: el equipo que arquitectó ese antiguo pipeline estaba ocultando una restricción mucho más difícil debajo del costo de despliegue. Lo que toma tiempo no es empujar el artefacto al borde. Es generar la cosa en primer lugar.

Un agente que genera un informe basado en plantilla, un diff de código o un componente React estructurado gasta 5 segundos en una ejecución p50 y 90+ segundos en p95. Esa varianza ahora es dueña de tu SLA de extremo a extremo. El despliegue es ruido.

La bifurcación síncrona-vs-asíncrona que cada agente de artefactos ahora enfrenta

Los despliegues sub-segundo fuerzan una elección difícil: restringir el agente para mantenerse dentro del presupuesto, o aceptar asíncrono y renunciar a la velocidad que acabas de comprar.

Si quieres mantener el tiempo total de reloj bajo 1 segundo de extremo a extremo, tienes aproximadamente 800ms de margen después del despliegue. Eso deja 200ms para generación. Doscientos milisegundos no es mucho. Una única llamada a la API de OpenAI consume 150–300ms en p50. Una cadena de agente multi-herramienta con tres llamadas de herramienta agota tu presupuesto antes de que el agente incluso formatee la respuesta.

Entonces, o construyes un generador de artefactos basado en plantilla que rellena espacios en una carcasa pre-desplegada y envía solo una carga JSON, o vas asíncrono. Con asíncrono, devuelves un ID de trabajo en menos de 100ms, inicias el trabajo de generación en una cola (SQS, Redis Streams, lo que sea), y despliegas al completar. Pierdes la garantía sub-segundo. Los usuarios ven "generando informe..." en lugar de un artefacto instantáneo. La ganancia de despliegue sigue ahí—sucede en segundo plano—pero la latencia *sentida* por el usuario está determinada por el tiempo de generación, no por el tiempo de despliegue.

La falsa tercera opción es transmitir artefactos parciales mientras continúa la generación. Tentador. No funciona. Los usuarios esperan el disparador de despliegue de todas formas, así que en realidad no has movido la aguja.

Patrones que sobreviven: pre-computación, plantilla y diff

Tres arquitecturas mantienen la promesa sub-segundo sin lobotomizar el agente.

Generación basada en plantilla. El agente no genera el artefacto completo. Genera la *forma* del mismo. Pre-despliegas una carcasa—un componente React con espacios, un SVG con grupos nombrados, un esquema JSON—y el agente rellena solo los valores. El despliegue es solo empujar una carga de 2KB al borde. La generación está limitada a la finalización de tokens en un único pase hacia adelante. Tiempo total: 150–400ms. Esto funciona para paneles, tarjetas de informe, diffs de código y cualquier otra cosa donde el diseño es conocido y solo los datos varían.

Generación de diff-y-parche. El agente devuelve un delta contra un artefacto en caché en lugar de una representación completa. Calculas el diff del lado del cliente o en una función de borde, lo aplicas y envías el resultado. Si el agente es bueno generando cambios pequeños y dirigidos (intercambiando un gráfico, actualizando una fila de tabla, revisando un párrafo), la carga se mantiene bajo 10MB y el despliegue es instantáneo. El compromiso: el agente tiene que saber qué está modificando, lo que limita el alcance de lo que puede regenerar en una única llamada.

Pre-generación especulativa. Durante el tiempo de reloj inactivo—entre solicitudes de usuario, durante horas de menor actividad—calienta los N artefactos más probables. Almacénalos en un registro de artefactos respaldado por Postgres o Redis con claves de hash de contenido. Cuando el agente se ejecuta, primero verifica el registro. Un acierto de caché devuelve el artefacto instantáneamente. Un fallo de caché vuelve a la generación en vivo y pone en cola el resultado para la próxima vez. Registrar por qué un caché falló es el patrón de observabilidad que tus agentes necesitan, porque quieres saber si estás pre-computando el conjunto correcto.

Los tres patrones utilizan caché de borde de CDN con stale-while-revalidate como alternativa. Si la generación falla o excede el presupuesto, sirve el último artefacto conocido bueno mientras re-ejecutas el agente en segundo plano.

Dónde asíncrono sigue siendo la llamada correcta (y cómo ocultarlo)

No todos los artefactos se ajustan al presupuesto de 200 milisegundos. Agentes de código que ejecutan pipelines de 12 horas, informes que extraen datos de 20+ fuentes, paneles que encadenan cinco búsquedas RAG—estos necesitan asíncrono. La arquitectura no cambia. Lo que cambia es la UX.

Devuelve un ID de trabajo duradero al usuario en menos de 100ms. Incluye un punto final de estado que sondea el estado actual. El despliegue sucede al completar. La clave es hacer que lo asíncrono se sienta lo suficientemente rápido para que los usuarios no lo perciban como lento.

Para agentes de código de larga duración, usa sandboxes con estado en lugar de reiniciar desde cero en cada llamada de herramienta. Los agentes de código fallan en pipelines de 12 horas sin arquitectura de fork/snapshot, que te permite pausar la ejecución, hacer snapshot del estado y reanudar sin perder contexto.

Para generadores de informes, transmite una UI esquelética inmediatamente (encabezados, diseño, estados de carga) e hidrata progresivamente a medida que los datos regresan. Los usuarios ven movimiento. Se siente más rápido que esperar un artefacto completo.

Protege el paso de despliegue en sí con claves de idempotencia y colas de letra muerta. Una generación podría tener éxito pero el despliegue podría fallar—hipo de red, artefacto demasiado grande, tiempo de espera de función de borde. Si no tienes lógica de reintento y una cola de alternativa para despliegues fallidos, perderás completaciones de artefactos. El artefacto se generó, el trabajo muestra "hecho", pero nada se envió.

Una restricción más: el caso de artefacto >10MB. Cualquier cosa más grande que 10MB dispara una compilación completa de Vercel, que consume 5–15 segundos. Mantén esos fuera de la ruta caliente. Para salidas generadas grandes (video, paquetes de imágenes de alta resolución, conjuntos de datos JSON masivos), usa un pipeline separado y más lento. No dejes que un tipo de artefacto lento bloquee tu cola de generación principal.

La métrica que realmente importa ahora: costo por artefacto enviado

Has estado midiendo costo-por-token y costo-por-despliegue. Ambos son triviales. El costo real vive en la varianza.

Rastrea costo-por-artefacto-exitoso. Un artefacto es exitoso si pasó la validación de esquema, ejecutó todas las llamadas de herramienta requeridas y se desplegó sin error. Cuenta cuántas veces el agente tuvo que regenerar antes del éxito. Ese presupuesto de reintento compone el costo.

Mide latencia de generación p95 y p99 por clase de artefacto. Un informe de ranura de plantilla tiene un p95 diferente que un agente de diff de código, que tiene un p95 diferente que un panel basado en RAG. Sepáralos. Decide síncrono-vs-asíncrono por clase, no en toda la plataforma.

Registra por qué una generación perdió especificación, no solo que lo hizo. ¿Falló la validación de esquema? ¿Se agotó el tiempo de una llamada de herramienta? ¿El agente alucina una importación que no existe? Esta es la señal que te permite ajustar tu presupuesto de reintento y saber cuándo rendirse y servir una plantilla en caché en su lugar.

Vincula la telemetría de despliegue a la traza del agente con IDs de correlación. Si un despliegue falló, necesitas saber qué generación produjo el artefacto y qué estaba haciendo el agente en ese momento. La brecha entre "despliegue falló" y "por qué" es donde vive la depuración manual.

Audita tu pipeline esta semana

Mide latencia de generación p95 para cada clase de artefacto que envías. Si está bajo 200ms, probablemente puedas ir síncrono. Si está sobre 2 segundos, asíncrono es obligatorio. Si está entre 200ms y 2 segundos, tienes una opción: restringir el agente, plantillar la salida, o aceptar la latencia.

Una vez que hayas ordenado por clase, decide qué patrones se ajustan. Template-first funciona si tu forma de salida es fija. Diff-patch funciona si tu agente es bueno con deltas pequeños. La generación especulativa funciona si puedes predecir las solicitudes de alto volumen. Si ninguno de esos se ajusta, ve asíncrono e invierte en sondeo de estado e hidratación progresiva.

Si estás atrapado eligiendo la bifurcación, podemos ayudarte a enviarlo.

Air Automations es una agencia de IA y automatización en Barcelona. Construimos asistentes y agentes de IA, automatización de procesos e integraciones entre herramientas, y hacemos consultoría de IA.