LLM agentic模式之multi-agent: ChatDev,MetaGPT, AutoGen思绪

打印 上一主题 下一主题

主题 473|帖子 473|积分 1419

Multi-agent

ChatDev

ChatDev出自2023年7月的论文《ChatDev: Communicative Agents for Software Development》,它提出了一个基于聊天的用LLM来举行软件开发的框架。如下图所示,构建一个虚拟的基于聊天的软件开发公司ChatDev,它由具有差别社会角色的agent如实行官、步伐员、测试工程师、设计师等构成,在给定一个任务时,这些agent一起相助来开发一个软件。在这个框架里,LLM作为核心思考组件,让agent模仿整个开发过程,避免额外的模型训练,也在一定水平上减轻了天生不良代码幻觉。

ChatDev遵循瀑布模型(waterfall model),将软件开发过程划分为四个阶段:设计(designing),编码(coding),测试(testing),写文档(documenting);每一个阶段分为多个原子聊天(atomic chat),每一个聊天由两个差别的角色来完成任务相关的角色扮演,如下图所示。这些办理任务的聊天序列被称为“chat chain",在每一个聊天中,指导者(instructor)发出指令,引导对话朝着任务完成的方向发展,助手(assistant)则按照指令,提供合适的办理方案并讨论可行性。指导者和助手通过多轮对话举行相助,直到达成共识并确定任务已成功完成。任务完成时,每个聊天的输出就对应着目标软件的一部分。

接下来是四个阶段的实现细节。

  • 设计阶段
在设计阶段,ChatDev会从人类客户那收到需求。这个阶段包罗三个预界说角色:CEO (chief executive officer),CPO (chief product officer), CTO (chief technology officer)。设计阶段分为两个原子对话任务:目标软件的模态决议、编程语言的选择。

实现上有如下关键机制:
  

  • 编码阶段
编码阶段涉及三个角色:CTO、步伐员、设计师;分为天生完整的代码(CTO和步伐员完成)、完成用户图形接口(设计师和步伐员)两个原子任务。CTO用markdown格式指导步伐员实现软件系统,步伐员基于markdown指令来天生代码。设计师提出用户友爱的图形用户界面 (GUI),该界面使用图形图标而不是基于文本的命令举行用户交互。接着,设计职员使用外部文本转图像工具创建具有视觉吸引力的图形后,步伐员使用标准工具包将其合并到 GUI 设计中。
实现上有如下关键机制:


  • Code management: ChatDev使用面向对象的编程语言如Python。使用“版本演化(version evolut)”机制以限制角色之间对最新代码版本的可见性,在Memory Stream中抛弃较早的代码版本。步伐员使用与 Git 相关的命令管理项目。
  • Thought Instruction:为了镌汰幻觉,引入“thought instruction”机制。thought instruction受CoT的启发,在指令中明确特定的办理问题思绪,例如按顺序办理子任务。如下图(a)和(b)所示,“thought instruction包罗交换角色以询问哪些方法尚未实现,然后切换回来为步伐员提供更准确的指令。thought instruction使编码过程变得更加集中和有针对性,在指令中明确表达特定的想法有助于镌汰歧义并确保天生的代码与预期目标一致。


  • 测试阶段
测试阶段涉及到三个角色:步伐员、评审员、测试员;分为代码评审(步伐员和评审员)、系统测试(步伐员和测试员)两个原子任务。代码评审查抄源码辨认潜伏的问题;系统测试验证软件的实行过程。
使用“Thought Instruction”来显示地在指令中描述debug想法,如上图©和(d)所示,测试员实行软件、分析bug、提出修改意见并以此来指导步伐员。这个迭代过程持续举行直到所有潜伏bug都被消除软件可以成功实行。
当编译器无法正确辨认细粒度的逻辑错误时,人类客户可以通过天然语言描述的反馈和建议来帮助改进软件系统。

  • 文档编写

    文档编写阶段涉及四个角色:CEO、CPO、CTO、步伐员。用few-shot prompt来让LLM完成文档天生。CTO知道步伐员提供环境依赖的设置文件,天生如requirements.txt的文件; CEO指导CPO天生用户手册。
MetaGPT

MetaGPT出自2023年8月初的论文《MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework》,它将SOPs(Standardized Operating Procedures)融入到基于LLM的multi-agent相助过程。

