Phase 11 - Lesson 17

Tradeoffs de Frameworks de Agentes — LangGraph vs CrewAI vs AutoGen vs Agno

Cada framework vende la misma demostración (un agente de investigación genera un informe) y oculta el mismo error (el esquema de estado entra en conflicto con la capa de orquestación). Elija el framework cuyas abstracciones coincidan con la forma de su problema; todo lo demás es código de integración que escribirá dos veces.

Tipo: Learn Idiomas: Python Prerrequisitos: Phase 11 · 09 (Function Calling), Phase 11 · 16 (LangGraph) Tiempo: ~45 minutos

El Problema

Tiene una tarea que requiere más de una llamada a un LLM. Tal vez sea un flujo de trabajo de investigación (planificar, buscar, resumir, citar). Tal vez sea un pipeline de revisión de código (analizar diff, criticar, corregir, validar). Tal vez sea un asistente de múltiples turnos que reserva vuelos, escribe correos electrónicos y genera informes de gastos. Elige un framework.

Tres días después, descubre que las abstracciones del framework fallan. CrewAI le da roles pero le pone trabas cuando el "investigador" necesita entregar un plan estructurado al "redactor". AutoGen proporciona chat entre agentes pero no tiene estado de primera clase, por lo que su checkpoint es una serialización pickle de un registro de conversación. LangGraph le da un grafo de estado pero lo obliga a nombrar cada transición antes de saber qué hará el agente. Agno le da una abstracción de agente único que falla cuando intenta distribuir tareas a tres ejecutores concurrentes.

La solución no es "elegir el mejor framework". Es alinear la abstracción central del framework con la forma de su problema. Esta lección dibuja ese mapa.

El Concepto

Agent framework matrix: core abstraction vs problem shape

Cuatro frameworks dominan el panorama de 2026. Sus abstracciones centrales no son las mismas.

Framework Abstracción central Mejor ajuste Peor ajuste
LangGraph StateGraph — estado tipado, nodos, aristas condicionales, checkpointer. Flujos de trabajo con estado explícito e interrupciones con intervención humana; agentes de producción que necesitan depuración con viaje en el tiempo. Brainstorming libre y basado en roles donde la topología es desconocida.
CrewAI Crew — roles (objetivo, historia de fondo), tareas, proceso (secuencial o jerárquico). Flujos de trabajo basados en juegos de rol o personas con un plan lineal/hierárquico corto. Cualquier cosa con estado más allá del historial de turnos del equipo; ramificación compleja.
AutoGen Par de ConversableAgent — dos o más agentes que hablan por turnos hasta una condición de salida. Diálogo multiagente (profesor-alumno, proponente-crítico, actor-revisor) donde el pensamiento surge del chat. Flujos de trabajo determinísticos con un DAG conocido; cualquier cosa que requiera estado duradero tras reinicios.
Agno Agent — un único LLM + herramientas + memoria, combinable en equipos. Agentes únicos y equipos ligeros rápidos de construir; fuerte multimodalidad y controladores de almacenamiento integrados. Grafos profundos con ramificaciones explícitas y reductores personalizados.

Qué significa realmente "abstracción"

La abstracción central de un framework es lo que dibuja en la pizarra cuando expone la arquitectura.

  • LangGraph → dibuja un grafo. Los nodos son pasos, las aristas son transiciones y el objeto de estado en cada punto está tipado. El modelo mental es una máquina de estados.
  • CrewAI → dibuja un organigrama. Cada rol tiene una descripción de puesto y un gerente dirige las tareas. El modelo mental es un equipo pequeño de especialistas.
  • AutoGen → dibuja un mensaje directo de Slack. Dos agentes se envían mensajes entre sí; un tercero se une si necesita un moderador. El modelo mental es el chat.
  • Agno → dibuja una sola caja con herramientas colgando de ella. Coloque las cajas una al lado de la otra para formar un equipo. El modelo mental es "agente con todo incluido".

La cuestión del estado

