Agent Framework 1.0来了:一行代码切6个模型厂商
4 月 3 日微软悄悄发了 Agent Framework 1.0(GA),开源、生产级、.NET 和 Python 双语言。内置 MCP + A2A 支持,6 个模型厂商一行代码切换。但国内几乎没人讨论。这篇从架构层面拆解它和 LangChain 的核心区别,以及什么场景该选它。
一个被低估的发布
如果你只看中文技术社区,大概不知道微软在 4 月 3 日做了一件大事:Agent Framework 正式发布 1.0 版本(GA)。
这不是一个实验性项目——微软在官方博客上写得很明确:
“Production-ready, stable APIs, and a commitment to long-term support.”
生产级、API 稳定、长期支持承诺。这是微软在 AI Agent 领域最重磅的开源基础设施投入。
但在掘金和知乎上搜"Microsoft Agent Framework",几乎没有中文内容。大家的注意力都在 LangChain、CrewAI、OpenClaw 上。微软的这个框架值得认真看一下。
它是什么
Microsoft Agent Framework(以下简称 MAF)是一个用于构建 AI Agent 和多 Agent 工作流的开源框架。核心特性:
| 特性 | 说明 |
|---|---|
| 语言支持 | .NET + Python 双语言 |
| 模型厂商 | Azure OpenAI、OpenAI、Anthropic、Bedrock、Gemini、Ollama |
| 协议支持 | MCP(工具接入)+ A2A(Agent 间通信) |
| 多 Agent 模式 | Sequential、Group Chat、Magentic-One |
| 开源协议 | MIT |
| 成熟度 | GA 1.0(生产级) |
两个亮点值得注意:
第一,支持 Ollama。 这意味着你可以用本地模型跑 Agent,不需要任何云服务。对数据隐私敏感的场景,这是 LangChain 和 CrewAI 做不到的——它们主要面向云 API。
第二,.NET 支持。 这是 MAF 最独特的差异化。LangChain 只有 Python 和 JS,CrewAI 只有 Python。大量的企业级后端是 C#/.NET 写的,之前接 AI Agent 只能通过 Python 微服务桥接。 MAF 让你在 C# 项目里原生写 Agent 逻辑。
跟 LangChain 思路哪里不同
LangChain 和 MAF 都能做"多步骤 AI Agent",但架构思路差异很大。
LangChain:链式组合(Chain-first)
LangChain 的核心抽象是"链"(Chain)——把 Prompt → 模型 → 解析器 → 工具 串成一条流水线:
# LangChain 风格:定义一条链
chain = prompt | model | parser | tool
result = chain.invoke({"input": "查一下最新的AI新闻"})
链的好处是灵活——你可以把任何组件拼接在一起。坏处是编排逻辑散落在代码各处。当你有 5 个 Agent 需要协作时,链和链之间的依赖关系、状态传递、错误处理变得很复杂。
LangChain 后来加了 LangGraph 来解决编排问题,但那是在链的基础上打补丁。
MAF:编排优先(Orchestration-first)
MAF 的核心抽象不是链,而是"Agent + 编排模式":
# MAF 风格:定义 Agent,选编排模式
from agent_framework import Agent, SequentialOrchestrator
researcher = Agent(name="researcher", model="openai/gpt-5.5",
instructions="你是一个新闻研究员")
writer = Agent(name="writer", model="anthropic/claude-sonnet-4-6",
instructions="你是一个技术作家")
# 编排模式:researcher 先跑,结果传给 writer
orchestrator = SequentialOrchestrator(agents=[researcher, writer])
result = orchestrator.run("写一篇关于 MCP 最新进展的技术博客")
注意看两个 Agent 用了不同的模型——researcher 用 GPT-5.5,writer 用 Claude Sonnet。每个 Agent 可以独立选择最合适的模型。
MAF 内置了三种编排模式,不需要你自己写编排逻辑:
| 模式 | 工作方式 | 适用场景 |
|---|---|---|
| Sequential | A 做完传 B,B 做完传 C | 流水线(研究→写作→审核) |
| Group Chat | 多个 Agent 讨论同一个问题 | 需要多视角分析的决策 |
| Magentic-One | 一个 planner 分配任务给 workers | 复杂的任务分解和执行 |
核心区别:LangChain 让你自己搭编排,MAF 内置了编排模式。 对于简单场景差别不大;对于多 Agent 协作场景,MAF 省很多架构工作。
一行代码切模型
这个特性非常实用。MAF 支持 6 个模型厂商,切换只需要改一个字符串:
from agent_framework import Agent
# 用 OpenAI
agent = Agent(model="openai/gpt-5.5", instructions="...")
# 切到 Anthropic——改一行
agent = Agent(model="anthropic/claude-sonnet-4-6", instructions="...")
# 切到 Gemini——改一行
agent = Agent(model="google/gemini-3.1-pro", instructions="...")
# 切到本地 Ollama——改一行
agent = Agent(model="ollama/llama-4", instructions="...")
不需要改 SDK、不需要改认证方式、不需要改调用格式。MAF 在框架层面做了模型抽象,而不是让你自己管多个 SDK。
这和用 API 网关的思路类似——差别是 MAF 在代码层面做抽象,API 网关在网络层面做抽象。两者可以叠加使用。
MCP 和 A2A 怎么集成的
MAF 对 MCP 和 A2A 的支持是原生内置的,不是第三方插件。
MCP 集成
Agent 可以在运行时自动发现并调用 MCP Server 暴露的工具:
from agent_framework import Agent, McpToolProvider
# Agent 自动发现 MCP Server 的工具
agent = Agent(
model="openai/gpt-5.5",
instructions="你是一个数据分析师",
tool_providers=[
McpToolProvider(server="sqlite-query"), # 数据库查询
McpToolProvider(server="web-search"), # 网页搜索
]
)
# Agent 会根据任务自动选择调用哪个工具
result = agent.run("查一下数据库里最近一周的用户注册数据,然后搜索同行业的基准数据做对比")
不需要在代码里写工具调用逻辑。 Agent 根据 MCP Server 的工具描述自动判断何时调用什么工具。这和 Claude Code 的 MCP 集成方式类似。
A2A 集成
A2A 让不同运行环境里的 Agent 可以互相调用。比如一个 .NET 写的 Agent 可以调用一个 Python 写的 Agent:
# Python Agent 发布为 A2A 服务
from agent_framework import Agent, A2AServer
agent = Agent(model="openai/gpt-5.5", instructions="你是代码审查员")
server = A2AServer(agent=agent, port=8080)
server.start() # 其他 Agent 可以通过 A2A 协议调用这个 Agent
// C# Agent 通过 A2A 调用 Python Agent
var reviewer = new A2AClient("http://localhost:8080");
var result = await reviewer.RunAsync("Review this pull request: ...");
跨语言、跨运行时的 Agent 协作。 这在之前的框架里是做不到的(或者需要大量胶水代码)。
什么场景该选 MAF
| 你的场景 | 推荐框架 | 原因 |
|---|---|---|
| Python 单 Agent + 工具链 | LangChain | 生态最成熟,社区最大 |
| Python 多 Agent 协作 | MAF 或 CrewAI | MAF 编排更强,CrewAI 更简单 |
| .NET/C# 后端接 AI | MAF | 唯一原生支持 .NET 的框架 |
| 需要 A2A 跨 Agent 通信 | MAF | A2A 支持最完整 |
| 需要跑本地模型 | MAF | Ollama 原生支持 |
| 快速原型 / 小项目 | LangChain 或 CrewAI | 学习曲线更平 |
| 企业级、需要长期支持 | MAF | 微软背书,GA 1.0 承诺 |
总结一句话:如果你是 Python 生态并且只需要单 Agent,LangChain 仍然是最稳的选择。如果你需要多 Agent 协作、跨语言支持、或者企业级长期维护承诺,MAF 是更好的选择。
被忽视的一点:Magentic-One 模式
MAF 内置的三种编排模式里,Magentic-One 是最有意思的。
它的工作方式是:
1. Planner Agent 接收任务
2. Planner 把任务拆成子任务
3. Planner 把子任务分配给不同的 Worker Agent
4. Worker 执行完汇报结果
5. Planner 检查结果,决定是否需要补充或重做
6. 所有子任务完成后,Planner 汇总最终结果
这个模式在学术界叫"task-oriented multi-agent reasoning"。MAF 把它封装成了一个开箱即用的编排器。
Magentic-One 的实际价值:你不需要自己设计"哪个 Agent 负责什么、怎么交接"——Planner Agent 自动做任务分解和分配。你只需要定义 Worker Agent 各自的能力。
对比一下:在 LangChain 里做同样的事,你需要自己用 LangGraph 画状态图、写节点、定义边、处理条件分支。在 MAF 里是一行配置的事。
我的判断
MAF 1.0 的发布标志着 AI Agent 框架进入了大厂标准化时代。之前是社区驱动(LangChain、CrewAI),现在微软、Google(ADK)都发了官方框架。
对开发者来说,这意味着:
- 框架选型要考虑长期维护了。 社区项目可能一年后不维护。微软和 Google 的框架有企业级承诺。
- MCP + A2A 正在成为基础设施。 两个协议已经被所有主流框架支持。如果你的 Agent 系统不支持 MCP,等于断了一只手。
- 多模型支持是标配。 绑定单一模型厂商的时代过去了。MAF 一行代码切 6 个厂商,和用 API 网关管理多模型的思路一致——开发者应该有模型选择权。
常见问题
Q: MAF 和 Semantic Kernel 是什么关系?
A: Semantic Kernel 是微软之前的 AI 框架,主要做单 Agent 场景。MAF 是它的演进——增加了多 Agent 编排、A2A、MCP 等能力。微软官方建议新项目直接用 MAF。
Q: 国内能用 MAF 吗?
A: 可以。MAF 本身是开源框架,跑在你自己的机器上。模型调用部分,如果用 Azure OpenAI 在中国区有服务;如果用 OpenAI/Anthropic 需要通过代理或 API 网关;如果用 Ollama 本地模型则完全不需要网络。
Q: MAF 的 Python 版和 .NET 版功能一样吗?
A: 核心功能一样(Agent 定义、编排模式、MCP、模型切换)。但 .NET 版在一些高级特性上更成熟——毕竟微软是 .NET 生态的主人。Python 版的社区活跃度在追赶中。
Q: 和 Google ADK 比呢?
A: ADK 更紧密地绑定 Google Cloud 生态(Vertex AI、BigQuery)。MAF 更中立——6 个模型厂商平等支持,不偏向 Azure。如果你用 Google Cloud,ADK 集成更顺滑。如果你不想绑定任何云厂商,MAF 更合适。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)