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 的可选配置设置,以 Json 或 Dict[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)