SOP模式下的Agent

MetaGPT为软件开发界说了五个角色:产品经理(Product Manager),架构师(Architect),项目经理(Project Manager),工程师(Engineer),QA工程师(QA Engineer),如上图所示。每一个角色包罗详细的上下文大概技能,比如下图中的产品经理可以使用网络搜刮工具,工程师可以实行代码。 MetaGPT给每个agent的画像包罗名字、角色、目标、角色的束缚,所有的agent都遵循类似React的举动模式。

界说好agent的角色和技能后,MetaGPT遵循软件开发里的SOP,让所有agents按照一定的顺序来工作。如论文图1(上上图)所示,在获得用户需求后,产品经剖析举行全面分析,制定一份详细的项目需求文档,此中包罗用户故事和需求池,这可作为初步的功能细分。结构化的项目需求文档随后会转达给架构师,架构师会将需求转化为系统设计组件,例如文件列表、数据结构和接口界说。系统设计完成后,信息就会发送给项目经理举行任务分配;工程师实行指定的类和功能,如图 2 所示。在下一阶段,QA 工程师会制定测试用例,以严格实行代码质量。最终MetaGPT将天生一个软件办理方案。下图(论文图3)是整个流程的一个示意。

通讯协议

Structured Communication Interfaces: MetaGPT使用结构化通讯来举行agents之间的沟通,为每个角色建立一个schema和格式,并要求每个agent根据其特定角色和上下文提供须要的输出。在上图(论文图3)中,架构师agent天生两个输出:系统接口设计和一个时序图。与ChatDev不一样,MetaGPT中的agent通过文档和图表来举行通讯而不是通过对话。
Publish-Subscribe Mechanism:MetaGPT有一个全局消息池(message pool),如上面图2所示左侧所示。共享消息池可以使所有agent直接交换消息。agent可以发布它们的结构化消息也可以访问其他agent发布的消息。如果要去关注所有其他agent发送的消息,很容易造成信息过载,所以MetaGPT有一个订阅机制(subscription mechanism),在实现时,一个agent只有在吸收到了所有先决条件依赖之后才会激活它的动作。比如在前面图3的例子里,架构师告急关注产品经理提供的PRD消息。
带实行反馈的迭代编程

MetaGPT引入了可实行的反馈机制,以迭代方式改进代码。更详细地说,如上面图 2 所示,它要求工程师根据原始产品需求和设计编写代码。这使工程师可以或许使用自己的历史实行和debug记忆不断改进代码。为了获得更多信息,工程师编写并实行相应的单位测试用例,随后收到测试结果。如果结果令人满意,则启动其他开发任务;否则,工程师在规复编程之前debug代码。这个迭代测试过程持续举行,直到测试通过或到达3 次最大重试次数。
AutoGen

AutoGen出自2023年8月中的论文《AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation》,它是一个基于对话的multi-agent 通用框架, 可用来创建和试验multi-agent系统。
AutoGen的核心设计原则是使用multi-agent对话来简化和整合multi-agent工作流,同时最大限度地提高已实现agent的可重用性。AutoGen有两大关键概念:conversable agents、conversation programming。
conversable agents

