2024年大模型Multi-agent多智能体应用技术:AutoGen, MetaGPT, XAgent, AutoAgents,crewAI
最近看了一些multi-agent协同框架,这里谈一谈我的个人感受,Agent刚开始出现的时候,代表性的是AutoGPT, BabyAGI(主张一个agent来调用工具来解决复杂的任务),代表方法是ReACT,总体上强调的是Agent使用工具的能力。后面出现了Multi-Agent(这个概念应该是借鉴的强化学习里面的Multi-agent),侧重角色扮演(通过写prompt给Agent赋予一个角色,并规范一些行为),和Agents之间的协作,竞争等策略来完成一项复杂的任务,我觉得除了从底层支持和改进多Agents协作的能力外,还需要建设Agent自动化调度(广播机制,订阅发布者机制),Multi-Agent通信协议,动态数量的Agents协作等,有了这些基础设施,就可以在原有的Agent基础上完成更高阶的任务。很直接的解释,Multi-Agent像是一个团队,团队里面的Agent更像是不同的工种,通过不同的Agent之间的分工协作(有的做规划,有的执行,执行的时候可以调用工具,也可以利用LLM本身的代码,总结能力等),完成一些比较复杂的任务。
与单智能体(即一个Agent完成所有的任务)的区别:
1.多智能体的每个Agent只需要关注自己的立场,与自己相关的信息即可。不需要cover所有的历史信息,而单智能体,比如AutoGPT,是需要记住所有的历史信息,意味着单智能体在面临长历史的复杂任务时,对记忆容量(大模型支持的序列长度)要求比较高。多智能体在这方面有很明显的优势。
2.通过角色扮演的机制可以排除一些其他视角的观点,让大模型的表现更稳定,单智能体由于混杂了很多任务,无法做到这一点。
3.可拓展性更好,单智能体的拓展性依赖于memory的一些节省token的策略,对于更复杂的任务,每次输入给大模型的context会变长,会产生性能下降的风险(大模型处理长序列会存在丢失关键信息的情况等等)。多智能体分工协作则没有这个问题,因为每个智能体只完成特定的子任务,子任务一般不会造成很长的context。
4.可以多方案并行探索,然后选取最优的解决方案。单智能体则没有这种优势,或者实现起来会相对麻烦一点。
还有很多优势,有兴趣可以参考下面的文章:
孔某人:谈复杂Agent策略框架的设计(2)【2023Q4】
如果想快速体验Multi-Agent的原生应用,推荐使用ERNIEBot Researcher写中文报告的应用,包括了所有Agents的设计全流程,UI界面等等,该应用通过多Agent协作和高效并行处理机制,有效攻克了速度瓶颈、决策确定性及成果可靠性等问题,链接如下:
MetaGPT
下图显示的是MetaGPT和现实世界人类团队之间的软件开发SOP(Standardized Operating Procedures ,维基百科的解释是组织编制的一套循序渐进的说明,用于帮助工人进行日常操作。SOP旨在实现效率、质量输出和性能一致性,同时减少沟通失误和不遵守行业法规的情况。)。在软件工程中,SOP促进不同角色之间的协作。MetaGPT展示了其将复杂任务分解为分配给不同角色的特定可操作过程的能力(例如Product Manager, Architect, Engineer等等)。
MetaGPT要求agent生成结构化输出,如高质量的需求文档、设计工件、流程图和接口规范。中间结构化输出的使用显著提高了目标代码生成的成功率。更形象地说,在MetaGPT模拟的公司中,所有员工都遵循严格而精简的工作流程,他们的所有交接都必须符合某些既定标准。这降低了LLM之间空闲聊天引起幻觉的风险,尤其是在角色扮演框架中,例如:"Hi, hello and how are you?" -Alice (Product Manager);"Great! Have you had lunch?" - Bob (Architect)
另外,MetaGPT提出了一个通信协议,以提高角色通信效率的,还实现了结构化的通信接口和有效的发布-订阅机制。这些方法使agent能够从其他角色和环境中的公共信息中获得方向信息。最后,作者提出了可执行反馈——一种self-correction mechanism, 用于在运行时进一步提高代码生成质量。上图显示的是通信协议的示例(左)和具有可执行反馈的迭代编程(右)。左边:agent使用共享消息池来发布结构化消息。他们还可以根据个人资料订阅相关消息。右边:生成初始代码后,Engineer代理将运行并检查错误。如果出现错误,代理会检查存储在内存中的过去消息,并将它们与PRD、系统设计和代码文件进行比较。
文中的附录还给了一个协作写游戏的demo,有兴趣可以去看一看。
代码链接:
论文链接:
AutoGen
AutoGen应该说是2023年最成功的Multi-Agent的Framework之一,为了减少开发人员跨各个域创建复杂LLM应用程序所需的工作量,AutoGen的一个核心设计原则是精简和使用多智能体对话来整合多智能体工作流。这种方法还旨在最大限度地提高实现的可重用性agents。本节介绍AutoGen的两个关键概念:conversable agents和conversation programming。
conversable agents是一个具有特定角色的实体,可以传递要发送和向其他conversable agents接收信息以及从其他conversable agents接收信息,例如,开始或继续对话。它基于发送和接收的消息维护其内部上下文,并且可以配置为拥有一组能力,例如由LLM、工具或人工输入等启用。
AutoGen的另一个概念是conversation programming,这是一种范式考虑了两个概念:第一个是computation——agents为计算其响应而采取的行动。在多智能体对话中。第二个是control flow——在发生这些计算(翻译有点别扭,直接贴了原文:the sequence (or conditions) under which these computations happen.)。computation是在conversation场景下,agent采取的动作,control flow仔细看其实就是使用prompt+LLM的方式进行控制(prompt大模型来重新修正生成的python代码),或者python代码进行控制(比如通过python代码来控制最大auto reply的数量)。
下图说明如何使用AutoGen对多智能体对话进行编程。顶部子图 说明了AutoGen提供的内置agent,这些智能体具有统一的会话接口,并且可以被定制。中间的子图显示了使用AutoGen进行开发的示例,具有自定义回复功能的双智能体系统。底部的子图说明了结果,程序执行过程中来自双智能体系统的自动智能体聊天
作者在论文里面列举了6大应用,解数学题,检索增强的问答和代码生成,ALFWorld的虚拟环境的决策,Multi-agent编程,动态群组的聊天,对话式的国际象棋(Conversational Chess),都是一些比较有意思的应用,我这里就不细讲了,有兴趣的可以看看论文。
代码链接:
论文链接:
AutoAgents
AutoAgents的过程是分为两个关键阶段:Drafting 阶段和Execution阶段。Drafting阶段包括三个预定义agent(Planner、Agent Observer和Plan Observer)之间的协作讨论来综合定制的agent团队和适合输入问题的执行计划或任务。Execution阶段通过agent间协作和反馈完善计划,以及产生最终结果。论文提出self-refinement ,通过个体agent和协作进行自我完善通过多个agent进行细化,以提高agent的熟练程度并促进各agent之间的知识共享agents。为了促进合成团队中agents之间的具体分工,作者引入预定义的agent(Action Observer)以协助agents团队共享信息,协调行动,达成共识,适应环境。
如下图,AutoAgents系统以用户输入为起点并为小说写作生成一组专门的agents,以及相应的执行计划agents根据计划协同执行任务,并制作出最终的小说。同时,一名观察员监督agents和计划的生成和执行,确保过程的质量和连贯性。
论文还列举了市面上的各个Agents框架,几乎列举了2023年新出现的Multi-Agent框架:
代码链接:
论文链接:
XAgent
XAgent我没找到对应的论文,但是有写技术博客,XAgent的一些特色如下图所示:
Expert-knowledge Free:指的是不受人类制定的规则的限制,而是自主做规划和决策。
Human-Agent Interaction:指的是用户可以进行干预和指导其中的决策过程。
Universal Agent Language:指的是OpenAI的Function Calling来调用各种API的机制。
Diverse Real-world tools:指的是能够接入各种API,比如 FileSystemEnv,PythonNotebook,WebEnv,ExecuteShell,RapidAPIEnv等等。
Tool Docker Environment: 很直接就是把tool封装成Docker的形式,搞一个ToolServer。
Dynamic Plan Refinement: 就是对Task进行规划,搞了一个PlanAgent,有分解,删除,修改,添加subtask的功能。
在XAgent中,决策和任务执行过程通过双循环机制进行编排:外循环和内循环。本质上,外循环处理任务的高级管理和分配,内循环关注每个子任务的低级执行和优化。
还有一些细节的地方,我就不说了,除了那个最开始的图我找了半天才对应上以外,其他的原文讲的还是不错的,对于那个outer loop的planAgent设计的还是不错的。
博客链接:
代码链接:
crewAI
crewAI没有相关的论文和博客介绍,根据README文档的描述,有以下的一些特性:
- 基于角色的Agent设计:使用特定的角色、目标和工具来定制Agents。
- 自动化的Agents间委托:agents可以自主地委托任务并在彼此之间进行询问,从而提高问题解决效率。
- 灵活的任务管理:使用可定制的工具定义任务,并将其动态分配给agents。
- 流程驱动:目前仅支持顺序任务执行,但正在研究更复杂的流程,如协商一致和分层。
我也看了一下代码的风格比较简洁,然后列举了旅行规划助手Trip Planner,股票分析,着陆页(landing page)生成器等应用,有兴趣的可以尝试一下。
代码链接:
应用方向
游戏方向
Agents基本上都是基于角色扮演的方法来实现的,比如狼人杀,三国杀,原神等等,一个直观的应用就是创造一些Agents自动化的角色,来扮演各种各样的NPC,会带来更好的一些体验。
跨模态方向
目前跨模态和Agents的结合就是把跨模态的一些模型和算法当成一些工具,使用大语言模型来驱动,但这并不是最优的形式,如果大模型直接支持各种模态的数据,那就很厉害了,相当于把跨模态的一些任务给颠覆了。
RPA
Agents强调的是自动化调用工具来解决问题,很直接产生价值的方向就是RPA,RPA就是强调的自动化,这个跟Agents的初衷不谋而合,还能直接产生商业价值,可能会有自动化销售Agent,自动化办公Agent,自动化财务Agent等等。
具身智能
我觉得把Agents这种虚拟软件的东西搬上真实世界是一件很酷的事情(比如人形机器人,无人车,智能家居的形式等),即让一个有实体结构的机器人具备Planning,扮演各种角色解决问题,这个方向虽然很难,但潜力巨大。
总结
总体上,MetaGPT侧重的是角色扮演,AutoGen侧重的是conversation和 python programming,AutoAgents侧重的是协作,XAgent强调的是外循环和内循环完成复杂任务的形式。后面各大厂家纷纷发布了自己的Agent项目。比如AppAgent,KwaiAgents,Pangu-Agent,modelscope-agent,ERNIE Bot Agent都各具特色,还有一些机构发布的Agents,例如清华的AgentVerse,港大的OpenAgents等等,从侧面说明,Agent这个东西没什么特别高的技术门槛,如果效果不好,直接标数据SFT就行,产生价值的地方就是在应用上面,比如一些传统业务的降本增效,创新业务落地成爆款应用等等。