读paper13-Multi-Agent盘点
读paper13:Multi-Agent盘点
MetaGPT
论文:https://arxiv.org/abs/2308.00352
代码:https://github.com/geekan/MetaGPT
MetaGPT 以一行需求作为输入,输出用户故事/竞争分析/需求/数据结构/API/文档等
MetaGPT利用SOP(Standard Operating Procedures,标准作业程序)来协调基于大语言模型的多智能体系统,从而实现元编程技术。该框架使用智能体模拟了一个虚拟软件团队,包含产品经理、架构师、项目经理、工程师、质量工程师等角色,并引入SOP成为框架的虚拟软件团队的开发流程。其专注于软件开发,覆盖了从需求分析到代码实现的全生命周期覆盖。
架构
框架采用双层架构设计:
基础组件层以AI Agent为核心,提供了观察、思考等能力。其建立了个体智能体操作和在系统范围内进行信息交换所需的核心模块,包括环境、记忆、角色、行动和工具。
- 环境:为智能体提供协作工作空间和交流平台。
- 记忆:存储和检索历史消息。
- 角色:根据领域封装专业技能和工作流程。
- 行动:执行模块化的子任务。
- 工具:提供常见的服务和工具。
协作层通过知识共享和工作流封装等关键机制促进智能体协调。在这一框架内,MetaGPT 的智能体能力得到了显著增强。在被称为 “锚智能体 ”的专门角色提示引导下,智能体的实例化使角色具备了观察、思考、反思和知识积累的能力。这些角色通过既定的订阅和发布方法与环境互动。
- 知识共享:该机制允许智能体有效地交换信息,为共享的知识库做出贡献。智能体可以以不同粒度存储、检索和共享数据。它不仅可以加强协调能力,还减少了冗余的通信,提高了整体的运行效率。
- 封装工作流程:该机制利用SOP将复杂任务分解为较小、可管理的子任务。它将这些子任务分配给适合的智能体,并通过标准化的输出对其进行监控,确保它们的行动与总体目标一致。
原理与样例
在MetaGPT中,多智能体被视为一个智能体社会,其中多智能体=智能体+环境+标准流程(SOP)+通信+经济,这些组件各自发挥着重要的作用:
- 智能体:在单个智能体的基础上,扩展了多智能体定义。在多智能体系统中,可以由多个单智能体协同工作,每个智能体都具备独特有的LLM、观察、思考、行动和记忆。
- 环境:环境是智能体生存和互动的公共场所。智能体从环境中观察到重要信息,并发布行动的输出结果以供其他智能体使用。
- 标准流程(SOP):这些是管理智能体行动和交互的既定程序,确保系统内部的有序和高效运作。
- 通信:通信是智能体之间信息交流的过程。它对于系统内的协作、谈判和竞争至关重要。
- 经济:这指的是多智能体环境中的价值交换系统,决定资源分配和任务优先级。
定义好各个Agent的角色后,需要设置工作流程(Work Flow):
- 产品经理角色Agent:根据用户的产品需求进行深入分析,并将任务进行分解,形成结构化的需求文档(Product Requirements Document,PRD);(preliminary functional breakdown);
- 架构师角色Agent:接收到产品经理角色大模型生成的PRD,将其转换为具体的系统设计、数据结构设计、文件列表等;
- 项目管理角色Agent:将架构师设计的系统等待开发工作进行任务分解(具体的代码接口功能);
- 软件工程师角色Agent:接收到具体的接口和功能,进行代码生成,包括类、方法等;
- QA工程师角色Agent:对于实现好的功能函数和类进行测试。
- 最后交付给用户,由用户进行评价反馈。
角色定义不仅引入了基于预期功能的行为指导,而且有助于创建多样化和专业化的智能体,每个智能体都是其领域的专家。
- 思考与反思(Think & Reflect):角色可以检索角色描述来构建思考,然后通过
_think()
函数来反思需要做什么并决定下一步的行动。 - 观察(Observe):角色可以观察环境,并根据观察结果使用
_observe()
函数进行思考和行动。它们会关注重要信息,并将其纳入记忆中,以丰富其上下文理解并为未来的决策提供信息。 - 广播消息(Broadcast messages):角色可以使用
_publish_message()
函数将消息广播到环境中。这些消息包含有关当前执行结果和相关行动记录的详细信息,用于发布和共享信息。 - 知识沉淀与行动(Knowledge precipitation & Act):角色不仅是广播者,也是环境信息的接收者。角色可以评估传入的消息的相关性和及时性,从共享环境中提取相关知识,并维护一个内部的知识库以支持决策。它们通过咨询LLM,并利用其具有丰富上下文信息和自我知识的来执行行动。执行结果被封装为消息,而规范性组件则由环境共享。
- 状态管理(State management):角色可以通过更新工作状态和监控待办事项列表来跟踪它们的行动。这使得角色能够按顺序处理多个行动而不中断。在执行每个行动时,角色首先锁定其状态。完成行动后,将状态标记为解锁。这样可以防止其他行动中断工作流程。
知识共享机制和自定义知识管理
发布-订阅机制与可执行反馈(一种self-correction mechanism, 用于在运行时进一步提高代码生成质量)。左边:agent使用共享消息池来发布结构化消息。他们还可以根据个人资料订阅相关消息。右边:生成初始代码后,Engineer智能体将运行并检查错误。如果出现错误,智能体会检查存储在内存中的过去消息,并将它们与PRD、系统设计和代码文件进行比较。
AutoGen
https://www.zwn2001.space/posts/Graduate-Works/Works/AutoGen-multiple agents framework/
AutoAgents
论文:https://arxiv.org/abs/2309.17288
https://www.yiyibooks.cn/arxiv/2309.17288v3/index.html
代码:https://github.com/Link-AGI/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团队共享信息,协调行动,达成共识,适应环境。
Drafting Stage
todo
Execution Stage
todo
PS.通用架构盘点
Multi Agent Collaboration
为每个任务或领域创建一个专门的智能体,并将任务分配给正确的 “专家”。
比如MetaGPT
不同的智能体在共享的消息草稿(其实就是共享的思考链上下文)上进行协作。这意味着他们中的任何一个所做的工作都对另一个可见。这样做的好处是其他智能体可以看到所有的个别步骤。这样做的缺点是有时候过于冗长和不必要地传递所有这些信息,有时候只需要一个智能体的最终答案。我们称之为协作,因为这个消息草稿是共享的性质。
控制状态转换的主要因素是 router 路由器,但它是一个基于规则的路由器。基本上,在每次LLM调用之后,它会查看输出。如果调用了工具,则调用该工具。如果没有调用工具,而LLM回应“FINAL ANSWER”,则返回给用户。否则(如果没有调用工具,而LLM没有回应“FINAL ANSWER”),则转到另一个LLM。 (注:其实就是常见的 reAct 基础上增加了几个 LLM ,每个 LLM 都可以看到共同思考的上下文链路,中间的路由就是根据关键字正则匹配调用哪些工具。 但纯 reAct只有一个 LLM 系统提示词,而多 Agent 的每个 LLM 是有自己独立的系统提示词,甚至可以是独立微调的 LLM )
Agent Supervisor
使用一个 supervisor 进行任务分配与调度,相对于将上面基于规则的 Router 用LLM替换
比如AutoAgents
其实就是使用一个专门的 LLM 作为supervisor,接受用户信息,再根据信息转发到适合的专用 Agent 上。这样的好处就是每个特定领域的 Agent 聚焦自己擅长的事情,这里既可以是提示工程的优化,也可以是 llm 微调。
Hierarchical Agent Teams
在上一个架构的基础上,对下面的代理再次分层,将同类任务的代理组成一个 team。比如写文章的任务:可以由网络检索 Agent、信息筛选Agent、文章段落构思 Agent、文章撰写 Agent、文章检查 Agent等组合成一个团队。每个 Agent 又能调用自己的工具,这种适合非常大型的 Agent 协同)
Reference
https://blog.csdn.net/qq_27590277/article/details/135834392
https://arxiv.org/abs/2308.00352
https://blog.csdn.net/qq_27590277/article/details/135053493
https://blog.csdn.net/GodGump/article/details/137483678
https://arxiv.org/abs/2309.17288
https://github.com/Link-AGI/AutoAgents/blob/main/docs/README_CN.md