对比5个最需要了解的AI多智能体编排框架【4】:“聊天派”的微软AutoGen

大模型向量数据库容器

picture.image

关注我们,深度学习LLM应用

picture.image

picture.image

了解了轻量级的OpenAI Swam、重量级的LangGraph、易用又不失强大的CrewAI后,今天一起来看出自名门的AutoGen。AutoGen是微软公司推出的用于构建多智能体对话式系统的高级框架,用来创建多个AI Agent协作以解决问题的LLM应用。 本文内容:

  • 五分钟读懂AutoGen
  • AutoGen实现多智能体Demo
  • AutoGen小结

picture.image

微软在全新的AutoGen v0.4版本中进行了重新设计开发,提供了一个事件驱动、可扩展的分布式多智能体开发与运行框架,该版本目前处于开发中,后续我们将用独立文章为大家预览新版本。

1

五分钟读懂AutoGen

AutoGen可以帮你快速构建一个多Agent通过对话进行有机协作的小型生态系统。在这个系统中,多个Agent借助对话来实现分工、分享与启发,最后完成输入的任务或问题。说人话就是:

多个Agent边聊天边工作,配合完成复杂任务。

需要注意的是,在AutoGen中,人类也可以特殊的身份成为团队的一员。当然,这个成员的特殊能力就是可以“不够智能”: 需要人类给出回应,而非让LLM回应。

【概念理解】

如何“聊着聊着”就把问题解决了呢?看下面的例子:

picture.image

这个双Agent系统中,我们让“儿子”与“父亲”聊天,答案自然就包含在了对话之中(AutoGen会总结最终结果)。

这是一个复杂点的多Agent场景

picture.image

三个Agent的团队完成一个调查报告的协作过程:一个负责搜索整理,一个负责审查反思,一个负责制作最终报告。

【工具使用】

会用工具是Agent的基本特征(不能只聊天不干活),在AutoGen中,有两种常见的工具:

  • 函数工具(包括API调用)
  • 代码工具:就是让Agent当码农,并在本地或者docker执行

一个借助代码工具来完成任务的例子:

picture.image

注意这里的代码编写和代码执行是由不同的Agent负责,这也是AutoGen在使用工具上不同于其他框架的地方: 工具的提出与执行是由不同的Agent来完成。

【聊天模式】

聊天也要有秩序,所以最后来了解AutoGen目前版本中的三种基础聊天模式:

1. 双人模式

两个智能体相互聊天的模式:

picture.image

2. 连续聊天模式

举一个例子,比如玩一个大家抽签比大小的游戏,主持人让每个人依次抽签,最后再让裁判来判决结果:

picture.image

简单的说,就是一个Agent连续与多个Agent聊天,且每次聊天的结果会带入到下一个聊天中,最后完成任务。

3. 群聊模式

当有一堆Agent在一起聊天时,问题来了,谁是下一个发言者?AutoGen提供了多种决策机制,比如 轮流、随机、人工决定、以及默认的由LLM来决定, 另外还允许定制自己的决策算法(比如有人说脏话就禁言:))。

picture.image

群聊模式中,需要一个团队管理者,来负责协调与决策下一个发言者。

以上是AutoGen的基础聊天模式,初此之外,AutoGen还提供了 嵌套聊天的模式:就是把一个多Agent系统“打包”成一个Agent,用到另一个更大的系统中。

这里揭示了AutoGen与CrewAI的一点区别: AutoGen多个Agent的协作相对更灵活,但也多了一些随机性(高度依赖LLM决策);CrewAI默认采用顺序任务编排,牺牲了灵活性,但多了些确定性。

2

AutoGen实现多智能体Demo

现在我们来实现之前的多智能体Demo:

picture.image

这个层级模式刚好匹配AutoGen的群聊模式,这里直接给出核心代码:


          
.....
          
