进阶 📋 6 个步骤 第 529 / 529 篇

AutoGen 进入维护模式之后:分阶段迁移到 Microsoft Agent Framework 的实操路线

autogen 仓库挂出维护横幅后的官方迁移路线:盘点存量、双包并存、单智能体外壳替换、群聊对话模型改图工作流、检查点与遥测还债、分批次带回滚预案。

2026.10.13· 21 分钟阅读· 约 2884 字· 🔄 Agent Framework / 💬 AutoGen

十月七日前后,不少团队打开 microsoft/autogen 仓库时发现 README 挂上了维护模式横幅:不再有新特性,官方指路 Microsoft Agent Framework(企业级后继者,Python 与 .NET 双栈,近期 Python 线已发到 1.2x 版本)。AutoGen 是过去两年多智能体领域最有影响力的开源项目之一,存量项目不在少数——但「维护模式」意味着 bug 修、特性不加,新生态(MCP、A2A、检查点、可观测)都在新框架里。好消息是微软提供了官方迁移指南,且两个库可以并存安装、逐模块搬。本篇按官方迁移指南的思路,把「盘点存量、迁移单智能体、改写群聊编排、补上检查点」四段实操走完,给出分阶段与回滚的路标。

🎯 适合人群:生产环境跑着 AutoGen(微软版,注意不是社区 fork AG2)代码、需要规划迁移的团队;新项目直接选 Agent Framework 的开发者也可以把本篇当入门对照。前置要求:Python 3.10+、一个模型 API 密钥(OpenAI/Azure OpenAI/Ollama 均可)。

先理解:从「对话模型」到「图工作流」

这次迁移不是改个包名。两个框架组织多智能体的心智模型不同:AutoGen 把多智能体系统建模成对话——智能体们在聊天线程里互发消息,GroupChat 与 Manager 控制谁接着说;Agent Framework 把它建模成图——智能体和普通函数都是执行器(executor),数据沿显式的边流动,编排是看得见的结构而不是聊天记录的隐式顺序。官方的预置编排模式(顺序、并发、交接、群聊、Magentic)在新框架里都有对应物,群聊的「轮转发言」与「按需选人」也各有映射,但代码形态变了。

补偿也是真实的:Agent Framework 的工作流引擎在每个超级步(superstep)结束写检查点,可以从任意检查点恢复或把运行搬到新实例——这是 AutoGen 一直没有内置的能力(官方迁移指南自己也说 AutoGen 的持久化要外部实现)。再加上 OpenTelemetry 遥测开箱即用、MCP 与 A2A 原生支持,迁移的收益不只换个门牌。

两条命令先分清。新框架安装是 pip install agent-framework;AutoGen 是 pip install autogen-agentchat。社区维护的 fork 是 AG2(包名 ag2,站内教程 454 讲过),与微软版 AutoGen 是两个项目,迁移路线不同——先确认你用的是哪个,再动手。

Step 1:盘点存量,别急着换依赖

1 一张表摸清家底
# 盘点清单(每行一个智能体/工作流):
#   A) 角色:单智能体工具助手 / 群聊 / 交接?
#   B) 工具契约:函数清单、签名、返回结构
#   C) 状态与记忆:有没有线程内状态、
#      外部存储、自定义记忆
#   D) 依赖精确行为的地方:
#      流式输出的分块形态、异常类型、
#      消息序列化格式
#   E) 测试覆盖:哪些路径有回归测试

官方迁移指引的顺序很明确:先盘点存量智能体,而不是上来就换依赖。盘点的产出直接决定迁移顺序——没有持久状态、工具少、行为可测的「支持分诊机器人」是理想的首批搬迁户;依赖精确流式行为、带大量线程状态的「审批类智能体」放到最后,并单独留观察期。给每个模块标上迁移批次,这成了你的迁移作战图。

