跳到主要内容

CrewAI Crews

什么是 Crew?

在 crewAI 中,crew 代表着一个协作的代理组,共同合作完成一系列任务。每个 crew 定义了任务执行策略、代理协作以及整体工作流程。

Crew 属性

属性描述
Tasks分配给 crew 的任务列表。
Agents属于 crew 的代理列表。
Process (可选)crew 遵循的流程(例如顺序、分层等)。
Verbose (可选)执行过程中日志记录的详细程度。
Manager LLM (可选)分层流程中经理代理使用的语言模型。在使用分层流程时必需。
Function Calling LLM (可选)如果传递,crew 将使用此 LLM 为所有代理进行函数调用。每个代理可以拥有自己的 LLM,这将覆盖 crew 的函数调用 LLM。
Config (可选)crew 的可选配置设置,以 JsonDict[str, Any] 格式。
Max RPM (可选)crew 在执行过程中遵循的每分钟最大请求数。
Language (可选)crew 使用的语言,默认为英语。
Language File (可选)用于 crew 的语言文件路径。
Memory (可选)用于存储执行记忆(短期、长期、实体记忆)的内存。
Cache (可选)指定是否使用缓存来存储工具执行的结果。
Embedder (可选)crew 使用的嵌入器配置。目前主要由内存使用。
Full Output (可选)crew 是否应返回所有任务输出的完整输出,或仅返回最终输出。
Step Callback (可选)在每个代理的每个步骤之后调用的函数。可用于记录代理的操作或执行其他操作;不会覆盖代理特定的 step_callback
Task Callback (可选)在每个任务完成后调用的函数。用于监视或任务执行后的其他操作。
Share Crew (可选)是否要与 crewAI 团队分享完整的 crew 信息和执行,以改进库,并允许我们训练模型。
Output Log File (可选)是否要有一个包含完整 crew 输出和执行的文件。可以使用 True 进行设置,默认为当前文件夹,文件名为 logs.txt;也可以传递包含完整路径和文件名的字符串。

!!! note "Crew Max RPM" max_rpm 属性设置 crew 可执行的每分钟最大请求数,以避免速率限制,并将覆盖个别代理的 max_rpm 设置。

创建 Crew

在组装 crew 时,您需要结合具有互补角色和工具的代理,分配任务,并选择一个指导其执行顺序和交互的流程。

示例:组装 Crew

from crewai import Crew, Agent, Task, Process
from langchain_community.tools import DuckDuckGoSearchRun

# 定义具有特定角色和工具的代理
researcher = Agent(
role='高级研究分析师',
goal='发现创新的 AI 技术',
tools=[DuckDuckGoSearchRun()]
)

writer = Agent(
role='内容撰稿人',
goal='撰写有关 AI 发现的引人入胜的文章',
verbose=True
)

# 为代理创建任务
research_task = Task(
description='识别突破性的 AI 技术',
agent=researcher
)
write_article_task = Task(
description='撰写关于最新 AI 技术的文章',
agent=writer
)

# 使用顺序流程组装 crew
my_crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_article_task],
process=Process.sequential,
full_output=True,
verbose=True,
)

内存利用

Crew 可以利用内存(短期、长期和实体记忆)来增强其执行和随时间的学习。此功能允许 crew 存储和回忆执行记忆,有助于决策和任务执行策略。

缓存利用

可以使用缓存来存储工具执行的结果,通过减少重新执行相同任务的需求,使流程更加高效。

Crew 使用指标

在执行机组后,您可以访问 usage_metrics 属性,以查看机组执行的所有任务的语言模型(LLM)使用度量。这为您提供了关于运营效率和改进领域的见解。

# 访问机组的使用度量
crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
crew.kickoff()
print(crew.usage_metrics)

机组执行流程

  • 顺序流程:任务按顺序执行,允许线性工作流程。
  • 分层流程:经理代理协调机组,委派任务并在继续之前验证结果。注意:此流程需要一个 manager_llm,对于验证流程流畅至关重要。

启动机组

一旦您的机组组装完毕,使用 kickoff() 方法启动工作流程。这将根据定义的流程流程启动执行过程。

# 启动机组的任务执行
result = my_crew.kickoff()
print(result)