El estado es donde la mayoría de las elecciones de framework fallan en producción.

  • LangGraph. Estado tipado (TypedDict o modelo Pydantic), reductores por campo, checkpointer de primera clase (SQLite/Postgres/Redis). Reanudar, interrumpir y el viaje en el tiempo son nativos. (Consulte Phase 11 · 16.)
  • CrewAI. El estado fluye como cadenas de texto entre tareas a través del campo context, o estructurado a través de output_pydantic. No hay almacenamiento duradero por equipo nativo; debe implementar el suyo propio si el equipo debe sobrevivir a un reinicio.
  • AutoGen. El estado es el historial del chat y cualquier context definido por el usuario. Las transcripciones de las conversaciones persisten; el estado arbitrario del flujo de trabajo no lo hace a menos que escriba adaptadores.
  • Agno. Controladores de almacenamiento integrados (SQLite, Postgres, Mongo, Redis, DynamoDB) conectados a un Agent a través de storage= — las sesiones de conversación y las memorias del usuario persisten automáticamente. No es un checkpointer de grafo completo; es un almacenamiento de sesión.

La cuestión de las ramificaciones

Todo agente no trivial se ramifica. Quién decide la ramificación es lo que importa.

  • LangGraph — usted decide, a través de aristas condicionales. El enrutamiento es una función de Python con ramificaciones con nombre. Las ramificaciones son elementos de primera clase en el grafo compilado; el checkpointer registra qué ramificación se tomó.
  • CrewAI — el gerente decide en modo jerárquico; en modo secuencial, usted decide en el momento de la construcción. El enrutamiento es implícito en la lista de tareas; no hay un "si" de primera clase fuera del prompt del gerente.
  • AutoGen — los agentes deciden a través del chat. La ramificación surge de quién habla a continuación. GroupChatManager selecciona al siguiente orador; puede escribir un speaker_selection_method personalizado, pero el predeterminado se basa en LLM.
  • Agno — el agente decide mediante qué herramienta llamar a continuación. Los equipos tienen un modo de coordinador/enrutador/colaborador; la ramificación más allá de eso es responsabilidad del desarrollador.

La cuestión de la observabilidad

  • LangGraph — OpenTelemetry a través de LangSmith o cualquier exportador OTel. Cada transición de nodo es un span de traza; los checkpoints funcionan como trazas reproducibles. LangSmith es la opción de primera mano; Langfuse/Phoenix también tienen adaptadores.
  • CrewAI — OpenTelemetry de primera clase desde finales de 2025; integraciones con Langfuse, Phoenix, Opik, AgentOps.
  • AutoGen — integración de OpenTelemetry a través de autogen-core; AgentOps y Opik tienen conectores. La granuralidad del rastreo es por mensaje de agente, no por nodo.
  • Agno — indicador monitoring=True integrado más exportadores de OpenTelemetry; integración estrecha con Langfuse para trazas de sesión.

Costo y latencia

Los cuatro frameworks añaden sobrecarga por llamada (lógica del framework, validación, serialización). Orden aproximado de sobrecarga creciente: Agno ≈ LangGraph < CrewAI ≈ AutoGen. La diferencia está dominada por cuánto enrutamiento LLM adicional realiza el framework. El gerente jerárquico de CrewAI consume tokens decidiendo quién va a continuación; el GroupChatManager de AutoGen hace lo mismo. LangGraph solo consume tokens donde escribe llm.invoke. El camino de agente único de Agno es ligero.

Cuando el costo por ejecución sea importante, prefiera el enrutamiento explícito (aristas de LangGraph, speaker_selection_method de AutoGen) en lugar del enrutamiento seleccionado por LLM.

Interoperabilidad

  • LangGraph ↔ herramientas, recuperadores y LLM de LangChain. Adaptador MCP de primera clase (herramientas importadas como servidores MCP).
  • CrewAI ↔ las herramientas heredan de BaseTool; las herramientas de LangChain, LlamaIndex y MCP se adaptan. Delegación entre equipos mediante allow_delegation=True.
  • AutoGenFunctionTool envuelve cualquier invocable de Python; adaptador MCP disponible. Fuerte acoplamiento al ecosistema AG2 para patrones de agente a agente.
  • Agno → decorador @tool o subclase de BaseTool; adaptador MCP; las herramientas se pueden compartir entre agentes y equipos.

La Habilidad

Puede explicar, en una frase, por qué un framework determinado es el adecuado para un problema de agente determinado.

