CrewAI: Como Criar Times de Agentes de IA com Papéis Definidos
Guia completo de CrewAI em Python — crie crews de agentes especializados que colaboram para completar tarefas complexas. Com exemplos reais de código, comparativo e casos de uso.
O conceito por trás do CrewAI
O CrewAI parte de uma premissa elegante: tarefas complexas são resolvidas melhor por especialistas colaborando do que por um generalista tentando fazer tudo sozinho.
Em vez de um único agente enorme tentando pesquisar, analisar, escrever e revisar ao mesmo tempo, você define uma crew — uma equipe de agentes especializados, cada um com:
- Um papel (researcher, writer, analyst, manager)
- Uma meta clara
- Uma história de contexto que define sua expertise
- Ferramentas específicas para seu trabalho
- Memória própria e compartilhada
Cada agente foca no que faz melhor. A crew colabora. O resultado final é significativamente mais rico do que o que um agente isolado produziria.
Referências oficiais: crewai.com | docs.crewai.com | github.com/crewAIInc/crewAI (30k+ ⭐)
Instalação
pip install crewai crewai-tools
# Para o CLI (opcional mas útil):
pip install 'crewai[tools]'
Com Ollama (modelos locais gratuitos para desenvolvimento):
pip install crewai langchain-ollama
ollama pull llama3
Os 4 componentes fundamentais
1. Agent — o especialista
from crewai import Agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o", temperature=0.3)
pesquisador = Agent(
role="Analista de Mercado de IA",
goal="Encontrar informações precisas e atualizadas sobre o mercado de agentes de IA",
backstory="""Você é um analista sênior com 10 anos de experiência em tecnologia.
Especialista em analisar tendências emergentes, identificar dados confiáveis e
sintetizar informações complexas em insights acionáveis para executivos.""",
verbose=True, # mostra raciocínio do agente
allow_delegation=False, # não pode delegar para outros
llm=llm,
tools=[ferramenta_busca, ferramenta_web] # veremos adiante
)
2. Task — o trabalho a ser feito
from crewai import Task
tarefa_pesquisa = Task(
description="""Pesquise o mercado global de agentes de IA em 2026.
Você deve encontrar:
1. Tamanho atual do mercado e projeções para 2027-2030
2. Os 5 principais players e suas propostas de valor
3. Casos de uso mais adotados por empresas
4. Barreiras de adoção mais comuns
Use fontes confiáveis: Gartner, McKinsey, a16z, relatórios das próprias empresas.
""",
expected_output="""Um relatório estruturado com:
- Resumo executivo (max 200 palavras)
- Dados de mercado com fontes citadas
- Análise de players
- Insights e tendências
Formato: Markdown""",
agent=pesquisador
)
3. Crew — a equipe
from crewai import Crew, Process
crew = Crew(
agents=[pesquisador, analista, redator],
tasks=[tarefa_pesquisa, tarefa_analise, tarefa_redacao],
process=Process.sequential, # ou Process.hierarchical
verbose=True,
memory=True # habilita memória compartilhada
)
4. Process — como os agentes colaboram
Sequential (padrão): cada agente completa sua tarefa antes do próximo começar. O output de cada tarefa alimenta a próxima.
Hierarchical: um agente gerente coordena os demais, delega tarefas e agrega resultados. Mais poderoso para tarefas complexas.
Exemplo completo: Crew de criação de conteúdo
import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, WebsiteSearchTool
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "sua_chave"
os.environ["SERPER_API_KEY"] = "sua_chave_serper" # busca web
llm = ChatOpenAI(model="gpt-4o")
ferramenta_busca = SerperDevTool()
ferramenta_web = WebsiteSearchTool()
# ── AGENTES ────────────────────────────────────────────
pesquisador = Agent(
role="Pesquisador de Conteúdo",
goal="Coletar fatos, dados e referências precisas sobre o tema dado",
backstory="""Jornalista investigativo com especialização em tecnologia.
Obcecado com precisão factual. Sempre cita fontes primárias.""",
tools=[ferramenta_busca, ferramenta_web],
llm=llm,
verbose=True
)
redator = Agent(
role="Redator Editorial Senior",
goal="Transformar pesquisa em artigos informativos e envolventes",
backstory="""Editor de publicações de tecnologia com 8 anos de experiência.
Escreve para executivos e profissionais de negócios.
Tem um estilo direto, sem jargão desnecessário, com exemplos práticos.""",
llm=llm,
verbose=True
)
revisor = Agent(
role="Editor de Revisão",
goal="Garantir qualidade editorial, precisão e clareza do conteúdo",
backstory="""Editor chefe com olho crítico para inconsistências,
fatos sem fonte e argumentos fracos. Sempre melhora sem perder a voz do autor.""",
llm=llm,
verbose=True
)
# ── TAREFAS ────────────────────────────────────────────
pesquisa = Task(
description="""Pesquise sobre: {tema}
Colete:
- Dados e estatísticas atuais (2025-2026)
- Casos reais de empresas usando isso
- Opiniões de especialistas reconhecidos
- Tendências e projeções
Cite todas as fontes com URLs.""",
expected_output="Relatório de pesquisa detalhado com fontes citadas",
agent=pesquisador
)
redacao = Task(
description="""Com base na pesquisa fornecida, escreva um artigo para o Tech Briefing.
Formato:
- Título impactante (max 70 chars)
- Lead de 2 parágrafos explicando por que importa
- 4-6 seções com subtítulos H2
- Conclusão com próximo passo claro
- Tom: profissional, direto, sem hype
- Comprimento: 1.200-1.500 palavras""",
expected_output="Artigo completo em Markdown",
agent=redator,
context=[pesquisa] # usa output da pesquisa
)
revisao = Task(
description="""Revise o artigo fornecido:
Verifique:
1. Precisão factual (todos os dados têm fonte?)
2. Clareza (qualquer executivo entenderia?)
3. Fluxo narrativo (o artigo tem começo, meio, fim?)
4. Afirmações sem base (remova ou justifique)
5. Redundâncias (corte o que não agrega)
Retorne o artigo revisado com uma lista de mudanças feitas.""",
expected_output="Artigo revisado + lista de mudanças",
agent=revisor,
context=[redacao]
)
# ── CREW ───────────────────────────────────────────────
crew_conteudo = Crew(
agents=[pesquisador, redator, revisor],
tasks=[pesquisa, redacao, revisao],
process=Process.sequential,
verbose=True,
memory=True
)
# Executando
resultado = crew_conteudo.kickoff(
inputs={"tema": "Como agentes de IA estão transformando atendimento ao cliente em 2026"}
)
print(resultado.raw)
Processo Hierárquico — o Gerente de Agentes
Para tarefas que exigem coordenação dinâmica, use Process.hierarchical:
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
gerente = Agent(
role="Gerente de Projeto",
goal="Coordenar a equipe para entregar análises de mercado completas e precisas",
backstory="""Líder experiente que decompõe problemas complexos,
delega para especialistas e garante que o resultado final seja coeso.""",
llm=ChatOpenAI(model="gpt-4o"),
allow_delegation=True # ESSENCIAL para modo hierárquico
)
crew = Crew(
agents=[gerente, pesquisador, analista, redator],
tasks=[tarefa_principal], # o gerente decompõe automaticamente
process=Process.hierarchical,
manager_agent=gerente,
memory=True,
verbose=True
)
O gerente recebe a tarefa, decompõe em subtarefas, delega para os agentes certos, coleta resultados e sintetiza a resposta final.
Memória no CrewAI
O CrewAI oferece 4 tipos de memória:
crew = Crew(
agents=[...],
tasks=[...],
memory=True, # habilita todos os tipos
# Configuração avançada:
# Short-term: contexto da execução atual (in-memory)
# Long-term: memória entre execuções (SQLite por padrão)
# Entity: lembra entidades específicas (pessoas, empresas)
# Contextual: memória semântica para recuperar contexto relevante
)
Para persistência entre execuções com embeddings:
from crewai.memory import LongTermMemory
from langchain_openai import OpenAIEmbeddings
crew = Crew(
agents=[...],
tasks=[...],
memory=True,
long_term_memory=LongTermMemory(
storage=SQLiteStorage(db_path="./crew_memory.db"),
embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}}
)
)
Ferramentas disponíveis (crewai-tools)
from crewai_tools import (
SerperDevTool, # Busca Google via Serper
WebsiteSearchTool, # RAG sobre qualquer site
FileReadTool, # Lê arquivos locais
CSVSearchTool, # Pesquisa em CSV com RAG
PDFSearchTool, # RAG em PDFs
CodeInterpreterTool, # Executa código Python
GithubSearchTool, # Pesquisa no GitHub
YoutubeVideoSearchTool, # Transcreve e busca em YouTube
)
Para criar ferramentas customizadas:
from crewai.tools import BaseTool
import requests
class VerificarEstoqueTool(BaseTool):
name: str = "verificar_estoque"
description: str = "Verifica a disponibilidade de um produto no estoque"
def _run(self, produto: str) -> str:
# Sua lógica aqui — chamada à API interna, banco de dados, etc.
resposta = requests.get(f"https://api.suaempresa.com/estoque/{produto}")
return resposta.json()
CrewAI vs. LangGraph vs. AutoGPT
Critério
CrewAI
LangGraph
AutoGPT
Paradigma
Equipes de agentes
Grafo de estados
Agente solo recursivo
Curva Python
Média
Alta
Baixa
Multi-agente
✅ Nativo
✅ Via subgraphs
⚠️ Experimental
Controle de fluxo
Alto
Total
Baixo
Memória
✅ 4 tipos
✅ Configurável
✅ Simples
Human-in-loop
✅
✅ Nativo
⚠️
Community
30k+ ⭐
34k+ ⭐
170k+ ⭐
Ideal para
Times de agentes com papéis
Agentes complexos com estado
Prototipagem rápida
Use CrewAI quando:
- Você precisa de múltiplos especialistas colaborando
- A tarefa tem fases naturais: pesquisa → análise → escrita → revisão
- Quer um processo hierárquico com gerente de agentes
- A equipe entende Python mas não quer gerenciar grafos manualmente
Use LangGraph quando:
- Precisa de controle granular sobre cada transição de estado
- O fluxo tem ciclos condicionais complexos
- Precisa de debugging detalhado por step
Recursos para aprender mais
- Documentação oficial: docs.crewai.com
- GitHub: github.com/crewAIInc/crewAI
- Exemplos: github.com/crewAIInc/crewAI-examples
- CrewAI Enterprise: crewai.com/enterprise (self-hosted + observabilidade)
- Curso DeepLearning.AI: "Multi AI Agent Systems with crewAI" (gratuito)
O CrewAI representa uma abordagem madura para o problema de multi-agência: em vez de um agente monolítico que tenta fazer tudo, times especializados que fazem o que cada um faz melhor. Para equipes técnicas que querem agentes em produção rápido, é o ponto de entrada mais eficiente do ecossistema Python.