Guia Rápido
Assista: Construindo Agents e Flows CrewAI com Coding Agent Skills
Seção intitulada “Assista: Construindo Agents e Flows CrewAI com Coding Agent Skills”Instale nossas coding agent skills (Claude Code, Codex, …) para colocar seus agentes de código para funcionar rapidamente com o CrewAI.
Você pode instalar com npx skills add crewaiinc/skills
Neste guia você vai criar um Flow que define um tópico de pesquisa, executa um crew com um agente (um pesquisador com busca na web) e termina com um relatório em Markdown no disco. Flows são a forma recomendada de estruturar apps em produção: eles controlam estado e ordem de execução, enquanto os agentes fazem o trabalho dentro da etapa do crew.
Se ainda não instalou o CrewAI, siga primeiro o guia de instalação.
Pré-requisitos
Seção intitulada “Pré-requisitos”- Ambiente Python e a CLI do CrewAI (veja instalação)
- Um LLM configurado com as chaves corretas — veja LLMs
- Uma chave de API do Serper.dev (
SERPER_API_KEY) para busca na web neste tutorial
Construa seu primeiro Flow
Seção intitulada “Construa seu primeiro Flow”- Crie um projeto Flow
No terminal, gere um projeto Flow (o nome da pasta usa sublinhados, ex.:
latest_ai_flow):CodeTerminal window crewai create flow latest-ai-flowcd latest_ai_flowIsso cria um app Flow em
src/latest_ai_flow/, incluindo um crew inicial emcrews/content_crew/que você substituirá por um crew de pesquisa com um único agente nos próximos passos. - Configure um agente em JSONC
Crie
src/latest_ai_flow/crews/content_crew/agents/researcher.jsonc(crie o diretórioagents/se necessário). Variáveis como{topic}são preenchidas a partir decrew.kickoff(inputs=...).{"role": "Pesquisador(a) Sênior de Dados em {topic}","goal": "Descobrir os desenvolvimentos mais recentes em {topic}","backstory": "Você é um pesquisador experiente que encontra as informações mais relevantes e apresenta tudo com clareza.","tools": ["SerperDevTool"],"settings": {"verbose": true}} - Configure a crew em `crew.jsonc`
Crie
src/latest_ai_flow/crews/content_crew/crew.jsonc:{"name": "Research Crew","agents": ["researcher"],"tasks": [{"name": "research_task","description": "Faça uma pesquisa aprofundada sobre {topic}. Use busca na web para obter informações recentes e confiáveis.","expected_output": "Um relatório em markdown com seções claras: tendências principais, ferramentas ou empresas relevantes e implicações. Entre 800 e 1200 palavras. Sem cercas de código em volta do documento inteiro.","agent": "researcher","output_file": "output/report.md","markdown": true}],"process": "sequential","verbose": true} - Carregue a crew JSON (`content_crew.py`)
Substitua o
content_crew.pygerado por um pequeno loader que transformacrew.jsoncem umaCrew.src/latest_ai_flow/crews/content_crew/content_crew.py from pathlib import Pathfrom crewai.project import load_crewdef kickoff_content_crew(inputs: dict):crew, default_inputs = load_crew(Path(__file__).with_name("crew.jsonc"))return crew.kickoff(inputs={**default_inputs, **inputs}) - Defina o Flow em `main.py`
Conecte o crew a um Flow: um passo
@start()define o tópico no estado e um@listenexecuta o crew. Ooutput_fileda tarefa continua gravandooutput/report.md.src/latest_ai_flow/main.py from pydantic import BaseModelfrom crewai.flow import Flow, listen, startfrom latest_ai_flow.crews.content_crew.content_crew import kickoff_content_crewclass ResearchFlowState(BaseModel):topic: str = ""report: str = ""class LatestAiFlow(Flow[ResearchFlowState]):@start()def prepare_topic(self, crewai_trigger_payload: dict | None = None):if crewai_trigger_payload:self.state.topic = crewai_trigger_payload.get("topic", "AI Agents")else:self.state.topic = "AI Agents"print(f"Tópico: {self.state.topic}")@listen(prepare_topic)def run_research(self):result = kickoff_content_crew(inputs={"topic": self.state.topic})self.state.report = result.rawprint("Crew de pesquisa concluído.")@listen(run_research)def summarize(self):print("Relatório em: output/report.md")def kickoff():LatestAiFlow().kickoff()def plot():LatestAiFlow().plot()if __name__ == "__main__":kickoff() - Variáveis de ambiente
Na raiz do projeto, no arquivo
.env, defina:SERPER_API_KEY— obtida em Serper.dev- As chaves do provedor de modelo conforme necessário — veja configuração de LLM
- Instalar e executarCode
Terminal window crewai installcrewai runO
crewai runexecuta o ponto de entrada do Flow definido no projeto (o mesmo comando dos crews; o tipo do projeto é"flow"nopyproject.toml). - Confira o resultado
Você deve ver logs do Flow e do crew. Abra
output/report.mdpara o relatório gerado (trecho):Code# Agentes de IA: panorama e tendências recentes## Resumo executivo…## Principais tendências- **Uso de ferramentas e orquestração** — …- **Adoção empresarial** — …## Implicações…O arquivo real será mais longo e refletirá resultados de busca ao vivo.
Como isso se encaixa
Seção intitulada “Como isso se encaixa”- Flow —
LatestAiFlowexecutaprepare_topic, depoisrun_research, depoissummarize. O estado (topic,report) fica no Flow. - Crew —
kickoff_content_crewcarregacrew.jsonce executa uma tarefa com um agente: o pesquisador usa Serper na web e escreve o relatório. - Artefato — O
output_fileda tarefa grava o relatório emoutput/report.md.
Para ir além em Flows (roteamento, persistência, human-in-the-loop), veja Construa seu primeiro Flow e Flows. Para crews sem Flow, veja Crews. Para um único Agent com kickoff() sem tarefas, veja Agents.
Consistência de nomes
Seção intitulada “Consistência de nomes”Os nomes em crew.jsonc devem coincidir com os arquivos e referências:
agents: ["researcher"]carregaagents/researcher.jsonctasks[].agent: "researcher"atribui a tarefa a esse agente
Implantação
Seção intitulada “Implantação”Envie seu Flow para o CrewAI AMP quando rodar localmente e o projeto estiver em um repositório GitHub. Na raiz do projeto:
crewai logincrewai deploy createcrewai deploy statuscrewai deploy logscrewai deploy pushcrewai deploy listcrewai deploy remove <deployment_id>