CrewAI:包含多 AI 代理系统示例的指南
AI 代理是可以执行任务并与世界交互的助手。与遵循固定规则的传统系统不同,它们可以学习和适应新情况。将它们视为协助完成各种任务的智能机器人。
但是,AI 代理与其他 AI 实体(例如 我们都听说过的流行语言模型)有何不同呢?
在本文中,我将回答这个问题并介绍 CrewAI,这是一个免费的开源 Python 框架,旨在简化多代理 AI 系统的开发。我们将探讨代理和语言模型之间的区别,讨论为什么代理框架对于构建 AI 应用程序很重要,并演示 CrewAI 如何使代理能够协作并取得出色的结果。
AI 代理与 LLM
让我们揭穿关于代理和大型语言模型 (LLM) 之间差异的常见误解。两者都属于人工智能家族,但它们具有不同的能力。
ChatGPT 和 Gemini 等语言模型非常擅长使用语言。他们接受了大量文本和代码的广泛培训,这使他们能够理解和产生与人类交流非常相似的语言。
LLM 是人工智能的熟练文字大师,制作范围广泛的内容,包括翻译、摘要、创意叙述,甚至诗歌。其范围通常仅限于与语言相关的任务。
然而,代理主要专注于采取行动。他们能够导航、与对象交互并根据自己的感知做出决策。
简而言之,语言模型是大脑,代理是手。他们共同组成了一个强大的二人组。
那么,由于代理在 AI 应用程序中发挥着如此重要的作用,当多个代理需要协同工作时,我们如何管理其复杂性呢?这就是代理框架的用武之地。
对代理框架的需求
对代理框架的需求源于 AI 应用程序日益复杂,尤其是那些涉及多个代理协同工作以实现共同目标的应用程序。让我们看看为什么代理框架是必不可少的。
编排和协调
随着 AI 系统规模的增长,它们通常会包含大量具有不同功能的代理。管理这些交互并确保它们和谐工作变得越来越困难。
代理框架提供了一个结构化的环境,允许编排代理活动、定义其角色和职责以及改善沟通。
在多代理系统中,一个重要的方面是将任务有效地分配给最合适的代理并有效地管理共享资源。代理框架为任务分配、资源协商和冲突解决提供动态机制。
模块化和可重用性
代理框架促进了 AI 开发的模块化方法,其中代理作为独立组件进行设计和实施。这种模块化允许更好的代码组织,并支持在各种项目中重用代理模块,从而简化复杂系统的开发和维护。借助这种基于组件的结构,AI 开发人员可以专注于单个代理,而不会中断更大的系统。
此外,代理框架通常采用基于角色的架构,允许开发人员为代理分配特定角色,这些角色定义其能力和权限。这种基于角色的设计导致了一个更有条理和可管理的系统,可以在其中添加、删除或修改代理,同时对整体架构的影响最小。这种灵活性确保系统能够不断发展并适应新的要求,而无需进行重大的重新设计。
适应性和学习能力
现实世界的环境通常是动态的、不可预测的和不断发展的。代理框架使代理能够感知周围环境的变化并相应地调整其行为。这种适应性确保代理即使在复杂且不断变化的场景中也能有效运作,从而使他们能够更好地应对现实世界的挑战。
此外,代理框架经常包含学习机制,使代理能够随着时间的推移提高其性能。通过从反馈和经验中学习,座席可以不断优化他们的决策流程并适应出现的新挑战。这种持续改进使代理变得更加有效和有价值,从而有助于系统的长期效率和成功。
说到代理框架,我们来介绍一个在 AI 社区掀起波澜的框架:CrewAI。
什么是 CrewAI?
CrewAI 是一个开源 Python 框架,旨在支持开发和管理多代理 AI 系统。
CrewAI 通过分配特定角色、实现自主决策和促进代理之间的沟通来改进这些 AI 系统。这种方法使他们能够比单独工作更有效地解决复杂问题。
该框架由一系列工具组成,包括 Web 搜索引擎和语言模型,使代理能够与外部世界互动、收集信息并采取行动实现其目标。
CrewAI 的设计和可扩展性使其非常适合开发基本和复杂的多代理应用程序,鼓励在 AI 系统内采用协作方法来应对挑战和做出决策。
让我们来看看使 CrewAI 成为构建多智能体系统的强大工具的一些关键功能。
- 代理编排:CrewAI 确保每个代理都知道自己在表演中的角色。它提供了定义和协调代理行为的工具,确保每个人都同步播放。
- 基于角色的架构:就像为音乐家分配不同的乐器一样,CrewAI 允许您为代理分配特定角色,定义他们的能力和权限。这创建了一个模块化和结构良好的系统,即使事情变得复杂时也是如此。
- 灵活的沟通: CrewAI 支持各种沟通渠道,允许代理无缝交换信息。把它想象成将私人聊天、小组讨论和扩音器合二为一。
- 工具集成:CrewAI 使代理能够通过各种工具与世界互动。这些工具使代理能够搜索 Web、理解语言、分析数据和执行自定义任务。
- 可扩展性: CrewAI 旨在轻松扩展,确保您的多代理系统在增长时保持响应和高效。
但是 CrewAI 带来了什么好处呢?让我们来探索它的优势。
使用 CrewAI 的好处
Crew.ai 使多个 AI 代理能够协作、共享知识并协调他们的行动以实现共同目标。
通过自动化任务分配和资源管理,Crew.ai 使代理能够以最少的开销专注于其特定角色。
该框架还支持适应性,允许代理根据不断变化的条件或目标调整其行为。
此外,Crew.ai 通过用于创建和管理多代理系统的用户友好平台简化了开发过程。
CrewAI 的另一个关键优势是它与各种工具的集成。这扩展了代理的功能,允许它们与外部世界交互并收集信息。
CrewAI 支持 Web 搜索引擎、语言模型、数据分析工具甚至定制功能等工具。这使代理能够执行超出其核心功能的任务,例如从 Web 检索信息或执行复杂的数据分析。
动手实践:使用 CrewAI 构建 Web 搜索工具
让我们卷起袖子,使用 CrewAI 工具构建一个工作流程,从网站中抓取内容,然后对其执行 RAG。
我们需要编写代码来使该工具正常工作。在开始之前,让我们使用 :crewai-toolscrewaipip
<button class="code-copy-button" data-trackid="copy-code" style="background-repeat: no-repeat; -webkit-box-align: center; align-items: center; border-width: 0px; border-style: initial; border-color: initial; border-radius: 50%; box-shadow: none; display: flex; height: 32px; -webkit-box-pack: center; justify-content: center; line-height: 1.5; padding: 0px; position: absolute; right: 16px; top: 16px; width: 32px;"><svg aria-hidden="true" height="16" width="16" viewBox="0 0 18 18" class="css-6su6fj"></svg></button> pip install crewai-tools crewai
安装软件包后,请按照以下步骤作。在此示例中,我们将使用三种不同的工具:抓取网站、编写文件和搜索 RAG 的上下文。让我们开始吧。ScrapeWebsiteToolFileWriterToolTXTSearchTool
第 1 步:抓取网站
我们首先导入必要的库并初始化 .此工具用于从网站中提取内容。在本例中,它被设置为从 Wikipedia 的 “Artificial Intelligence” 页面抓取内容:ScrapeWebsiteTool
<button class="code-copy-button" data-trackid="copy-code" style="background-repeat: no-repeat; -webkit-box-align: center; align-items: center; border-width: 0px; border-style: initial; border-color: initial; border-radius: 50%; box-shadow: none; display: flex; height: 32px; -webkit-box-pack: center; justify-content: center; line-height: 1.5; padding: 0px; position: absolute; right: 16px; top: 16px; width: 32px;"><svg aria-hidden="true" height="16" width="16" viewBox="0 0 18 18" class="css-6su6fj"></svg></button> from crewai_tools import ScrapeWebsiteTool, FileWriterTool, TXTSearchTool import requests # Initialize the tool, potentially passing the session tool = ScrapeWebsiteTool(website_url='https://en.wikipedia.org/wiki/Artificial_intelligence') # Extract the text text = tool.run() print(text)
步骤 2:将提取的文本写入文件
我们现在使用FileWriterTool将提取的文本保存到名为 的文件中。 ai.txt
<button class="code-copy-button" data-trackid="copy-code" style="background-repeat: no-repeat; -webkit-box-align: center; align-items: center; border-width: 0px; border-style: initial; border-color: initial; border-radius: 50%; box-shadow: none; display: flex; height: 32px; -webkit-box-pack: center; justify-content: center; line-height: 1.5; padding: 0px; position: absolute; right: 16px; top: 16px; width: 32px;"><svg aria-hidden="true" height="16" width="16" viewBox="0 0 18 18" class="css-6su6fj"></svg></button> # Initialize the tool file_writer_tool = FileWriterTool() # Write content to a file in a specified directory result = file_writer_tool._run(filename='ai.txt', content = text, directory = '', overwrite=True) print(result)
第 3 步:设置文本搜索工具
我们设置了另一个工具来搜索我们刚刚保存的文件ai.txt的内容。我们还为 OpenAI API 密钥设置了环境变量。
<button class="code-copy-button" data-trackid="copy-code" style="background-repeat: no-repeat; -webkit-box-align: center; align-items: center; border-width: 0px; border-style: initial; border-color: initial; border-radius: 50%; box-shadow: none; display: flex; height: 32px; -webkit-box-pack: center; justify-content: center; line-height: 1.5; padding: 0px; position: absolute; right: 16px; top: 16px; width: 32px;"><svg aria-hidden="true" height="16" width="16" viewBox="0 0 18 18" class="css-6su6fj"></svg></button> import os from crewai_tools import TXTSearchTool os.environ['OPENAI_API_KEY'] = 'API-KEY' # Initialize the tool with a specific text file, so the agent can search within the given text file's content tool = TXTSearchTool(txt='ai.txt')
第 4 步:为任务创建代理并执行它
我们创建一个具有教育者角色的数据分析师代理。该代理的任务是根据我们在文件中搜索的文本回答问题 “什么是自然语言处理?
<button class="code-copy-button" data-trackid="copy-code" style="background-repeat: no-repeat; -webkit-box-align: center; align-items: center; border-width: 0px; border-style: initial; border-color: initial; border-radius: 50%; box-shadow: none; display: flex; height: 32px; -webkit-box-pack: center; justify-content: center; line-height: 1.5; padding: 0px; position: absolute; right: 16px; top: 16px; width: 32px;"><svg aria-hidden="true" height="16" width="16" viewBox="0 0 18 18" class="css-6su6fj"></svg></button> from crewai import Agent, Task, Crew context = tool.run('What is natural language processing?') data_analyst = Agent( role='Educator', goal=f'Based on the context provided, answer the question - What is Natural Language Processing? Context - {context}', backstory='You are a data expert', verbose=True, allow_delegation=False, tools=[tool] ) test_task = Task( description="Understand the topic and give the correct response", tools=[tool], agent=data_analyst, expected_output='Give a correct response' ) crew = Crew( agents=[data_analyst], tasks=[test_task] ) output = crew.kickoff()
输出:
结论
CrewAI 为管理多代理系统提供了一个实用的平台。无论是抓取内容还是委派任务,此框架都支持代理之间的协作并帮助他们适应和改进。
通过集成工具和提供有序的结构,CrewAI 使开发人员能够更轻松地管理座席交互、分配任务并确保最佳性能。