AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


让AI Agent像团队一样协作的开源架构CrewAI
发布日期:2024-05-23 21:49:50 浏览次数: 1962


多Agent的AI应用一直是个有意思的研究方向,之前试过用LangGraph构建一组Agent的执行流程,用于自动产出研究报告。但是流程都是针对任务固化的,如果要执行别的任务就需要修改代码。CrewAI相对来说自动化程度就要高一些,你只需要定义好Agent和Task,剩下的就交给CrewAI。
CrewAI(https://github.com/joaomdmoura/crewAI)专注于协调角色扮演的自主AIAgent。
通过使用LLM作为协调器促进协作,使得多个Agent像一支默契十足的团队一样工作,每个Agent扮演不同的角色,共同完成一项大的任务。Agent被视为团队的成员,具有特定的技能和特定的工作要做,执行任务、做出决策并与其他Agent进行通信。此外,CrewAI还支持LangChain引入的可扩展功能,包括工具集成和支持开源大语言模型。
下面我们介绍一下CrewAI的核心概念,只有稍微懂一点Python的知识,就可以在本地运行多Agent的AI应用。顺便试一下百度最近免费的大模型服务。


核心概念
包括Agent、Task、Tool、Process、Crew、Collaboration、Memory。对大部分目标来说,我们需要定义的是Agent、Task。有点类似成立了一个团队,第一要有队员,第二设置好要完成的任务,剩下的就交给CrewAI这个职业经理人管理了,我们作为老板就等收结果就好了。
Agent:可以视为团队的一员,拥有特定技能,并承担特定工作。Agent可以担任不同的角色,例如“研究员”、“作家”或“客户支持”,每个角色都为团队的总体目标做出贡献。有几个主要的属性。
agent = Agent(  role="数据分析师",  goal="分析总结出可进行下一步行动的建议",  backstory="""你是一家大公司的数据分析师。您负责分析数据并提供公司下一步行动的建议。  您当前正在进行一个项目,以分析我们营销活动的表现。""",  tools=[my_tool1,my_tool2] #可选,默认为空列表)
        1. Role,定义Agent在团队中的职能角色,决定了Agent最适合执行的任务类型。
        2. Goal,想要实现的个体目标,指导Agent的决策过程。
        3. Backstory,为Agent的角色和目标提供背景,丰富互动和驱动协作。
        4. Tool,工具是可用于执行任务的一组能力或功能,使得Agent能和外部环境交互,比如搜索网络信息,执行特定的计算等。虽然不是必须的,但使用工具能给Agent提供更多的可能性。
  1. Task:由Agent完成的特定任务。任务提供执行所需的所有详细信息,例如描述、负责的Agent、所需的工具、指定期望输出等,从而促进各种行动的复杂性。任务可以是协作的,需要多个Agent一起工作。这是通过任务属性进行管理并由 Crew 流程进行编排,从而增强团队合作和效率。Task是使用时最重要的概念,是驱动Agent执行和协作的动力。因此CrewAI也提供了多种任务的定义形式,支持异步执行、任务依赖关系、任务回调等。
task = Task(  description='查找并总结最新的AI新闻',  expected_output="输出前5大最重要AI新闻的摘要",  agent=research_agent,  tools=[search_tool])
Tool工具为Agent提供了多种功能,从网络搜索和数据分析到协作和在同事之间委派任务。CrewAI是基于LangChain框架实现的,也继承了LangChain的Tool实现方式,这就意味着我们可以自定义工具。除此之外,CrewAI也提供了一套额外的工具包,有很多,这里列举几个:
    1. YoutubeVideoSearchToolRAG 工具旨在在 YouTube 视频中进行搜索,非常适合视频数据提取。
    2. ScrapeWebsiteTool方便抓取整个网站,非常适合全面的数据收集。
    3. GithubSearchTool用于在 GitHub 存储库内进行搜索的 RAG 工具,可用于代码和文档搜索。
    4. CodeDocsSearchTool一款针对搜索代码文档和相关技术文档而优化的 RAG 工具。
    Process流程协调Agent执行任务,类似于人类团队中的项目管理。这些流程确保任务按照预定义的策略有效地分配和执行。主要有两种流程,顺序和分层,默认是顺序执行。
        1. 顺序,按顺序执行任务,一个任务的输出作为下一个任务的背景。
        2. 分层,模拟企业层级结构,自动创建经理Agent,需要为经理Agent指定manager_llm(一个LLM的实例)。此经理Agent负责监督任务执行,包括规划、委派和验证。任务不是编程分配的,经理Agent根据其他Agent的能力分配任务,审查输出并评估任务完成情况。这个就会比较灵活,也有点像AutoGen。
        3. 共识(开发中),在Agent之间引入了一种民主的任务管理方法,在任务执行时进行协作决策,从而不需要经理Agent。
  1. Crew:相当于一个团队,定义有哪些Agent、Task,以及以什么样的流程执行。团队组建完毕,就用kickoff()方法启动工作流程。
  2. Collaboration:这是个基础概念,并没有可以实例化的对象。这个是CrewAI最主要的核心能力,对于我们来说,定义Agent、定义Task并不是什么难事,并且这肯定是使用者应该输入的。但让Agent协作完成目标就是比较麻烦了,当然你可以自己去编写流程,智能化自动化才是更优方案。
  3. Memory:CrewAI引入了复杂的记忆系统,旨在增强人工智能代理的能力。包括短期记忆、长期记忆、实体记忆和新识别的情境记忆,每个记忆都有一个独特的目的,帮助Agent记忆、推理并从过去的交互中学习。默认情况下,记忆系统处于禁用状态,可以通过memory=True开启,这个需要Embedding模型的支持。

实例
自从Deepseek的大模型把价格打下来之后,各家卷价格也是相当拼了,百度直接免费了几个大模型的调用,刚好给大家试试效果。注册百度智能云账号后,进入千帆大模型平台-》模型服务-〉应用接入,就可以创建一个用来调用API的Access key 和 Secret key。

下面创一个自动写技术博客的crew,看看效果怎样
创建一个Project目录,用pip安装需要的python包
pip install crewai qianfan
接下来在python文件中创建百度千帆的LangChain对象
import osfrom langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint
os.environ["QIANFAN_AK"] = '上面创建应用Access key'os.environ["QIANFAN_SK"] = '上面创建应用Secret key'
baidu_chat = QianfanChatEndpoint( model="ERNIE-SPEED-8K", verbose=True)
要写技术博客,少不了要上网搜索资料,定义一个搜索工具Tool,这里换成LangChain的Tools是可以的,只不过输入输出可能要做一些特殊处理
from crewai_tools import SerperDevTool
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
search_tool = SerperDevTool()
接下来定义Agent和Task,把Agent的llm设置成baidu_chat
researcher = Agent(  role="高级研究分析师",  goal="揭示人工智能和数据科学的前沿发展",  backstory="""你在一家领先的科技智库工作。您的专业技能在于识别新兴趋势。  你有分析复杂数据和提出可行见解的诀窍。""",  verbose=True,  allow_delegation=False,  tools=[search_tool],  llm=baidu_chat)
writer = Agent( role="技术内容策略师", goal="创造关于技术进步的引人注目的内容", backstory="""你是一位著名的内容策略师,以其富有洞察力和引人入胜的文章而闻名。 你将复杂的概念转化为引人入胜的叙述。""", verbose=True, allow_delegation=True, llm=baidu_chat)
task1 = Task( description="""在2024年对人工智能的最新进展进行全面分析。 确定关键趋势、突破性技术和潜在的行业影响。""", expected_output="要点中的完整分析报告", agent=researcher)
task2 = Task( description="""利用所提供的见解,开发一个引人入胜的博客 文章强调了人工智能的最重大进步。 你的帖子应该内容丰富,易于访问,迎合精通技术的受众。 让它听起来很酷,避免使用复杂的单词,这样听起来就不像人工智能。""", expected_output="至少4段的完整博客文章", agent=writer)
crew = Crew( agents=[researcher, writer], tasks=[task1, task2], verbose=2,)
result = crew.kickoff()
Crew的verbose设置了打印日志的级别,我们看看输出的效果

只能说一般吧,如果要解决某一专业的问题,我觉得写技术博客也需要专业,还需要不少优化的,定制化Prompt、执行流程等,但实际效果还不得而知,但这也是大多数AI应用的现状。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询