El Ejército de Dumbledore y los Patrones de Coordinación Agéntica

Fan-Out, Fan-In, Sequential, Hierarchical — cuándo usar cada patrón y cómo no confundirlos en el examen.

En el video anterior vimos qué es un agente, cómo funciona el loop agéntico y cuál es la diferencia entre orchestrator y sub-agent. Si llegaste hasta acá sin haber visto M1V1, andá a leerlo primero — este artículo construye directamente sobre eso.

Bien. En este punto ya entendés que el orchestrator delega y los sub-agents ejecutan. Pero hay algo que todavía no vimos: ¿cómo delega exactamente el orchestrator? ¿Manda todas las tareas al mismo tiempo? ¿Una por una? ¿En qué orden? ¿Qué pasa si una tarea depende del resultado de otra?

Eso es lo que cubren los patrones de coordinación. Y el CCA-F los evalúa mucho — especialmente en escenarios donde te dan una arquitectura y te preguntan si el patrón elegido es el correcto para ese caso de uso.

Dumbledore no coordinaba la Orden del Fénix improvisando. Tenía una estrategia clara para cada misión: a veces mandaba a todos al mismo tiempo, a veces en secuencia, a veces con jerarquías intermedias. Cada patrón tenía su razón de ser.

Los tres patrones que necesitás dominar

Hay tres patrones principales de coordinación en arquitecturas agénticas. El examen los nombra directamente, así que necesitás saber no solo cómo funcionan sino también cuándo elegir cada uno.

Patrón 1 — Fan-Out / Fan-In: la Orden del Fénix en misión

Imaginá que Dumbledore necesita recolectar inteligencia de cinco zonas del mundo mágico al mismo tiempo: el Callejón Diagón, Azkaban, el Ministerio de Magia, Hogsmeade y la mansión Malfoy. No tiene tiempo para mandar a un miembro de la Orden a un lugar, esperar que vuelva, y recién entonces mandar al siguiente.

Entonces hace lo que haría cualquier buen orchestrator: manda a cinco miembros en paralelo, espera que todos vuelvan con su reporte, y consolida la inteligencia.

Eso es Fan-Out / Fan-In. El "Fan-Out" es el momento en que el orchestrator distribuye el trabajo. El "Fan-In" es el momento en que reúne los resultados.

Cuándo usarlo

●      Las tareas son independientes entre sí — el resultado de una no afecta a las demás

●      Querés minimizar el tiempo total de ejecución aprovechando el paralelismo

●      Tenés múltiples unidades de trabajo del mismo tipo (ej: analizar N documentos, procesar N registros)

Cuándo NO usarlo

●      Las tareas tienen dependencias — el resultado de la tarea A es el input de la tarea B

●      El orden de ejecución importa para la corrección del resultado

●      Los recursos son limitados y el paralelismo generaría contención (ej: muchas escrituras simultáneas a la misma BD)

 

Implementación en Python

Acá está la implementación real del patrón Fan-Out / Fan-In con Claude y threading:

Corré este código y fijate en el orden de los prints. Vas a ver que los cuatro agentes arrancan casi al mismo tiempo — eso es el Fan-Out. Después, cuando todos terminaron, aparece el análisis consolidado de Dumbledore — eso es el Fan-In.

💡 El threading en Python tiene limitaciones por el GIL (Global Interpreter Lock). Para workloads CPU-intensivos, asyncio o multiprocessing son mejores opciones. Para llamadas a APIs externas como la de Claude — que son I/O bound — threading funciona perfectamente.

Patrón 2 — Sequential: el Torneo de los Tres Magos

El Torneo de los Tres Magos tiene tres pruebas. Harry no puede intentar la segunda antes de completar la primera, ni saber qué viene después hasta que termina la que está haciendo. Cada prueba construye sobre lo que pasó antes.

Eso es el patrón Sequential. Las tareas se ejecutan en orden estricto porque el output de cada una es el input de la siguiente. No hay paralelismo posible — si intentás ejecutar la segunda tarea antes de tener el resultado de la primera, el sistema falla.

Cuándo usarlo

●      El output de la tarea N es el input de la tarea N+1

●      El estado del sistema cambia con cada paso y las tareas siguientes dependen de ese estado

●      Necesitás garantizar un orden de ejecución específico por razones de lógica o seguridad

Implementación

Fijate en cómo cada prueba recibe como contexto el resultado acumulado de las anteriores. Eso es lo que hace al patrón Sequential poderoso para tareas donde el estado importa — y lo que lo hace inadecuado cuando las tareas son independientes, porque estás perdiendo tiempo ejecutando en serie lo que podría ir en paralelo.