💡 盘点时顺手把每个智能体的「行为锚点」写下来:给定固定输入,它应该输出什么。迁移后拿这些锚点做对照测试,比肉眼 diff 消息记录可靠得多。

Step 2:装包,两条线并存

2 不冲突,逐模块搬
# 在同一虚拟环境里并存安装:
pip install agent-framework
pip install autogen-agentchat   # 存量代码继续可用

# 验证新框架:
python -c "import agent_framework; print(agent_framework.__version__)"

# 版本注意:Python 线与 .NET 线独立发版,
#   具体版本号以 GitHub releases 页为准

两个库可以同时装在同一个环境里——这是分阶段迁移能成立的技术前提。存量 AutoGen 代码不动,新代码用 agent-framework 写,每搬完一个模块再把对应的 AutoGen 依赖摘掉。新版框架同样 MIT 开源,不绑定 Azure:模型端可以接 Azure OpenAI、OpenAI、Anthropic、Ollama 本地模型,开发与验证在哪个云都不受限制,只是深度运维(托管、遥测面板)在 Azure Foundry 上体验最完整。

包名相似的山寨包别装错。PyPI 上有各种名字相近的包,认准 agent-framework 与 autogen-agentchat 这两个官方包名;装完检查依赖树里没有奇怪的同名包。

Step 3:迁移单智能体

3 工具契约不动,外壳换掉
# AutoGen 写法(旧):
from autogen_agentchat.agents import AssistantAgent
agent = AssistantAgent(
    name="triage",
    model_client=model_client,
    system_prompt="你是工单分诊助手...",
    tools=[classify, lookup])

# Agent Framework 写法(新):
from agent_framework import ChatAgent
from agent_framework.openai import OpenAIChatClient
agent = ChatAgent(
    name="triage",
    chat_client=OpenAIChatClient(),
    instructions="你是工单分诊助手...",
    tools=[classify, lookup])

# 运行与取结果:
response = await agent.run("这条工单怎么分?")
print(response.text)

单智能体迁移的模式很固定:模型客户端从构造参数变成 chat_client 注入,system_prompt 改名 instructions,工具函数原样搬——普通 Python 函数加类型标注与 docstring 就是新框架的工具契约,与 AutoGen 的函数工具几乎同构,这部分基本零成本。运行入口统一为 run()(返回结构化响应,不再直接吐字符串),异步是默认形态。迁移完立刻跑 Step 1 记的行为锚点做对照,一致才算过。

💡 工具函数里 print 之类的调试输出在新框架下收进遥测更合适:OpenTelemetry 默认记录工具调用,接上后端后「它调了什么工具、参数是什么」在面板里直接看。

Step 4:改写群聊编排

4 聊天室换成显式编排
# AutoGen 写法(旧):
# RoundRobinGroupChat([researcher, reviewer],
#                     termination_condition=...)

# Agent Framework 写法(新,示意):
# 预置编排模式:Sequential / Concurrent /
#   Handoff / GroupChat / Magentic
from agent_framework.orchestrations import GroupChatOrchestration
orch = GroupChatOrchestration(
    members=[researcher, reviewer],
    manager=...,          # 群聊管理器,含轮转/选择策略
    termination_condition=...)

result = await orch.run("写一份技术选型报告")

群聊是 AutoGen 用户的重灾区,也是迁移中概念转换最大的一段:发言顺序不再隐式存在于聊天记录里,而是编排器与管理器的显式配置。轮转发言、按语义选择下一个发言人、发言后终止判断,这些策略在新框架的群聊编排里都有对应配置项。具体类名与参数随版本演进较快,动手时以你安装版本的官方编排文档为准——本篇写的是形态对照,不是 API 速查表。

群聊行为是「精确依赖」重灾区。多智能体对话的最终产出对发言顺序、终止时机极其敏感,同样的提示词在新编排下可能产生不同风格的输出。群聊迁移务必准备一组固定的多组对照用例,用评分而不是「看起来差不多」来验收。

