文档索引
获取完整文档索引: https://docs.crewai.com.cn/llms.txt
在深入了解之前,请使用此文件来浏览所有可用页面。
本指南介绍了如何在 crew.py 文件中使用注解来正确引用智能体 (agents)、任务 (tasks) 和其他组件。
CrewAI 框架中的注解用于修饰类和方法,为工作组 (crew) 的各个组件提供元数据和功能。这些注解有助于组织和结构化代码,使其更易于阅读和维护。
可用注解
CrewAI 框架提供以下注解:
@CrewBase:用于修饰主工作组类。
@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 注解用于修饰主工作组类。该类通常包含用于创建智能体、任务以及工作组本身的配置和方法。
@CrewBase 的功能不仅仅是注册该类:
- 配置引导 (Configuration bootstrapping): 在类文件旁查找
agents_config 和 tasks_config(默认为 config/agents.yaml 和 config/tasks.yaml),在实例化时加载它们;如果文件缺失,则安全回退为空字典。
- 装饰器协调 (Decorator orchestration): 保留所有标记为
@agent、@task、@before_kickoff 或 @after_kickoff 的方法的备忘引用,确保它们在每个工作组中只被实例化一次,并按声明顺序执行。
- 钩子绑定 (Hook wiring): 自动将预设的启动钩子附加到
@crew 方法返回的 Crew 对象上,使其在 .kickoff() 前后运行。
- MCP 集成: 当类定义了
mcp_server_params 时,get_mcp_tools() 会延迟启动 MCP 服务器适配器,加载已声明的工具,并在启动后的内部钩子中停止该适配器。有关适配器配置的详细信息,请参阅 MCP 概述。
@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
def crew(self) -> Crew:
"""Creates the LinkedinProfile crew"""
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.sequential,
verbose=True
)
@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 文件中的 llm 和 tools 如何与 Python 类中被 @llm 和 @tool 修饰的方法相对应。最佳实践
- 命名一致性:为你的方法使用清晰且一致的命名规范。例如,智能体方法可以以其角色命名(如
researcher, reporting_analyst)。
- 环境变量:使用环境变量来处理 API 密钥等敏感信息。
- 灵活性:设计工作组时保持灵活性,以便轻松添加或移除智能体和任务。
- YAML 与代码对应:确保 YAML 文件中的名称和结构与 Python 代码中被注解修饰的方法正确对应。
遵循这些准则并正确使用注解,你可以使用 CrewAI 框架创建结构清晰且易于维护的工作组。