【大模型系列篇】深剖AutoGen多智能体协作框架发展脉络,快速入门简单示例

AutoGen 起初由微软研究院团队开发,最初定位为多智能体协作框架 ,通过多个 AI 智能体(Agent)的对话协作解决复杂任务。提供底层工具链,支持自定义智能体、任务分解、对话编排等,开发者可通过少量代码实现复杂流程。

2024年9月,AutoGen 核心团队与微软分道扬镳,创建了原项目的 GH 分叉。最终,在11月,他们成立了新的 AG2 GitHub 组织和新的仓库(这次是一个全新的、独立的仓库),同时接管了 PiPy 的 autogenpyautogen 包(这是他们更新的地方)以及他们的 Discord 频道

同时,微软推出了一个全新的重写版本,称为 Autogen 0.4,该版本可以在 原始仓库 的主分支获取。并推出 AutoGen Studio ,主打低代码界面和可视化工作流设计。还有一个由社区维护的旧版 0.2 版本,可以在 0.2 分支 中找到。这两个版本都可以在新 PyPI 仓库 autogen-agentchat 中找到。

2024年底,微软宣布他们计划将Autogen的0.4多代理运行时引入Semantic Kernel(从Autogen到SK的无缝过渡),实际上这是Autogen的第四次演变。从2025年初开始,他们计划将0.4版的多代理运行时作为SK仓库的一部分提供,同时提供生产支持,而将原始仓库的维护交给社区。

微软与 AG2 在架构设计、工具链完善度上形成差异化竞争。微软可能通过 AutoGen Studio 推动商业化,而 AG2 更倾向于开源社区协作。

发展历程

2023 ~ 2024

AG2(原团队分叉版本)

1. 开发者:原AutoGen团队独立运营,接管了PyPi的 autogenpyautogen 包。

2. 特点

  • 向下兼容旧版AutoGen,延续原有架构和功能。
  • 新增社区驱动的扩展功能,例如改进的对话管理和工具集成。

3. 现状:代码库迁移至新仓库(ag2ai/ag2),社区通过Discord维护。

微软官方分支:AutoGen 0.4

1. 技术重构:完全重写架构,采用异步消息传递机制和模块化设计,提升性能和可扩展性。

2. 兼容性:不再向后兼容旧版(如0.2),导致社区需迁移代码。

3. 维护方:微软主导开发,计划将多代理运行时整合至 Semantic Kernel(SK),提供生产级支持。

社区维护分支:Legacy 0.2

1. 定位:保留旧版功能,供依赖原有代码的开发者使用。

2. 维护方式:由开源社区通过GitHub的0.2分支更新。

2025 ~

Semantic Kernel 整合计划

  • 微软宣布自2025年初,将AutoGen 0.4的核心功能(如多代理协作)集成至 Semantic Kernel,提供更稳定的生产环境支持。
  • 开发者可通过SK实现从AutoGen到企业级框架的无缝迁移。

AutoGen Studio 的推出

  • 低代码开发:微软推出可视化工具 AutoGen Studio,允许通过拖拽界面构建智能体,降低开发门槛。
  • 功能模块:支持模型选择、技能/工具绑定、记忆组件(如向量数据库)和工作流设计。

技术特性演进

  • 异步通信:AutoGen 0.4引入异步消息机制,提升代理协作效率。
  • 调试与监控:新增OpenTelemetry集成和实时任务分析工具,增强系统可观察性。

 

主要分支与定位

微软官方分支

  • 仓库microsoft/autogen(原仓库)
  • 特点
    • 维护 AutoGen 0.4+ 版本,采用与 AG2 不同的架构。
    • 推出 AutoGen Studio,简化 AI 代理原型设计,支持拖拽式操作。
    • 侧重企业级应用与生态整合(如 Azure 集成)。

AG2 (创始人分支)

  • 仓库AG2/autogen(新组织)
  • 特点
    • 完全重写架构,强调开放性与可扩展性,支持更复杂的多智能体协作。
    • 推出 pyautogen 包(PyPI 名称),定位为 AG2 的核心实现。
    • 社区驱动,功能迭代更快,但需自行处理兼容性。

 

各版本对比

1. 完全重写,Autogen 0.4 版本采用不同架构

  • 在微软原始仓库的 master 分支上开发:https://github.com/microsoft/autogen
  • 不向后兼容
  • 由 Microsoft 维护,后续可能交由社区维护
  • 可以通过安装 autogen-agentchat==0.4.0 PyPI 包 和 autogen-core 来获取

