AutoGen 起初由微软研究院团队开发,最初定位为多智能体协作框架 ,通过多个 AI 智能体(Agent)的对话协作解决复杂任务。提供底层工具链,支持自定义智能体、任务分解、对话编排等,开发者可通过少量代码实现复杂流程。
2024年9月,AutoGen 核心团队与微软分道扬镳,创建了原项目的 GH 分叉。最终,在11月,他们成立了新的 AG2 GitHub 组织和新的仓库(这次是一个全新的、独立的仓库),同时接管了 PiPy 的 autogen
和 pyautogen
包(这是他们更新的地方)以及他们的 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的
autogen
和pyautogen
包。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,由原作者扩展的版本:
- 新仓库地址:https://github.com/ag2ai/ag2
- 社区 Discord 邀请链接:https://discord.gg/pAbnFJrkgZ
- 向下兼容性
- 可用作
ag2
、autogen
和pyautogen
PyPI 包(指向相同的代码库)
4. semantic-kernel,最终将整合Autogen 0.4的部分
- 代码库: https://github.com/microsoft/semantic-kernel
- 由 Microsoft 维护
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》解决该问题。