from autogen import ConversableAgent,GroupChat,GroupChatManager,AssistantAgent,UserProxyAgentweb_searcher = ConversableAgent(    name="web_searcher",    system_message="你是一个搜索助手,会根据输入的关键词进行网络搜索. ",    llm_config={"config_list": [{"model": "gpt-4o-mini"}]},)web_searcher.register_for_llm(name="web_search_tool", description="网络搜索工具")(web_search_tool)emailer = ConversableAgent(    name="emailer",    system_message="你是一个邮件助手,会根据输入的收件人、主题和正文发送邮件. ",    llm_config={"config_list": [{"model": "gpt-4o-mini"}]},)emailer.register_for_llm(name="email_tool", description="邮件发送工具")(email_tool)user_proxy = ConversableAgent(    name="user_proxy",    system_message="你是一个善于回答问题的AI助手,并会执行python代码或进行工具调用。如果没有具体的输入任务,请直接回复DONE",    llm_config={"config_list": [{"model": "gpt-4o-mini"}]},    human_input_mode="NEVER",)user_proxy.register_for_execution(name="web_search_tool")(web_search_tool)user_proxy.register_for_execution(name="email_tool")(email_tool)group_chat = GroupChat(    agents=[web_searcher,emailer,user_proxy],    messages=[],    max_round=6)group_chat_manager = GroupChatManager(    groupchat=group_chat,    system_message="你是一个智能的团队管理者,会根据输入任务与历史消息决定下一步的任务,并选择合适的团队成员来完成。",    llm_config={"config_list": [{"model": "gpt-4o-mini"}]},    is_termination_msg=lambda msg: 'DONE' in msg.get("content"),)
      

这里省略了两个工具模拟函数(web_search_tool,email_tool)。其他解释如下:

  • 创建web_searcher与emailer两个Agent,并注册tools,这是AutoGen中工具使用的机制
  • 创建一个user_proxy的Agent。这是一个不同于其他框架的模式,这个Agent将代表人类提出任务与要求,同时工具的执行(代码与函数)需要这个独立的Agent来完成
  • 创建团队与团队管理者,这部分有点类似CrewAI
  • 注意这里用来结束聊天的小技巧:借助is_termination_msg这个参数

一切准备就绪,我们来分配任务:


        
            

          chat\_result = user\_proxy.initiate\_chat(group\_chat\_manager,  
 message="搜索今天黑神话悟空的最新消息,发到我邮箱aa@bb.com")
        
      

观察运行的输出:

picture.image

注意看 Next Speaker 的选择,是由chat_manager根据任务进展的自动选择:

  • 先选择web_searcher搜索网络(实际执行:user_proxy)
  • 然后选择emailer发送邮件(实际执行:user_proxy)
  • 最后chat_manager判断任务已经结束,终止群聊

3

AutoGen小结

尽管AutoGen也是面向多智能体系统设计的开放框架,但相对基于角色扮演的CrewAI更复杂些。当然,从功能角度也更加强大(不考虑CrewAI新的Flows特性),毕竟CrewAI目前的多智能体协作还只支持顺序与层次两种方式。

【优点】

  • 大厂出品,更有技术保障
  • 天然面向多智能体系统而设计
  • 基于对话的协作,更自然与直观
  • 较强的功能与扩展性,适应多种领域任务
  • 支持多种灵活的对话模式、任务分解模式
  • 有较为完善的人类参与的协作机制
  • 提供了AutoGen Studio低代码平台
  • 文档与社区较完善

【缺点】

AutoGen在设计上与CrewAI一样都属于高度依赖于LLM自身来实现多智能体协作的框架,因此存在类似的问题:

  • 复杂流程自定义编排的能力不足(期待正在开发的0.4版本)
  • Agent之间的对话协作可能产生黑盒子效应,较大的不确定性
  • 使用非OpenAI API兼容的本地LLM略麻烦
  • 工具判断与执行的分离不太符合习惯

整体上对AutoGen的使用建议是,更适合如下场景与条件:

  • 有较好的LLM开发技术基础
  • 典型的多Agent应用场景,不建议在如RAG这样的需求中使用
  • 非常适合有人类参与协作监督的场景,比如团队创作、软件编程等

最重要的是,由于全新设计重写的AutoGen 0.4版本已经在路上,没入坑的还是等等吧。

end

福利时间

为了帮助LLM开发人员更系统性与更深入的学习RAG应用,特别是企业级的RAG应用场景下,当前主流的优化方法与技术实现,我们编写了 《基于大模型的RAG应用开发与优化 — 构建企业级LLM应用》 这本长达 500页 的开发指南,与大家一起来深入到LLM应用开发的全新世界。

更多细节,点击如下链接了解picture.image

现在购,享 50%折扣

交流请识别以下名片

picture.image

0
0
0
0
相关资源
大规模高性能计算集群优化实践
随着机器学习的发展,数据量和训练模型都有越来越大的趋势,这对基础设施有了更高的要求,包括硬件、网络架构等。本次分享主要介绍火山引擎支撑大规模高性能计算集群的架构和优化实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论