Usando Anotações no crew.py
Este guia explica como utilizar anotações para referenciar corretamente agentes, tarefas e outros componentes em um arquivo crew.py clássico.
Introdução
Seção intitulada “Introdução”As anotações no framework CrewAI são utilizadas para decorar classes e métodos, fornecendo metadados e funcionalidades para diversos componentes do seu crew. Em projetos clássicos Python/YAML, elas organizam o código que carrega config/agents.yaml, config/tasks.yaml e retorna o objeto Crew.
Anotações Disponíveis
Seção intitulada “Anotações Disponíveis”O framework CrewAI fornece as seguintes anotações:
@CrewBase: Usada para decorar a classe principal do crew.@agent: Decora métodos que definem e retornam objetos Agent.@task: Decora métodos que definem e retornam objetos Task.@crew: Decora o método que cria e retorna o objeto Crew.@llm: Decora métodos que inicializam e retornam objetos Language Model.@tool: Decora métodos que inicializam e retornam objetos Tool.@callback: Utilizada para definir métodos de callback.@output_json: Utilizada para métodos que retornam dados em JSON.@output_pydantic: Utilizada para métodos que retornam modelos Pydantic.@cache_handler: Utilizada para definição de métodos de manipulação de cache.
Exemplos de Uso
Seção intitulada “Exemplos de Uso”Vamos passar por exemplos de como utilizar essas anotações:
1. Classe Base do Crew
Seção intitulada “1. Classe Base do Crew”@CrewBaseclass LinkedinProfileCrew(): """LinkedinProfile crew""" agents_config = 'config/agents.yaml' tasks_config = 'config/tasks.yaml'A anotação @CrewBase é usada para decorar a classe principal do crew. Esta classe geralmente contém as configurações e métodos para criação de agentes, tarefas e do próprio crew.
2. Definição de Tool
Seção intitulada “2. Definição de Tool”@tooldef myLinkedInProfileTool(self): return LinkedInProfileTool()A anotação @tool é usada para decorar métodos que retornam objetos tool. Essas ferramentas podem ser usadas por agentes para executar tarefas específicas.
3. Definição de LLM
Seção intitulada “3. Definição de LLM”@llmdef groq_llm(self): api_key = os.getenv('api_key') return ChatGroq(api_key=api_key, temperature=0, model_name="mixtral-8x7b-32768")A anotação @llm é usada para decorar métodos que inicializam e retornam objetos Language Model. Esses LLMs são utilizados pelos agentes para tarefas de processamento de linguagem natural.
4. Definição de Agente
Seção intitulada “4. Definição de Agente”@agentdef researcher(self) -> Agent: return Agent( config=self.agents_config['researcher'] )A anotação @agent é usada para decorar métodos que definem e retornam objetos Agent.
5. Definição de Tarefa
Seção intitulada “5. Definição de Tarefa”@taskdef research_task(self) -> Task: return Task( config=self.tasks_config['research_linkedin_task'], agent=self.researcher() )A anotação @task é usada para decorar métodos que definem e retornam objetos Task. Esses métodos especificam a configuração da tarefa e o agente responsável por ela.
6. Criação do Crew
Seção intitulada “6. Criação do Crew”@crewdef crew(self) -> Crew: """Creates the LinkedinProfile crew""" return Crew( agents=self.agents, tasks=self.tasks, process=Process.sequential, verbose=True )A anotação @crew é usada para decorar o método que cria e retorna o objeto Crew. Este método reúne todos os componentes (agentes e tarefas) em um crew funcional.
Configuração YAML Clássica
Seção intitulada “Configuração YAML Clássica”Em projetos clássicos, as configurações dos agentes geralmente são armazenadas em um arquivo YAML. Veja um exemplo de como o arquivo agents.yaml pode ser estruturado para o agente researcher:
researcher: role: > LinkedIn Profile Senior Data Researcher goal: > Uncover detailed LinkedIn profiles based on provided name {name} and domain {domain} Generate a Dall-E image based on domain {domain} backstory: > You're a seasoned researcher with a knack for uncovering the most relevant LinkedIn profiles. Known for your ability to navigate LinkedIn efficiently, you excel at gathering and presenting professional information clearly and concisely. allow_delegation: False verbose: True llm: groq_llm tools: - myLinkedInProfileTool - mySerperDevTool - myDallEToolEsta configuração YAML corresponde ao agente researcher definido na classe LinkedinProfileCrew. A configuração especifica o papel do agente, objetivo, contexto e outras propriedades, como o LLM e as tools que ele utiliza.
Repare como os campos llm e tools no arquivo YAML correspondem aos métodos decorados com @llm e @tool na classe Python.
Boas Práticas
Seção intitulada “Boas Práticas”- Nomenclatura Consistente: Utilize nomenclatura clara e consistente para seus métodos. Por exemplo, métodos de agentes podem ser nomeados de acordo com suas funções (ex: researcher, reporting_analyst).
- Variáveis de Ambiente: Utilize variáveis de ambiente para informações sensíveis como chaves de API.
- Flexibilidade: Estruture seu crew de forma flexível, permitindo fácil adição ou remoção de agentes e tarefas.
- Correspondência YAML-Código: Em projetos clássicos, assegure que os nomes e estruturas nos arquivos YAML correspondam corretamente aos métodos decorados em seu código Python.
Seguindo essas orientações e utilizando corretamente as anotações, você conseguirá manter crews clássicos bem estruturados. Para novas crews, prefira a estrutura JSON-first em Crews.