十月七日前后,不少团队打开 microsoft/autogen 仓库时发现 README 挂上了维护模式横幅:不再有新特性,官方指路 Microsoft Agent Framework(企业级后继者,Python 与 .NET 双栈,近期 Python 线已发到 1.2x 版本)。AutoGen 是过去两年多智能体领域最有影响力的开源项目之一,存量项目不在少数——但「维护模式」意味着 bug 修、特性不加,新生态(MCP、A2A、检查点、可观测)都在新框架里。好消息是微软提供了官方迁移指南,且两个库可以并存安装、逐模块搬。本篇按官方迁移指南的思路,把「盘点存量、迁移单智能体、改写群聊编排、补上检查点」四段实操走完,给出分阶段与回滚的路标。
先理解:从「对话模型」到「图工作流」
这次迁移不是改个包名。两个框架组织多智能体的心智模型不同: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:盘点存量,别急着换依赖
# 盘点清单(每行一个智能体/工作流):
# A) 角色:单智能体工具助手 / 群聊 / 交接?
# B) 工具契约:函数清单、签名、返回结构
# C) 状态与记忆:有没有线程内状态、
# 外部存储、自定义记忆
# D) 依赖精确行为的地方:
# 流式输出的分块形态、异常类型、
# 消息序列化格式
# E) 测试覆盖:哪些路径有回归测试
官方迁移指引的顺序很明确:先盘点存量智能体,而不是上来就换依赖。盘点的产出直接决定迁移顺序——没有持久状态、工具少、行为可测的「支持分诊机器人」是理想的首批搬迁户;依赖精确流式行为、带大量线程状态的「审批类智能体」放到最后,并单独留观察期。给每个模块标上迁移批次,这成了你的迁移作战图。
Step 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:迁移单智能体
# 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 记的行为锚点做对照,一致才算过。
Step 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:补上状态、检查点与可观测
# 工作流检查点(示意):
# 工作流按超级步推进,每步结束可写检查点
# 内置存储:内存 / 本地文件 / Azure Cosmos DB
# 可从任意检查点恢复运行,
# 或把运行迁移到新实例(拓扑一致前提下)
# AutoGen 时代的欠账怎么补:
# 旧代码自己实现的会话持久化
# → 评估改为框架检查点
# 旧代码的日志拼装
# → 改为 OpenTelemetry 导出
迁移不只是平移,还是一次还债窗口。AutoGen 时代你得自己把会话状态写进数据库、自己拼日志格式;新框架里工作流引擎的检查点机制覆盖了「长任务崩了从哪续」「暂停审批后从哪恢复」「把运行搬到另一台机器」这些场景,遥测则是标准 OpenTelemetry 格式,接哪家后端都行。迁移每个模块时同步评估:旧的 DIY 持久化与日志代码,能删的删,别把旧债原样搬进新房子。
Step 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 形态。