跳转到主要内容
本指南解释了如何使用注解在 crew.py 文件中正确引用**智能体 (agents)**、**任务 (tasks)** 和其他组件。

简介

CrewAI 框架中的注解用于修饰类和方法,为团队的各种组件提供元数据和功能。这些注解有助于组织和构建您的代码,使其更具可读性和可维护性。

可用的注解

CrewAI 框架提供以下注解
  • @CrewBase:用于修饰主 Crew 类。
  • @agent:修饰定义并返回 Agent 对象的方法。
  • @task:修饰定义并返回 Task 对象的方法。
  • @crew:修饰创建并返回 Crew 对象的方法。
  • @llm:修饰初始化并返回语言模型对象的方法。
  • @tool:修饰初始化并返回 Tool 对象的方法。
  • @callback:用于定义回调方法。
  • @output_json:用于输出 JSON 数据的方法。
  • @output_pydantic:用于输出 Pydantic 模型的方法。
  • @cache_handler:用于定义缓存处理方法。

用法示例

让我们通过示例来了解如何使用这些注解

1. Crew 基类

@CrewBase
class LinkedinProfileCrew():
    """LinkedinProfile crew"""
    agents_config = 'config/agents.yaml'
    tasks_config = 'config/tasks.yaml'
@CrewBase 注解用于修饰主 Crew 类。此类通常包含用于创建智能体、任务和 Crew 本身的配置和方法。
@CrewBase 的作用不仅仅是注册类
  • 配置引导: 查找 agents_configtasks_config(默认路径为类文件旁边的 config/agents.yamlconfig/tasks.yaml),在实例化时加载它们,如果文件缺失则安全地回退到空字典。
  • 装饰器编排: 对每个标有 @agent@task@before_kickoff@after_kickoff 的方法保留记忆化引用,以便它们在每个 Crew 中只实例化一次,并按声明顺序执行。
  • 钩子绑定: 自动将保留的 kickoff 钩子附加到由 @crew 方法返回的 Crew 对象上,使它们在 .kickoff() 之前和之后运行。
  • MCP 集成: 当类定义 mcp_server_params 时,get_mcp_tools() 会延迟启动一个 MCP 服务器适配器,实例化声明的工具,并且一个内部的 after-kickoff 钩子会停止该适配器。有关适配器配置的详细信息,请参见 MCP 概述

2. 工具定义

@tool
def myLinkedInProfileTool(self):
    return LinkedInProfileTool()
@tool 注解用于修饰返回工具对象的方法。这些工具可以被智能体用来执行特定任务。

3. LLM 定义

@llm
def groq_llm(self):
    api_key = os.getenv('api_key')
    return ChatGroq(api_key=api_key, temperature=0, model_name="mixtral-8x7b-32768")
@llm 注解用于修饰初始化并返回语言模型对象的方法。这些 LLM 被智能体用于自然语言处理任务。

4. 智能体定义

@agent
def researcher(self) -> Agent:
    return Agent(
        config=self.agents_config['researcher']
    )
@agent 注解用于修饰定义并返回 Agent 对象的方法。

5. 任务定义

@task
def research_task(self) -> Task:
    return Task(
        config=self.tasks_config['research_linkedin_task'],
        agent=self.researcher()
    )
@task 注解用于修饰定义并返回 Task 对象的方法。这些方法指定任务配置和负责该任务的智能体。

6. Crew 创建

@crew
def crew(self) -> Crew:
    """Creates the LinkedinProfile crew"""
    return Crew(
        agents=self.agents,
        tasks=self.tasks,
        process=Process.sequential,
        verbose=True
    )
@crew 注解用于修饰创建并返回 Crew 对象的方法。该方法将所有组件(智能体和任务)组装成一个功能齐全的 Crew。

YAML 配置

智能体配置通常存储在 YAML 文件中。以下是研究员智能体的 agents.yaml 文件示例
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
        - myDallETool
此 YAML 配置对应于 LinkedinProfileCrew 类中定义的研究员智能体。配置指定了智能体的角色、目标、背景故事以及其他属性,例如它使用的 LLM 和工具。 请注意,YAML 文件中的 llmtools 如何对应于 Python 类中用 @llm@tool 修饰的方法。

最佳实践

  • 一致的命名:为您的方法使用清晰且一致的命名约定。例如,智能体方法可以根据其角色命名(例如,researcher、reporting_analyst)。
  • 环境变量:对敏感信息(如 API 密钥)使用环境变量。
  • 灵活性:通过允许轻松添加或删除智能体和任务来设计您的 Crew,使其具有灵活性。
  • YAML-代码对应:确保 YAML 文件中的名称和结构与 Python 代码中带注解的方法正确对应。
通过遵循这些指南并正确使用注解,您可以使用 CrewAI 框架创建结构良好且易于维护的 Crew。