Phase 11 - Lesson 17
Tradeoffs de Frameworks de Agentes — LangGraph vs CrewAI vs AutoGen vs Agno
Todo framework vende a mesma demonstração (agente de pesquisa cria um relatório) e esconde o mesmo bug (o esquema de estado entra em conflito com a camada de orquestração). Escolha o framework cujas abstrações correspondam ao formato do seu problema; todo o resto é código de integração que você escreverá duas vezes.
Tipo: Learn Idiomas: Python Pré-requisitos: Phase 11 · 09 (Function Calling), Phase 11 · 16 (LangGraph) Tempo: ~45 minutos
O Problema
Você tem uma tarefa que precisa de mais de uma chamada de LLM. Talvez seja um fluxo de pesquisa (planejar, buscar, resumir, citar). Talvez seja um pipeline de revisão de código (analisar diff, criticar, corrigir, validar). Talvez seja um assistente de múltiplos turnos que reserva voos, escreve e-mails e envia relatórios de despesas. Você escolhe um framework.
Três dias depois, você descobre que as abstrações do framework falham. O CrewAI oferece papéis, mas dificulta as coisas quando o "pesquisador" precisa passar um plano estruturado para o "redator". O AutoGen oferece bate-papo entre agentes, mas não tem estado de primeira classe, de modo que seu checkpoint é uma serialização pickle de um histórico de conversa. O LangGraph oferece um grafo de estado, mas força você a nomear cada transição antes de saber o que o agente fará. O Agno oferece uma abstração de agente único que falha quando você tenta distribuir tarefas para três executores concorrentes.
A solução não é "escolher o melhor framework". É alinhar a abstração central do framework ao formato do seu problema. Esta lição desenha esse mapa.
O Concept
Quatro frameworks dominam o cenário de 2026. Suas abstrações centrais não são as mesmas.
| Framework | Abstração central | Melhor ajuste | Pior ajuste |
|---|---|---|---|
| LangGraph | StateGraph — estado tipado, nós, arestas condicionais, checkpointer. |
Fluxos de trabalho com estado explícito e interrupções com intervenção humana; agentes de produção que precisam de depuração com viagem no tempo. | Brainstorming livre e baseado em papéis onde a topologia é desconhecida. |
| CrewAI | Crew — papéis (objetivo, histórico), tarefas, processo (sequencial ou hierárquico). |
Fluxos de trabalho baseados em encenação ou personas com um plano linear/hierárquico curto. | Qualquer coisa com estado além do histórico de turnos da equipe; ramificação complexa. |
| AutoGen | ConversableAgent pair — dois ou mais agentes que conversam em turnos até uma condição de saída. |
Diálogo multiagente (professor-aluno, proponente-crítico, ator-revisor) onde o pensamento surge da conversa. | Fluxos de trabalho determinísticos com um DAG conhecido; qualquer coisa que precise de estado durável após reinicializações. |
| Agno | Agent — um único LLM + ferramentas + memória, combinável em equipes. |
Agentes únicos e equipes leves fáceis de construir; forte multimodalidade e drivers de armazenamento integrados. | Grafos profundos com ramificações explícitas e redusores personalizados. |
O que "abstração" realmente significa
A abstração central de um framework é o que você desenha no quadro branco quando apresenta a arquitetura.
- LangGraph → você desenha um grafo. Nós são etapas, arestas são transições e o objeto de estado em cada ponto é tipado. O modelo mental é uma máquina de estados.
- CrewAI → você desenha um organograma. Cada papel tem uma descrição de cargo e um gerente direciona as tarefas. O modelo mental é uma pequena equipe de especialistas.
- AutoGen → você desenha uma conversa direta no Slack. Dois agentes trocam mensagens; um terceiro entra se você precisar de um moderador. O modelo mental é bate-papo.
- Agno → você desenha uma única caixa com ferramentas conectadas a ela. Coloque as caixas lado a lado para formar uma equipe. O modelo mental é "agente com tudo incluso".
A questão do estado
O estado é onde a maioria das escolhas de framework falha em produção.
- LangGraph. Estado tipado (
TypedDictou modelo Pydantic), redusores por campo, checkpointer de primeira classe (SQLite/Postgres/Redis). Retomada, interrupção e viagem no tempo são nativos. (Veja Phase 11 · 16.) - CrewAI. O estado flui como strings entre tarefas por meio do campo
context, ou estruturado por meio deoutput_pydantic. Sem armazenamento durável por equipe nativo; você deve implementar o seu próprio se a equipe precisar sobreviver a uma reinicialização. - AutoGen. O estado é o histórico do bate-papo e qualquer
contextdefinido pelo usuário. As transcrições da conversa persistem; o estado arbitrário do fluxo de trabalho não, a menos que você escreva adaptadores. - Agno. Drivers de armazenamento integrados (SQLite, Postgres, Mongo, Redis, DynamoDB) conectados a um
Agentviastorage=— sessões de conversação e memórias de usuário persistem automaticamente. Não é um checkpointer de grafo completo; é um armazenamento de sessão.
A questão das ramificações
Todo agente não trivial possui ramificações. Quem decide a ramificação é o que importa.
- LangGraph — você decide, por meio de arestas condicionais. O roteamento é uma função Python com ramificações nomeadas. As ramificações são elementos de primeira classe no grafo compilado; o checkpointer registra qual ramificação foi seguida.
- CrewAI — o gerente decide no modo hierárquico; no modo sequencial, você decide no momento da construção. O roteamento é implícito na lista de tarefas; não há um "se" de primeira classe fora do prompt do gerente.
- AutoGen — os agentes decidem por meio do bate-papo. A ramificação surge a partir de quem fala a seguir. O
GroupChatManagerseleciona o próximo orador; você pode escrever uma funçãospeaker_selection_methodpersonalizada, mas o padrão é baseado em LLM. - Agno — o agente decide por meio de qual ferramenta chamar a seguir. As equipes possuem os modos coordenador/roteador/colaborador; ramificações além disso são de responsabilidade do desenvolvedor.
A questão da observabilidade
- LangGraph — OpenTelemetry via LangSmith ou qualquer exportador OTel. Cada transição de nó é um span de trace; os checkpoints funcionam como traces reproduzíveis. O LangSmith é a opção nativa; o Langfuse/Phoenix também possuem adaptadores.
- CrewAI — OpenTelemetry de primeira classe desde o final de 2025; integrações com Langfuse, Phoenix, Opik, AgentOps.
- AutoGen — integração com OpenTelemetry via
autogen-core; AgentOps e Opik possuem conectores. A granularidade do rastreamento é por mensagem de agente, não por nó. - Agno — parâmetro
monitoring=Trueintegrado mais exportadores OpenTelemetry; integração estreita com Langfuse para traces de sessão.
Custo e latência
Todos os quatro frameworks adicionam sobrecarga por chamada (lógica do framework, validação, serialização). Ordem aproximada de sobrecarga crescente: Agno ≈ LangGraph < CrewAI ≈ AutoGen. A diferença é dominada por quanto roteamento extra de LLM o framework realiza. O gerente hierárquico do CrewAI consome tokens decidindo quem vai a seguir; o GroupChatManager do AutoGen faz o mesmo. O LangGraph só consome tokens onde você escreve llm.invoke. O caminho de agente único do Agno é leve.
Quando o custo por execução for importante, prefira roteamento explícito (arestas do LangGraph, speaker_selection_method do AutoGen) em vez de roteamento selecionado por LLM.
Interoperabilidade
- LangGraph ↔ ferramentas, recuperadores e LLMs do LangChain. Adaptador MCP nativo (ferramentas importadas como servidores MCP).
- CrewAI ↔ as ferramentas herdam de
BaseTool; ferramentas LangChain, LlamaIndex e MCP são compatíveis. Delegação entre equipes viaallow_delegation=True. - AutoGen →
FunctionToolenvolve qualquer chamável do Python; adaptador MCP disponível. Acoplamento forte com o ecossistema AG2 para padrões de agente para agente. - Agno → decorador
@toolou subclasse BaseTool; adaptador MCP; ferramentas podem ser compartilhadas entre agentes e equipes.
A Habilidade
Você consegue explicar, em uma frase, por que um determinado framework é o correto para um determinado problema de agente.
Lista de verificação pré-construção:
- Desenhe o formato. Isso é um grafo (estado tipado, transições nomeadas)? Uma encenação (especialistas passando trabalho)? Um bate-papo (agentes conversando até terminar)? Um agente único com ferramentas?
- Decide quem ramifica. Ramificação decidida pelo desenvolvedor → LangGraph. Decidida pelo agente gerente → CrewAI hierárquico. Emergente da conversa → AutoGen. Decidida por chamada de ferramenta → Agno.
- Verifique o orçamento de estado. Você precisa retomar de um checkpoint? Viagem no tempo? Interrupções humanas no meio da execução? Se sim, o LangGraph é o padrão; sessões do Agno cobrem o estado com escopo de conversação.
- Verifique o orçamento de custo. O roteamento selecionado por LLM custa tokens adicionais por turno. Se o agente roda milhares de vezes por dia, prefira roteamento explícito.
- Estime a sobrecarga do framework. Cada framework é mais uma dependência. Se a tarefa exige duas chamadas de LLM e uma ferramenta, escreva 30 linhas de Python puro; nenhum framework é mais barato do que framework nenhum.
Recuse-se a adotar um framework antes de conseguir desenhar o grafo, o organograma, o bate-papo ou a caixa do agente. Recuse-se a escolher um que force você a lutar contra o modelo de estado dele para alcançar o que realmente precisa.
A Matriz de Decisão
| Formato do problema | Framework preferido | Por quê |
|---|---|---|
| DAG de fluxo de trabalho com estado tipado, aprovações humanas, longa duração | LangGraph | Estado de primeira classe, checkpointer, interrupções, viagem no tempo. |
| Pipeline de pesquisa / escrita com papéis distintos | CrewAI (sequencial) ou subgrafos LangGraph | Papel por tarefa é simples de expressar no CrewAI; escale com LangGraph quando as ramificações ficarem complexas. |
| Diálogo proponente-crítico ou professor-aluno | AutoGen | O bate-papo entre dois agentes é o seu formato nativo. |
| Agente único com ferramentas, sessões, memória | Agno | Configuração mais simples, armazenamento e memória integrados. |
| Milhares de distribuições paralelas (fanout) com redusores | LangGraph + Send |
O único com uma API de primeira classe para despacho paralelo. |
| Protótipo rápido, sem compromisso com framework | Python puro + SDK do provedor | Nenhum framework é o framework mais rápido. |
Exercícios
- Fácil. Pegue a mesma tarefa — "pesquisar a sede da Anthropic, escrever um resumo de 200 palavras, citar fontes" — e implemente-a no LangGraph (quatro nós: planejar, buscar, escrever, citar) e no CrewAI (três papéis: pesquisador, escritor, editor). Relate o custo de tokens por execução e as linhas de código.
- Médio. Construa a mesma tarefa no AutoGen (bate-papo pesquisador ↔ escritor, com o editor participando via
GroupChat) e no Agno (um único agente comsearch_toolsewrite_tools, além de um armazenamento de sessão). Classifique as quatro implementações em (a) custo por execução, (b) capacidade de retomar após uma falha, (c) capacidade de injetar uma aprovação humana antes da etapa de escrita. - Difícil. Construa um script de árvore de decisão
pick_framework.pyque receba uma descrição curta do problema (JSON:{has_typed_state, has_roles, has_dialogue, has_parallel_fanout, needs_resume}) e retorne uma recomendação com justificativa de uma frase. Verifique-o em seis casos projetados por você mesmo.
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Orquestração | "Como os agentes coordenam" | A camada que decide qual nó/papel/agente executa a seguir. |
| Estado durável | "Retomar após uma reinicialização" | Estado que sobrevive à morte do processo, associado a um checkpoint ou armazenamento de sessão. |
| Roteamento selecionado por LLM | "Deixe o modelo decidir" | Um LLM planejador escolhe a próxima etapa a cada turno; flexível, mas consome tokens a cada decisão. |
| Roteamento explícito | "O desenvolvedor decide" | Uma função Python ou aresta estática escolhe a próxima etapa; econômico e auditável. |
| Equipe (Crew) | "Uma equipe do CrewAI" | Papéis + tarefas + processo (sequencial ou hierárquico) integrados em um único executável. |
| Conversa em Grupo (GroupChat) | "Bate-papo multiagente do AutoGen" | Uma conversa gerenciada entre N agentes com um seletor de orador. |
| Equipe (Team - Agno) | "Agno multiagente" | Modo de rota / coordenação / colaboração sobre um conjunto de agentes. |
| Grafo de Estado (StateGraph) | "Grafo do LangGraph" | Abstração de estado tipado, nós, arestas condicionais e checkpointer. |
Leituras Adicionais
- LangGraph documentation — StateGraph, checkpointers, interrupções, viagem no tempo.
- CrewAI documentation — Equipes, Fluxos, Agentes, Tarefas, Processos.
- AutoGen documentation — ConversableAgent, GroupChat, equipes, ferramentas.
- Agno documentation — Agent, Team, Workflow, armazenamento, memória.
- Anthropic — Building effective agents (Dec 2024) — biblioteca de padrões (encadeamento de prompts, roteamento, paralelização, orquestrador-trabalhadores, avaliador-otimizador) agnóstica de framework.
- Yao et al., "ReAct: Synergizing Reasoning and Acting" (ICLR 2023) — o loop que todo framework adorna.
- Wu et al., "AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation" (2023) — artigo de design do AutoGen.
- Park et al., "Generative Agents: Interactive Simulacra of Human Behavior" (UIST 2023) — base de encenação sobre a qual se apoiam as pilhas de personas estilo CrewAI.
- Phase 11 · 16 (LangGraph) — o framework com o qual esta lição faz a comparação.
- Phase 11 · 19 (Reflexion) — um padrão que se mapeia de forma limpa no LangGraph, mas de forma desajeitada no CrewAI.
- Phase 11 · 22 (Production observability) — como instrumentar qualquer framework que você escolher.