【AI Agent技术论文】《AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation》
2024年5月,微软AutoGen的技术论文《AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation》荣膺ICLR 2024大会LLM 智能体专题研讨会最佳论文殊荣。正好笔者最近对于Multi-Agent的技术和产品比较感兴趣,就一边读一边翻一边分享给大家,有兴趣的可以留言交流~
简介
大型语言模型(LLMs)正逐渐成为开发强大智能体的关键组成部分,这些智能体能够利用LLMs进行推理、使用工具和适应新观测,并在许多现实世界任务中表现出色。随着可以从LLMs中受益的任务不断扩展,任务的复杂性也在不断增加,一种直观的解决方法是通过使用多个合作的智能体来增强整体能力。已有研究表明,多智能体协作可以促进发散思维,提高事实性和推理能力,并提供验证。基于这一直觉和初步的有利证据,可以提出以下有趣的问题:如何促进基于多智能体方法的LLM应用开发,以覆盖广泛的领域和复杂性?
有一种理念是通过多智能体对话来实现这一点。根据LLMs的最新进展,至少有三个理由可以确认其广泛的可行性和实用性:
首先,优化聊天的LLMs(例如,GPT-4)显示出结合反馈的能力,LLM智能体可以通过彼此或与人类的对话合作,例如提供和寻求推理、观测、批评和验证。
其次,单个LLM可以表现出广泛的能力(特别是在使用正确的prompt和推理设置时),不同配置的智能体之间的对话可以以模块化和互补的方式结合这些LLM能力。
第三,LLMs已经证明,当复杂的任务被分解为更简单的子任务时,会有可能更好地被解决。多智能体对话可以以一种直观的方式实现这种分解和整合。
那么,如何利用上述见解并支持具有协调多个智能体(可能由LLMs、人类或展示不同能力的工具支持)的共同需求的不同应用?需要一个具有通用抽象和有效实现的多智能体对话框架,具有灵活性以满足不同的应用需求。要实现这一点,需要解决两个关键问题:(1)如何设计能够在多智能体协作中有效、可重用、可定制和高效的单个智能体?(2)如何开发一个简单、统一的接口,可以容纳广泛的智能体对话模式?
在实践中,不同复杂性的应用可能需要具有特定能力的不同智能体集合,并且可能需要不同的对话模式,例如单轮或多轮对话,不同的人类参与模式,以及静态与动态对话。此外,开发人员可能更喜欢用自然语言或代码来编程智能体交互。如果不能充分解决这两个问题,将限制框架的适用范围和通用性。
在探索多智能体方法的同时,微软研究院团队(后面简称“团队”)提出了AutoGen,一个基于以下新概念的通用多智能体对话框架(如图1)。
图1:AutoGen 通过多智能体对话支持多样化的基于LLM的应用。(左) AutoGen智能体是可对话的、可定制的,并且可以基于LLM、工具、人类,甚至它们的组合。(中上)智能体可以通过对话来解决任务。(右)它们可以组成一个聊天,可能会有人类参与其中。(中下)该框架支持灵活的对话模式。
1. 可定制和可对话的智能体。AutoGen使用智能体的通用设计,可以利用LLMs、人类输入、工具或它们的组合。开发人员可以通过选择和配置内置能力的子集,轻松快速地创建具有不同角色的智能体(例如,编写代码的智能体、执行代码的智能体、连接人类反馈的智能体、验证输出的智能体等)。智能体的后端也可以轻松扩展以允许更多自定义行为。为了使这些智能体适合多智能体对话,每个智能体都被设计为可对话的——它们可以接收、反应和回应消息。适当配置时,智能体可以自主地与其他智能体进行多轮对话,或在某些轮次中请求人类输入。可对话智能体设计利用了最先进LLMs在通过聊天接受反馈并进展的强大能力,并且还允许以模块化方式结合LLMs的能力。
2. 对话编程。AutoGen的一个基本理念是将复杂的LLM应用工作流简化和统一为多智能体对话。因此,AutoGen采用了一种围绕这些智能体间对话的编程范式。团队将这种范式称为对话编程,通过两个主要步骤简化复杂应用的开发:(1)定义具有特定能力和角色的可对话智能体集(如上所述);(2)通过以对话为中心的计算和控制编程智能体之间的交互行为。通过自然语言和编程语言的融合,可以实现。
AutoGen框架
AutoGen的核心设计原则是通过多智能体对话来整合和简化多智能体工作流,从而减轻开发人员在各个领域创建复杂LLM应用时的工作负担。这种方法还旨在最大化已经实现的智能体的可重用性。本节介绍了AutoGen的两个关键概念:可对话智能体和对话编程
可对话智能体
在 AutoGen 系统中,智能体是具备特定角色的实体,能够通过消息传递与其他智能体进行信息交换,从而启动或继续对话。这些智能体通过接收和发送消息来维护其内部上下文,并可以配置为具备一组特定能力,例如由LLMs、工具或人类输入等驱动。智能体可以根据编程行为模式执行任务。
由 LLMs、人类和工具驱动的智能体能力。在 AutoGen 中,智能体的能力决定了其处理和响应消息的方式,因此系统允许为智能体赋予多种灵活的能力。AutoGen 支持多种常见的可组合智能体能力,包括:
LLMs:利用先进的LLMs,智能体可以执行角色扮演、基于对话历史进行隐式状态推断和进展、提供反馈、从反馈中学习以及编码。这些能力可以通过新颖的提示技术组合,以增强智能体的技能和自主性。AutoGen 还通过增强的 LLM 推理层提供更强的推理功能,如结果缓存、错误处理和消息模板化等。
人类:在许多应用中,人类的参与是必要的甚至是关键的。AutoGen 允许人类通过支持智能体参与对话,这些智能体可以在对话的某些回合中征求人工输入。默认的用户代理智能体可以配置人类参与的级别和模式,例如人工输入的频率和条件,同时也允许人类选择跳过提供输入。
工具:工具支持的智能体能够通过代码执行或函数调用来操作工具。例如,AutoGen 中的默认用户代理智能体可以执行 LLM 建议的代码或函数调用。
智能体定制和合作。根据具体应用需求,每个智能体可以配置为混合的基本后端类型,以在多智能体对话中展示复杂行为。AutoGen 允许通过重用或扩展内置智能体,轻松创建具有专门能力和角色的智能体。图2中黄色阴影区域展示了 AutoGen 内置智能体的示意图。ConversableAgent 类是最高级别的智能体抽象,默认情况下可以使用 LLMs、人类和工具。AssistantAgent 和 UserProxyAgent 是两个预配置的 ConversableAgent 子类,分别代表两种常见的使用模式:作为 AI 助手(由 LLMs 支持)和作为人类代理以征求人工输入或执行代码/函数调用(由人类和/或工具支持)。
图2:如何使用AutoGen编程多智能体对话的示意图。上图展示了AutoGen提供的内置智能体,这些智能体具有统一的对话接口并且可以自定义。中图显示了一个使用AutoGen开发双智能体系统的示例,其中包含自定义回复功能。下图展示了在程序执行过程中由双智能体系统产生的自动化代理聊天结果。
在图1右侧的示例中,LLM 支持的助手智能体和工具及人类支持的用户代理智能体被一起部署以完成任务。助手智能体在 LLMs 的帮助下生成解决方案,并将其传递给用户代理智能体。然后,用户代理智能体征求人工输入或执行助手的代码,并将结果作为反馈传递回助手。
通过允许定制的智能体相互对话,AutoGen 中的智能体成为有用的构建块。然而,为了在任务上取得有意义的进展,开发人员还需要能够指定和塑造这些多智能体对话。
对话编程
作为上述问题的解决方案,AutoGen 采用了对话编程,这是一种基于两个核心概念的范式:第一个是计算——即智能体在多智能体对话中执行的计算动作;第二个是控制流——这些计算执行的顺序或条件。通过编程这些能力,可以实现多种灵活的多智能体对话模式。在 AutoGen 中,计算以对话为中心,智能体根据对话采取行动,这些行动会引发后续对话的信息传递(除非满足终止条件)。同样,控制流也是由对话驱动的,智能体决定将消息发送给哪些其他智能体以及计算过程如何进行。这种范式有助于直观地推理复杂的工作流程,如智能体的动作和智能体间的信息传递。
图2提供了一个简单的示例。底部子图展示了各个智能体如何执行其特定角色的对话计算来生成响应(例如,通过调用LLM推断和代码执行)。任务通过对话框中的对话进行。中间子图展示了基于对话的控制流。当助手收到消息时,用户代理智能体通常将人类输入作为回复发送。如果没有输入,它会执行助手消息中的任何代码。
AutoGen 具有以下设计模式以促进对话编程:
1. 统一接口和自动回复机制用于自动化智能体聊天。AutoGen 中的智能体具有统一的对话接口,用于执行相应的对话计算,包括发送/接收消息和生成回复。AutoGen 还引入并默认采用了一种智能体自动回复机制以实现对话驱动的控制:一旦智能体从另一个智能体接收到消息,它会自动生成回复并将回复发送回发送者,除非满足终止条件。AutoGen 提供基于 LLM 推断、代码执行或人类输入的内置回复功能。用户还可以注册自定义回复函数以定制智能体的行为模式,例如,在回复发送者智能体之前与另一个智能体进行对话。在这种机制下,一旦注册了回复函数并初始化了对话,对话流自然进行,无需额外的控制模块。例如,通过图2中蓝色阴影区域(标记为“开发者代码”)中的开发者代码,可以轻松触发智能体之间的对话,并且对话会自动进行,如图2中灰色阴影区域(标记为“程序执行”)的对话框所示。自动回复机制提供了一种去中心化、模块化和统一的方式来定义工作流程。
2. 通过编程和自然语言的融合进行控制。AutoGen 允许在各种控制流管理模式中使用编程和自然语言进行控制:
1)通过 LLM 进行自然语言控制。在 AutoGen 中,可以通过提示基于 LLM 的智能体以自然语言控制对话流。例如,AutoGen 中内置的 AssistantAgent 的默认系统消息使用自然语言指示智能体在先前结果表明存在错误时修复错误并重新生成代码。它还指导智能体将 LLM 输出限制在某些结构内,使其他工具支持的智能体更容易使用。例如,指示智能体在所有任务完成时回复“TERMINATE”以终止程序。更多具体的自然语言控制示例可以在附录C中找到。
2)编程语言控制。在 AutoGen 中,可以使用 Python 代码指定终止条件、人类输入模式和工具执行逻辑,例如自动回复的最大次数。用户还可以注册编程的自动回复函数以使用 Python 代码控制对话流,如图2中标识为“对话驱动控制流”的代码块所示。
3)自然语言和编程语言之间的控制转换。AutoGen 还支持自然语言和编程语言之间的灵活控制转换。可以通过在自定义回复函数中调用包含某些控制逻辑的 LLM 推断来实现从代码到自然语言控制的转换;或通过 LLM 提出的函数调用实现从自然语言到代码控制的转换。
在对话编程范式中,可以实现多种模式的多智能体对话。除了具有预定义流的静态对话,AutoGen 还支持具有多个智能体的动态对话流。
在对话编程范式中,可以实现多种多智能体的对话模式。除了具有预定义流程的静态对话外,AutoGen还支持多智能体的动态对话流程。AutoGen提供了两种实现方式:1)自定义生成回复函数:在这种方法中,一个智能体可以在当前对话中持续对话,并根据当前消息和上下文内容与其他智能体对话。2)函数调用:在这种方法中,LLM可以根据对话状态决定是否调用特定函数,通过调用函数向其他智能体发送消息,从而驱动动态的多智能体对话。此外,AutoGen通过内置的GroupChatManager支持更复杂的动态群聊,该管理器能够动态选择下一个发言者,并将其回复广播给其他智能体。AutoGen提供了一个工作系统来展示这些模式,其中一些在图3中进行了可视化展示。
AutoGen应用
本章节展示了六个应用程序,通过这些应用程序演示了AutoGen在简化高性能多智能体应用程序开发中的潜力(见图3)。这些应用程序的选择是基于它们与现实世界的相关性(A1、A2、A4、A5、A6)、问题难度以及AutoGen在解决这些问题和创新方面的能力(A1、A2、A3、A4)而确定的。总的来说,这些示例展示了AutoGen在推动LLM应用程序领域发展中的作用。
图3:使用AutoGen构建的六个多样化应用示例。这些对话模式展示了AutoGen的灵活性和强大功能。
A1: 数学问题求解
数学作为一门基础学科,利用LLM辅助数学问题求解开启了新的应用和探索途径,包括个性化AI辅导和AI研究辅助等。本节展示了AutoGen如何帮助开发用于数学问题求解的LLM应用程序,展示了其在支持各种问题解决范式方面的强大性能和灵活性。
(场景1)通过直接重用AutoGen中的两个内置智能体构建自主数学问题求解系统。对AutoGen系统和几种替代方法进行评估,包括Multi-Agent Debate、LangChain React、原始GPT-4和商业产品ChatGPT + Code Interpreter以及ChatGPT + Plugin(Wolfram Alpha)等开源和商业方法,团队在MATH数据集上进行了测试,并在图4(a)中总结了结果。团队在对120个随机选择的5级问题以及整个MATH测试数据集进行了评估后,结果显示与其他方法相比,AutoGen中的内置智能体在开箱即用时表现更佳。
图4:四个应用 A1-A4 的性能表现。
(场景2)在AutoGen的帮助下进行人机协作问题解决的过程。通过将人类反馈与AutoGen结合,只需在场景1中的系统的UserProxyAgent中设置human input mode='ALWAYS'。研究证明这个系统能够有效地将人类输入融入到解决那些难以在没有人类帮助的情况下解决的问题中。
(场景3)多个人类用户可以参与问题解决过程中的对话。团队的实验和案例研究表明,相比于他们尝试过的其他解决方案,AutoGen能够实现更好的性能和提供全新的体验。由于篇幅限制,关于这三个场景的评估细节和案例研究将在原文附录D中提供。
A2: 检索增强代码生成和问答
检索增强已经成为减轻LLM固有限制的一个实用且有效的方法,通过整合外部文档。在本节中,团队使用AutoGen构建了一个检索增强生成(RAG)系统,名为检索增强聊天。该系统包括两个智能体:一个是检索增强用户代理智能体,另一个是检索增强助手智能体,两者都是从AutoGen的内置智能体扩展而来。检索增强用户代理包括一个带有SentenceTransformers作为上下文检索器的向量数据库。具体的工作流程描述在附录D中提供。我们在问答和代码生成场景中评估了检索增强聊天。
(场景1)在自然问题回答方面对自然问题数据集进行评估,并在图4b中报告结果。在这个评估中,团队将AutoGen系统与DPR(密集通道检索)进行比较。AutoGen引入了一种新颖的交互式检索功能:每当检索到的上下文不包含信息时,基于LLM的助手将回复“抱歉,我找不到有关...的任何信息。更新上下文。”这将引发更多的检索尝试。团队还进行了消融研究,在这项研究中,团队提示助手智能体在未找到相关信息的情况下说“我不知道”,而不是“更新上下文。”,并在图4(b)中报告结果。结果表明,交互式检索机制确实在过程中起到了重要作用。使用这一吸引人特性的具体示例和结果在附录D中提供。
(场景2)进一步展示了检索增强聊天如何帮助基于给定代码库生成代码,该代码库包含GPT-4训练数据中未包含的代码。两个场景的评估和演示细节均包括在原文附录D中。
A3: 文本世界环境中的决策制定
这一小节展示了如何使用AutoGen来开发涉及互动或在线决策的有效应用程序。团队使用ALFWorld基准进行研究,该基准包括一个多样化的合成语言交互决策任务集合,涉及家庭环境。
通过AutoGen,团队实现了一个两智能体系统来解决ALFWorld的任务。系统包括一个由LLM支持的助理智能体,负责建议执行任务的计划,以及一个执行智能体,负责在ALFWorld环境中执行动作。该系统集成了ReAct提示,能够实现类似的性能。ReAct和基于AutoGen的两智能体系统都面临的一个常见挑战是它们偶尔无法利用关于物理世界的基本常识。这种缺陷可能导致系统由于重复错误而陷入循环。幸运的是,AutoGen的模块化设计能够有效解决这个问题:通过AutoGen能够引入一个基础智能体,为系统展示早期出现重复错误的迹象时提供关键的常识知识,比如“你必须找到并拿起物体才能检查它。你必须去目标物体所在的地方才能使用它。”。这显著增强了系统避免陷入错误循环的能力。团队将AutoGen系统的两个变体与GPT-3.5-turbo和ReAct7在ALFWorld的134个未见任务上的任务解决性能进行比较,并在图4(c)中报告结果。结果表明,引入一个基础智能体可以平均提高15%的性能。在检查系统输出时,团队观察到,通过在正确时机提供背景常识知识,基础智能体显著减轻了系统坚持错误计划的倾向,从而避免了错误循环的产生。有关比较系统的示例轨迹,请参见原文附录D和图10。
A4: 多智能体编码
在本节中,团队基于OptiGuide使用AutoGen构建了一个多智能体编码系统。该系统擅长编写代码以解释优化解决方案,并回答用户问题,例如探讨更改供应链决策的影响或理解优化器的具体选择。图3的第二个子图展示了基于AutoGen的多智能体编码系统的实现。
工作流程如下:终端用户向Commander智能体提问,例如“如果我们禁止从供应商1向烘焙厂2运输会怎样?”Commander协调两个助手智能体:Writer和Safeguard,共同回答这个问题。Writer编写代码并发送给Commander。收到代码后,Commander会与Safeguard一起检查代码的安全性。如果通过,Commander将使用外部工具(如Python)执行代码,并请求Writer解释执行结果。例如,Writer可能会解释“如果我们禁止从供应商1向烘焙厂2运输,总成本将增加10.5%。”然后Commander将这个最终答案提供给终端用户。如果在某个步骤出现异常,例如Safeguard提出安全警告,Commander会将问题和调试信息重新发送给Writer。这个过程可能会重复多次,直到用户的问题得到解答或系统超时。
使用AutoGen,OptiGuide的核心工作流程代码从超过430行减少到100行,大大提高了效率。原文附录D中提供了ChatGPT+代码解释器和基于AutoGen的OptiGuide的用户体验详细对比。结果显示,基于AutoGen的OptiGuide可以将用户的时间开销减少至原来的1/3,并将用户交互减少至原来的1/3至1/5。团队还进行了一个消融实验,证明了多智能体抽象的必要性。具体来说,团队构建了一个单智能体系统,其中一个智能体同时进行代码编写和安全检查过程。研究在一个包含100个编码任务的数据集上测试了单智能体和多智能体方法。该数据集被设计为包含等量的安全和不安全任务。图4(d)所报告的评估结果显示,多智能体设计在识别不安全代码方面将F-1分数提高了8%(使用GPT-4)和35%(使用GPT-3.5-turbo)。
A5: 动态群聊
AutoGen 原生支持一种动态群聊通信模式,参与的智能体共享相同的上下文,并以动态的方式进行对话,而不按照预定的顺序。动态群聊依靠持续的对话引导智能体之间的互动流程,这使其在需要灵活协作的情况下非常理想。在 AutoGen 中,GroupChatManager 类负责协调智能体对话,并重复以下三个步骤:动态选择发言者、收集发言者的响应并广播消息(见图3-A5)。在动态选择发言者时,团队使用角色扮演式的 prompt。通过对12个复杂手工任务的试点研究,发现与仅基于任务的 prompt 相比,角色扮演式 prompt 能更有效地结合对话上下文和角色定位,从而提高问题解决和发言者选择的效率,成功率更高且 LLM 调用次数更少。详细结果见原文附录D。
A6: 对话式国际象棋
利用 AutoGen,团队开发了对话式国际象棋,这是一款具有自然语言界面的游戏,如图3的最后一个子图所示。该游戏为玩家提供内置智能体,玩家可以是人类或 LLM,还包括一个根据标准规则提供信息并验证走棋的第三方棋盘智能体。通过 AutoGen,团队实现了两大核心功能:(1) 自然、灵活且有趣的游戏动态,通过 AutoGen 的可定制智能体设计实现。会话棋支持 AI 对 AI、AI 对人类和人类对人类等多种游戏模式,并在一局游戏中无缝切换。有关这些有趣游戏动态的示例,请参见图15,附录D。(2) 基础规则验证,这对于维护游戏完整性至关重要。在游戏过程中,棋盘智能体检查每一步走棋是否合法;如果走棋无效,智能体会发出错误提示,要求玩家重新走合法的一步。这一过程确保了游戏中的所有走棋都是合法的,保持了一致的游戏体验。作为消融研究的一部分,我们移除了棋盘智能体,仅依赖一个相关的 prompt“你应该确保你和对手都在进行合法的走棋”来约束。结果显示,没有棋盘智能体的情况下,非法走棋会导致游戏中断。模块化设计提供了灵活性,使我们能够迅速调整棋盘智能体,以适应不断变化的游戏规则或不同的国际象棋规则变体。详见原文附录D。
讨论
本文介绍了一个开源库 AutoGen,它结合了对话智能体和对话编程的范式。这个库利用了适合多智能体合作的强大智能体。它提供了智能体之间的统一对话接口和自动回复机制,建立了一个能够充分利用聊天优化的 LLM 优势的智能体交互接口,并适应各种应用需求。AutoGen 作为一个通用框架,用于创建和实验多智能体系统,能够轻松满足各种实际需求,例如重用、定制和扩展现有智能体,以及编程智能体之间的对话。
本文的实验证明了这种方法的诸多好处。采用 AutoGen 提高了性能(优于当前最先进的方法),减少了开发代码和现有应用的手动负担。它为开发人员提供了灵活性,如 A1(情景3)、A5 和 A6 所展示的那样,AutoGen 使多智能体对话能够遵循动态模式,而不是固定的互动方式。它允许人类以对话方式与多个 AI 智能体共同参与活动。尽管这些应用非常复杂(大多数涉及两个以上的智能体或动态多轮智能体合作),基于 AutoGen 的实现仍然很简单。将任务分配给不同的智能体促进了模块化。此外,由于每个智能体可以独立开发、测试和维护,这种方法简化了整体开发和代码管理。
尽管这项工作仍处于早期实验阶段,但它为未来的许多研究方向和机会铺平了道路。例如,用户可以探索现有智能体的有效集成,并研究在多智能体工作流程中自动化和人类控制之间的最佳平衡。随着进一步开发和完善 AutoGen,团队希望研究哪些策略(如智能体拓扑和对话模式)能够带来最有效的多智能体对话,同时优化整体效率。虽然增加智能体数量和其他自由度为解决更复杂的问题提供了机会,但也可能带来新的安全挑战,这需要进一步研究和仔细考虑。
通常我不大翻译附录部分,但这篇文章附录部分干货较多,所以破个例~
附录A: 相关工作
团队研究了现有的基于 LLM 的智能体系统或框架,这些系统或框架可以用来构建 LLM 应用。然后将相关工作分为单智能体系统和多智能体系统,并在表1中专门提供了 AutoGen 与现有多智能体系统的区别摘要。请注意,这些系统中的许多都是不断发展的开源项目,因此关于它们的评论和陈述可能只在撰写时准确。
单智能体系统
AutoGPT:AutoGPT 是一个尝试自主实现给定目标的 AI 智能体的开源实现(AutoGPT, 2023)。它遵循单智能体范式,增强了 AI 模型的许多有用工具,但不支持多智能体协作。
ChatGPT+(带代码解释器或插件):ChatGPT 是一种会话式 AI 服务或智能体,现在可以与代码解释器或插件一起使用(目前仅在高级订阅计划 ChatGPT Plus 下提供)(OpenAI, 2023)。代码解释器使 ChatGPT 能够执行代码,而插件则通过广泛的工具提升 ChatGPT 的功能。
LangChain Agents:LangChain 是一个用于开发基于 LLM 应用程序的一般框架。LangChain Agents 是一个子包,用于使用 LLM 选择一系列操作。LangChain Agents 中有各种类型的智能体,其中 ReAct 智能体是一个显著的例子,它结合了在使用 LLM 时的推理和行动(主要设计用于 ChatGPT 之前的 LLMs)。LangChain Agents 中提供的所有智能体都遵循单智能体范式,本质上不适用于交流和协作模式。关于其局限性的显著摘要可以在中找到。由于这些局限性,即使是 LangChain 中的多智能体系统(例如 CAMEL 的重新实现)也不是基于 LangChain Agents 而是从头开始实现的。它们与 LangChain 的连接在于使用了 LangChain 提供的基本编排模块,例如由 LangChain 包装的 AI 模型和相应的接口。
Transformers Agent:Transformers Agent是一个基于 transformers 库的实验性自然语言 API。它包括一组精选工具和一个智能体来解释自然语言并使用这些工具。与 AutoGPT 类似,它遵循单智能体范式,不支持智能体协作。
多智能体系统
BabyAGI:BabyAGI是一个基于 AI 的任务管理系统示例,通过 Python 脚本实现。在这个系统中,使用了多个基于 LLM 的智能体。例如,有一个智能体用于根据目标和前一任务的结果创建新任务,一个智能体用于对任务列表进行优先级排序,还有一个智能体负责完成任务或子任务。作为多智能体系统,BabyAGI 采用静态智能体对话模式,即预定义的智能体通信顺序。而 AutoGen 则支持静态和动态对话模式,并且还支持工具使用和人类参与。
CAMEL:CAMEL是一个通信智能体框架。它展示了如何通过角色扮演让聊天智能体相互通信以完成任务。它还记录智能体之间的对话,用于行为分析和能力理解。采用了一种 Inception-prompting 技术来实现智能体之间的自主合作。与 AutoGen 不同,CAMEL 不支持原生工具使用,例如代码执行。尽管它被设计为多智能体对话的基础设施,但仅支持静态对话模式,而 AutoGen 则同时支持动态对话模式。
多智能体辩论:最近的两项研究表明,多智能体辩论是一种有效的方法,可以鼓励 LLM 的发散思维,并提高其事实性和推理能力。在这两项研究中,多个 LLM 推理实例被构建为多个智能体,通过智能体辩论来解决问题。每个智能体仅是一个 LLM 推理实例,没有涉及工具或人类,并且智能体之间的对话需要遵循预定义的顺序。这些研究尝试构建具有多智能体对话的 LLM 应用,而 AutoGen 作为一个通用基础设施,可以促进此类开发,并支持更多具有动态对话模式的应用。
MetaGPT:MetaGPT是一个基于多智能体对话框架的专用 LLM 应用,用于自动化软件开发。他们为不同的 GPT 分配不同角色,以协同开发软件。与 AutoGen 不同,MetaGPT 是针对特定场景的专用解决方案,而 AutoGen 是一个通用基础设施,旨在促进各种场景下的应用构建。 还有一些其他专用的单智能体或多智能体系统,如 Voyager 和 Generative Agents,由于相关性较低略过不提。表1总结了 AutoGen 与最相关的多智能体系统之间的区别。
表1:AutoGen和类似多智能体系统之间的区别
附录C: 助理智能体的系统Prompt
你是一位有用的 AI 助手,利用人的编程和语言技能来解决任务。
在以下情况下,为用户提供 Python 代码(在 Python 代码块中)或 Shell 脚本(在 sh 代码块中)以供执行。
1.当你需要收集信息时,使用代码输出所需的信息。例如,浏览或搜索网页,下载或读取文件,打印网页或文件的内容,获取当前日期和时间。当打印出足够的信息且任务可以通过你的语言技能解决时,你可以继续解决任务。
2.当你需要使用代码执行任务时,编写代码执行任务并输出结果。智能地完成任务。
如果需要,请分步骤完成任务。如果没有提供计划,请先解释你的计划。明确指出哪个步骤使用代码,哪个步骤使用语言技能。
使用代码时,必须在代码块中指明脚本类型。用户不能提供任何其他反馈,也不能执行你建议的代码之外的任何操作。用户不能修改你的代码。因此,不要提供需要用户修改的不完整代码。如果不打算由用户执行,请不要使用代码块。
如果你希望用户在执行代码前将其保存在文件中,请在代码块的第一行放置 # filename: <filename>。不要在一个响应中包含多个代码块。不要要求用户复制和粘贴结果。相反,在适当的时候使用 'print' 函数输出结果。 检查用户返回的执行结果。
如果结果显示存在错误,请修复错误并重新提供代码。提供完整的代码,而不是部分代码或代码更改。如果无法修复错误,或者即使代码成功执行任务也未解决问题,请分析问题,重新检查假设,收集所需的其他信息,并尝试不同的方法。
当你找到答案时,请仔细验证。如果可能,请在响应中提供可验证的证据。
当一切完成后,请回复“TERMINATE”。