CrewAI官网:https://www.crewai.com
Github:https://github.com/joaomdmoura/crewAI
中文文档:http://www.aidoczh.com/crewai/
1. Agent-什么是代理?
代理Agent是一个自主单元,被编程用于:执行任务
- 执行任务
- 做出决策
- 与其他代理进行通信
将代理看作团队的一员,具有特定的技能和特定的工作任务。代理可以担任不同的角色,如“研究员”、“作家”或“客户支持”,每个角色都为团队的整体目标做出贡献。
(1). 代理属性
属性 | 描述 |
---|---|
角色 | 定义代理在团队中的功能。它决定了代理最适合执行的任务类型。 |
目标 | 代理旨在实现的个体目标。它指导代理的决策过程。 |
背景故事 | 为代理的角色和目标提供背景信息,丰富互动和协作动态。 |
LLM (可选) | 表示将运行代理的语言模型。如果未指定,默认从OPENAI_MODEL_NAME 环境变量中动态获取模型名称,否则默认为"gpt-4"。 |
工具 (可选) | 代理可以使用的一组能力或功能集。预计是与代理执行环境兼容的自定义类的实例。工具的默认值为一个空列表。 |
调用功能的LLM (可选) | 指定将处理该代理的工具调用的语言模型,如果传递,则会覆盖团队功能调用LLM。默认值为None 。 |
最大迭代次数 (可选) | 代理在被强制给出最佳答案之前可以执行的最大迭代次数。默认值为25 。 |
最大请求次数 (可选) | 代理可以执行的每分钟最大请求数,以避免速率限制。这是可选的,可以不指定,默认值为None 。 |
最大执行时间 (可选) | 代理执行任务的最大执行时间。这是可选的,可以不指定,默认值为None ,表示没有最大执行时间。 |
详细模式 (可选) | 将此设置为True 会配置内部记录器以提供详细的执行日志,有助于调试和监控。默认值为False 。 |
允许委托 (可选) | 代理可以相互委托任务或问题,确保每个任务由最合适的代理处理。默认值为True 。 |
步骤回调 (可选) | 在代理的每个步骤之后调用的函数。这可用于记录代理的操作或执行其他操作。它将覆盖团队step_callback 。 |
缓存 (可选) | 指示代理是否应使用工具使用缓存。默认值为True 。 |
(2). 创建代理
代理可以使用 crewAI 内置的委托和通信机制相互交互。这允许在团队内进行动态任务管理和问题解决。
要创建代理,通常会使用所需属性初始化Agent
类的实例。以下是一个包含所有属性的概念示例:
# 示例:创建具有所有属性的代理
from crewai import Agent
agent = Agent(
role='数据分析师',
goal='提取可操作的见解',
backstory="""您是一家大公司的数据分析师。
您负责分析数据并为业务提供见解。
您目前正在进行一个项目,分析我们营销活动的表现。""",
tools=[my_tool1, my_tool2], # 可选,默认为空列表
llm=my_llm, # 可选
function_calling_llm=my_llm, # 可选
max_iter=15, # 可选
max_rpm=None, # 可选
verbose=True, # 可选
allow_delegation=True, # 可选
step_callback=my_intermediate_step_callback, # 可选
cache=True # 可选
)
(3). 结论
代理是 CrewAI 框架的构建模块。通过了解如何定义和与代理交互,您可以创建利用协作智能力的复杂人工智能系统。
2. Task-任务概述
在 crewAI 框架中,任务是由代理完成的具体任务。它们提供执行所需的所有必要细节,如描述、负责代理、所需工具等,有助于促进各种行动复杂性。
crewAI 中的任务可以是协作的,需要多个代理共同工作。这通过任务属性进行管理,并由 Crew 的流程进行编排,增强团队合作和效率。
(1). 任务属性
属性 | 描述 |
---|---|
描述 | 任务内容的清晰简明陈述。 |
代理 | 负责任务的代理,直接分配或由 Crew 的流程分配。 |
预期输出 | 任务完成后的详细描述。 |
工具 (可选) | 代理用于执行任务的功能或能力。 |
异步执行 (可选) | 如果设置,任务将异步执行,允许在不等待完成的情况下进行进展。 |
上下文 (可选) | 指定输出用作此任务上下文的任务。 |
配置 (可选) | 用于执行任务的代理的附加配置细节,允许进一步定制。 |
输出 JSON (可选) | 输出 JSON 对象,需要 OpenAI 客户端。只能设置一种输出格式。 |
输出 Pydantic (可选) | 输出 Pydantic 模型对象,需要 OpenAI 客户端。只能设置一种输出格式。 |
输出文件 (可选) | 将任务输出保存到文件。如果与 输出 JSON 或 输出 Pydantic 一起使用,指定输出保存方式。 |
回调 (可选) | 任务完成后执行的 Python 可调用函数。 |
人工输入 (可选) | 指示任务是否需要最终人工反馈,对需要人工监督的任务很有用。 |
(2). 创建任务
创建任务涉及定义其范围、负责代理以及任何额外属性以实现灵活性:
from crewai import Task
task = Task(
description='查找并总结有关人工智能的最新和最相关新闻',
agent=sales_agent
)
“任务分配”:直接为分配指定一个 代理
,或者让 分层
的 CrewAI 流程根据角色、可用性等决定。
(3). 将工具与任务集成
利用 crewAI Toolkit 和 LangChain Tools 中的工具,增强任务性能和代理交互。
(4). 使用工具创建任务
import os
os.environ["OPENAI_API_KEY"] = "Your Key"
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool
research_agent = Agent(
role='研究员',
goal='查找并总结最新的人工智能新闻',
backstory="""您是一家大公司的研究员。
您负责分析数据并为业务提供见解。""",
verbose=True
)
search_tool = SerperDevTool()
task = Task(
description='查找并总结最新的人工智能新闻',
expected_output='对前 5条最重要的人工智能新闻进行项目符号列表总结',
agent=research_agent,
tools=[search_tool]
)
crew = Crew(
agents=[research_agent],
tasks=[task],
verbose=2
)
result = crew.kickoff()
print(result)
这演示了如何使用特定工具的任务可以覆盖代理的默认设置,实现定制化任务执行。
(5). 参考其他任务
在 crewAI 中,一个任务的输出会自动传递到下一个任务,但您可以明确定义哪些任务的输出,包括多个任务应作为另一个任务的上下文。
当您有一个任务依赖于另一个任务的输出,但并非立即在其后执行时,这将非常有用。这通过任务的 上下文
属性完成:
# ...
research_ai_task = Task(
description='查找并总结最新的人工智能新闻',
expected_output='对前 5条最重要的人工智能新闻进行项目符号列表总结',
async_execution=True,
agent=research_agent,
tools=[search_tool]
)
research_ops_task = Task(
description='查找并总结最新的人工智能运营新闻',
expected_output='对前 5条最重要的人工智能运营新闻进行项目符号列表总结',
async_execution=True,
agent=research_agent,
tools=[search_tool]
)
write_blog_task = Task(
description="撰写一篇关于人工智能重要性及其最新新闻的完整博客文章",
expected_output='4段长的完整博客文章',
agent=writer_agent,
context=[research_ai_task, research_ops_task]
)
#...
(6). 异步执行
您可以定义任务以异步执行。这意味着 Crew 不会等待其完成才继续下一个任务。这对于需要很长时间完成的任务或对下一个任务执行不是至关重要的任务非常有用。
然后,您可以使用 上下文
属性在将来的任务中定义,它应等待异步任务的输出完成。
#...
list_ideas = Task(
description="探索有关人工智能文章的 5个有趣想法。",
expected_output="一份包含 5个文章想法的项目符号列表。",
agent=researcher,
async_execution=True # 将以异步方式执行
)
list_important_history = Task(
description="研究人工智能的历史,并告诉我 5个最重要的事件。",
expected_output="包含 5个重要事件的项目符号列表。",
agent=researcher,
async_execution=True # 将以异步方式执行
)
write_article = Task(
description="撰写一篇关于人工智能、其历史和有趣想法的文章。",
expected_output="一篇关于人工智能的 4段文章。",
agent=writer,
context=[list_ideas, list_important_history] # 将等待两个任务的输出完成
)
#...
(7). 回调机制
在任务完成后执行回调函数,允许根据任务结果触发操作或通知。
# ...
def callback_function(output: TaskOutput):
# 任务完成后执行某些操作
# 例如:向经理发送电子邮件
print(f"""
任务完成!
任务:{output.description}
输出:{output.raw_output}
""")
research_task = Task(
description='查找并总结最新的人工智能新闻',
expected_output='对前 5条最重要的人工智能新闻进行项目符号列表总结',
agent=research_agent,
tools=[search_tool],
callback=callback_function
)
#...
(8). 访问特定任务输出
一组 Crew 运行完成后,您可以通过使用任务对象的 output
属性访问特定任务的输出:
# ...
task1 = Task(
description='查找并总结最新的人工智能新闻',
expected_output='对前 5条最重要的人工智能新闻进行项目符号列表总结',
agent=research_agent,
tools=[search_tool]
)
#...
crew = Crew(
agents=[research_agent],
tasks=[task1, task2, task3],
verbose=2
)
result = crew.kickoff()
# 返回一个 TaskOutput 对象,其中包含任务的描述和结果
print(f"""
任务完成!
任务:{task1.output.description}
输出:{task1.output.raw_output}
""")
(9). 工具覆盖机制
在任务中指定工具允许动态调整代理能力,突出了 CrewAI 的灵活性。
(10). 错误处理和验证机制
在创建和执行任务时,存在某些验证机制,以确保任务属性的健壮性和可靠性。这些验证包括但不限于:
- 确保每个任务仅设置一种输出类型,以保持清晰的输出期望。
- 防止手动分配
id
属性,以维护唯一标识符系统的完整性。
这些验证有助于在 crewAI 框架内维护任务执行的一致性和可靠性。
(11). 结论
任务是 crewAI 中代理行动的推动力。通过正确定义任务及其结果,您为 AI 代理有效地工作奠定了基础,无论是独立工作还是作为协作单位。为任务配备适当的工具,了解执行过程,并遵循健壮的验证实践对于最大化 CrewAI 的潜力至关重要,确保代理有效准备好执行其任务,并确保任务按预期执行。
3. Tool-什么是工具?
crewAI 工具赋予代理能力,从网页搜索和数据分析到协作和任务委派等各种功能。本文档概述了如何在 crewAI 框架内创建、集成和利用这些工具,包括对协作工具的新重点。
CrewAI 中的工具是代理可以利用的用于执行各种操作的技能或功能。这包括来自 crewAI Toolkit 和 LangChain Tools 的工具,使代理之间能够进行从简单搜索到复杂互动以及有效团队合作的一切。
(1). 工具的关键特征
-
实用性:专为任务设计,如网页搜索、数据分析、内容生成和代理协作。
-
集成性:通过将工具无缝集成到工作流程中,提升代理的能力。
-
可定制性:提供灵活性,可以开发定制工具或利用现有工具,满足代理的特定需求。
-
错误处理:包含强大的错误处理机制,确保平稳运行。
-
缓存机制:具有智能缓存功能,优化性能并减少冗余操作。
(2). 使用 crewAI 工具
要通过 crewAI 工具增强代理的能力,请先安装我们的额外工具包:
pip install 'crewai[tools]'
以下是演示它们使用的示例:
import os
from crewai import Agent, Task, Crew
# 导入 crewAI 工具
from crewai_tools import (
DirectoryReadTool,
FileReadTool,
SerperDevTool,
WebsiteSearchTool
)
# 设置 API 密钥
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API 密钥
os.environ["OPENAI_API_KEY"] = "Your Key"
# 实例化工具
docs_tool = DirectoryReadTool(directory='./blog-posts')
file_tool = FileReadTool()
search_tool = SerperDevTool()
web_rag_tool = WebsiteSearchTool()
# 创建代理
researcher = Agent(
role='市场研究分析师',
goal='提供关于人工智能行业最新市场分析',
backstory='一位对市场趋势敏锐的专家分析师。',
tools=[search_tool, web_rag_tool],
verbose=True
)
writer = Agent(
role='内容撰写人员',
goal='撰写有关人工智能行业的引人入胜的博客文章',
backstory='一位对技术充满激情的熟练撰稿人。',
tools=[docs_tool, file_tool],
verbose=True
)
# 定义任务
research = Task(
description='研究人工智能行业的最新趋势并提供摘要。',
expected_output='关于人工智能行业前三个热门发展的摘要,并对其重要性提供独特视角。',
agent=researcher
)
write = Task(
description='根据研究分析师的摘要撰写一篇引人入胜的博客文章。从目录中最新的博客文章中汲取灵感。',
expected_output='一篇以 markdown 格式排版的四段博客文章,内容引人入胜、信息丰富且易懂,避免使用复杂术语。',
agent=writer,
output_file='blog-posts/new_post.md' # 最终的博客文章将保存在此处
)
# 组建团队
crew = Crew(
agents=[researcher, writer],
tasks=[research, write],
verbose=2
)
# 执行任务
crew.kickoff()
(3). 可用的 crewAI 工具
-
错误处理:所有工具都具有错误处理功能,允许代理优雅地处理异常并继续执行任务。
-
缓存机制:所有工具支持缓存,使代理能够高效地重用先前获得的结果,减少对外部资源的负载并加快执行时间,您还可以使用工具上的
cache_function
属性对缓存机制进行更精细的控制。
以下是可用工具及其描述的列表:
工具 | 描述 |
---|---|
CodeDocsSearchTool | 专为搜索代码文档和相关技术文档而优化的 RAG 工具。 |
CSVSearchTool | 专为在 CSV 文件中搜索而设计的 RAG 工具,适用于处理结构化数据。 |
DirectorySearchTool | 用于在目录中搜索的 RAG 工具,可用于浏览文件系统。 |
DOCXSearchTool | 旨在在 DOCX 文档中搜索的 RAG 工具,适用于处理 Word 文件。 |
DirectoryReadTool | 便于读取和处理目录结构及其内容。 |
FileReadTool | 可读取并提取文件中的数据,支持各种文件格式。 |
GithubSearchTool | 用于在 GitHub 存储库中搜索的 RAG 工具,适用于代码和文档搜索。 |
SerperDevTool | 专为开发目的而设计的专用工具,具有特定的功能正在开发中。 |
TXTSearchTool | 专注于在文本(.txt)文件中搜索的 RAG 工具,适用于非结构化数据。 |
JSONSearchTool | 专为在 JSON 文件中搜索而设计的 RAG 工具,适用于处理结构化数据。 |
MDXSearchTool | 专为在 Markdown(MDX)文件中搜索而定制的 RAG 工具,适用于文档。 |
PDFSearchTool | 旨在在 PDF 文档中搜索的 RAG 工具,适用于处理扫描文档。 |
PGSearchTool | 专为在 PostgreSQL 数据库中搜索而优化的 RAG 工具,适用于数据库查询。 |
RagTool | 通用的 RAG 工具,能够处理各种数据源和类型。 |
ScrapeElementFromWebsiteTool | 可从网站中抓取特定元素,适用于有针对性的数据提取。 |
ScrapeWebsiteTool | 便于抓取整个网站,适用于全面的数据收集。 |
WebsiteSearchTool | 用于搜索网站内容的 RAG 工具,优化了网络数据提取。 |
XMLSearchTool | 专为在 XML 文件中搜索而设计的 RAG 工具,适用于结构化数据格式。 |
YoutubeChannelSearchTool | 用于在 YouTube 频道中搜索的 RAG 工具,适用于视频内容分析。 |
YoutubeVideoSearchTool | 旨在在 YouTube 视频中搜索的 RAG 工具,适用于视频数据提取。 |
(4). 创建自己的工具
“自定义工具创建”
开发人员可以创建根据代理需求定制的自定义工具,或者利用预构建选项:
要创建自己的 crewAI 工具,您需要安装我们的额外工具包:
pip install 'crewai[tools]'
一旦您这样做了,有两种主要方法可以创建 crewAI 工具:
子类化 BaseTool
from crewai_tools import BaseTool
class MyCustomTool(BaseTool):
name: str = "我的工具名称"
description: str = "清晰描述此工具用于什么,您的代理将需要这些信息来使用它。"
def _run(self, argument: str) -> str:
# 实现在这里
return "自定义工具的结果"
利用 tool
装饰器
from crewai_tools import tool
@tool("我的工具名称")
def my_tool(question: str) -> str:
"""清晰描述此工具用于什么,您的代理将需要这些信息来使用它。"""
# 函数逻辑在这里
return "您的自定义工具的结果"
自定义缓存机制
“缓存”
工具可以选择实现 `cache_function` 来微调缓存行为。此函数根据特定条件确定何时缓存结果,提供对缓存逻辑的细粒度控制
from crewai_tools import tool
@tool
def multiplication_tool(first_number: int, second_number: int) -> str:
"""当您需要将两个数字相乘时有用。"""
return first_number * second_number
def cache_func(args, result):
# 在这种情况下,仅在结果是 2 的倍数时才缓存结果
cache = result % 2 == 0
return cache
multiplication_tool.cache_function = cache_func
writer1 = Agent(
role="作家",
goal="为孩子们编写数学课程。",
backstory="您是一位写作专家,热爱教孩子,但您对数学一无所知。",
tools=[multiplication_tool],
allow_delegation=False,
)
#...
(5). 使用 LangChain 工具
“LangChain 集成”
CrewAI 与 LangChain 的全面工具包无缝集成,用于基于搜索的查询等,以下是 Langchain 提供的内置工具列表 [LangChain Toolkit](https://python.langchain.com/docs/integrations/tools/)
from crewai import Agent
from langchain.agents import Tool
from langchain.utilities import GoogleSerperAPIWrapper
# 设置 API 密钥
os.environ["SERPER_API_KEY"] = "Your Key"
search = GoogleSerperAPIWrapper()
# 创建并将搜索工具分配给代理
serper_tool = Tool(
name="中级答案",
func=search.run,
description="用于基于搜索的查询的工具",
)
agent = Agent(
role='研究分析师',
goal='提供最新的市场分析',
backstory='一位对市场趋势敏锐的专家分析师。',
tools=[serper_tool]
)
# 代码的其余部分 ...
(6). 结论
工具在扩展 CrewAI 代理的能力方面起着至关重要的作用,使它们能够执行各种任务并有效地进行协作。在使用 CrewAI 构建解决方案时,利用自定义和现有工具来赋能您的代理,并增强 AI 生态系统。考虑利用错误处理、缓存机制以及工具参数的灵活性来优化您的代理的性能和能力。
4. Process-理解流程
在 CrewAI 中,流程通过协调代理执行任务,类似于人类团队中的项目管理。这些流程确保任务被有效地分配和执行,与预定义的策略保持一致。
(1). 流程实现
- 顺序执行: 顺序执行任务,确保任务按照有序的进展完成。
- 分级: 将任务组织在管理层级中,任务根据结构化的指挥链被委派和执行。在船员中必须指定一个管理语言模型 (
manager_llm
) 以启用分级流程,通过管理者便捷地创建和管理任务。 - 共识流程(计划中): 旨在实现代理之间在任务执行上的协作决策,这种流程类型在 CrewAI 中引入了一种民主的任务管理方式。这是计划中的未来发展方向,目前尚未在代码库中实施。
(2). 流程在团队合作中的作用
流程使个体代理能够作为一个有凝聚力的整体运作,简化他们的努力,以高效和协调的方式实现共同目标。
(3). 将流程分配给船员
要将流程分配给船员,在创建船员时指定流程类型以设置执行策略。对于分级流程,确保为管理者代理定义 manager_llm
。
from crewai import Crew
from crewai.process import Process
from langchain_openai import ChatOpenAI
# 示例:创建一个具有顺序流程的船员
crew = Crew(
agents=my_agents,
tasks=my_tasks,
process=Process.sequential
)
# 示例:创建一个具有分级流程的船员
# 确保提供 manager_llm
crew = Crew(
agents=my_agents,
tasks=my_tasks,
process=Process.hierarchical,
manager_llm=ChatOpenAI(model="gpt-4")
)
注意: 确保在创建 Crew
对象之前定义了 my_agents
和 my_tasks
,对于分级流程,还需要 manager_llm
。
(4). 顺序流程
该方法模拟动态团队工作流程,以深思熟虑和系统化的方式进行任务。任务执行遵循任务列表中预定义的顺序,一个任务的输出作为下一个任务的上下文。
要自定义任务上下文,可以利用 Task
类中的 context
参数指定应作为后续任务上下文使用的输出。
(5). 分级流程
模拟公司的等级制度,CrewAI 会自动为您创建一个管理者,需要为管理者代理指定一个管理语言模型 (manager_llm
)。该代理负责监督任务执行,包括规划、委派和验证。任务不是预分配的;管理者根据代理的能力分配任务,审查输出,并评估任务完成情况。
(6). 流程类:详细概述
Process
类被实现为一个枚举 (Enum
),确保类型安全并将流程值限制为定义的类型(sequential
、hierarchical
)。共识流程计划在未来加入,强调我们对持续发展和创新的承诺。
(7). 附加任务特性
- 异步执行: 现在可以异步执行任务,实现并行处理和效率改进。此功能旨在使任务能够同时进行,提高船员的整体生产力。
- 人工输入审查: 一项可选功能,允许人类审查任务输出,以确保质量和准确性在最终确定之前。这一额外步骤引入了一层监督,为人类干预和验证提供了机会。
- 输出定制: 任务支持各种输出格式,包括 JSON (
output_json
)、Pydantic 模型 (output_pydantic
) 和文件输出 (output_file
),灵活地捕获和利用任务结果。这允许各种输出可能性,满足不同的需求和要求。
(8). 结论
在 CrewAI 中通过流程实现的结构化协作对于促进代理之间的系统化团队合作至关重要。本文档已更新以反映最新功能、增强功能以及计划整合共识流程,确保用户可以访问最新和全面的信息。
5. Crews-什么是团队?
在 crewAI 中,团队代表着一群代理共同合作以完成一组任务。每个团队定义了任务执行策略、代理协作以及整体工作流程。
(1). 团队属性
属性 | 描述 |
---|---|
任务 | 分配给团队的任务列表。 |
代理 | 属于团队的代理列表。 |
流程 (可选) | 团队遵循的流程(例如,顺序、分层)。 |
详细程度 (可选) | 执行过程中日志记录的详细程度。 |
经理 LLM (可选) | 分层流程中经理代理使用的语言模型。在使用分层流程时必需。 |
功能调用 LLM (可选) | 如果传递,团队将使用此 LLM 为所有代理进行工具的功能调用。每个代理可以拥有自己的 LLM,这将覆盖团队的功能调用 LLM。 |
配置 (可选) | 团队的可选配置设置,以 Json 或 Dict[str, Any] 格式。 |
最大 RPM (可选) | 团队在执行过程中遵循的每分钟最大请求数。 |
语言 (可选) | 团队使用的语言,默认为英语。 |
语言文件 (可选) | 用于团队的语言文件路径。 |
内存 (可选) | 用于存储执行记忆(短期、长期、实体记忆)。 |
缓存 (可选) | 指定是否使用缓存来存储工具执行的结果。 |
嵌入器 (可选) | 用于团队使用的嵌入器配置。目前主要由内存使用。 |
完整输出 (可选) | 团队是否应返回包含所有任务输出的完整输出,或仅返回最终输出。 |
步骤回调 (可选) | 在每个代理的每个步骤之后调用的函数。可用于记录代理的操作或执行其他操作;不会覆盖特定于代理的 step_callback 。 |
任务回调 (可选) | 在每个任务完成后调用的函数。用于监控或任务执行后的其他操作。 |
共享团队 (可选) | 是否要与 crewAI 团队共享完整的团队信息和执行,以改进库,并允许我们训练模型。 |
输出日志文件 (可选) | 是否要有一个包含完整团队输出和执行的文件。您可以将其设置为 True,默认为当前文件夹,并将其命名为 logs.txt,或传递一个带有完整路径和文件名的字符串。 |
“团队最大 RPM”:max_rpm
属性设置团队每分钟可执行的最大请求数,以避免速率限制,并将覆盖个别代理的 max_rpm
设置。
(2). 创建团队
在组建团队时,您将具有互补角色和工具的代理结合在一起,分配任务,并选择一个流程,该流程规定了它们的执行顺序和互动。
示例:组建一个团队
from crewai import Crew, Agent, Task, Process
from langchain_community.tools import DuckDuckGoSearchRun
# 定义具有特定角色和工具的代理
researcher = Agent(
role='高级研究分析师',
goal='发现创新的人工智能技术',
tools=[DuckDuckGoSearchRun()]
)
writer = Agent(
role='内容撰稿人',
goal='撰写有关人工智能发现的引人入胜的文章',
verbose=True
)
# 为代理创建任务
research_task = Task(
description='识别突破性人工智能技术',
agent=researcher
)
write_article_task = Task(
description='撰写关于最新人工智能技术的文章',
agent=writer
)
# 使用顺序流程组装团队
my_crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_article_task],
process=Process.sequential,
full_output=True,
verbose=True,
)
(3). 内存利用
团队可以利用内存(短期、长期和实体内存)来增强它们的执行能力,并随着时间的推移进行学习。此功能允许团队存储和回忆执行记忆,有助于决策和任务执行策略。
(4). 缓存利用
可以使用缓存来存储工具执行的结果,通过减少重新执行相同任务的需求,使流程更加高效。
(5). 团队使用指标
在团队执行后,您可以访问 usage_metrics
属性,查看团队执行的所有任务的语言模型(LLM)使用指标。这提供了关于运营效率和改进领域的见解。
# 访问团队的使用指标
crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
crew.kickoff()
print(crew.usage_metrics)
(6). 团队执行流程
- 顺序流程:任务依次执行,允许工作的线性流动。
- 分层流程:经理代理协调团队,委派任务并在继续之前验证结果。注意:此流程需要一个
manager_llm
,对于验证流程流程至关重要。
启动团队
一旦您的团队组建完成,使用 kickoff()
方法启动工作流程。这将根据定义的流程流程开始执行过程。
# 启动团队的任务执行
result = my_crew.kickoff()
print(result)
6. Memory-记忆系统简介
“增强代理智能”:crewAI框架引入了一个复杂的记忆系统,旨在显著增强AI代理的能力。该系统包括短期记忆、长期记忆、实体记忆和新识别的上下文记忆,每种记忆都在帮助代理记住、推理和从过去的互动中学习方面发挥着独特作用。
(1). 记忆系统组成部分
组件 | 描述 |
---|---|
短期记忆 | 暂时存储最近的互动和结果,使代理能够回忆和利用与当前情境相关的信息。 |
长期记忆 | 保留从过去执行中获得的宝贵见解和学习,使代理能够随着时间建立和完善知识。 |
实体记忆 | 捕获和组织在任务中遇到的实体(人、地点、概念)的信息,促进对复杂信息的更深入理解和关系映射。 |
上下文记忆 | 保持互动的上下文,有助于代理在一系列任务或对话中的响应连贯性和相关性。 |
(2). 记忆系统如何赋能代理
-
上下文意识: 借助短期记忆和上下文记忆,代理能够在对话或任务序列中保持上下文,从而产生更连贯和相关的回应。
-
经验积累: 长期记忆使代理能够积累经验,从过去的行动中学习,以改进未来的决策和问题解决能力。
-
实体理解: 通过保持实体记忆,代理可以识别和记住关键实体,增强其处理和交互复杂信息的能力。
(3). 在你的团队中实施记忆
在配置团队时,您可以启用和定制每个记忆组件,以适应团队的目标和将执行的任务的性质。
默认情况下,记忆系统处于禁用状态,您可以通过在团队配置中设置 memory=True
来确保其处于活动状态。
记忆将默认使用OpenAI Embeddings,但您可以通过将 embedder
设置为不同的模型来进行更改。
示例:为团队配置记忆
from crewai import Crew, Agent, Task, Process
# 使用具有记忆功能的团队
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True
)
(4). 其他嵌入提供商
使用OpenAI嵌入(已默认)
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "openai",
"config":{
"model": 'text-embedding-3-small'
}
}
)
使用Google AI嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "google",
"config":{
"model": 'models/embedding-001',
"task_type": "retrieval_document",
"title": "Embeddings for Embedchain"
}
}
)
使用Azure OpenAI嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "azure_openai",
"config":{
"model": 'text-embedding-ada-002',
"deployment_name": "you_embedding_model_deployment_name"
}
}
)
使用GPT4ALL嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "gpt4all"
}
)
使用Vertex AI嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "vertexai",
"config":{
"model": 'textembedding-gecko'
}
}
)
使用Cohere嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "cohere",
"config":{
"model": "embed-english-v3.0"
"vector_dimension": 1024
}
}
)
(5). 使用crewAI记忆系统的好处
- 自适应学习: 队伍随着时间变得更加高效,适应新信息并完善其处理任务的方法。
- 增强个性化: 记忆使代理能够记住用户偏好和历史互动,从而产生个性化体验。
- 改善问题解决: 访问丰富的记忆存储库有助于代理做出更明智的决策,借鉴过去的学习和上下文洞见。
将crewAI的记忆系统集成到您的项目中非常简单。通过利用提供的记忆组件和配置,您可以快速赋予您的代理记忆、推理和从互动中学习的能力,从而开启新的智能和能力水平。