Módulo 10: Multi-Agent Systems
Introducción: De Un Agente a Muchos
Descripción
Tu AI Research Assistant es supervisado. Tiene retry con backoff, búsqueda paralela, memoria persistente, time-travel debugging, long-term memory, multi-usuario, y aprobaciones humanas antes de acciones costosas. Lo construiste a lo largo de los Módulos 6-9. Es un agente de producción.
Pero hace todo.
Busca información. Analiza los resultados. Genera el reporte. Decide el formato. Selecciona las fuentes. Maneja errores. Un solo agente con un system prompt de 1800 tokens, 10 tools, y la esperanza de que el LLM elija correctamente cada vez.
Imagina este escenario: le pides "investiga el impacto de AI en finanzas, analiza los datos y genera un reporte ejecutivo." Tu agente tiene que ser buen investigador, buen analista, Y buen escritor. Con un solo system prompt. Con un solo modelo.
Ahora imagina esto: un agente investigador experto en buscar fuentes (3 tools de búsqueda, modelo barato y rápido). Un agente analista experto en encontrar patrones (1 tool de análisis, modelo potente). Un agente escritor experto en redacción ejecutiva (sin tools, modelo creativo). Y un supervisor que coordina quién trabaja cuándo.
Mismo problema. Mejor resultado. Más fácil de debuggear. Más barato de operar.
Eso es multi-agent: dividir una tarea compleja entre agentes especializados que hacen su parte mejor que un generalista.
Pero — y esto es crítico — multi-agent no es siempre mejor. Un solo agente con buenas tools es más simple, más rápido, y más fácil de mantener. Multi-agent se justifica solo cuando la complejidad lo requiere. Este módulo te da el criterio para decidir cuándo usarlo y cuándo no.
¿Dónde estamos en la guía?
Este es el Módulo 10 de la guía LangChain & LangGraph: From Chains to Agents. Es el último módulo del Bloque 3 (LangGraph Avanzado).
Bloque 1: LangChain Core (Módulos 1-4) ✅ Completado
Bloque 2: LangGraph Fundamentals (Módulos 5-7) ✅ Completado
Bloque 3: LangGraph Avanzado (Módulos 8-10) ← ESTÁS AQUÍ (Módulo 10)
Bloque 4: Producción (Módulos 11-12)
Tu progreso:
Bloque 1 — LangChain Core ✅ Completado
│
│ Módulo 1: Modelos y Proveedores ✅
│ Módulo 2: Tools y Tool Calling ✅
│ Módulo 3: Agents (create_agent) ✅
│ Módulo 4: Middleware y Customización ✅
│
▼
Bloque 2 — LangGraph Fundamentals ✅ Completado
│
│ Módulo 5: Introducción a LangGraph ✅
│ Módulo 6: Functional API ✅
│ Módulo 7: Flujos Avanzados ✅
│
▼
Bloque 3 — LangGraph Avanzado
│
│ Módulo 8: Memoria y Persistencia ✅ Completado
│ Módulo 9: Human-in-the-Loop ✅ Completado
│ Módulo 10: Multi-Agent Systems ← ESTÁS AQUÍ
│
▼
Bloque 4 — Producción 🔒
│
│ Módulo 11: Deep Agents 🔒
│ Módulo 12: LangSmith y Producción 🔒
Este módulo cierra el Bloque 3. Después de aquí, entiendes los tres niveles de abstracción para construir agentes: create_agent (un agente simple), LangGraph (un agente con workflow custom), y multi-agent (múltiples agentes coordinados). El Bloque 4 agrega producción: Deep Agents (M11) y LangSmith (M12).
El puente desde el Módulo 9
Lo que ya tienes
Tu Research Agent v4 es un sistema supervisado:
- ✅ Retry con backoff exponencial y graceful degradation
- ✅ Búsqueda paralela en múltiples fuentes
- ✅ Checkpointing, crash recovery, y time-travel debugging
- ✅ Long-term memory y multi-usuario con thread_id
- ✅ Approval gates antes de acciones costosas
- ✅ Review del plan de investigación antes de ejecutar
- ✅ Feedback para redirigir la investigación a mitad de camino
- ✅ State edit para corregir datos antes del reporte final
La pregunta que falta
Tu agente es capaz, robusto, persistente, y supervisado. Pero hace todo con un solo system prompt y un solo modelo.
Tu Research Agent v4 recibe: "Investiga AI en finanzas, analiza tendencias, genera reporte"
Un solo agente hace TODO:
→ Busca en 3 fuentes (necesita ser buen buscador)
→ Analiza los resultados (necesita ser buen analista)
→ Genera el reporte (necesita ser buen escritor)
→ Decide el formato (necesita entender presentación)
Problema:
❌ El system prompt intenta cubrir 4 roles diferentes
❌ 10+ tools — el agente se confunde sobre cuál usar
❌ Un solo modelo para todo (gpt-4.1 para búsqueda es caro e innecesario)
❌ Si el reporte sale mal, ¿fue la búsqueda, el análisis, o la redacción?
La solución no es un agente más inteligente. Es dividir el trabajo.
Cuándo UN agente NO es suficiente
No todo problema necesita multi-agent. Estos son los señales concretas de que tu agente único está llegando a su límite:
Señal 1: El system prompt supera 2000 tokens
Si tu prompt intenta cubrir búsqueda, análisis, escritura, formato, y manejo de errores — está intentando ser todo. Un prompt que es todo no es nada.
Señal 2: Más de 8 tools
Cuando un agente tiene 10-15 tools, empieza a confundirse sobre cuál usar. Un investigador con web_search, arxiv_search, y scholar_search es claro. Un agente con esas 3 más analyze_data, create_chart, write_report, send_email, format_table, translate, y summarize tiene demasiadas opciones.
Señal 3: Diferentes tareas necesitan diferentes modelos
Buscar en la web es una tarea simple — gpt-4.1-mini es suficiente y cuesta 10x menos. Analizar patrones complejos requiere gpt-4.1. Generar texto creativo funciona mejor con ciertos modelos. Un solo agente usa un solo modelo para todo.
Señal 4: Debugging es difícil porque no puedes aislar el problema
"El reporte salió mal." ¿Fue porque la búsqueda encontró fuentes malas? ¿El análisis interpretó mal los datos? ¿La redacción fue pobre? Con un solo agente, no puedes aislar qué parte falló.
Señal 5: Quieres paralelismo real
Un agente procesa secuencialmente. Con multi-agent, puedes buscar en 3 fuentes en paralelo mientras otro agente prepara el template del reporte.
Beneficios de multi-agent
Especialización
Cada agente es experto en UNA cosa. Un researcher con 3 tools de búsqueda produce mejores resultados que un agente generalista con 15 tools. Es el Single Responsibility Principle aplicado a agentes.
Paralelización
Agentes pueden trabajar simultáneamente. El researcher busca mientras el analyst prepara su framework de análisis.
Separación de concerns
Si el reporte sale mal, sabes exactamente qué agente falló. Puedes mejorar el researcher sin tocar al analyst. Puedes testear cada agente independientemente.
Optimización de modelos
Usa el modelo correcto (y más barato) para cada tarea:
Researcher: gpt-4.1-mini → $0.40/M input (buscar es simple)
Analyst: gpt-4.1 → $2.00/M input (analizar es complejo)
Writer: gpt-4.1-mini → $0.40/M input (redactar con buen prompt es simple)
vs.
Agente único: gpt-4.1 → $2.00/M input para TODO (incluido búsqueda simple)
Los 4 patrones de multi-agent
Existen cuatro arquitecturas principales. Las verás en detalle en las cápsulas técnicas:
1. Supervisor
Un agente central recibe la consulta, decide qué agente debe trabajar, delega, recibe resultados, y decide los siguientes pasos. Es el patrón más común.
┌──────────┐
│Supervisor│
└────┬─────┘
┌───────┼───────┐
▼ ▼ ▼
┌────────┐┌───────┐┌──────┐
│Research││Analyst││Writer│
└────────┘└───────┘└──────┘
2. Handoffs
Un agente transfiere el control directamente a otro agente. No hay supervisor central — los agentes se pasan el trabajo entre sí como una cadena de relevos.
┌────────┐ ┌───────┐ ┌──────┐
│Research│ ──▶│Analyst│ ──▶│Writer│
└────────┘ └───────┘ └──────┘
3. Subagents (jerárquico)
Un agente invoca a otros como "subcontratistas." El agente principal mantiene el control total — los subagents son como tools que resultan ser agentes completos.
┌──────────────────┐
│ Main Agent │
│ ┌──────┐ │
│ │Sub A │ │
│ └──────┘ │
│ ┌──────┐ │
│ │Sub B │ │
│ └──────┘ │
└──────────────────┘
4. Router
Un componente ligero (puede ser un LLM o reglas simples) clasifica la consulta entrante y la envía al agente correcto. Solo un agente procesa cada consulta.
┌──────┐ ┌────────┐
│Router│ ──▶ │Agent A │ (si es búsqueda)
│ │ ──▶ │Agent B │ (si es análisis)
│ │ ──▶ │Agent C │ (si es escritura)
└──────┘ └────────┘
La analogía con microservicios
Si vienes de software engineering, la analogía es directa:
| Monolito → Microservicios | Agente único → Multi-agent |
|---|---|
| Una aplicación hace todo | Un agente hace todo |
| Cada servicio tiene una responsabilidad | Cada agente tiene una especialidad |
| Los servicios se comunican via APIs | Los agentes se comunican via estado compartido |
| Un API gateway routea las requests | Un supervisor routea las tareas |
| Cada servicio se escala independientemente | Cada agente usa el modelo óptimo |
| Debugging: logs por servicio | Debugging: tracing por agente |
La misma regla aplica: no dividas en microservicios un monolito que funciona bien. Solo divide cuando la complejidad lo justifica.
Cuándo NO usar multi-agent
Esto es tan importante como saber cuándo usarlo:
Simple Q&A → un solo agente
Si tu agente responde preguntas usando 2-3 tools, multi-agent es over-engineering. create_agent con un buen prompt es suficiente.
Pipeline lineal sin branching → un solo agente o Functional API
Si el flujo es siempre "buscar → analizar → escribir" sin variaciones, no necesitas un supervisor que decida. Un StateGraph lineal o @entrypoint + @task hace lo mismo con menos complejidad.
Presupuesto limitado → menos agentes = menos API calls
Cada agente adicional es al menos una llamada extra al LLM. Un supervisor con 3 workers puede generar 5-10 llamadas LLM por consulta. Si el costo importa, un solo agente bien diseñado es más eficiente.
Latencia crítica → menos agentes = menos overhead
Cada handoff entre agentes agrega latencia. Para aplicaciones que necesitan respuesta en <2 segundos, multi-agent puede ser demasiado lento.
Regla de oro
Empieza con un solo agente. Solo escala a multi-agent cuando las señales de la sección anterior sean claras. "Premature multi-agent is the root of all evil" — la misma regla que aplica a microservicios aplica aquí.
Mapa del módulo
| # | Cápsula | Qué aprenderás | Tipo |
|---|---|---|---|
| 01 | Introducción (esta) | Cuándo y por qué usar multi-agent, los 4 patrones, cuándo NO usarlo | Intro |
| 02 | Pattern Supervisor | Supervisor como coordinador, workers especializados, create_supervisor | Técnica |
| 03 | Pattern Handoffs | Transferencia directa entre agentes, handoff tools, flujo sin supervisor | Técnica |
| 04 | Estado compartido vs aislado | Diseño de estado en multi-agent, shared vs isolated, contratos entre agentes | Técnica |
| 05 | Comunicación entre agentes | Cómo los agentes pasan información, message history management, context | Técnica |
| 06 | HITL en multi-agent | Supervisión humana en sistemas multi-agente, quién aprueba qué | Técnica |
| 07 | Debugging y observabilidad | Logging por agente, tracing del flujo, identificar qué agente falló | Técnica |
| 08 | Proyecto: Research Team | Research Agent v5: researcher + analyst + writer + supervisor | Proyecto |
Flujo de aprendizaje
Empiezas con el patrón Supervisor (cápsula 02) — la arquitectura más común y el punto de partida natural. Luego aprendes Handoffs (cápsula 03) — transferencia directa entre agentes sin supervisor central. Con eso dominado, abordas estado compartido vs aislado (cápsula 04) — el problema de diseño más difícil de multi-agent: qué ve cada agente y cómo se previenen conflictos. La cápsula 05 (comunicación entre agentes) cubre cómo fluye la información entre agentes. La cápsula 06 (HITL en multi-agent) aplica los patrones del M9 a nivel de sistema. La cápsula 07 (debugging) te enseña a identificar qué agente causó un problema — esencial para producción. Finalmente, integras todo en el Research Agent v5 (cápsula 08).
La progresión es: supervisor → handoffs → estado → comunicación → HITL → debugging → proyecto.
Conexión con el proyecto
Research Agent v5: el equipo de investigación
Tu Research Agent se transforma en un sistema multi-agente con especialización:
v1 (Módulo 6): Funcional pero frágil
↓
v2 (Módulo 7): Robusto (retry, branching, error handling)
↓
v3 (Módulo 8): Persistente (checkpointing, memoria, multi-usuario)
↓
v4 (Módulo 9): Supervisado (approval gates, review, feedback, state edit)
↓
v5 (Este módulo): Multi-agent
│
│ 🔍 Research Agent: busca en múltiples fuentes (web, papers, docs)
│ 📊 Analysis Agent: analiza, sintetiza, identifica patrones
│ ✍️ Writer Agent: genera el reporte final
│ 🎯 Supervisor: coordina el flujo entre los tres
│
▼
v6 (Módulo 11): + Deep Agent (planning automático, virtual filesystem)
La transición es natural: lo que antes era un solo agente haciendo todo, ahora son 3 agentes especializados + 1 supervisor. El resultado: reportes de mayor calidad, procesamiento más rápido (paralelismo), optimización de costos (modelos diferentes por agente), y un sistema más fácil de debuggear.
La prueba de éxito: ejecutas una investigación compleja, y puedes ver en el log qué agente hizo qué, cuánto costó cada uno, y si alguno falló — sin que el resto del sistema se vea afectado.
Conexión con el Módulo 11: Deep Agents
El Módulo 10 te enseña a construir multi-agent manualmente: tú diseñas los agentes, defines los handoffs, y configuras el supervisor. El Módulo 11 introduce la capa "batteries-included": planning automático con write_todos, virtual filesystem, subagent spawning, y long-term memory con backends pluggable. Reimplementarás el Research Agent como Deep Agent para ver cómo el framework provee out-of-the-box lo que construiste manualmente.
Conexión con el Módulo 12: LangSmith y Producción
Cuando tienes 4 agentes generando 10+ llamadas LLM por consulta, la observabilidad se vuelve crítica. LangSmith te da tracing end-to-end del flujo entre agentes, costos por agente, latencia por paso, y métricas de calidad. Lo que aprendes de debugging en la cápsula 07 se profesionaliza con LangSmith en el M12.
Qué NO cubre este módulo
- ❌ Deep Agents — Planning automático, virtual filesystem, y subagent spawning son del Módulo 11. Aquí construyes multi-agent desde los primitivos
- ❌ LangSmith tracing — La observabilidad profesional con LangSmith es del Módulo 12. Aquí implementas logging y debugging básico por agente
- ❌ Deployment de multi-agent — Cómo desplegar un sistema multi-agente con LangGraph Cloud es del Módulo 12
- ❌ RAG multi-agente — No construimos un sistema RAG con múltiples agentes. El enfoque es el Research Assistant
- ❌ Agent-to-agent communication protocols — Protocolos como A2A (Agent-to-Agent) de Google o MCP son temas de interoperabilidad que van más allá del scope de este módulo
Setup técnico
Prerequisitos
- ✅ Módulo 9 completado — tienes un Research Agent v4 con HITL
- ✅ Python 3.11+ instalado
- ✅ Al menos una API key de un proveedor (OpenAI recomendado)
- ✅ Checkpointer funcionando — ya usas MemorySaver desde el M8
Instalación
Un paquete nuevo para el patrón Supervisor:
pip install langgraph langchain-openai python-dotenv langgraph-supervisor
Verifica las importaciones:
from langchain.agents import create_agent
from langgraph_supervisor import create_supervisor
from langgraph.graph import StateGraph, MessagesState, START, END
from langgraph.checkpoint.memory import MemorySaver
print("create_agent disponible")
print("create_supervisor disponible")
print("StateGraph disponible")
# Output esperado:
# create_agent disponible
# create_supervisor disponible
# StateGraph disponible
Variables de entorno
Tu .env del Módulo 9 sigue funcionando:
# .env
OPENAI_API_KEY=sk-...
Verificación rápida: multi-agent básico
Ejecuta este script para verificar que el patrón supervisor funciona. Usa un supervisor manual (sin LLM) para que no necesites API key todavía:
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
class TeamState(TypedDict):
query: str
research: str
analysis: str
current_agent: str
step: int
def supervisor(state: TeamState) -> dict:
step = state.get("step", 0)
if step == 0:
return {"current_agent": "researcher", "step": 1}
elif step == 1:
return {"current_agent": "analyst", "step": 2}
return {"current_agent": "done", "step": 3}
def researcher(state: TeamState) -> dict:
return {"research": f"5 fuentes encontradas para: '{state['query']}'"}
def analyst(state: TeamState) -> dict:
return {"analysis": f"3 patrones en: {state['research'][:40]}..."}
def route(state: TeamState) -> str:
return state["current_agent"]
builder = StateGraph(TeamState)
builder.add_node("supervisor", supervisor)
builder.add_node("researcher", researcher)
builder.add_node("analyst", analyst)
builder.add_edge(START, "supervisor")
builder.add_conditional_edges("supervisor", route, {
"researcher": "researcher",
"analyst": "analyst",
"done": END,
})
builder.add_edge("researcher", "supervisor")
builder.add_edge("analyst", "supervisor")
graph = builder.compile()
result = graph.invoke({
"query": "Estado del arte en RAG 2025",
"research": "", "analysis": "",
"current_agent": "", "step": 0,
})
print(f"Research: {result['research']}")
print(f"Analysis: {result['analysis']}")
print(f"Steps: {result['step']}")
# Output esperado:
# Research: 5 fuentes encontradas para: 'Estado del arte en RAG 2025'
# Analysis: 3 patrones en: 5 fuentes encontradas para: 'Estado de...
# Steps: 3
Si ves el research y el analysis completados, y 3 steps, el patrón supervisor funciona: el supervisor delegó al researcher, recibió el resultado, delegó al analyst, recibió el resultado, y terminó.
Evidencia de éxito
Al terminar este módulo, sabrás que tuviste éxito si:
- ✅ Puedes diseñar un sistema multi-agente con el patrón Supervisor usando
create_supervisor - ✅ Implementas handoffs entre agentes — un agente delega trabajo a otro y recibe el resultado
- ✅ Creas agentes especializados con tools, prompts, y modelos propios
- ✅ Manejas estado compartido vs aislado entre agentes
- ✅ Sabes decidir cuándo un solo agente es suficiente vs cuándo necesitas multi-agent
- ✅ Tu Research Agent v5 tiene 3 agentes especializados + 1 supervisor que produce mejores resultados que el v4
Test de autoevaluación
Si puedes responder estas preguntas, vas por buen camino:
- ¿Cuándo un solo agente con buenas tools es mejor que multi-agent?
- ¿Cuál es la diferencia entre el patrón Supervisor y el patrón Handoffs?
- Si tu supervisor usa
gpt-4.1para decidir a quién delegar, ¿es necesario? ¿Qué alternativa más barata existe? - ¿Cómo decides si dos agentes deben compartir estado o tener estado aislado?
- Si tu sistema tiene 8 agentes especializados, ¿es un buen diseño? ¿Por qué?
Resumen
- Tu Research Agent v4 es capaz pero hace todo con un solo agente: búsqueda, análisis, redacción. Cuando el system prompt supera 2000 tokens, tienes más de 8 tools, o necesitas diferentes modelos por tarea — es momento de considerar multi-agent
- Multi-agent no es siempre mejor. Un solo agente con buenas tools es más simple, más rápido, y más fácil de debuggear. Multi-agent se justifica cuando hay especialización real, prompts demasiado largos, diferentes modelos por subtarea, o necesidad de separar concerns
- Cuatro patrones: Supervisor (coordinador central), Handoffs (transferencia directa), Subagents (jerárquico), Router (clasificación). El Supervisor es el más común y el punto de partida
- La analogía con microservicios es directa: no dividas un monolito que funciona bien. Empieza simple, escala cuando sea necesario
- 3-4 agentes es el sweet spot. El Research Agent se transforma en: researcher (búsqueda), analyst (análisis), writer (redacción), supervisor (coordinación)
- Especialización produce mejores resultados que un generalista. Un researcher con 3 tools de búsqueda es mejor buscando que un agente con 15 tools que hace de todo. Single Responsibility Principle aplicado a agentes
Recursos adicionales
- LangGraph — Multi-Agent Systems — Documentación oficial sobre patrones multi-agent: supervisor, handoffs, subagents
- LangGraph Supervisor — Repositorio oficial del paquete
langgraph-supervisorcon ejemplos y API reference - How to build a multi-agent supervisor — Guía práctica paso a paso para implementar el patrón supervisor
- How to implement handoffs — Guía para transferencia directa de control entre agentes
- Multi-Agent Architectures — LangChain Blog — Análisis de patrones multi-agent con comparaciones y trade-offs
- Microservices Pattern — Martin Fowler — La analogía que usamos en este módulo: cuándo dividir un monolito y cuándo no
Módulo 10 — LangChain & LangGraph: From Chains to Agents
Siguiente cápsula: Pattern Supervisor — aprenderás cómo un agente supervisor coordina workers especializados, la diferencia entre routing simple y routing con LLM, y cómo usar create_supervisor para construir tu primer sistema multi-agente.