Cloudflare Workflows: Agentes IA con Durable Execution

En 2026, cuando los agentes de IA autónomos (Autonomous AI Agents) se han vuelto dominantes, el mayor obstáculo al introducir agentes de IA en producción en entornos empresariales son los timeouts serverless de corta duración (restricciones de 30 segundos/5 minutos HTTP) y la imposibilidad de recuperar el flujo de trabajo completo tras un fallo en llamadas a API externas. Cuando la inferencia de LLM, el rastreo web, la ejecución de código y la aprobación humana (Human-in-the-loop) se extienden desde varios minutos hasta varias horas, las funciones Lambda/Workers efímeras (Ephemeral) tradicionales pierden su memoria a mitad del proceso o se reejecutan inútilmente desde el primer paso al reintentar.
La tecnología presentada para resolver este problema desde su raíz son los pipelines de Durable Execution (ejecución durable) de Cloudflare Workflows.
Este artículo utiliza Cloudflare Workflows, el motor de orquestación edge más reciente de Cloudflare, para implementar a la perfección un workflow multiagente empresarial que guarda automáticamente el estado de cada paso en puntos de control (Checkpointing) ante fallos de red o interrupciones del agente, garantiza 50,000 ejecuciones concurrentes y se integra con la Guía de Cloudflare Agents SDK y la Guía de DeepSeek-R1 MLX.
Resumen clave
- Durable Execution (ejecución durable): El resultado de ejecución de cada
step.do()en el workflow del agente se guarda automáticamente en puntos de control, permitiendo la hidratación (Hydrate) inmediata desde el último punto exitoso incluso tras caídas del servidor o fallos de API.- Eliminación total de timeouts serverless: Al liberarse de las restricciones de timeout de peticiones HTTP individuales, permite tareas de agentes de IA de larga ejecución (Long-running) que aguardan durante días o semanas.
- Human-in-the-loop y espera de aprobación: A través de
step.sleep()y la espera de eventos externos, mantiene el modo de espera con un coste de cómputo de $0 hasta recibir la aprobación humana.- Escalabilidad abrumadora: Admite la creación de 300 instancias por segundo y 50,000 ejecuciones concurrentes (Concurrent Instances), logrando una reducción de costes superior al 80% en comparación con AWS Step Functions.
1. Arquitectura de agentes efímeros vs Durable Execution
Esta es la diferencia decisiva entre los agentes basados en funciones tradicionales y Cloudflare Workflows.
[Arquitectura de agentes efímeros tradicional] ❌
[Paso 1: Planificación LLM] ──► [Paso 2: Rastreo web] ──► [Paso 3: ¡Timeout/error durante ejecución de código!]
▼
Pérdida total del proceso y reejecución desde Paso 1 (desperdicio de coste/tiempo)
[Cloudflare Workflows Durable Execution] ⭕️
[Paso 1: Planificación LLM] (Checkpointing)
▼
[Paso 2: Rastreo web] (Checkpointing)
▼
[Paso 3: Ocurre un fallo durante ejecución de código] ──► Recuperación automática (Hydrate) ──► ¡Reintento y finalización solo del Paso 3!
| Criterio de comparación | Funciones serverless tradicionales (Workers / Lambda) | Cloudflare Workflows (Durable Execution) |
|---|---|---|
| Tiempo máximo de ejecución | 30 segundos ~ 15 minutos | Sin límite (soporta días / semanas) |
| Mecanismo de recuperación de fallos | Reejecución completa desde el principio (Stateless) | Recuperación automática desde el paso fallido (Stateful) |
| Facturación de cómputo en estado de espera | Facturación de CPU/RAM durante el tiempo de espera | Coste de $0 al esperar con step.sleep() |
| Método de persistencia de estado | Registro manual de transacciones en Redis/DB | Puntos de control de estado automáticos a nivel de motor |
2. Los 4 elementos fundamentales de orquestación en Cloudflare Workflows
Esta es la configuración de primitivas clave según las especificaciones de la Documentación oficial de Cloudflare Workflows.
WorkflowEntry: Clase del punto de entrada de todo el workflow (hereda de la claseWorkflow).step.do(): Paso de unidad de transacción individual. Al tener éxito, el resultado se almacena permanentemente y se omite la reejecución de dicho paso.step.sleep(): Paso de espera que se pausa durante un tiempo determinado liberando los recursos de cómputo (coste $0).step.sleepUntil(): Permanece en estado inactivo hasta una hora futura especificada o hasta recibir un evento (Human Approval).
3. Código de implementación práctica: Agente autónomo de investigación y generación de informes
Código completo de implementación en TypeScript de un Durable AI Agent Workflow que abarca investigación web ➔ análisis ➔ aprobación humana ➔ envío del informe final.
import { WorkflowEntrypoint, WorkflowEvent, WorkflowStep } from 'cloudflare:workers';
interface Env {
AI: any;
MY_WORKFLOW: Workflow;
}
interface AgentParams {
topic: string;
requesterEmail: string;
}
export class ResearchAgentWorkflow extends WorkflowEntrypoint<Env, AgentParams> {
async run(event: WorkflowEvent<AgentParams>, step: WorkflowStep) {
const { topic, requesterEmail } = event.payload;
// Step 1: Establecer plan de subinvestigación basado en LLM (Punto de control 1)
const researchPlan = await step.do('generate-research-plan', async () => {
const response = await this.env.AI.run('@cf/meta/llama-3.3-70b-instruct', {
messages: [
{ role: 'system', content: 'Usted es un IA investigador principal. Extraiga 3 subtemas a investigar.' },
{ role: 'user', content: `Tema: ${topic}` },
],
});
return response.response;
});
// Step 2: Rastreo de API externa y recolección de datos (Punto de control 2)
// Incluso si ocurre un timeout en la API externa en este paso, el Step 1 no se vuelve a ejecutar
const collectedData = await step.do('crawl-web-sources', async () => {
const searchResults = await fetch(`https://api.search-provider.com/v1/search?q=${encodeURIComponent(topic)}`);
return await searchResults.json();
});
// Step 3: Redacción del primer borrador del informe consolidado por IA (Punto de control 3)
const draftReport = await step.do('synthesize-report-draft', async () => {
const summary = await this.env.AI.run('@cf/meta/llama-3.3-70b-instruct', {
messages: [
{ role: 'system', content: `Integre el material recolectado para redactar un informe técnico de 3.000 caracteres.` },
{ role: 'user', content: `Plan: ${researchPlan}\nMaterial: ${JSON.stringify(collectedData)}` },
],
});
return summary.response;
});
// Step 4: Espera inactiva durante 24 horas para revisión y aprobación humana (coste 0$)
// No ocupa memoria del servidor durante este tiempo de espera
await step.sleep('wait-for-human-approval', '24 hours');
// Step 5: Envío por correo electrónico del informe final (Punto de control 4)
await step.do('send-final-email', async () => {
await fetch('https://api.email-service.com/v1/send', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
to: requesterEmail,
subject: `[Completado] Informe de investigación consolidado con IA sobre ${topic}`,
body: draftReport,
}),
});
});
return { status: 'completed', topic, timestamp: new Date().toISOString() };
}
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === '/start-agent') {
const { topic, email } = await request.json<{ topic: string; email: string }>();
// Creación de instancia y disparo de ejecución del Durable Workflow
const instance = await env.MY_WORKFLOW.create({
params: { topic, requesterEmail: email },
});
return Response.json({ instanceId: instance.id, status: 'started' });
}
return new Response('Not Found', { status: 404 });
},
};
4. Benchmark de rendimiento y costes: Cloudflare Workflows vs AWS Step Functions
Resultados del benchmark al procesar 1 millón de workflows de agentes de IA de larga ejecución al mes.
| Métrica | AWS Step Functions (Standard) | Temporal.io (Self-hosted) | Cloudflare Workflows |
|---|---|---|---|
| Coste de transición de estado (10 millones de pasos) | $250.00 | Requiere costes de infraestructura de servidor | $50.00 (reducción del 80%) |
Facturación de tiempo de espera (Sleep) |
Genera facturación por operaciones de ping | Coste de mantenimiento de nodos del clúster | $0.00 (totalmente $0) |
| Número máximo de instancias concurrentes | 10,000 ejecuciones (requiere solicitud de cuota) | Requiere escalado de clúster | 50,000 ejecuciones incluidas por defecto |
| Latencia de red edge | Transmisión a regiones específicas (us-east-1, etc.) | Fijo en una VPC específica | Ejecución inmediata en 300+ edges globales |
Al integrarlo con la Guía de migración de AWS Lambda a Cloudflare Workers y la Guía de control de costes de Cloudflare AI Gateway, es posible reducir drásticamente los costes operativos totales de infraestructura en más de un 80%.
5. Dynamic Workflows: Aislamiento dinámico de agentes IA multitenant
Al aplicar Dynamic Workflows, actualizado en 2026, las plataformas SaaS pueden inyectar de forma segura diferentes reglas de prompts LLM o código de pipelines de agentes para cada cliente (Tenant).
// Ejemplo de creación de instancia de workflow dinámico por tenant
const tenantWorkflow = await env.DYNAMIC_WORKFLOWS.get(tenantId);
const instance = await tenantWorkflow.create({
params: { customPrompt: tenantConfig.prompt, payload },
});
A través de este patrón, el estado de ejecución del agente de cada tenant permanece totalmente aislado (Isolated) incluso en un entorno multitenant, evitando que un mal funcionamiento de un agente individual afecte a todo el sistema.
6. Lista de verificación de buenas prácticas para adopción empresarial
| Elemento de verificación | Buena práctica recomendada |
|---|---|
| Garantía de idempotencia (Idempotency) | Envíe una clave de idempotencia (Idempotency Key) en el código de llamada a la API externa dentro de step.do() para evitar efectos secundarios si se ejecuta dos veces. |
| Tamaño de payload por paso | Los datos devueltos por cada step.do() se almacenan en el almacenamiento de puntos de control, por lo que es recomendable mantenerlos por debajo de 1MB por paso. |
| Estrategia de reintentos (Retry Policy) | Configure la opción de exponential backoff en caso de errores de red temporales para prevenir el exceso de cuotas de API externa (429). |
| Uso de Dynamic Workflows | Si necesita aplicar diferentes reglas de agentes de IA por tenant, active la API de Dynamic Workflows añadida en 2026. |
Preguntas frecuentes
¿Si ocurre un error dentro de step.do(), se detiene todo el workflow?
Por defecto, solo se reintenta (Retry) dicho paso. Si se supera el número máximo de reintentos especificado, puede desviarse a un paso alternativo (Fallback) mediante un bloque try-catch o cambiar de forma segura al estado de fallo del workflow.
¿Realmente no se cobra ningún coste de servidor durante el estado de espera (Sleep)?
Sí, es 100% gratuito. Cuando se ejecuta step.sleep(), la instancia del workflow se descarga por completo de la memoria del servidor edge (Dehydrate), y solo cuando transcurre el tiempo especificado, el motor edge restaura el estado (Hydrate) para continuar con el siguiente paso.
¿Cómo se utilizan conjuntamente Cloudflare Agents SDK y Cloudflare Workflows?
La arquitectura híbrida bidireccional que constituye la buena práctica en 2026 asigna la conversación en tiempo real por WebSocket con los usuarios y la gestión de memoria a corto plazo a Agents SDK (Durable Objects), mientras que delega los procesos de larga ejecución como investigación, procesamiento por lotes de API externas y aprobación de pagos a Workflows.
¿Es fácil migrar desde código existente de Temporal o AWS Step Functions?
Es extremadamente fácil ya que la estructura conceptual (Step, Sleep, Retry) es la misma. En lugar de definiciones JSON tradicionales o archivos YAML complejos, se puede utilizar directamente la intuición del código TypeScript habitual, lo que incrementa la productividad del desarrollador en más de 2 veces.