简介
综合转载于:
代理(Agent)指能自主感知环境并采取行动实现目标的智能体,即AI作为一个人或一个组织的代表,进行某种特定行为和交易,降低一个人或组织的工作复杂程度,减少工作量和沟通成本。
背景
目前,我们在探索Agent的应用方向,借此机会调研学习了一下现在主流的Agent框架,这篇文章也是我们调研过程的记录。
网络热门Agents
截止至今日,开源的Agent应用可以说是百花齐放,文章也是挑选了热度和讨论度较高的19类Agent,基本能覆盖主流的Agent框架,每个类型都做了一个简单的summary、作为一个参考供大家学习。
图片来源:https://github.com/e2b-dev/awesome-ai-agents
Agent基础
Agent的核心决策逻辑是让LLM根据动态变化的环境信息选择执行具体的行动或者对结果作出判断,并影响环境,通过多轮迭代重复执行上述步骤,直到完成目标。
精简的决策流程:P(感知)→ P(规划)→ A(行动)
- 感知(Perception)是指Agent从环境中收集信息并从中提取相关知识的能力。
- 规划(Planning)是指Agent为了某一目标而作出的决策过程。
- 行动(Action)是指基于环境和规划做出的动作。
其中,Policy是Agent做出Action的核心决策,而行动又通过观察(Observation)成为进一步Perception的前提和基础,形成自主地闭环学习过程。
工程实现上可以拆分出四大块核心模块:推理、记忆、工具、行动
决策模型
目前Agent主流的决策模型是ReAct框架,也有一些ReAct的变种框架,以下是两种框架的对比。
传统ReAct框架:Reason and Act
ReAct=少样本prompt + Thought + Action + Observation。是调用工具、推理和规划时常用的prompt结构,先推理再执行,根据环境来执行具体的action,并给出思考过程Thought。
Plan-and-Execute ReAct
类BabyAgi的执行流程:一部分Agent通过优化规划和任务执行的流程来完成复杂任务的拆解,将复杂的任务拆解成多个子任务,再依次/批量执行。
优点是对于解决复杂任务、需要调用多个工具时,也只需要调用三次大模型,而不是每次工具调用都要调大模型。
LLmCompiler:并行执行任务,规划时生成一个DAG图来执行action,可以理解成将多个工具聚合成一个工具执行图,用图的方式执行某一个action
paper:https://arxiv.org/abs/2312.04511?ref=blog.langchain.dev
Agent框架
根据框架和实现方式的差异,这里简单将Agent框架分为两大类:Single-Agent和Multi-Agent,分别对应单智能体和多智能体架构,Multi-Agent使用多个智能体来解决更复杂的问题。
Single-Agent
- BabyAGI
git:https://github.com/yoheinakajima/babyagi/blob/main/babyagi.py
doc:https://yoheinakajima.com/birth-of-babyagi/
babyAGI决策流程:1)根据需求分解任务;2)对任务排列优先级;3)执行任务并整合结果;
亮点:作为早期agent的实践,babyagi框架简单实用,里面的任务优先级排序模块是一个比较独特的feature,后续的agent里大多看不到这个feature。
1 | task_creation_agent |
- AutoGPT
git:https://github.com/Significant-Gravitas/AutoGPT
AutoGPT 定位类似个人助理,帮助用户完成指定的任务,如调研某个课题。AutoGPT比较强调对外部工具的使用,如搜索引擎、页面浏览等。
同样,作为早期agent,autoGPT麻雀虽小五脏俱全,虽然也有很多缺点,比如无法控制迭代次数、工具有限。但是后续的模仿者非常多,基于此演变出了非常多的框架。
1 | You are {{ai-name}}, {{user-provided AI bot description}}. |
- HuggingGPT
git: https://github.com/microsoft/JARVIS
paper: https://arxiv.org/abs/2303.17580
HuggingGPT的任务分为四个部分:
- 任务规划:将任务规划成不同的步骤,这一步比较容易理解。
- 模型选择:在一个任务中,可能需要调用不同的模型来完成。例如,在写作任务中,首先写一句话,然后希望模型能够帮助补充文本,接着希望生成一个图片。这涉及到调用到不同的模型。
- 执行任务:根据任务的不同选择不同的模型进行执行。
- 响应汇总和反馈:将执行的结果反馈给用户。
HuggingGPT的亮点:HuggingGPT与AutoGPT的不同之处在于,它可以调用HuggingFace上不同的模型来完成更复杂的任务,从而提高了每个任务的精确度和准确率。然而,总体成本并没有降低太多。
- GPT-Engineer
git: https://github.com/AntonOsika/gpt-engineer
基于langchain开发,单一的工程师agent,解决编码场景的问题。目的是创建一个完整的代码仓库,在需要时要求用户额外输入补充信息。
亮点:code-copilot的自动化升级版
1 | You almost always put different classes in different files. |
1 | [ |
运行效果:
- Samantha
git: https://github.com/BRlkl/AGI-Samantha
tw: https://twitter.com/Schindler___/status/1745986132737769573
灵感来源于电影her,核心推理逻辑是反思+观察,基于GPT4-V不断从环境中获取图像和语音信息,会自主发起提问。
AGI-Samantha特点:
1、动态语音交流:Samantha能够根据上下文和自身思考自主决定何时进行交流。
2、实时视觉能力:它能够理解并反应视觉信息,比如图像或视频中的内容。它能够根据这些视觉信息做出反应。例如,如果看到某个物体或场景,它可以根据这些信息进行交流或采取行动。尽管Samantha并不总是直接使用视觉信息,这些信息仍然持续影响它的思考和行为。这意味着即使在不直接谈论或处理视觉信息的情况下,这些信息也会在背后影响它的决策和行动方式。
3、外部分类记忆:Samantha拥有一种特殊的记忆系统,能够根据情境动态写入和读取最相关的信息。
4、持续进化:它存储的经验会影响其自身的行为,如个性、语言频率和风格。
AGI-Samantha由多个特定目的的大语言模型(LLM)组成,每个模型称为一个“模块”。主要模块包括:思考、意识、潜意识、回答、记忆读取、记忆写入、记忆选择和视觉。这些模块通过内部循环和协调模仿人类大脑的工作流程。让Samantha能够接收并处理视觉和听觉信息,然后做出相应的反应。简而言之,AGI-Samantha是一种努力模仿人类思维和行为的高级人工智能系统。亮点:结合视觉信息来辅助决策,优化了记忆模块,感兴趣可以fork代码本地跑着玩一玩。
- AppAgent
doc:https://appagent-official.github.io/
git:https://github.com/X-PLUG/MobileAgent
基于ground-dino以及gpt view模型做多模态处理的Agent。
亮点:基于视觉/多模态appagent,os级别的agent,可以完成系统级别的操作,直接操控多个app。由于需要系统级权限、只支持了安卓。
- OS-Copilot
git:https://github.com/OS-Copilot/FRIDAY
doc:https://os-copilot.github.io/
OS级别的Agent,FRIDAY能够从图片、视频或者文本中学习,并且能够执行一系列的计算机任务,比如在Excel中绘图,或者创建一个网站。最重要的是,FRIDAY能够通过做任务来学习新的技能,就像人类一样,通过不断的尝试和练习变得更擅长。
亮点:自我学习改进,学习如何更有效地使用软件应用、执行特定任务的最佳实践等。
- Langgraph
doc:https://python.langchain.com/docs/langgraph
langchain的一个feature,允许开发者通过图的方式重构单个agent内部的执行流程,增加一些灵活性,并且可与langSmith等工具结合。
1 | from langgraph.graph import StateGraph, END |
Multi-Agent
- 斯坦福虚拟小镇
git:https://github.com/joonspk-research/generative_agents
paper:https://arxiv.org/abs/2304.03442
虚拟小镇作为早期的multi-agent项目,很多设计也影响到了其他multi-agent框架,里面的反思和记忆检索feature比较有意思,模拟人类的思考方式。
代理(Agents)感知他们的环境,当前代理所有的感知(完整的经历记录)都被保存在一个名为”记忆流”(memory stream)中。基于代理的感知,系统检索相关的记忆,然后使用这些检索到的行为来决定下一个行为。这些检索到的记忆也被用来形成长期计划,并创造出更高级的反思,这些都被输入到记忆流中以供未来使用。
记忆流记录代理的所有经历,检索从记忆流中根据近期性(Recency)、重要性(Importance)和相关性(Relevance)检索出一部分记忆流,以传递给语言模型。
反思是由代理生成的更高级别、更抽象的思考。因为反思也是一种记忆,所以在检索时,它们会与其他观察结果一起被包含在内。反思是周期性生成的;
- MetaGPT
git:https://github.com/geekan/MetaGPT
doc:https://docs.deepwisdom.ai/main/zh/guide/get_started/introduction.html
metaGPT是国内开源的一个Multi-Agent框架,目前整体社区活跃度较高和也不断有新feature出来,中文文档支持的很好。metaGPT以软件公司方式组成,目的是完成一个软件需求,输入一句话的老板需求,输出用户故事/竞品分析/需求/数据结构/APIs/文件等。
MetaGPT内部包括产品经理 / 架构师 / 项目经理 / 工程师,它提供了一个软件公司的全过程与精心调配的SOP。
如图的右侧部分所示,Role将从Environment中_observe Message。如果有一个Role _watch 的特定 Action 引起的 Message,那么这是一个有效的观察,触发Role的后续思考和操作。在 _think 中,Role将选择其能力范围内的一个 Action 并将其设置为要做的事情。在 _act 中,Role执行要做的事情,即运行 Action 并获取输出。将输出封装在 Message 中,最终 publish_message 到 Environment,完成了一个完整的智能体运行。
对话模式:每个agent role维护一个自己的消息队列,并且按照自身的设定消费个性化消费里面的数据,并且再完成一个act之后会给全局环境发送消息,供所有agent消费。
整体代码精简,主要包括:
- actions:智能体行为
- documents: 智能体输出文档
- learn:智能体学习新技能
- memory:智能体记忆
- prompts:提示词
- providers:第三方服务
- utils:工具函数等
有兴趣的同学可以走读一下role代码,核心逻辑都在里面:https://github.com/geekan/MetaGPT/blob/main/metagpt/roles/role.py
1 | PREFIX_TEMPLATE = """You are a {profile}, named {name}, your goal is {goal}. """ |
与huggingGPT的对比
- AutoGen
doc:https://microsoft.github.io/autogen/docs/Getting-StartedAutoGen
是微软开发的一个通过代理通信实现复杂工作流的框架。目前也是活跃度top级别的Multi-Agent框架,与MetaGPT“不相上下”。
举例:假设你正在构建一个自动客服系统。在这个系统中,一个代理负责接收客户问题,另一个代理负责搜索数据库以找到答案,还有一个代理负责将答案格式化并发送给客户。AutoGen可以协调这些代理的工作。这意味着你可以有多个“代理”(这些代理可以是LLM、人类或其他工具)在一个工作流中相互协作。
- 定制性:AutoGen 允许高度定制。你可以选择使用哪种类型的 LLM,哪种人工输入,以及哪种工具。举例:在一个内容推荐系统中,你可能想使用一个专门训练过的 LLM 来生成个性化推荐,同时还想让人类专家提供反馈。AutoGen 可以让这两者无缝集成。
- 人类参与:AutoGen 也支持人类输入和反馈,这对于需要人工审核或决策的任务非常有用。举例:在一个法律咨询应用中,初步的法律建议可能由一个 LLM 生成,但最终的建议需要由一个真正的法律专家审核。AutoGen 可以自动化这一流程。
- 工作流优化:AutoGen 不仅简化了工作流的创建和管理,还提供了工具和方法来优化这些流程。举例:如果你的应用涉及到多步骤的数据处理和分析,AutoGen 可以帮助你找出哪些步骤可以并行执行,从而加速整个流程
多agent交互框架:
https://microsoft.github.io/autogen/docs/Use-Cases/agent_chat
三种类型的agent,分别对应处理单一任务、用户输入以及团队合作功能
基础双智能体交互:
- 助⼿接收到来⾃user_proxy的消息,其中包含任务描述。
- 然后助⼿尝试编写Python代码来解决任务,并将响应发送给user_proxy。
- ⼀旦user_proxy从助⼿那⾥收到响应,它会尝试通过征求⼈类输⼊或准备⾃动⽣成的回复来回复。如果没有提供⼈类输⼊,user_proxy将执⾏代码并使⽤结果作为⾃动回复。
- 然后助⼿为user_proxy⽣成进⼀步的响应。然后user_proxy可以决定是否终⽌对话。如果不是,就重复步骤3和4。
实现多agent沟通方式:动态团队交流:在群聊管理器中注册一个回复功能,广播消息并指定下一个发言的的角色。有限状态机:自定义DAG流程图,定义agent间沟通的SOP
多Agent例子:
参考:https://microsoft.github.io/autogen/docs/Examples/#automated-multi-agent-chat
另外,autogen也开源了一个playground,支持页面操作,可以本地部署,想玩一下的可以参考这篇推特:https://twitter.com/MatthewBerman/status/1746933297870155992
workflow及agent配置:
agent会话模式配置:
对话及详细的执行信息:
- ChatDEV
git:https://github.com/OpenBMB/ChatDev
doc:https://chatdev.modelbest.cn/introduceChatDev
是一家虚拟软件公司,通过各种不同角色的智能体 运营,包括执行官,产品官,技术官,程序员 ,审查员,测试员,设计师等。这些智能体形成了一个多智能体组织结构,其使命是“通过编程改变数字世界”。ChatDev内的智能体通过参加专业的功能研讨会来协作,包括设计、编码、测试和文档编写等任务。
ChatDev(2023.9)容易被误认为是一个普通的MultiAgent框架在软件开发上的具体实现,但实际上它不是。ChatDev是基于Camel的,也就是说它内部流程都是2个Agent之间多次沟通,整体上的不同Agent角色的沟通关系和顺序都是由开发者配置死的,从这个角度上来说不太像是个全功能的MultiAgent框架的实现。
但似乎也很难说这就是使用Camel时候的削足适履,如果在多Agent的沟通路由层面没有做好的话,效果确实可能还不如这样的固定瀑布式两两沟通。ChatDev的作者也把这(每次是1-1沟通)作为一个feature来描述。
ChatDev项目本身的代码没有太多和复用性,依赖的旧版本Camel也是该抛弃的东西。这个项目本身更多是为了支撑论文的学术性原型,并不是为了让别人在上面开发而设计的。
- GPTeam
git:https://github.com/101dotxyz/GPTeam
类似于meta-GPT的多agent合作方式,较早期的Multi-Agent探索,交互比较固定。
- GPT Researcher
git:https://github.com/assafelovic/gpt-researcher
串行的Multi-Agent,框架可以适配内容生产
GPT Researcher的架构主要通过运行两个代理来进行,一个是“规划者”,一个是“执行者”;规划者负责生成研究问题,而执行者则是根据规划者生成的研究问题寻找相关的信息,最后再通过规划者对所有相关信息进行过滤与汇总,然后生成研究报告;
- TaskWeaver
git:https://github.com/microsoft/TaskWeaver?tab=readme-ov-file
doc:https://microsoft.github.io/TaskWeaver/docs/overview
TaskWeaver,面向数据分析任务,通过编码片段解释用户请求,并以函数的形式有效协调各种插件来执行数据分析任务。TaskWeaver不仅仅是一个工具,更是一个复杂的系统,能够解释命令,将它们转换为代码,并精确地执行任务。
TaskWeaver的工作流程涉及几个关键组件和过程,以下是工作流程的概览。它由三个关键组件组成:规划器(Planner)、代码生成器(CG)和代码执行器(CE)。代码生成器和代码执行器由代码解释器(CI)组成。
论文里提到的后续的多agent方向探索,可以与autoGen结合。
- 微软UFO
git:https://github.com/microsoft/UFO
UFO是面向Windows系统的Agent,结合自然语言和视觉操作Windows GUI
UFO(UI-Focused Agent)的工作原理基于先进的视觉语言模型技术,特别是GPT-Vision,以及一个独特的双代理框架,使其能够理解和执行Windows操作系统中的图形用户界面(GUI)任务。以下是UFO工作原理的详细解释:
- 双代理框架 双代理架构:UFO由两个主要代理组成,AppAgent和ActAgent,分别负责应用程序的选择与切换,以及在这些应用程序内执行具体动作。应用程序选择代理(AppAgent):负责决定为了完成用户请求需要启动或切换到哪个应用程序。它通过分析用户的自然语言指令和当前桌面的屏幕截图来做出选择。一旦确定了最适合的应用程序,AppAgent会制定一个全局计划来指导任务的执行。动作选择代理(ActAgent):一旦选择了应用程序,ActAgent就会在该应用程序中执行具体的操作,如点击按钮、输入文本等。ActAgent利用应用程序的屏幕截图和控件信息来决定下一步最合适的操作,并通过控制交互模块将这些操作转化为对应用程序控件的实际动作。
- 控制交互模块 UFO的控制交互模块是将代理识别的动作转换为应用程序中实际执行的关键组成部分。这个模块使UFO能够直接与应用程序的GUI元素进行交互,执行如点击、拖动、文本输入等操作,而无需人工干预。
- 多模态输入处理 UFO能够处理多种类型的输入,包括文本(用户的自然语言指令)和图像(应用程序的屏幕截图)。这使UFO能够理解当前GUI的状态、可用控件和它们的属性,从而做出准确的操作决策。
- 用户请求解析 当接收到用户的自然语言指令时,UFO首先解析这些指令,以确定用户的意图和所需完成的任务。然后,它将这个任务分解成一系列子任务或操作步骤,这些步骤被AppAgent和ActAgent按顺序执行。
- 应用程序间的无缝切换 如果完成用户请求需要多个应用程序的操作,UFO能够在这些应用程序之间无缝切换。它通过AppAgent来决定何时以及如何切换应用程序,并通过ActAgent在每个应用程序中执行具体的操作。
- 自然语言命令到GUI操作的映射 UFO的核心功能之一是将用户的自然语言命令映射到具体的GUI操作上。这一过程涉及到理解命令的意图,识别相关的GUI元素,以及生成和执行操作这些元素的动作。通过这种方式,UFO可以自动完成从文档编辑和信息提取到电子邮件撰写和发送等一系列复杂的任务,大大提高用户在Windows操作系统中工作的效率和便捷性。
- CrewAI
git: https://github.com/joaomdmoura/crewAI
site: https://www.crewai.com/基于langchain的Multi-agent框架
Crew 在 CrewAI 中是代理人、任务和过程相结合的容器层,是任务执行的实际场所。作为一个协同合作的环境,Crew 提供了代理人之间的交流、合作和按照规定过程执行任务的平台。通过 Crew 的设计,代理人能够更好地协作并以高效的方式完成任务。支持顺序结构和层级结构的agents。CrewAI的优点:与LangChain生态结合,CrewAI提供了 Autogen 对话代理的灵活性和 ChatDev 的结构化流程方法,但没有僵化。CrewAI 的流程设计为动态且适应性强,可无缝融入开发和生产工作流程。
- AgentScope
git: https://github.com/modelscope/agentscope/blob/main/README_ZH.md
阿里开源的Multi-agent框架,亮点是支持分布式框架,并且做了工程链路上的优化及监控。
- Camel
git: https://github.com/camel-ai/camel
site: https://www.camel-ai.org
早期Multi-Agent项目,实现agent间的一对一对话,文档较少,除了git和一个站点外没有找到太多有用信息。
Agent框架总结
单智能体= 大语言模型(LLM) + 观察(obs) + 思考(thought) + 行动(act) + 记忆(mem)
多智能体=智能体 + 环境 + SOP + 评审 + 通信 + 成本
多智能体优点:
- 多视角分析问题:虽然LLM可以扮演很多视角,但会随着system prompt或者前几轮的对话快速坍缩到某个具体的视角上;
- 复杂问题拆解:每个子agent负责解决特定领域的问题,降低对记忆和prompt长度的要求;
- 可操控性强:可以自主的选择需要的视角和人设;
- 开闭原则:通过增加子agent来扩展功能,新增功能无需修改之前的agent;
- (可能)更快的解决问题:解决单agent并发的问题;
缺点:
- 成本和耗时的增加;
- 交互更复杂、定制开发成本高;
- 简单的问题single Agent也能解决;
多智能体能解决的问题:
- 解决复杂问题;
- 生成多角色交互的剧情;
Multi-Agent并不是Agent框架的终态,Multi-Agent框架是当前有限的LLM能力背景下的产物,更多还是为了解决当前LLM的能力缺陷,通过LLM多次迭代、弥补一些显而易见的错误,不同框架间仍然存在着极高的学习和开发成本。随着LLM能力的提升,未来的Agent框架肯定会朝着更加的简单、易用的方向发展。
能做什么?
可能的方向
游戏场景(npc对话、游戏素材生产)、内容生产、私域助理、OS级别智能体、部分工作的提效
Multi-Agent框架
多agent应该像人类的大脑一样,分工明确、又能一起协作,比如,大脑有负责视觉、味觉、触觉、行走、平衡,甚至控制四肢行走的区域都不一样。
参考MetaGPT和AutoGen生态最完善的两个Multi-Agent框架,可以从以下几个角度出发:
- 环境&通讯:Agent间的交互,消息传递、共同记忆、执行顺序,分布式agent,OS-agent
- SOP:定义SOP,编排自定义Agent
- 评审:Agent健壮性保证,输入输出结果解析
- 成本:Agent间的资源分配
- Proxy:自定义proxy,可编程、执行大小模型
Single Agent框架
- 执行架构优化:论文数据支撑CoT to XoT,从一个thought一步act到一个thought多个act,从链式的思考方式到多维度思考;
- 长期记忆的优化:具备个性化能力的agent,模拟人的回想过程,将长期记忆加入agent中;
- 多模态能力建设:agent能观察到的不仅限于用户输入的问题,可以加入包括触觉、视觉、对周围环境的感知等;
- 自我思考能力:主动提出问题,自我优化;
其他
部署:Agent以及workflow的配置化及服务化,更长远的还需要考虑分布式部署监控:Multi-Agent可视化、能耗与成本监控RAG:解决语义孤立问题评测:agent评测、workflow评测、AgentBench训练语料:数据标记、数据回流业务选择:Copilot 还是 Agent ?Single Agent 还是Multi-Agent?
参考文献
1.什么是ai agent:https://www.breezedeus.com/article/ai-agent-part1#33ddb6413e094280aaa4ac82634d01d9
2.什么是ai agent part2:https://www.breezedeus.com/article/ai-agent-part2
3.ReAct: Synergizing Reasoning and Acting in Language Models:https://react-lm.github.io/
4.Plan-and-Execute Agents:https://blog.langchain.dev/planning-agents/
5.LLmCompiler:https://arxiv.org/abs/2312.04511?ref=blog.langchain.dev
6.agent:https://hub.baai.ac.cn/view/27683
7.TaskWeaver创建超级AI Agent:https://hub.baai.ac.cn/view/34799
8.For a Multi-Agent Framework, CrewAI has its Advantages Compared to AutoGen: https://levelup.gitconnected.com/for-a-multi-agent-framework-crewai-has-its-advantages-compared-to-autogen-a1df3ff66ed3
9.AgentScope: A Flexible yet Robust Multi-Agent Platform: https://arxiv.org/abs/2402.14034
10.Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models: https://arxiv.org/abs/2402.14207
11.Autogen的基本框架:https://limoncc.com/post/3271c9aecd8f7df1/
12.MetaGPT作者深度解析:https://www.bilibili.com/video/BV1Ru411V7XL/?spm_id_from=333.999.0.0&vd_source=b27d8b2549ee8e4b490115503ac81017
13.Agent产品设计:https://mp.weixin.qq.com/s/pbCg1KOXK63U9QY28yXpsw?poc_token=HHAx12Wjjn0BqZd4N-byo0-rjRmpjhjjl6yN6Bdz
14.Building the Future of Responsible AI: A Reference Architecture for Designing Large Language Model based Agents:https://arxiv.org/abs/2311.13148
16.《MetaGPT智能体开发入门》学习手册: https://deepwisdom.feishu.cn/wiki/BfS0wmk4piMXXIkHvn5czNT8nuh