在AutoGen中,一个可对话的agent(conversable agent)是有特定角色的实体。 它可以转达消息,与其他可对话agent发送和吸收消息,如开始或继承对话。可对话的agent根据发送和吸收的消息维护其内部上下文,也可以为它设置由LLM、工具或人类输入等提供的本领,它们可以根据背面描述的编程举动模式采取办法。


  • 由LLM、人类、工具赋能的agent(Agent capabilities powered by LLMs, humans, and tools):AutoGen机动地赋予agent差别的本领,本领包罗:

    • LLM: 基于LLM的agent可以利用LLM的各种本领如角色扮演、隐式状态推理和基于对话历史的希望、提供反馈、根据反馈举行调整和编码等,这些本领通过prompt技术来激发,下图是论文中agent的system message,差别的颜色标识这差别的prompt技术。别的AutoGen提供了一个加强LLM推理层,其包罗结果缓存、错误处置惩罚、消息模板等特点。
    • 人类:在许多 LLM 应用中,人类参与是必须的乃至是必不可少的。AutoGen 允许人类通过人工支持的agent参与agent对话,这些agent可以根据agent设置在对话的某些轮次中请求人类输入。默认user proxy agent允允许设置的人类参与级别和模式,例如请求人类输入的频率和条件,包罗人类跳过提供输入的选项。
    • 工具:基于工具的agent拥有通过代码实行或函数实行来实行工具的本领。比如默认的user proxy agent可以实行LLM建议的代码大概调用LLM建议的函数。




  • Agent定制和相助(Agent customization and cooperation):根据特定于应用步伐的需求,每个agent都可以设置成具有多种根本后端类型,以显示multi-agent对话中的复杂举动。AutoGen 允许通过重用或扩展内置agent轻松创建具有专门功能和角色的agent。下图(论文图 2) 中的黄色阴影区域提供了 AutoGen 中内置agent的草图。ConversableAgent 类是最高级别的agent抽象,默认环境下可以使用 LLM、人类和工具。AssistantAgent 和 UserProxyAgent 是两个预设置的 ConversableAgent 子类,每个子类都代表一种常见的使用模式,即充当 AI 助手(由 LLM 支持)并充当人类署理来征求人类输入或实行代码/函数调用(由人类和/或工具支持)。

在下图(论文图 1) 右侧的示例中,一个由 LLM 支持的助理agent和一个由工具和人类支持的用户署理agent一起摆设以处置惩罚一项任务。在这里,助理agent在 LLM 的帮助下天生办理方案并将办理方案转达给用户署理agent。然后,用户署理agent征求人类输入或实行助理的代码并将结果作为反馈传回助理。

Conversation Programming

通过允许自界说agent相互交谈,AutoGen 中的可交谈agent可充当有用的构建块。但是,要开发agent在任务上取得有意义希望的应用步伐,开发职员还须要可以或许指定和塑造这些multi-agent对话。AutoGen利用对话编程(Conversation Programming)来办理这个问题。
对话编程这一范式(paradigm)有如下两个概念,AutoGen作者以为这种范式有助于人们直观地推理复杂的工作流程,如agent采取办法和agent之间对话的消息转达:


  • 计算(computation):agents在multi-agent对话中计算其相应所采取的办法。在 AutoGen 中,这些计算以对话为中心。agent采取与其参与的对话相关的办法,其办法会导致后续对话的消息转达(除非满足终止条件)。
  • 控制流(control flow):这些计算发生的顺序(或条件)。与计算类似,控制流是由对话驱动的——参与agent决定向哪个agent发送消息以及计算过程都是inter-agent对话的函数。
上上图(论文图 2) 提供了一个简单的示例。底部子图显示了各个agent如何实行特定于角色的、以对话为中心的计算以天生相应(例如,通过 LLM 推理调用和代码实行)。任务通过对话框中显示的对话举行。中心子图演示了基于对话的控制流,当助手收到消息时,用户署理agent通常会将人工输入作为回复发送;如果没有输入,它将改为实行助手消息中的任何代码。
AutoGen通过如下的设计模式来实现对话编程:

  • 统一接口和自动回复机制,实现自动agent聊天。AutoGen 中的agent具有统一的对话接口,用于实行相应的以对话为中心的计算,包罗用于发送/吸收消息的send/receive函数和用于根据收到的消息采取办法并天生相应的generate_reply函数。AutoGen 还引入并默认接纳agent自动回复(agent auto-reply)机制来实现对话驱动控制:一旦agent收到来自另一个agent的消息,它就会自动调用generate_reply并将回复发送回发送者,除非已经满足终止条件。AutoGen 提供基于 LLM 推理、代码或函数实行或人工输入的内置回复函数。用户也可以注册自界说回复函数来定制agent的举动模式,例如,在回复发送者agent之前与另一个agent聊天。在这种机制下,一旦注册了回复函数并初始化对话,对话流就会天然而然地开始了,因此无需任何额外的控制平面(即控制对话流的特殊模块),agent对话就可以天然举行。例如,通过上上图(论文图 2)中蓝色区域(标志为“开发职员代码”)中的开发职员代码,可以很容易地触发agent之间的对话,并且对话将自动举行,如上上图(论文图 2)中灰色区域(标志为“步伐实行”)中的对话框所示。自动回复机制提供了一种去中心、模块化和统一的方式来界说工作流程。
  • 通过编程和天然语言的融合举行控制。AutoGen 允许在各种控制流管理模式中使用编程和天然语言:1) 通过 LLM 举行天然语言控制。在 AutoGen 中,可以通过使用天然语言提示 LLM 支持的agent来控制对话流。例如,AutoGen 中内置 AssistantAgent 的默认系统消息使用天然语言指示agent,如果先前的结果表明存在错误,则修复错误并再次天生代码。它还指导agent将 LLM 输出限制在某些结构中,使其他工具支持的agent更容易使用。例如,指示agent在所有任务完成后回复“TERMINATE”以终止步伐。 2) 编程语言控制。在 AutoGen 中,可以使用 Python 代码来指定终止条件、人工输入模式和工具实行逻辑例如自动回复的最大数量。用户还可以注册编程的自动回复函数,使用 Python 代码控制对话流,如上上图(论文图 2) 中标志为“ConversationDriven Control Flow”的代码块所示。3) 天然语言和编程语言之间的控制转换。AutoGen 支持天然语言和编程语言之间的机动控制转换。用户可以通过在自界说回复函数中调用包罗某些控制逻辑的 LLM 推理来实现从代码到天然语言控制的转换;大概通过基于LLM的function call从天然语言控制转换为代码控制。
