多智能体系统——Crew.AI

本博客是关于生成式人工智能的系列文章,介绍了多智能体架构和 Autogen、Crew.ai 等框架,这些框架有助于构建实现多智能体架构的智能机器人。在本博客中,我们将探索 crew.ai

多代理系统

在语言模型和人工智能的背景下,多智能体系统涉及多个独立参与者,每个参与者都由语言模型驱动,以特定方式协作。

在本篇博文中,我们将深入探讨 crew.ai,它是用于构建多智能体应用程序的新兴框架之一。Crew.ai 提供了一个框架,用于构建智能体以无缝协作,以与运转良好的团队动态相媲美的复杂程度处理复杂任务。Crew.AI 旨在使 AI 智能体能够承担角色、分享目标并在一个有凝聚力的单位中运作。

建筑学

CrewAI 的架构是模块化的,由几个关键组件组成,它们共同协作以实现一个精心策划的多智能体系统。下图显示了提供构建多智能体 LLM 应用程序框架的关键组件。

让我们从下往上仔细查看这张图片,以便了解它们是如何组合在一起的。

工具:工具对象是代理用来高效执行特定任务的实用工具/设备。例如,搜索网页、加载文档并阅读文档等。Crewai 是使用LangChain构建的,我们可以使用LangChain中的任何现有工具,也可以编写自定义工具。

任务:任务,顾名思义,是需要执行的具体任务。Agent 执行任务。我们提供执行任务所需的各种工具。

Agent:Agent 就像是剧组中的一名队员,具有特定的角色、背景故事、目标和记忆。Agent 是框架内分配任务的核心执行者。每个 CrewAI 代理都是一个 LangChain 代理,但增强了ReActSingleInputOutputParser。该解析器经过特别修改,可以更好地支持角色扮演,并包含用于上下文焦点的绑定停用词,并集成了记忆机制,使用对话摘要记忆用于维护上下文。

团队:将团队视为一个由代理组成的团队,共同努力实现特定目标。这些代理有明确定义的协作方式来完成手头的任务

流程:流程对象是工作人员完成任务所遵循的工作流程或策略。框架定义了 3 种策略(截至我撰写博客时。我知道有计划添加更多策略)。

  • 顺序:此策略按顺序执行给定的“任务”,并按照特定定义的顺序执行。此策略非常适合任何管道类型的工作,其中每个代理执行特定任务并将其传递给下一个代理。我们将在今天的示例中使用此策略为给定主题撰写博客。
  • 分层:此策略以层次结构组织任务,这些任务以分层方式委派并根据命令链执行。这非常接近协调器类型的模式。这就像经理将工作分配给各个代理,并在完成工作之前验证结果。当我们使用此策略时,我们需要配置一个manager_llm,以帮助做出正确的决策。我们将在下一篇博客中使用此策略构建解决方案。
  • 共识流程(计划):这是最受欢迎的策略之一,尚未发布,其中代理相互交谈以完成工作。这是基于协作决策,决策是民主做出的。这尚未发布,但我们有其他多系统框架,并且已经实施了此策略。我们将在未来的博客中探讨这一点

您可以在crewai 文档中阅读有关这些对象和 API 的更多信息。

现在让我们开始构建我们的第一个多代理系统,针对给定主题构建标记格式的博客。

代码

在开始工作之前,让我们先安装所有依赖项,在下面找到包含所有 python 依赖项的 rewuirements.txt。我运行pip install -r requirements.txt(在创建自己的虚拟环境后)来安装所有依赖项。

为了构建博客多代理应用程序,我们将实现 2 个代理

  • researcher:研究代理将在网上搜索给定主题并收集所有信息。我们设定法学硕士的背景,像研究人员一样思考,并获取有关该主题的所有所需材料。
  • blogger:Blogger 代理会将研究人员收集到的内容转换成博客。

这些代理将运行以下任务

  • task_search:此任务是关于在网络上搜索给定主题的所有相关内容。我们将提供 2 个工具(duckduckgo用于搜索的搜索工具duckduckgo和用于的网络搜索工具Serper),以支持task_search代理进行完整的研究
  • task_post:此任务是关于撰写博客,并使用 markdown 格式提供的信息。

我们将在笔记本电脑上运行 Ollama 上的模型。要了解有关 Ollama 的更多信息,请阅读我的博客列表

AB 维杰·库马尔

AB 维杰·库马尔

欧拉玛

查看列表

2 个故事

现在让我们看一下代码。以下代码显示了所有依赖项导入。

在第 9、10 行中,我们定义了将要使用的各种工具。要将 webtool 与 Serper 一起使用,您需要在Serper — 世界上最快、最便宜的 Google 搜索 API上注册服务器,然后生成 API 密钥,并在环境中进行配置。以下屏幕截图显示了如何访问 API 密钥

以下是我的.env文件,我们将使用dotenv库加载它。

请注意,我没有使用 OpenAI,但我无论如何都在以下代码中展示了如何使用 OpenAI(如果您不想在 Ollama 上运行模型)。就我而言,我misral在 Ollama 上安装了模型,并在本地使用它。如果您愿意,您可以使用 OpenAI/GPT 或任何其他 LLM。

在下面的代码中,我们定义了一个kickoffTheCrew(topic)方法。我们将从主博客调用该方法。我们将传递参数topic,以执行研究并生成博客。

在这个方法中,我们实例化了之前在博客中定义的 2 个代理 Researcher 和 Blogger。如您所见,我们为每个代理定义了一个特定的rolegoal并使用设置上下文backstory。所有这些都像是带有上下文的提示,提供正确的提示非常重要。我不得不多次微调它以获得最佳结果,我相信通过微调这 3 个参数我们可以获得更好的结果。我们还传递了要使用的 llm,请注意,在我们的示例中我们使用的是相同的 llm,但如果需要,我们可以为不同的代理使用多个不同的 llm,具体取决于代理要实现的目标。事实上,为了获得最佳结果,对代理要执行的特定任务使用最佳 llm 是一种很好的做法。

在下面的代码中,我们定义了我在博客中前面提到的 2 个任务,即搜索和撰写博客。请注意,对于task_search,我们提供了执行网络搜索的工具。另请注意,我们正在配置哪个代理将执行此任务。

为了将任务和代理结合在一起,我们将机组对象神化,并传递将在机组中工作的代理和任务,我们还将流程策略定义为顺序的。我们调用机组的启动方法,让代理执行提供的任务。

现在进入代码的主要部分,我们接收命令行参数作为主题,并将此主题传递给kickoffTheCrew我们上面定义的方法。这将执行系统

结果

现在让我们运行此代码。我录制了一个完整的截屏视频,供您查看结果(由于我们设置了详细模式,因此我们可以看到代理的完整执行情况。

这是我们的多代理博客应用程序创建的最终 markdown 的屏幕截图。

就是这样,多智能体系统能为我们带来很多惊喜,是不是很棒?我非常兴奋,一直在探索各种框架,期待收到您的回复。希望这对您有用。

给TA打赏
共{{data.count}}人
人已打赏
AI新闻

为什么视频编辑中的人工智能会改变游戏规则

2024-6-8 23:26:01

AI新闻

使用这三个必备的 AI 工具增强你的 Mac

2024-6-8 23:30:32

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
今日签到
有新私信 私信列表
搜索