↩ Comparativo · Benchmark — avaliações
FRAMEWORK_EVAL — CrewAI
Metadados
- Repositório / versão avaliada: github.com/crewAIInc/crewAI · v1.15.6 (fork GHDaru, commit b3aaaab) — monorepo com 6 pacotes (
crewai,crewai-core,crewai-tools~79 tools,cli,crewai-files,devtools) - Linguagem / stack: Python · Licença: MIT (com suíte comercial AMP) · Data: 2026-07-24 (rodada frameworks-1)
- Filosofia declarada: multi-agente por papéis (Crews: role/goal/backstory + tasks) + orquestração event-driven (Flows)
- Origem: vendor único (CrewAI Inc.), caminho ergonômico convergindo para o SaaS AMP
Eixo A — Primitivas (18/18)
A1. Loop / orquestração — 3
Executor 100% próprio — zero LangChain (crew_agent_executor.py, 1.648 linhas): dispatch duplo — tool-calling nativo quando o LLM suporta, fallback para loop ReAct clássico (parse de Thought:/Action: com json_repair), com fallback cruzado em erro. Três primitivas: Crews (sequential/hierarchical), Flows (grafo event-driven @start/@listen/@router, runtime de 3.771 linhas) e LiteAgent (Agent.kickoff() solo). Executor experimental em state machine (3.232 linhas) como futuro.
A2. Estado e durabilidade — 3
Flow state Pydantic ou dict com @persist (SQLite, após cada método) e resume cross-processo (Flow.from_pending() + resume(feedback)). Acima disso, um sistema novo de checkpoint universal por evento (src/crewai/state/): ~50 tipos de evento disparam snapshot do RuntimeState inteiro, com fork e restore — e uma TUI de checkpoints na CLI. Memória unificada (unified_memory.py: remember/recall/forget/scope) — os antigos Short/Long/Entity Memory foram removidos.
A3. Tools e schemas — 3
Pydantic puro (args_schema gerado por introspecção via create_model), com governança real de execução: cache_function, max_usage_count, result_as_answer (curto-circuita o loop), reprompt em ValidationError. Catálogo crewai-tools com 79 diretórios (busca, scraping, RAG por tipo de arquivo, bancos, sandboxes E2B/Daytona, multimodal). Interop bidirecional com LangChain como opcional.
A4. Multi-agente — 3
Delegação implementada como tools comuns (DelegateWorkTool/AskQuestionTool): matching de role em texto livre cria uma Task sintética e chama o coworker recursivamente (robusto: role errado devolve erro i18n com a lista, não exceção — mas frágil por depender do LLM acertar o nome). Modo hierárquico com manager sintetizado (e proibido de ter tools próprias).
A5. Human-in-the-loop — 3
Três superfícies: Task(human_input=True) (re-roda o loop até aprovação), decorator @human_feedback em Flows (pausa persistida em SQLite e retomada em outro processo), e hooks de tool/LLM com request_human_input. HumanInputProvider é Protocol — plugável para Slack/HTTP.
A6. Streaming / eventos — 3
Event bus singleton com 20 módulos de tipos de evento, handlers sync/async, grafo de dependências entre handlers e modo replay() (base do checkpoint). Streaming de tokens real (kickoff(stream=True) → output iterável; LLMThinkingChunk para reasoning).
Eixo B — Fronteiras
- Impõe (rígido):
role/goal/backstoryobrigatórios sem default — não existe agente sem persona;Taskexigedescription+expected_output. A metáfora de RPG é estrutural. Escapes existem (LiteAgent, Flows com Python puro), mas ignoram metade do framework. - Deixa aberto: executor trocável,
HumanInputProvider/FlowPersistence/checkpoint provider como ABCs, hooks before/after de LLM e tool, guardrails custom, i18n de todos os prompts. - Lock-in: LangChain removido; LiteLLM rebaixado a fallback opcional (17 provedores com clientes nativos próprios). O lock-in real é comercial: tracing first-party aponta para o backend AMP, CLI cheia de
login/deploy/org/enterprise, telemetria anônima por default (desligável). O framework roda 100% offline — mas o caminho ergonômico leva ao plano pago.
Eixo C — Protocolos
| MCP client | MCP server | A2A | ACP | SKILL.md | AGENTS.md |
|---|---|---|---|---|---|
✅ obrigatório (3 transportes, cache, retry, filtros, Agent(mcps=[...])) |
— | ✅ client E server (AgentCard completo, JWS, gRPC/REST; extra [a2a]) |
— | ✅ (skills com progressive disclosure + CLI create/install/publish) | ✅ gerado por crewai create em todo projeto novo |
Achado para o cap. 17: o CrewAI quebra o "A2A é aposta de um só" — é o segundo implementador medido, e o primeiro framework, com client e server. E o template de AGENTS.md auto-gerado (com seção "Patterns to NEVER use") é adoção ativa do padrão, não passiva.
Eixo D — Produção (11/12)
D1. Observabilidade — 2
Telemetria OTel anônima própria + tracing rico via event bus — mas o destino first-party é o backend AMP (gate CREWAI_TRACING_ENABLED); sem exporter OTel genérico de traces de agente. Compensa com 18 integrações documentadas plugando via BaseEventListener (o desenho certo).
D2. Testes e evals — 3
313 arquivos de teste, 598 cassettes VCR, pytest-randomly (ordem aleatória), mypy strict, ruff com bandit, pip-audit. Evals em duas camadas (crewai test + AgentEvaluator com 6 métricas LLM-as-judge) — ainda sob experimental/.
D3. Ergonomia — 3
crewai create crew → 2 YAMLs de ~18 linhas + ~48 linhas de Python decorado; variantes 100% declarativas (crew em JSONC, flow em YAML). ~10 linhas de código estrutural até uma crew útil.
D4. Ecossistema — 3
CLI com ~45 comandos (incluindo TUIs de run/memória/checkpoint, train, replay, chat); templates; marketplace de skills (inclusive plugin para Claude Code); adapters para LangGraph e OpenAI Agents SDK.
Síntese
- Totais: A 18/18 · D 11/12
- Perfil: o framework certo para multi-agente por papéis com prototipagem rápida — e o CrewAI de 2026 é outro produto: sem LangChain, LLM clients nativos, checkpoint universal, MCP obrigatório e A2A bidirecional. Engenharia séria (cassettes, mypy strict) sob uma fronteira conceitual deliberadamente rígida.
- O que roubar: checkpoint-por-evento com replay do bus; grafo de dependências entre event handlers;
AGENTS.mdauto-gerado em cada projeto novo com anti-padrões da versão. - Teste decisivo: difícil sem ele: crew hierárquica com delegação, memória unificada e HITL persistido em ~70 linhas. Difícil com ele: qualquer agente que não caiba na ontologia papel/tarefa (o escape via Flows abandona metade do valor).
- Riscos: dois executores + dois loops + duas rotas de LLM coexistindo (superfície de manutenção); módulos gigantes crescendo rápido; caminho de produção convergindo para o SaaS.