Saiba como criar e gerenciar fluxos de trabalho de IA usando CrewAI Flows.
generate_city
e generate_fun_fact
. A tarefa generate_city
é o ponto de início do Flow, enquanto a tarefa generate_fun_fact
fica escutando o resultado da tarefa generate_city
.
Cada instância de Flow recebe automaticamente um identificador único (UUID) em seu estado, que auxilia no rastreamento e gerenciamento das execuções. O estado também pode armazenar dados adicionais (como a cidade gerada e a curiosidade) que permanecem durante toda a execução do flow.
Ao executar o Flow, ele irá:
.env
para armazenar sua OPENAI_API_KEY
. Essa chave é necessária para autenticar as requisições à API da OpenAI.
@start()
é utilizado para marcar um método como ponto inicial de um Flow. Quando um Flow é iniciado, todos os métodos decorados com @start()
são executados em paralelo. É possível ter múltiplos métodos start em um Flow, e todos eles serão executados quando o Flow iniciar.
@listen()
é utilizado para marcar um método como ouvinte da saída de outra tarefa do Flow. O método decorado com @listen()
será executado quando a tarefa especificada emitir uma saída. O método pode acessar a saída da tarefa à qual está escutando como argumento.
@listen()
pode ser usado de várias formas:
kickoff()
retorna a saída desse método final.
Veja como acessar a saída final:
second_method
é o último método a ser concluído, logo sua saída será a saída final do Flow.
O método kickoff()
retorna essa saída, que é impressa no console. O método plot()
irá gerar o arquivo HTML para visualizar o fluxo.
first_method
quanto por second_method
.
Após o término da execução, é possível acessar o estado final e observar as atualizações realizadas por esses métodos.
Ao garantir que a saída do método final seja retornada e oferecer acesso ao estado, o CrewAI Flows facilita a integração dos resultados dos seus workflows de IA em aplicações maiores,
além de permitir o gerenciamento e o acesso ao estado durante toda a execução do Flow.
state
da classe Flow
.
Essa abordagem oferece flexibilidade, permitindo que o desenvolvedor adicione ou modifique atributos do estado conforme necessário sem precisar definir um esquema rígido.
Mesmo com estados não estruturados, os flows do CrewAI geram e mantêm automaticamente um identificador único (UUID) para cada instância de estado.
id
é gerado e preservado automaticamente durante toda a execução do flow. Não é necessário gerenciá-lo ou defini-lo manualmente, e ele permanecerá mesmo ao atualizar o estado com novos dados.
Pontos-Chave:
self.state
sem restrições pré-definidas.BaseModel
da Pydantic, os desenvolvedores podem definir a forma exata do estado, melhorando a validação e fornecendo auto-complete nos ambientes de desenvolvimento.
Cada estado nos flows do CrewAI recebe automaticamente um identificador único (UUID) para ajudar no rastreamento e gerenciamento. Esse ID é gerado e mantido automaticamente pelo sistema de flows.
ExampleState
deixa claro a estrutura do estado, aumentando a legibilidade e a manutenção do código.id
é adicionado automaticamente se não estiver presenteor
or_
nos flows permite escutar múltiplos métodos e acionar o método ouvinte quando qualquer um dos métodos especificados gerar uma saída.
logger
será acionado pela saída tanto do start_method
quanto do second_method
.
A função or_
serve para escutar vários métodos e disparar o método ouvinte quando qualquer um emitir um resultado.
and
and_
nos flows permite escutar múltiplos métodos e acionar o método ouvinte apenas quando todos os métodos especificados emitirem uma saída.
logger
só será disparado quando ambos start_method
e second_method
emitirem uma saída.
A função and_
é usada para escutar vários métodos e acionar o método ouvinte apenas quando todas as condições forem atendidas.
@router()
nos flows permite definir lógica de roteamento condicional baseada na saída de um método.
Você pode especificar diferentes rotas conforme a saída do método, permitindo controlar o fluxo de execução de forma dinâmica.
start_method
gera um valor booleano aleatório e armazena no estado.
O second_method
usa o decorador @router()
para decidir o roteamento conforme o valor booleano.
Se o valor for True
, retorna "success"
, senão retorna "failed"
.
Os métodos third_method
e fourth_method
escutam a saída do second_method
e executam com base no valor retornado.
Ao executar esse Flow, a saída será diferente dependendo do valor booleano aleatório gerado pelo start_method
.
MarketAnalysis
) garante segurança de tipos e dados estruturados em todo o flow.
MarketResearchState
) mantém o contexto entre as etapas e armazena entradas e saídas.
WebsiteSearchTool
) para potencializar suas habilidades.
poem_crew
, já funcional. Você pode usar essa crew como modelo, copiando, colando e editando para criar outras crews.
crewai create flow name_of_flow
, você verá uma estrutura parecida com:
Diretório/Arquivo | Descrição |
---|---|
name_of_flow/ | Diretório raiz do flow. |
├── crews/ | Contém diretórios para crews específicas. |
│ └── poem_crew/ | Diretório da “poem_crew” com configurações e scripts. |
│ ├── config/ | Arquivos de configuração da “poem_crew”. |
│ │ ├── agents.yaml | YAML que define os agentes da “poem_crew”. |
│ │ └── tasks.yaml | YAML que define as tarefas da “poem_crew”. |
│ ├── poem_crew.py | Script da funcionalidade da “poem_crew”. |
├── tools/ | Ferramentas adicionais usadas no flow. |
│ └── custom_tool.py | Implementação de ferramenta customizada. |
├── main.py | Script principal do flow. |
├── README.md | Descrição do projeto e instruções. |
├── pyproject.toml | Arquivo de configurações e dependências do projeto. |
└── .gitignore | Arquivos e pastas a serem ignorados no controle de versão. |
crews
, você pode definir múltiplas crews. Cada crew tem sua própria pasta, com arquivos de configuração e o arquivo de definição da crew. Por exemplo, a pasta poem_crew
contém:
config/agents.yaml
: Define os agentes da crew.config/tasks.yaml
: Define as tarefas da crew.poem_crew.py
: Contém a definição da crew, incluindo agentes, tarefas, etc.poem_crew
para criar outras crews.
main.py
main.py
, você cria seu flow e conecta as crews. É possível definir o fluxo usando a classe Flow
e os decoradores @start
e @listen
para definir a ordem de execução.
Veja um exemplo de como conectar a poem_crew
no arquivo main.py
:
PoemFlow
define um fluxo que gera a quantidade de frases, usa a PoemCrew
para gerar um poema e, depois, salva o poema em um arquivo. O flow inicia com o método kickoff()
, e o gráfico é gerado pelo método plot()
.
plot()
plot()
do objeto. Isso criará um arquivo HTML com o plot interativo do seu flow.
my_flow_plot.html
no diretório atual. Abra esse arquivo em um navegador para visualizar o plot interativo.
plot()
. Basta abrir o arquivo no navegador para explorar o workflow.
plot()
ou a linha de comando, você obtém uma visão visual dos workflows, benefício tanto para desenvolvimento quanto para apresentação.
kickoff()
:
crewai run
:
type = "flow"
no pyproject.toml) e executa conforme o esperado. Esse é o método recomendado para executar flows pelo terminal.
Por compatibilidade retroativa, também é possível usar:
crewai run
é agora o preferido, pois funciona tanto para crews quanto para flows.