Patrón 3 — Hierarchical: la estructura de Hogwarts

Hogwarts no es solo Dumbledore dando órdenes a 400 estudiantes directamente. Hay una jerarquía: Dumbledore habla con los profesores jefe de cada casa, y esos profesores coordinan a sus propios estudiantes. Hay niveles intermedios de coordinación.

Eso es el patrón Hierarchical. Un orchestrator principal divide el trabajo en dominios, crea orchestrators intermedios para cada dominio, y esos orchestrators intermedios coordinan a sus propios sub-agents.

Cuándo usarlo

●      El sistema es lo suficientemente grande como para que un solo orchestrator no pueda coordinar todo eficientemente

●      El trabajo se puede dividir en dominios o subsistemas claramente diferenciados

●      Cada dominio tiene su propia lógica de coordinación interna

Implementación simplificada

💡 En el patrón Hierarchical, cada nivel puede usar su propio sub-patrón interno. En el ejemplo, los orchestrators de casa usan Fan-Out para coordinar a sus estudiantes en paralelo. Esto es composición de patrones — y es perfectamente válido.

Cómo elegir el patrón correcto: el árbol de decisión

El examen CCA-F te va a dar un escenario y te va a preguntar qué patrón usarías. Acá está el árbol de decisión que necesitás tener internalizado:

Memorizalo así. En la práctica vas a encontrar sistemas que combinan los tres patrones — pero para el examen, el árbol de decisión te va a dar la respuesta correcta en la mayoría de los casos.

Las preguntas trampa del examen

Trampa 1: Fan-Out con tareas dependientes

El examen te describe un pipeline donde el paso 2 necesita el resultado del paso 1, pero la arquitectura usa Fan-Out para ejecutarlos en paralelo. Te pregunta si hay un problema.

Sí, hay un problema grave. Si el paso 2 necesita el output del paso 1, no pueden correr en paralelo — el paso 2 va a arrancar sin tener los datos que necesita. La respuesta correcta es cambiar a Sequential para ese par de tareas.

Trampa 2: Sequential cuando no hay dependencias

El examen te muestra un sistema que analiza 100 documentos de forma secuencial — uno por uno, esperando que termine cada análisis antes de empezar el siguiente. Los documentos son completamente independientes entre sí. ¿Hay un problema de diseño?

Sí. Si los documentos son independientes, Sequential es ineficiente. El tiempo total es 100 veces el tiempo de analizar un documento. Con Fan-Out en paralelo, el tiempo total se acerca al tiempo de analizar un solo documento.

Trampa 3: Hierarchical innecesario

Te describen un sistema con tres sub-agents y te preguntan si necesita un patrón Hierarchical con orchestrators intermedios. La respuesta es casi siempre no — Hierarchical agrega complejidad que solo vale la pena cuando el volumen o la especialización lo justifica. Para tres sub-agents, Fan-Out simple es suficiente.

⚠️  En el examen, la respuesta correcta sobre patrones casi nunca es 'usar Hierarchical'. Hierarchical es para sistemas grandes. La mayoría de los escenarios del examen son lo suficientemente pequeños como para resolverse con Fan-Out o Sequential.

Comparación final: los tres patrones de un vistazo

Lo que tenés que llevarte de este artículo

●      Fan-Out / Fan-In: para tareas independientes que ganás ejecutando en paralelo — threading o asyncio en Python

●      Sequential: para tareas con dependencias donde el output de una es el input de la siguiente — el orden es parte del diseño

●      Hierarchical: para sistemas grandes que se pueden dividir en dominios — cada dominio tiene su propio orchestrator intermedio

●      Los patrones se pueden combinar — un sistema Hierarchical puede usar Fan-Out internamente en cada nivel

●      La pregunta que resuelve el 90% de los casos del examen: ¿las tareas son independientes entre sí?

Dumbledore nunca usó el mismo patrón de coordinación para todas las misiones de la Orden. Evaluaba el escenario y elegía la estrategia correcta. Eso es exactamente lo que te pide el CCA-F: no memorizar patrones, sino saber cuándo aplicar cada uno.

En el siguiente submodulo vamos a ver cómo se implementa el Tool Use en profundidad — la anatomía completa de una herramienta, el ciclo de vida de un tool_use block, y los errores más comunes al diseñar herramientas para agentes. 🧙‍♂️