Sistemas Multi-Agente con LangGraph y CrewAI: Patrones Prácticos

Explora patrones prácticos para construir sistemas multi-agente usando LangGraph y CrewAI, desde orquestación secuencial hasta supervisión jerárquica.

APIs
RESTGraphQLOpenAPI

Sistemas Multi-Agente con LangGraph y CrewAI: Patrones Prácticos

¿Tu empresa está lista para IA? Descargá nuestro checklist gratuito →

Descargar checklist

Introducción

Los sistemas multi-agente están revolucionando la forma en que automatizamos tareas complejas. Al combinar múltiples agentes de IA, cada uno con habilidades especializadas, podemos resolver problemas que requieren razonamiento, acceso a herramientas y colaboración. En este artículo, exploraremos dos frameworks líderes: LangGraph y CrewAI, y mostraremos patrones prácticos para implementar sistemas multi-agente robustos.

¿Por qué sistemas multi-agente?

Un solo agente de LLM puede ser poderoso, pero tiene limitaciones: contexto limitado, falta de especialización y dificultad para manejar tareas paralelas. Los sistemas multi-agente mitigan estos problemas al:

  • Especializar cada agente en un dominio (por ejemplo, búsqueda, cálculo, resumen).
  • Dividir tareas grandes en subtareas ejecutables en paralelo.
  • Supervisar y corregir errores mediante agentes de control.

LangGraph: Gráficos de Estado para Agentes

LangGraph, parte del ecosistema LangChain, permite modelar flujos de trabajo como grafos cíclicos. Cada nodo es una función que procesa el estado y decide el siguiente paso.

Patrón 1: Orquestación Secuencial

En este patrón, los agentes se ejecutan en cadena. Por ejemplo, un agente investiga, otro escribe y un tercero revisa.

from langgraph.graph import StateGraph, END
from typing import TypedDict, List

class AgentState(TypedDict):
    messages: List[str]
    next_agent: str

def agent_research(state):
    state["messages"].append("Investigando...")
    state["next_agent"] = "writer"
    return state

def agent_write(state):
    state["messages"].append("Escribiendo...")
    state["next_agent"] = "reviewer"
    return state

def agent_review(state):
    state["messages"].append("Revisando...")
    state["next_agent"] = END
    return state

builder = StateGraph(AgentState)
builder.add_node("researcher", agent_research)
builder.add_node("writer", agent_write)
builder.add_node("reviewer", agent_review)
builder.set_entry_point("researcher")
builder.add_conditional_edges("researcher", lambda s: s["next_agent"])
builder.add_conditional_edges("writer", lambda s: s["next_agent"])
builder.add_conditional_edges("reviewer", lambda s: s["next_agent"])

graph = builder.compile()
result = graph.invoke({"messages": []})
print(result["messages"])
# Output: ['Investigando...', 'Escribiendo...', 'Revisando...']

Patrón 2: Enrutamiento Condicional

A veces, el flujo depende de la salida de un agente. Por ejemplo, si un análisis detecta un error, se redirige a un agente de corrección.

¿Querés un diagnóstico personalizado? Completá el checklist gratuito →

Descargar checklist
def agent_analyze(state):
    # Lógica de análisis
    if "error" in state["data"]:
        state["next_agent"] = "fixer"
    else:
        state["next_agent"] = "reporter"
    return state

CrewAI: Equipos de Agentes

CrewAI simplifica la creación de equipos de agentes que colaboran de manera flexible.

Patrón 3: Equipo Jerárquico

Un agente manager asigna tareas a agentes subordinados.

from crewai import Agent, Task, Crew

manager = Agent(
    role="Manager",
    goal="Coordinar el equipo",
    backstory="Eres un gestor de proyectos experto.",
    allow_delegation=True
)

researcher = Agent(
    role="Investigador",
    goal="Recopilar datos",
    backstory="Buscas información relevante."
)

writer = Agent(
    role="Redactor",
    goal="Escribir informes",
    backstory="Tienes habilidades de redacción."
)

task1 = Task(description="Investigar tendencias de IA", agent=researcher)
task2 = Task(description="Escribir artículo sobre tendencias", agent=writer)

crew = Crew(agents=[manager, researcher, writer], tasks=[task1, task2], manager_agent=manager)
crew.kickoff()

Patrón 4: Proceso Secuencial con Delegación

CrewAI permite que los agentes se deleguen tareas entre sí.

researcher = Agent(
    role="Investigador",
    goal="Encontrar datos",
    allow_delegation=False
)

analyst = Agent(
    role="Analista",
    goal="Analizar datos y delegar visualización",
    allow_delegation=True
)

visualizer = Agent(
    role="Visualizador",
    goal="Crear gráficos",
    allow_delegation=False
)

crew = Crew(agents=[researcher, analyst, visualizer], tasks=[...], process="sequential")

Patrones Avanzados

Supervisión con LangGraph

Añade un agente supervisor que monitorea el estado global.

def supervisor(state):
    last_message = state["messages"][-1]
    if "error" in last_message:
        state["next_agent"] = "fixer"
    elif len(state["messages"]) > 10:
        state["next_agent"] = END
    else:
        state["next_agent"] = "worker"
    return state

Bucle de Retroalimentación

Un agente de calidad revisa la salida y si es insuficiente, reenvía al agente original.

Consideraciones de Implementación

  1. Manejo de errores: Usa try/except en nodos LangGraph para evitar bloqueos.
  2. Optimización de contexto: Limita el historial de mensajes usando resúmenes.
  3. Paralelismo: LangGraph con AsyncGraph y CrewAI con process="parallel".

Recursos Externos

Conclusión

Tanto LangGraph como CrewAI ofrecen herramientas poderosas para construir sistemas multi-agente. LangGraph brinda control fino con grafos de estado, mientras CrewAI simplifica la creación de equipos colaborativos. Al combinar estos patrones prácticos, puedes diseñar sistemas robustos para automatizar procesos complejos. ¡Empieza hoy y lleva tus agentes al siguiente nivel!

¿Listo para dar el próximo paso? Evaluá tu empresa con nuestro checklist gratuito →

Descargar checklist

Publicaciones relacionadas