2. Legacy Autogen 0.2 版

  • 在原始 Microsoft 代码库的 0.2 分支上开发:https://github.com/microsoft/autogen/tree/0.2
  • 向下兼容
  • 由社区维护
  • 可作为 autogen-agentchat~=0.2 的 PyPI 包使用(标记为正式版本,当前版本是 0.2.38)

3. AG2,由原作者扩展的版本:

4. semantic-kernel,最终将整合Autogen 0.4的部分

AutoGen 0.4

开源地址:https://github.com/microsoft/autogen

自微软开源AutoGen以来在github已获得超42000颗星,成为AI Agent领域应用最多的框架之一。由于开发者的快速增长,也带来了API效率低下以及调试和干预功能有限等难题。

同时开发者对AI Agent自动化行为的可观测性、控制能力、多层级Agent之间的协作有了更高的需求。所以,微软对AutoGen 进行了大更新,发布0.4版本一次性解决所有问题。目前稳定版本已更新至0.4.9,详见 https://microsoft.github.io/autogen/stable//index.html 。

版本亮点功能

异步消息传递:Agent之间的通信采用了异步消息机制,不需要等待其他Agent的响应就可以继续自动执行任务。这种全新模式非常适合事件驱动的应用程序,Agent可以响应特定事件或条件触发的动作。

同时也保留了传统的请求/响应模式,一个Agent发送请求并等待另一个Agent的回应。

模块化和可扩展性:用户可以轻松地使用自定义Agent、工具、内存和模型等,将不同的功能模块组合起来,构建出满足特定业务场景的Agent系统。例如,可以通过注册不同的Agent类型和工具,来实现特定的自动化功能。

可观测性和调试:内置的指标跟踪、消息追踪和调试工具,能够对Agent交互和工作流程进行监控和控制。可以清楚记录Agent工作流程中的每个步骤,包括大模型调用、工具使用、中间输出、内存状态和提示模板等。

这对于医疗诊断、法律分析、金融投资等,需要对Agent的运行流程进行精准追溯的行业非常有帮助。

可扩展性和分布式:用户可以设计复杂的、分布式的Agent网络,可以在组织边界之间无缝运行。通过分布式架构,可以将不同的Agent部署在不同的服务器或云平台上,实现资源的合理分配和高效利用。

内置和社区扩展:扩展模块通过高级模型客户端、Agent、多Agent团队和Agent型工作流程工具增强了框架的功能。社区支持允许开源开发者管理自己的扩展,可以基于框架开发出更多具有特定功能的Agent或工具,并分享给其他开发者使用。

对于一些常见的功能需求,开发者可以直接使用社区提供的扩展模块,无需从头开始开发,极大降低了开发的难度和门槛。

跨语言支持:AutoGen 现在允许不同编程语言编写的Agent之间进行互操作。例如,Python编写的Agent可以与.NET 编写的Agent协同工作。这项功能极大地拓宽了AutoGen的应用范围,并消除了由于编程语言差异造成的障碍。

除了新增功能之外,微软对AutoGen的基础架构也进行了重塑,框架采用分层和可扩展的设计。各层职责明确划分,并建立在下层之上。包括核心API、Agent聊天API和扩展API。

  • 核心API,事件驱动Agent系统的基石,实现了消息传递、事件驱动代理以及本地和分布式运行时,以提供灵活性和强大的功能。它还支持 .NET 和 Python 的跨语言支持。
  • Agent聊天API,基于核心层构建的任务驱动的高级API,实现了一个更简单但具有偏见的 API,用于快速原型设计。该 API 建立在 Core API 之上,与 v0.2 版本的用户最熟悉,并支持常见的多代理模式,如双代理聊天、群组聊天、代码执行、预构建Agent等功能。
  • 扩展API,允许第一方和第三方扩展不断扩展框架功能。它支持特定实现LLM客户端(如OpenAI、AzureOpenAI),以及代码执行等能力。

在UI方面也进行了大量更新:通过UI进行交互式反馈,添加用户Agent以实现在团队运行期间实时的用户输入和指导;

消息流可视化,通过直观的UI界面理解Agent通信,该界面映射消息路径和依赖关系;可视化拖拽界面,使用拖放组件到位置并配置它们的关系和属性的界面,可视觉化设计Agent。

pip install -U "autogenstudio"

