Lección 2: Bloques de construcción de un flujo de trabajo: pasos, estado, bifurcaciones y bucles
Objetivos de aprendizaje:
- Dominar los cuatro bloques de construcción centrales de un flujo de trabajo
- Entender las dependencias y el paso de datos entre pasos
- Aprender a diseñar el diagrama de ejecución de un flujo de trabajo
Requisitos: Lección 1: De la conversación al flujo de trabajo | Siguiente: Lección 3 >>
Los flujos de trabajo no son magia, son composición
En la lección anterior vimos que un flujo de trabajo puede coordinar decenas de agentes para terminar una tarea compleja. Pero si abres el script de un flujo de trabajo, descubrirás que es código común y corriente: funciones, bucles, condicionales.
La potencia de un flujo de trabajo viene de combinar cuatro bloques de construcción simples:
- Pasos — la unidad básica de trabajo
- Estado — los datos que se comparten entre pasos
- Bifurcaciones — elegir un camino según una condición
- Bucles — repetir una operación similar
Una vez que entiendes estos cuatro bloques de construcción, puedes diseñar un flujo de trabajo de cualquier complejidad.1
Bloque de construcción 1: los pasos
Un paso es la operación atómica de un flujo de trabajo. Cada paso es o bien una llamada a un agente, o bien una función determinista.2
Pasos de agente frente a pasos de función
Cuándo usar un paso de agente:
- Necesitas entender una entrada difusa (lenguaje natural, datos no estructurados)
- Necesitas generar contenido creativo (documentación, código, explicaciones)
- Necesitas emitir un juicio (¿este código tiene un problema de seguridad?)
Cuándo usar un paso de función:
- Transformación de datos (filtrar, ordenar, formatear)
- Cálculos (estadísticas, agregación)
- Comprobaciones condicionales (lógica if-else)
- Operaciones con archivos (leer, escribir, mover)
Buena práctica: los pasos de agente razonan, los pasos de función calculan. No le pidas al LLM que haga un simple filtrado de un array o que sume números: es lento, caro y poco confiable.2
El contrato de entrada/salida de un paso
Cada paso debería tener un contrato claro de entrada y salida:
Un contrato claro hace que un flujo de trabajo sea fácil de entender y de depurar. Cuando el paso 5 se rompe, ves de inmediato que es porque la salida del paso 4 tenía el formato equivocado.3
Bloque de construcción 2: el estado
El estado son los datos que se comparten entre pasos. Es como la memoria del flujo de trabajo: guarda los resultados intermedios y el progreso de la ejecución.4
Dos tipos de estado
Estado del flujo de trabajo:
- Toda la información sobre la tarea actual: en qué paso vas, el resultado de cada paso, lo que necesita el paso siguiente
- Se guarda en variables del script o en una base de datos externa
- Se pasa entre pasos, pero no entre sesiones
Estado de sesión:
- El historial de conversación del usuario y sus preferencias
- Lo gestiona el propio agente; al flujo de trabajo no le hace falta ocuparse de él4
Patrones de gestión del estado
Patrón 1: variables del script (bueno para flujos de trabajo cortos)
Patrón 2: un objeto de estado (bueno para complejidad media)
Patrón 3: almacenamiento externo (bueno para flujos de trabajo de larga duración)
Puntos de control: guarda el estado después de los pasos clave para que el flujo de trabajo pueda reanudarse desde el punto de fallo en lugar de empezar de nuevo.5
Bloque de construcción 3: las bifurcaciones
Una bifurcación elige una ruta de ejecución distinta según una condición.6
Bifurcación simple
Bifurcar según la decisión de un agente
Bifurcación para el manejo de errores
Bloque de construcción 4: los bucles
Un bucle te permite ejecutar la misma operación sobre muchos objetos similares. Esta es la fuente central de la potencia de un flujo de trabajo.6
Bucle secuencial
Bucle paralelo
Aquí, limit = 5 es el tope de concurrencia: ejecutar como máximo 5 a la vez en lugar de disparar los 100 de golpe con Promise.all, lo que abriría demasiadas conexiones o descriptores de archivo.
Bucle con acumulación
Bucle con terminación condicional
Combinar los bloques de construcción: un flujo de trabajo completo
Combinemos estos cuatro bloques de construcción para diseñar un flujo de trabajo de «chequeo de salud de microservicios»:
El script correspondiente:
Este flujo de trabajo usa los cuatro bloques de construcción:
- Pasos:
listServices, checkServiceHealth, las llamadas a agent()
- Estado: el objeto
state que guarda el total y las listas de servicios sanos y no sanos
- Bifurcaciones: paralelo o secuencial según la cantidad de servicios, y el tipo de reporte según el estado de salud
- Bucles: el bucle paralelo con
map, el bucle secuencial con for
Cómo pensar el diseño de un flujo de trabajo
Trabaja hacia atrás desde el final:
- ¿Cuál es la salida final? (un reporte, servicios desplegados, código limpio)
- ¿Qué entrada necesita el último paso? (datos agregados, resultados validados)
- ¿De dónde viene esa entrada? (de la salida del paso anterior)
- Repite hasta llegar al inicio (la entrada del usuario o el sistema de archivos)
Detecta las oportunidades de paralelismo:
- Si varios pasos no dependen entre sí, pueden ejecutarse en paralelo
- «Haz Y para cada X» casi siempre se puede paralelizar
- El paralelismo puede llevar diez tareas de 5 minutos de 50 minutos a 5
Haz explícitas las dependencias:
Siguiente: Lección 3: Descomponer una tarea compleja en un flujo de trabajo — estrategias para desglosar sistemáticamente una tarea compleja en los pasos de un flujo de trabajo