Phase 16 - Lesson 09
Arquitecturas Paralelas / de Enjambre / en Red
Contraste con supervisor: sin tomador de decisiones central. Los agentes leen un bus de eventos compartido, toman el trabajo de forma asíncrona y escriben los resultados de vuelta. LangGraph admite explícitamente "Swarm Architecture" para entornos descentralizados y dinámicos. Matrix (arXiv:2511.21686) representa tanto el flujo de control como el de datos como mensajes serializados que se pasan a través de colas distribuidas para eliminar el cuello de botella del orquestador. El tradeoff es explícito: determinismo y trazabilidad por escalabilidad. Swarm se adapta a tareas con muchos subproblemas independientes; no se adapta a tareas que necesitan un único plan coherente.
Tipo: Learn + Build
Lenguajes: Python (stdlib, threading, queue)
Prerrequisitos: Fase 16 · 05 (Patrón Supervisor), Fase 16 · 04 (Modelo Primitivo)
Tiempo: ~75 minutos
El Problema
El supervisor escala a unos pocos trabajadores. ¿Qué pasa con cientos? El supervisor en sí se convierte en el cuello de botella: cada decisión sobre quién hace qué se canaliza a través de un solo agente. Un paso de planificación lento paraliza todo el sistema.
Las arquitecturas de enjambre (swarm) invierten el diseño. En lugar de que un planificador central despache el trabajo, los trabajadores toman el trabajo de una cola compartida. La "coordinación" está integrada en la semántica del bus de eventos. Sin orquestador; el sistema escala hasta que la cola lo hace.
Concepto
La forma
┌──── shared queue ────┐
│ │
┌────────┼────────┐ ◄──────┬───┘
▼ ▼ ▼ │
Worker Worker Worker Worker
A B C D
│ │ │ │
└────────┴────────┴─────────┘
│
▼
results pool
Sin orquestador. Cada trabajador repite: tomar una tarea, procesar, escribir el resultado (y opcionalmente encolar los pasos de seguimiento).
Cuándo se adapta el enjambre
- Muchas tareas independientes. Extracción (scraping), transformación, clasificación. Las tareas no dependen unas de otras.
- Trabajo de duración variable. Si algunas tareas toman 100ms y otras toman 10s, un enjambre equilibra la carga automáticamente: los trabajadores rápidos toman los siguientes trabajos. El supervisor tiene que anticipar la duración.
- Rendimiento (throughput) sobre determinismo. Te importa el tiempo total de finalización, no el orden estricto.
Cuándo falla el enjambre
- Flujos de trabajo ordenados. Si el paso 3 necesita la salida del paso 2, un enjambre corre el riesgo de que el paso 3 se active antes de que el paso 2 esté terminado.
- Tareas de plan global. Las preguntas de investigación complejas se benefician de un planificador. Un enjambre de investigadores produce hechos independientes, no un informe coherente.
- Depuración (debugging). Sin un registro central y con trabajo asíncrono, reproducir un error es costoso.
Matrix (arXiv:2511.21686)
Matrix es el artículo de 2025 que lleva el enjambre a su conclusión natural: tanto el flujo de control como el flujo de datos son mensajes serializados en colas distribuidas. Sin coordinador central. La tolerancia a fallos proviene de la durabilidad de los mensajes. La escalabilidad es un problema del message broker (intermediario de mensajes), no del sistema.
Contribución: un modelo de programación donde la coordinación multiagente es "¿a qué tema de mensaje se suscribe este agente?" en el que la supervisión tradicional seleccionaría "¿qué agente elige el supervisor a continuación?". Esto hace que el sistema parezca una malla de eventos pub/sub.
Arquitectura de Enjambre de LangGraph
La documentación de 2025 de LangGraph describe explícitamente "Swarm Architecture" como uno de los patrones multiagente: los agentes son nodos, pero las aristas forman un grafo dirigido con ciclos y cualquier nodo puede activarse desde el grupo. Un trabajador elige del trabajo disponible por condición, no por asignación del supervisor.
Modo de fallo: inanición (starvation) y acumulación de carga (hot-spotting)
Si todos los trabajadores toman la tarea más rápida disponible, las tareas de larga duración nunca se eligen hasta que son las únicas que quedan. Inanición clásica de colas.
Mitigaciones:
- Colas de prioridad con envejecimiento (aging) explícito (aumenta la prioridad con el tiempo de espera).
- Especialización de trabajadores: algunos trabajadores solo toman tareas "largas".
- Presión de retorno (back-pressure): limita cuántas tareas rápidas entran en la cola.
El enlace de enrutamiento basado en el contenido
El enjambre se empareja naturalmente con el enrutamiento basado en contenido (Lección 22). En lugar de una cola genérica, ten una cola por tipo de mensaje. Los trabajadores especialistas se suscriben solo a su tipo. Esta es la base para las arquitecturas de bus de mensajes que escalan a miles de agentes.
Constrúyelo
El archivo code/main.py implementa un enjambre de 4 hilos de trabajo (worker threads) que toman tareas de una queue.Queue compartida. Las tareas tienen duraciones variables (algunas rápidas, otras lentas). La demostración contrasta:
- Línea base secuencial: un trabajador procesa todas las tareas en serie.
- Asignación fija: cada tarea se preasigna a un trabajador específico (estilo supervisor).
- Enjambre (Swarm): los trabajadores toman tareas de una cola compartida.
El enjambre equilibra la carga automáticamente; la asignación fija deja a los trabajadores rápidos inactivos cuando la tarea asignada es lenta.
Ejecuta:
python3 code/main.py
La salida muestra los recuentos de tareas por trabajador (el enjambre las distribuye de manera desigual pero óptima) y los tiempos de reloj de pared (wall-clock times).
Úsalo
El archivo outputs/skill-swarm-fit.md evalúa si una tarea debe usar enjambre o supervisor. Entradas: independencia de las tareas, variación de la duración, requisitos de ordenamiento y necesidades de depuración.
Prepáralo para producción
Lista de verificación:
- Cola de prioridad con envejecimiento (aging). Evita la inanición de tareas largas.
- Idempotencia del trabajador. Una tarea puede ser tomada más de una vez si un trabajador se cae a mitad de la ejecución. Los trabajadores deben ser idempotentes.
- Cola durable. Usa Kafka, Redis Streams o una cola respaldada por una base de datos para producción.
queue.Queuees solo en memoria. - Observabilidad por tarea. Cada tarea tiene un ID de rastreo (trace ID); cada trabajador registra el inicio y fin con él.
- Presión de retorno (back-pressure). Si la cola crece más rápido de lo que los trabajadores la drenan, ralentiza al productor.
Ejercicios
- Ejecuta
code/main.py. ¿Qué tan más rápido es el enjambre en comparación con el secuencial en la carga de trabajo de duración variable? ¿Qué tan más rápido en comparación con la asignación fija? - Agrega una variante de cola de prioridad (usa
queue.PriorityQueue). Asigna la prioridad mediante el campo "importance" de la tarea. Observa si las tareas de baja prioridad llegan a sufrir inanición (starve) bajo una carga continua. - Implementa un detector de concentración de carga (hot-spot): registra cuando cualquier trabajador procese 3 veces más tareas que el trabajador más lento. ¿Qué indica eso sobre la distribución de la duración de las tareas?
- Lee el resumen y la Sección 3 del artículo de Matrix (arXiv:2511.21686). Identifica una compensación (tradeoff) específica que Matrix acepta (ganancia de escalabilidad) y una a la que renuncia (trazabilidad, determinismo).
- Convierte la demostración del enjambre para usar una
queue.Queuede tuplas (task_type, payload), con los trabajadores suscribiéndose solo a tipos específicos. ¿Qué reglas de enrutamiento tienen sentido cuando las tareas son heterogéneas?
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| Arquitectura de enjambre (Swarm) | "Agentes descentralizados" | Los trabajadores toman tareas de una cola compartida; sin orquestador central. |
| Bus de eventos (Event bus) | "Los agentes se suscriben a temas" | Intermediario de mensajes (message broker) que enruta tareas a los trabajadores por tipo o contenido. |
| Inanición (Starvation) | "La tarea nunca se ejecuta" | Las tareas de baja prioridad nunca se eligen porque llega trabajo de mayor prioridad continuamente. |
| Concentración de carga (Hot-spotting) | "Un trabajador se ahoga" | Desequilibrio de carga donde un trabajador recibe la mayoría de las tareas. |
| Presión de retorno (Back-pressure) | "Ralentizar al productor" | Mecanismo que indica río arriba (upstream) detener la producción cuando la cola se llena. |
| Trabajador idempotente | "Seguro para volver a ejecutar" | Una tarea procesada dos veces produce el mismo resultado. Se requiere porque los trabajadores pueden fallar a mitad de la ejecución. |
| Cola durable | "Sobrevive a caídas" | Cola respaldada por disco o almacenamiento replicado; las tareas no se pierden cuando un trabajador falla. |
| Framework Matrix | "Enjambre completo de paso de mensajes" | Tanto el flujo de datos como el flujo de control son mensajes serializados en colas distribuidas. |
Lectura Adicional
- LangGraph workflows and agents — Swarm Architecture — soporte explícito de enjambre
- Matrix — A Decentralized Framework for Multi-Agent Systems — enjambre completo de paso de mensajes
- Anthropic engineering — why supervisor not swarm in Research — por que un sistema de producción específico eligió explícitamente un supervisor en lugar de un enjambre
- AutoGen v0.4 actor-model docs — la reescrita del modelo de actores orientada a eventos, más cercana a enjambre que a GroupChat de la v0.2.