团队
什么是团队?¶
在crewAI中,团队代表一组协作的代理,共同完成一系列任务。每个团队定义了任务执行、代理协作和整体工作流程的策略。
团队属性¶
| 属性 | 参数 | 描述 |
|---|---|---|
| 任务 | tasks |
分配给团队的任务列表。 |
| 代理 | agents |
属于该团队的代理列表。 |
| 流程 (可选) | process |
团队遵循的流程(例如,顺序、层次)。默认为sequential。 |
| 详细 (可选) | verbose |
执行期间的日志详细级别。默认为False。 |
| 管理LLM (可选) | manager_llm |
在层次流程中,管理代理使用的语言模型。在使用层次流程时必需。 |
| 函数调用LLM (可选) | function_calling_llm |
如果传递,团队将使用此LLM为所有代理进行工具函数调用。每个代理可以有自己的LLM,这将覆盖团队用于函数调用的LLM。 |
| 配置 (可选) | config |
团队的可选配置设置,格式为Json或Dict[str, Any]。 |
| 最大RPM (可选) | max_rpm |
团队在执行期间遵守的最大每分钟请求量。默认为None。 |
| 语言 (可选) | language |
团队使用的语言,默认为英语。 |
| 语言文件 (可选) | language_file |
团队使用的语言文件路径。 |
| 内存 (可选) | memory |
用于存储执行记忆(短期、长期、实体记忆)。默认为False。 |
| 缓存 (可选) | cache |
指定是否使用缓存来存储工具执行的结果。默认为True。 |
| 嵌入器 (可选) | embedder |
团队使用的嵌入器配置。目前主要用于内存。默认为{"provider": "openai"}。 |
| 完整输出 (可选) | full_output |
团队是否应返回包含所有任务输出的完整输出,还是仅返回最终输出。默认为False。 |
| 步骤回调 (可选) | step_callback |
每个代理每一步后调用的函数。可用于记录代理的操作或执行其他操作;不会覆盖代理特定的step_callback。 |
| 任务回调 (可选) | task_callback |
每个任务完成后调用的函数。用于监控或任务执行后的其他操作。 |
| 共享团队 (可选) | share_crew |
是否希望与crewAI团队共享完整的团队信息和执行,以改进库,并允许我们训练模型。 |
| 输出日志文件 (可选) | output_log_file |
是否希望有一个包含完整团队输出和执行的文件。可以使用True设置,它将默认为当前所在的文件夹,并命名为logs.txt,或者传递一个包含完整路径和文件名的字符串。 |
| 管理代理 (可选) | manager_agent |
manager设置一个将用作管理的自定义代理。 |
| 管理回调 (可选) | manager_callbacks |
manager_callbacks接受一个回调处理程序列表,在层次流程中使用时由管理代理执行。 |
| 提示文件 (可选) | prompt_file |
团队使用的提示JSON文件路径。 |
| 规划 (可选) | planning |
为团队添加规划能力。在每次团队迭代之前激活,所有团队数据将发送到AgentPlanner,该规划器将规划任务,并将此计划添加到每个任务描述中。 |
| 规划LLM (可选) | planning_llm |
规划过程中AgentPlanner使用的语言模型。 |
团队最大RPM
max_rpm属性设置了团队可以执行的最大每分钟请求量,以避免速率限制,并且如果设置,将覆盖单个代理的max_rpm设置。
团队输出¶
理解团队输出
crewAI框架中团队的输出封装在CrewOutput类中。
这个类提供了一种结构化的方式来访问团队执行的结果,包括各种格式,如原始字符串、JSON和Pydantic模型。
CrewOutput包括最终任务输出、令牌使用情况和各个任务输出的结果。
团队输出属性¶
| 属性 | 参数 | 类型 | 描述 |
|---|---|---|---|
| 原始 | raw |
str |
团队的原始输出。这是输出的默认格式。 |
| Pydantic | pydantic |
Optional[BaseModel] |
表示团队结构化输出的Pydantic模型对象。 |
| JSON字典 | json_dict |
Optional[Dict[str, Any]] |
表示团队JSON输出的字典。 |
| 任务输出 | tasks_output |
List[TaskOutput] |
TaskOutput对象列表,每个对象代表团队中一个任务的输出。 |
| 令牌使用 | token_usage |
Dict[str, Any] |
令牌使用情况的摘要,提供对语言模型执行期间性能的洞察。 |
团队输出方法和属性¶
| 方法/属性 | 描述 |
|---|---|
| json | 如果输出格式为JSON,则返回团队输出的JSON字符串表示。 |
| to_dict | 将JSON和Pydantic输出转换为字典。 |
| str | 返回团队输出的字符串表示,优先考虑Pydantic,然后是JSON,最后是原始。 |
访问团队输出¶
一旦团队执行完毕,其输出可以通过Crew对象的output属性访问。CrewOutput类提供了各种与输出交互和展示的方式。
示例¶
# 示例团队执行
crew = Crew(
agents=[research_agent, writer_agent],
tasks=[research_task, write_article_task],
verbose=True
)
crew_output = crew.kickoff()
# 访问团队输出
print(f"原始输出: {crew_output.raw}")
if crew_output.json_dict:
print(f"JSON输出: {json.dumps(crew_output.json_dict, indent=2)}")
if crew_output.pydantic:
print(f"Pydantic输出: {crew_output.pydantic}")
print(f"任务输出: {crew_output.tasks_output}")
print(f"令牌使用: {crew_output.token_usage}")
内存利用¶
团队可以利用内存(短期、长期和实体内存)来增强其执行和学习能力。这个特性允许团队存储和回忆执行记忆,帮助决策和任务执行策略。
缓存利用¶
缓存可以用来存储工具执行的结果,通过减少重复执行相同任务的需要,使过程更加高效。
团队使用指标¶
团队执行后,您可以通过usage_metrics属性查看所有任务执行的语言模型(LLM)使用指标。这提供了对操作效率和改进领域的洞察。
# 访问团队的用量指标
crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
crew.kickoff()
print(crew.usage_metrics)
团队执行流程¶
- 顺序流程:任务按顺序执行,允许线性工作流程。
- 层次流程:管理代理协调团队,委派任务并在继续之前验证结果。注意:对于此流程,需要
manager_llm或manager_agent,这对于验证流程至关重要。
启动团队¶
一旦您的团队组建完成,使用kickoff()方法启动工作流程。这将根据定义的流程开始执行过程。
启动团队的不同方式¶
一旦您的团队组建完成,使用适当的启动方法启动工作流程。CrewAI提供了多种方法来更好地控制启动过程:kickoff()、kickoff_for_each()、kickoff_async()和kickoff_for_each_async()。
kickoff():根据定义的流程开始执行过程。kickoff_for_each():为每个代理单独执行任务。kickoff_async():异步启动工作流程。kickoff_for_each_async():异步地为每个代理单独执行任务。
# 开始团队的任务执行
result = my_crew.kickoff()
print(result)
# 使用kickoff_for_each的示例
inputs_array = [{'topic': 'AI in healthcare'}, {'topic': 'AI in finance'}]
results = my_crew.kickoff_for_each(inputs=inputs_array)
for result in results:
print(result)
# 使用kickoff_async的示例
inputs = {'topic': 'AI in healthcare'}
async_result = my_crew.kickoff_async(inputs=inputs)
print(async_result)
# 使用kickoff_for_each_async的示例
inputs_array = [{'topic': 'AI in healthcare'}, {'topic': 'AI in finance'}]
async_results = my_crew.kickoff_for_each_async(inputs=inputs_array)
for async_result in async_results:
print(async_result)
这些方法提供了管理团队内任务执行方式的灵活性,允许根据您的需求进行同步和异步工作流程。
从特定任务重新播放¶
您现在可以使用我们的CLI命令replay从特定任务重新播放。
CrewAI中的重新播放功能允许您使用命令行界面(CLI)从特定任务重新播放。通过运行命令crewai replay -t <task_id>,您可以指定重新播放过程的task_id。
启动将为您保存最新的启动返回的任务输出,以便您能够从特定任务重新播放。
使用CLI从特定任务重新播放¶
要使用重新播放功能,请按照以下步骤操作:
- 打开您的终端或命令提示符。
- 导航到您的CrewAI项目所在的目录。
- 运行以下命令:
要查看最新的启动任务ID,请使用:
然后,要从特定任务重新播放,请使用:
这些命令允许您从最新的启动任务重新播放,同时保留先前执行任务的上下文。