Step 5:补上状态、检查点与可观测

5 老系统的欠账,新框架还了
# 工作流检查点(示意):
#   工作流按超级步推进,每步结束可写检查点
#   内置存储:内存 / 本地文件 / Azure Cosmos DB
#   可从任意检查点恢复运行,
#   或把运行迁移到新实例(拓扑一致前提下)

# AutoGen 时代的欠账怎么补:
#   旧代码自己实现的会话持久化
#     → 评估改为框架检查点
#   旧代码的日志拼装
#     → 改为 OpenTelemetry 导出

迁移不只是平移,还是一次还债窗口。AutoGen 时代你得自己把会话状态写进数据库、自己拼日志格式;新框架里工作流引擎的检查点机制覆盖了「长任务崩了从哪续」「暂停审批后从哪恢复」「把运行搬到另一台机器」这些场景,遥测则是标准 OpenTelemetry 格式,接哪家后端都行。迁移每个模块时同步评估:旧的 DIY 持久化与日志代码,能删的删,别把旧债原样搬进新房子。

💡 检查点拓扑一致性有个隐含约束:恢复要求工作流拓扑与执行器身份和写入时一致——意味着编排代码的改动要考虑在途运行怎么办。发布编排变更前,确认没有正在跑的长任务。

Step 6:分阶段推进与回滚预案

6 每批都有退路
# 推荐节奏:
#   批次 1:无状态单智能体(低风险练手)
#   批次 2:带工具与简单记忆的智能体
#   批次 3:群聊/交接等多智能体编排
#   批次 4:重度依赖流式与线程状态的最后搬
#
# 每批的回滚预案:
#   双包并存期间,切回 = 改回旧的 import
#   与入口装配,存量 AutoGen 代码原样保留
#   直到该批次稳定运行一个观察期后再删

回滚能力来自并存安装:迁移期内存量代码路径完整保留,新代码出问题就切回去,不存在「迁移到一半回不了头」的窘境。观察期建议按「稳定跑过真实的业务流量」定义,而不是「测试全绿」——多智能体系统的很多问题只在真实负载下暴露。全部迁完后,从依赖里摘掉 autogen-agentchat,README 里写清新架构,这次迁移才算闭环。

最后提醒一个时间维度的判断:维护模式不等于立即停摆,存量代码短期内还能正常跑,所以迁移是「值得规划」而不是「今晚就得做」的事。真正的止损线是新特性——当你的业务需要 MCP 深度集成、检查点、或官方遥测这些只在 Agent Framework 里演进的能力时,就是启动对应批次迁移的信号。

AG2 用户不适用本篇路线。AG2(ag2 包)是社区 fork,有自己的演进节奏与生态,它的迁移或升级请看 AG2 自己的文档;把微软的迁移指南套在 AG2 代码上会水土不服。

常见问题 FAQ

Q:Semantic Kernel 用户也要迁吗?Agent Framework 的基座就是 Semantic Kernel 的内核、插件与连接器,SK 的资产大量直接沿用;官方定位是 SK 用户向新框架靠拢,具体路径看官方的 SK 迁移指南,难度低于 AutoGen 路线。

Q:迁移期间两个框架的模型调用能共享配额吗?能,模型端点与密钥是外部的,两边只是 SDK 不同;成本侧的变化主要来自新框架遥测与检查点带来的少量额外开销,可忽略。

Q:DevUI 是什么,迁移时用得上吗?DevUI 是新框架的可视化调试面板(预览特性),本地起服务就能在浏览器里和智能体对话、看编排结构——迁移验证阶段用它做行为对照很方便,注意它是预览特性,别依赖它做生产运维。

Q:Go 版能用于新项目吗?Go 实现还在公开预览,声明式智能体、RAG、CodeAct 等能力暂缺;生产新项目建议还是 Python 或 .NET 这两条 GA 线,Go 适合提前熟悉 API 形态。

← 返回教程中心