Lista de verificación previa a la construcción:

  1. Dibuje la forma. ¿Es esto un grafo (estado tipado, transiciones con nombre)? ¿Un juego de rol (especialistas que se entregan el trabajo)? ¿Un chat (agentes que hablan hasta terminar)? ¿Un agente único con herramientas?
  2. Decida quién se ramifica. Ramificación decidida por el desarrollador → LangGraph. Decidida por el agente gerente → CrewAI jerárquico. Emergente del chat → AutoGen. Decidida por llamada a herramienta → Agno.
  3. Verifique el presupuesto de estado. ¿Necesita reanudar desde un checkpoint? ¿Viaje en el tiempo? ¿Interrupciones humanas a mitad de la ejecución? Si es así, LangGraph es el predeterminado; las sesiones de Agno cubren el estado con alcance de conversación.
  4. Verifique el presupuesto de costo. El enrutamiento seleccionado por LLM cuesta tokens adicionales por turno. Si el agente se ejecuta miles de veces al día, prefiera el enrutamiento explícito.
  5. Estime la sobrecarga del framework. Cada framework es otra dependencia. Si la tarea es dos llamadas a un LLM y una herramienta, escriba 30 líneas de Python puro; ningún framework es más barato que ningún framework.

Niéguese a utilizar un framework antes de poder dibujar el grafo, el organograma, el chat o la caja del agente. Niéguese a elegir uno que lo obligue a luchar contra su modelo de estado para lo que realmente necesita.

El Concepto (Decision Matrix)

Forma del problema Framework preferido Por qué
DAG de flujo de trabajo con estado tipado, aprobaciones humanas, larga duración LangGraph Estado de primera clase, checkpointer, interrupciones, viaje en el tiempo.
Pipeline de investigación / redacción con roles distintos CrewAI (secuencial) o subgrafos de LangGraph El rol por tarea es sencillo de expresar en CrewAI; escale con LangGraph cuando la ramificación se vuelva compleja.
Diálogo proponente-crítico o profesor-alumno AutoGen El chat de dos agentes es su forma nativa.
Agente único con herramientas, sesiones, memoria Agno Configuración más ligera, almacenamiento y memoria integrados.
Miles de distribuciones paralelas (fanout) con reductores LangGraph + Send El único con una API de primera clase para despacho paralelo.
Prototipo rápido, sin compromiso con el framework Python puro + SDK del proveedor Ningún framework es el framework más rápido.

Ejercicios

  1. Fácil. Tome la misma tarea — "investigar la sede de Anthropic, escribir un breve resumen de 200 palabras, citar fuentes" — e impleméntela en LangGraph (cuatro nodos: planificar, buscar, escribir, citar) y en CrewAI (tres roles: investigador, redactor, editor). Reporte el costo de tokens por ejecución y las líneas de código.
  2. Medio. Construya la misma tarea en AutoGen (chat de investigador ↔ redactor, con el editor uniéndose a través de GroupChat) y en Agno (un único agente con search_tools y write_tools, más un almacenamiento de sesión). Clasifique las cuatro implementaciones en (a) costo por ejecución, (b) capacidad de reanudar después de una falla, (c) capacidad de inyectar una aprobación humana antes del paso de escritura.
  3. Difícil. Construya un script de árbol de decisión pick_framework.py que reciba una descripción corta del problema (JSON: {has_typed_state, has_roles, has_dialogue, has_parallel_fanout, needs_resume}) y devuelva una recomendación con una justificación de una frase. Verifíquelo en seis casos diseñados por usted mismo.

Términos Clave

Término Lo que dice la gente Lo que realmente significa
Orquestación "Cómo se coordinan los agentes" La capa que decide qué nodo/rol/agente se ejecuta a continuación.
Estado duradero "Reanudar después de un reinicio" Estado que sobrevive a la muerte del proceso, asociado a un checkpoint o almacenamiento de sesión.
Enrutamiento seleccionado por LLM "Dejar que el modelo decida" Un LLM planificador elige el siguiente paso en cada turno; flexible pero consume tokens en cada decisión.
Enrutamiento explícito "El desarrollador decide" Una función de Python o arista estática elige el siguiente paso; económico y auditable.
Equipo (Crew) "Un equipo de CrewAI" Roles + tareas + proceso (secuencial o jerárquico) integrados en un único ejecutable.
Conversación en Grupo (GroupChat) "Chat multiagente de AutoGen" Una conversación gestionada entre N agentes con un selector de orador.
Equipo (Team - Agno) "Agno multiagente" Modo de enrutamiento / coordinación / colaboración sobre un conjunto de agentes.
Grafo de Estado (StateGraph) "Grafo de LangGraph" Abstracción de estado tipado, nodo, arista condicional y checkpointer.

Lecturas Adicionales

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).