# Run AutoGen Studio on http://localhost:8080
autogenstudio ui --port 8080 --appdir ./my-app

 

集成 Magentic-One

Magentic-One也是微软开源的一款多层级通用AI Agent,现在也集成在了AutoGen中。

Magentic-One是一个多层级架构,分别由Orchestrator、WebSurfer、FileSurfer、Coder和ComputerTerminal 5个AI Agent组成。

每个专业Agent都拥有自己的技能集和知识库,能够在各自的领域内高效运作。但它们并非孤立工作,而是通过 Orchestrator 进行协调,确保所有活动都是连贯且符合最终目标。

Orchestrator负责整个任务的规划、进度跟踪及错误恢复。当接收到一个任务时,会深度分析任务需求,并根据需要分配给其他四个专业Agent不同的子任务。

这些专业Agent分别擅长处理特定类型的任务,WebBrowser Agent 能处理网页浏览相关的操作,FileNavigatorAgent 管理本地文件系统的导航,Code WriterAgent负责编写和执行Python 代码片段,ComputerTerminal则允许执行操作系统级别的命令,从而为更高层次的任务提供底层支持。

在 Magentic-One 架构中,异步事件驱动是一个很重要功能。传统上,许多系统依赖于同步请求-响应模式,其中每次调用都需要等待结果返回才能继续下一步骤。而异步方法允许系统中的组件并发运行,在任何时候接收新输入或触发动作,而不会阻塞其他部分的工作。

例如,当 Orchestrator 分配了一个涉及下载网页内容并从中提取信息的任务给WebBrowserAgent 后可以立即开始加载页面,同时 Orchestrator 和其他Agent继续处理其他任务。

一旦页面加载完成并且所需的数据被提取出来,WebBrowserAgent 就会向 Orchestrator 发送通知,告知任务已完成并将结果传递回去。这种方式使得 Magentic-One 能够更有效地管理资源,减少等待时间,并更好地应对高并发场景下的挑战。

 

除了异步事件驱动架构外,Magentic-One 的另一个显著特点是其高度模块化的设计。这意味着每个Agent都可以被视为独立的功能单元,具有明确的职责范围和接口定义。结构简化了系统的构建流程,因为开发者只需关注单个Agent的功能实现,而不必担心与其他部分的交互细节。

更重要的是,模块化促进了代码重用和技术共享,已经存在的Agent可以直接应用于新的项目中,或者稍加修改就能适应不同的应用场景。

此外,Magentic-One 的模块化设计也带来了极大的可扩展性。随着技术的进步或业务需求的变化,可以轻松地添加新的Agent或更新现有Agent的功能,而不需要对整个系统进行大规模改造。例如,如果发现某个领域内的任务变得更加复杂,可以通过引入专门针对该领域的Agent来增强系统的处理能力。

autogen-agentchat 示例 

安装 AutoGen

使用指南:https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-guide/index.html

AutoGen requires Python 3.10 or later.

python3 -m venv venv
source venv/bin/activate
(venv) autogen-demo > pip install -U "autogen-agentchat" "autogen-ext[openai]"

调用ollama本地模型,并模拟 get_weather工具操作,当然也可以接入 weather mcp servers。大模型智能体开发会涉及较多的环境变量管理,可以参考《使用python-dotenv进行高效的环境变量管理》,进行高效管理。

import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.ui import Console
import os
from dotenv import load_dotenv

load_dotenv()

def get_model_client() -> OpenAIChatCompletionClient:
    return OpenAIChatCompletionClient(
        model="qwen2.5:32b",
        api_key="NotRequired",
        base_url="http://127.0.0.1:11434/v1",
        model_capabilities={
            "json_output": False,
            "vision": False,
            "function_calling": True,
        },
    )

async def main() -> None:
    # model_client = OpenAIChatCompletionClient(model="gpt-4o")
    model_client = get_model_client()

    async def get_weather(location: str) -> str:
        return f"The weather in {location} is sunny."

    assistant = AssistantAgent(
        "Assistant",
        model_client=model_client,
        tools=[get_weather],
    )
    termination = TextMentionTermination("TERMINATE")
    team = RoundRobinGroupChat([assistant], termination_condition=termination)
    await Console(team.run_stream(task="What's the weather in New York?"))


asyncio.run(main())

deepseek-r1不支持function calling,可参照《如何解决DeepSeek-R1结构化输出问题,使用PydanticAl和DeepSeek构建结构化Agent》解决该问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值