在对话编程范式中,可以实现多种模式的multi-agent对话。除了具有预界说流程的静态对话之外,AutoGen 还支持multi-agent动态对话流程。AutoGen 提供了两种实现此目的的常规方法:1) 自界说generate_reply函数:在自界说generate_reply函数中,一个agent可以保持当前对话,同时根据当前消息的内容和上下文唤起与其他agent的对话。2) function call:在这种方法中,LLM 根据对话状态决定是否调用特定函数。通过在调用的函数中向其他agent发送消息,LLM 可以驱动动态multi-agent对话。别的,AutoGen 通过内置的 GroupChatManager 支持更复杂的动态群聊,它可以动态选择下一个发言者,然后将其相应广播给其他agent。在背面的应用章节详细先容此功能及其应用。
AutoGen的应用


如上图所示,论文示例六种multi-agent应用来说明AutoGen的应用场景,应用(A1, A2, A4, A5, A6)是为了说明AutoGen的实际相关性, 应用 (A1, A2, A3, A4)是为了说明AutoGen可以或许办理问题的本领以及问题的难度, 应用 (A5, A6)是为了说明AutoGen应用的潜伏创新性。
A1: Math Problem Solving:(场景 1)可以或许直接复用AutoGen 的两个内置agent来构建一个自主数学问题办理系统。作者在 MATH数据集上评估了搭建的系统和几种替换方法, 结果表明,与替换方法相比AutoGen 的内置agent已经具有更好的开箱即用性能。(场景 2)借助 AutoGen 展示了人机交互问题办理过程。要将人工反馈与 AutoGen 结合起来,只需在场景 1 中在系统的 UserProxyAgent 中设置human_input_mode =“ALWAYS”。论文证明该系统可以有效地结合人工输入来办理没有人工就无法办理的难题。(场景 3)多个人类用户可以在办理问题的过程中参与对话。论文实验表名在此场景下AutoGen 可以或许提供更好的性能或新体验。
A2: Retrieval-Augmented Code Generation and Question Answering:使用 AutoGen 构建了一个名为“检索加强聊天(Retrieval-augmented Chat)”的RAG系统。该系统由两个agent构成:Retrieval-augmented User Proxy agent 和Retrieval-augmented Assistant agent,这两个agent都是从 AutoGen 的内置agent扩展而来的。Retrieval-augmented User Proxy agent包罗一个向量数据库 Chroma,此中 SentenceTransformers 作为上下文检索器。作者在问答和代码天生场景中对检索加强聊天举行了评估。(场景 1)在 Natural Questions 数据集上对天然问答举行评估,并与DPR举行比力。AutoGen 在此应用步伐中引入了一种新颖的交互式检索(interactive retrieval)功能:每当检索到的上下文不包罗信息时,基于 LLM 的助手不会终止,而是会回复"Sorry, I cannot find any information about… UPDATE CONTEXT."这将调用更多检索实验。作者举行的消融研究表明交互式检索机制确实在此过程中发挥了告急作用。(场景 2)演示了检索加强聊天如何帮助根据未包罗 GPT-4 训练数据中的代码的给定代码库天生代码。
A3: Decision Making in Text World Environments:用 AutoGen实现了一个two-agent系统来办理 ALFWorld 中的任务。它由一个 LLM 支持的助理agent负责建议实行任务的计划,以及一个实行agent负责在 ALFWorld 环境中执办法作。该系统集成了 ReAct 提示并且可以或许实现类似的性能。ReAct 和基于 AutoGen 的two-agent系统遇到的一个共同挑战是它们偶尔无法利用有关物理世界的根本常识知识;这种缺陷可能导致系统因重复错误而陷入循环。AutoGen办理这个问题的方法是:引入一个grounding agent,每当系统出现重复错误的早期迹象时,它都会提供关键的常识知识——例如"You must find and take the object before you can examine it. You must go to where the target object is before you can use it."。论文实验表明引入grounding agent后可以有效避免循环错误。
A4: Multi-Agent Coding:用 AutoGen 构建基于 OptiGuide 的multi-agent编码系统,该系统善于编写代码来解释优化办理方案并回答用户问题,例如探索改变供应链决议的影响或理解优化器做出特定选择的原因。论文图 3 的子图显示了基于 AutoGen 的实现。工作流程如下:最终用户向commander agent发送问题,例如"What if we prohibit shipping from supplier 1 to roastery 2?“。commander与两个助理agent(包罗Writer和Safeguard)和谐以回答问题。Writer将编写代码并将代码发送给commander。收到代码后,commander使用Safeguard查抄代码安全性;如果通过,commander将使用外部工具(例如 Python)实行代码,并请求Writer解释实行结果。例如,Writer可能会说"if we prohibit shipping from supplier 1 to roastery 2, the total cost would increase by 10.5%.” , commander向用户提供这个结论性答案。如果在某个特定步骤出现异常,例如 Safeguard 发出的安全红旗,commander会将问题重定向回Writer,并提供调试信息;这个过程可能会重复多次,直到用户的问题得到解答或超时。论文实验结论说这个系统的代码效率很高,multi-agent的抽象也是须要的。
A5: Dynamic Group Chat:AutoGen 支持动态群聊通讯模式,在这种模式下,参与的agent共享雷同的上下文并以动态方式与其他agent交谈,而不是遵循预界说的顺序。动态群聊依靠持续的对话来引导agent之间的交互流程,这使得动态群聊非常适合在没有严格通讯顺序的环境下举行协作的环境。在 AutoGen 中,GroupChatManager 类充当agent之间对话的指挥者,并重复以下三个步骤:动态选择发言人、网络选定发言人的回复以及广播消息(论文图 3-A5)。对于动态发言人选择组件使用角色扮演风格的提示,通过对 12 个手工制作的复杂任务的初步研究,作者观察到,与纯粹基于任务的提示相比,使用角色扮演提示通常会在办理问题和选择发言人的过程中更有效地考虑对话配景和角色对齐,因此可以提高成功率并镌汰 LLM 调用。
**A6: Conversational Chess:**使用AutoGen开发了天然语言界面游戏Conversational Chess,如论文图 3 的最后一个子图所示。它具有内置的玩家agent,可以是人类或 LLM,以及用于提供信息并根据标准规则验证动作的第三方棋盘agent。基于AutoGen的Conversational Chess有两个根本功能:(1) 天然、机动且引人入胜的游戏动态,由 AutoGen 中的可定制agent设计实现。Conversational Chess支持一系列游戏模式,包罗 AI-AI、AI-人类和人类-人类,在单场游戏中可以在这些模式之间无缝切换。(2) Grounding,这是保持游戏公平性的关键方面。在游戏过程中,棋盘agent会查抄每个提议的动作是否正当;如果某个动作无效,agent会以错误相应,提示玩家agent在继承之前重新提出正当的动作。此过程可确保只举行有效的动作,并有助于保持一致的游戏体验。消融实验表名棋盘agent的存在有助有提高游戏体验和机动度。

参考资料


  • ChatDev: arxiv, github
  • AutoGen: arxiv, github
  • MetaGPT: arxiv, github

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表