编程 Microsoft Agent Framework 深度解析:AutoGen 与 Semantic Kernel 的终极合体——从对话式群聊到 DAG 工作流的多智能体生产级实战指南

2026-07-06 05:11:52 +0800 CST views 28

Microsoft Agent Framework 深度解析:AutoGen 与 Semantic Kernel 的终极合体——从对话式群聊到 DAG 工作流的多智能体生产级实战指南

一、背景:为什么微软要把两个框架合并?

2026 年初,AI Agent 领域发生了一件让整个开发者社区震动的事情——微软正式宣布将 AutoGen 和 Semantic Kernel 合并为统一的 Microsoft Agent Framework(MAF)。这不是一次简单的品牌重塑,而是一次从架构层面的深度重构。

要理解这次合并的意义,我们得先回顾一下这两个项目的来龙去脉。

1.1 AutoGen:多智能体对话的开创者

2023 年末,Microsoft Research 发布了 AutoGen,迅速成为多智能体系统的标杆性开源框架。它的核心理念极其优雅——智能体是对话的参与者,整个系统就是一个群聊。没有中央控制器需要提前知晓完整计划,智能体之间通过自然语言对话来分工、讨论、审查输出。

AutoGen 带来的几个革命性概念:

  • 对话即工作流:取代了传统的单条长 Prompt 链条
  • 涌现行为:智能体经常以出乎预料的方式完成分工
  • 人机协作:任意节点的审批与编辑,而非仅在流程末尾
  • 代码执行闭环:智能体能自己编写、运行、修复代码

早期几个病毒式传播的 demo(编码者 + 评审者 + 执行者联合解数学题、网络研究小组、股票分析团队)在许多任务上展现出比单智能体高 2-10 倍的表现。

但 AutoGen 也有明显的短板:

  • 成本失控:一次 8 个智能体参与的 GPT-4o 对话,处理复杂任务时费用可达 5-30 美元
  • 状态管理薄弱:调试三天发现状态在不同轮次间莫名其妙丢失
  • 缺乏持久化:几乎没有检查点/恢复机制
  • 可观测性不足:难以追溯"谁在什么时候说了什么"

1.2 Semantic Kernel:企业级的稳健选手

与此同时,微软另一个团队开发的 Semantic Kernel 走的是完全不同的路线。它专注于企业级 AI 应用的基础能力:

  • 类型安全的函数调用
  • 中间件管道(类似 ASP.NET Core 的设计模式)
  • 丰富的插件/连接器体系
  • 与 Azure 生态的深度集成
  • 生产级的稳定性和可观测性

但 Semantic Kernel 的问题在于——它太"企业级"了。搭建一个多智能体协作流程需要大量的样板代码,缺乏 AutoGen 那种"几行代码就能让 Agent 们聊起来"的优雅。

1.3 合并的必然性

2025 年 10 月,微软做出了一个大胆的决定:将两者合并为 Microsoft Agent Framework。这个决定背后的逻辑很清晰——开发者不应该在"快速原型"和"生产可靠"之间做选择

MAF 的定位是:在单个 SDK 和运行时中,把 AutoGen 的简洁智能体/团队抽象,与 Semantic Kernel 的会话状态管理、中间件管道、OpenTelemetry、过滤器和检查点合到一起,再加上全新的一层——基于图的显式工作流。

二、架构解析:四层 SDK 设计哲学

MAF 的架构设计是其最大的亮点之一。微软采用了四层分层架构,每一层都可以独立使用,也可以组合使用。

2.1 四层架构概览

┌─────────────────────────────────────────┐
│           Studio(可视化设计器)           │  ← Azure AI Foundry 提供
├─────────────────────────────────────────┤
│         Extensions(可插拔扩展层)         │  ← MCP、A2A、OpenAPI、gRPC
├─────────────────────────────────────────┤
│         AgentChat(高层对话 API)          │  ← GroupChat、AssistantAgent
├─────────────────────────────────────────┤
│           Core(底层事件驱动原语)          │  ← RoutedAgent、发布/订阅
└─────────────────────────────────────────┘

Core 层是整个框架的基石,提供了事件驱动的原语:RoutedAgent、订阅机制、发布/订阅消息传递。这一层的设计深受 Actor 模型的影响,每个智能体都是一个独立的 Actor,通过消息进行通信。

AgentChat 层是大多数人实际使用的高层 API,提供了 AssistantAgent、UserProxyAgent、GroupChat、initiate_chat 等熟悉的抽象。如果你用过 AutoGen,会发现这一层的 API 几乎一模一样。

Extensions 层是可插拔的扩展机制,支持 OpenAI Assistant API、MCP 工作台、gRPC 分布式智能体等。这一层的设计理念是"协议优先"——通过标准化的协议来接入外部工具和服务。

Studio 层是可视化设计器,目前由 Azure AI Foundry 提供预览版支持。它允许开发者通过拖拽的方式来编排多智能体工作流。

2.2 双语言支持:Python 与 .NET 并行

MAF 的一个重要设计决策是同时支持 Python 和 .NET。这不是简单的"两种语言的绑定",而是两个语言都有原生的、符合各自习惯的实现。

Python 版本的设计更偏向简洁和灵活性,适合快速原型开发和研究场景。.NET 版本则充分利用了 C# 的类型系统、async/await 模式和 LINQ,提供了更强的编译时安全保障。

三、核心能力详解

3.1 对话式群聊:AutoGen 的灵魂延续

MAF 完整继承了 AutoGen 的对话式群聊模式。这是其最核心的能力之一——让多个智能体通过自然语言对话来协作完成任务。

from agent_framework import GroupChat, GroupChatManager, AssistantAgent

# 定义三个专业智能体
researcher = AssistantAgent(
    name="Researcher",
    system_message="你是一个资深研究员,负责收集和分析最新信息。",
    llm_config=llm_config
)

critic = AssistantAgent(
    name="Critic",
    system_message="你是一个严格的评审者,负责发现逻辑漏洞和事实错误。",
    llm_config=llm_config
)

writer = AssistantAgent(
    name="Writer",
    system_message="你是一个技术博客作者,负责将研究成果转化为易懂的文章。",
    llm_config=llm_config
)

user_proxy = UserProxyAgent(
    name="User",
    code_execution_config=False,
    human_input_mode="TERMINATE"
)

# 创建群聊
groupchat = GroupChat(
    agents=[user_proxy, researcher, critic, writer],
    messages=[],
    max_round=12,
    speaker_selection_method="auto"  # 智能体自动决定谁发言
)

manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)

# 启动对话
user_proxy.initiate_chat(
    manager,
    message="研究 2026 年最新的 WebAssembly 组件模型进展,写一篇 800 字的技术博客。"
)

在实际项目中,5-12 个智能体的配置很常见。典型的团队组合包括:

  • 规划者 → 研究者 → 编码者 → 测试者 → 评审者 → 文档编写者 → 用户审批者
  • 或者更灵活的模式:由智能体自行决定何时拆分子团队

群聊的核心优势在于涌现行为。智能体经常以出乎预料的方式完成分工——比如研究者可能会主动要求编码者验证某个技术细节,或者评审者发现了一个新方向后建议研究者深入调查。

3.2 DAG 工作流:确定性编排的新范式

除了对话式群聊,MAF 引入了一个全新的编排模式——基于有向无环图(DAG)的工作流。这是对话式群聊的重要补充,面向的是需要确定性执行路径的业务场景。

from agent_framework import Workflow, WorkflowNode, ConditionalNode

# 定义工作流节点
route_node = WorkflowNode(
    name="Router",
    agent=router_agent,
    description="分析用户请求,决定路由方向"
)

data_query_node = WorkflowNode(
    name="DataQuery",
    agent=data_agent,
    description="查询数据库获取相关信息"
)

compliance_check_node = WorkflowNode(
    name="ComplianceCheck",
    agent=compliance_agent,
    description="检查是否符合合规要求"
)

summary_node = WorkflowNode(
    name="Summary",
    agent=summary_agent,
    description="汇总结果并生成报告"
)

approval_node = WorkflowNode(
    name="HumanApproval",
    agent=None,  # 人工审批节点
    description="等待人工审批"
)

# 构建 DAG
workflow = Workflow(name="DataAnalysisPipeline")

# 添加节点和边
workflow.add_node(route_node)
workflow.add_node(data_query_node)
workflow.add_node(compliance_check_node)
workflow.add_node(summary_node)
workflow.add_node(approval_node)

# 定义执行路径
workflow.add_edge(route_node, data_query_node, condition="data_request")
workflow.add_edge(route_node, compliance_check_node, condition="compliance_request")
workflow.add_edge(data_query_node, summary_node)
workflow.add_edge(compliance_check_node, summary_node)
workflow.add_edge(summary_node, approval_node)

# 执行工作流
result = await workflow.run(input_data="分析上季度的销售数据")

DAG 工作流和群聊的适用场景有明确区分:

特性群聊模式DAG 工作流
执行路径动态、涌现确定性、可预测
适用场景开放式研究、调试业务流程、合规审批
错误处理智能体自行协商预定义的降级路径
可观测性对话日志结构化的执行轨迹
成本控制难以预测可精确预算

3.3 检查点与恢复:生产级的可靠性保障

MAF 最重要的工程改进之一是内置的检查点与恢复机制。这是 AutoGen 时代最大的痛点之一——长对话一旦中断,所有进度都会丢失。

from agent_framework import Session, CheckpointManager

# 创建带检查点的会话
session = Session(
    agent=my_agent,
    checkpoint_manager=CheckpointManager(
        storage="azure_blob",  # 或 "local"、"redis"
        checkpoint_interval=5,  # 每 5 轮对话自动保存
        max_checkpoints=10      # 最多保留 10 个检查点
    )
)

# 执行对话(支持断点续传)
result = await session.run(
    message="分析这份 100 页的技术报告",
    session_id="analysis-2026-001"  # 可恢复的会话 ID
)

# 如果中断,可以从检查点恢复
restored_session = Session.restore(
    session_id="analysis-2026-001",
    checkpoint_manager=checkpoint_manager
)
# 继续执行...

检查点机制的核心价值:

  1. 长任务可靠性:即使进程崩溃,也能从最近的检查点恢复
  2. 成本节约:不需要重新执行已经完成的步骤
  3. 审计追溯:完整的执行历史,可以回溯到任意检查点
  4. 人机协作:支持在任意节点暂停,等待人工审批后继续

3.4 MCP 与 A2A:协议优先的工具集成

MAF 原生支持两种重要的协议:

**MCP(Model Context Protocol)**是 Anthropic 推出的开放协议,用于标准化 LLM 与外部工具的连接方式。MAF 对 MCP 的支持意味着:

  • 工具发现:系统可以通过协议接口获取工具列表
  • 工具调用:参数与返回结果具备结构化 schema
  • 工具隔离:工具在 Server 侧实现,实现运行时隔离
from agent_framework import MCPToolProvider

# 连接 MCP 服务器
mcp_provider = MCPToolProvider(
    transport="stdio",  # 或 "sse" 用于远程
    command="npx",
    args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/data"]
)

# 创建带 MCP 工具的智能体
agent = AssistantAgent(
    name="DataAnalyst",
    tools=[mcp_provider],
    llm_config=llm_config
)

**A2A(Agent-to-Agent)**是 Google 推出的智能体间通信协议,允许不同框架的智能体互相协作。MAF 的 A2A 支持意味着:

  • 跨框架协作:MAF 智能体可以与 LangChain、CrewAI 等框架的智能体对话
  • 分布式部署:智能体可以分布在不同的服务器上
  • 标准化的通信接口:统一的请求/响应格式

3.5 OpenTelemetry 可观测性:生产级的监控能力

MAF 内置了基于 OpenTelemetry 的可观测性支持,这是从 Semantic Kernel 继承的重要能力。

from agent_framework import TelemetryConfig
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider

# 配置遥测
telemetry = TelemetryConfig(
    service_name="my-agent-service",
    exporter="jaeger",  # 或 "zipkin"、"azure_monitor"
    sample_rate=1.0
)

# 创建带遥测的智能体
agent = AssistantAgent(
    name="MonitoredAgent",
    telemetry=telemetry,
    llm_config=llm_config
)

# 执行后可以在 Jaeger 中看到完整的追踪链:
# - 每次 LLM 调用的延迟和 Token 使用
# - 工具调用的输入输出
# - 智能体之间的消息传递
# - 错误和异常的堆栈信息

可观测性覆盖的维度:

  • Traces:完整的执行轨迹,从用户输入到最终输出
  • Metrics:Token 使用量、延迟、错误率等关键指标
  • Logs:结构化的日志,支持按智能体、按会话过滤
  • Events:关键事件的审计日志,如人工审批、工具调用

3.6 Human-in-the-Loop:任意节点的人工介入

MAF 将 Human-in-the-Loop(HITL)作为一等公民,支持在工作流的任意节点注入审批步骤。

from agent_framework import HumanApprovalNode, ApprovalPolicy

# 定义审批策略
approval_policy = ApprovalPolicy(
    required_for=["financial_transaction", "data_deletion", "external_api_call"],
    timeout_seconds=3600,  # 1 小时超时
    fallback_action="reject"  # 超时后默认拒绝
)

# 在工作流中插入审批节点
workflow.insert_node(
    after="ExecutionNode",
    node=HumanApprovalNode(
        policy=approval_policy,
        notification_channel="slack",  # 通过 Slack 通知审批人
        approval_message="请审批以下操作:{action_description}"
    )
)

四、从 AutoGen 到 MAF 的迁移指南

如果你是 AutoGen 的现有用户,迁移到 MAF 是一个相对平滑的过程。微软提供了详细的迁移指南和兼容层。

4.1 API 映射

AutoGenMAF说明
AssistantAgentagent_framework.AssistantAgentAPI 基本一致
UserProxyAgentagent_framework.UserProxyAgent增加了检查点支持
GroupChatagent_framework.GroupChat增加了持久化会话
GroupChatManageragent_framework.GroupChatManager增加了遥测支持
initiate_chat()agent.run()统一的执行入口

4.2 代码迁移示例

AutoGen 旧代码:

from autogen import AssistantAgent, UserProxyAgent

assistant = AssistantAgent(
    name="helper",
    llm_config={"config_list": config_list},
    system_message="You are a helpful assistant."
)

user = UserProxyAgent(
    name="user",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "coding"}
)

user.initiate_chat(assistant, message="Hello!")

MAF 新代码:

from agent_framework import AssistantAgent, UserProxyAgent

assistant = AssistantAgent(
    name="helper",
    llm_config={"config_list": config_list},
    system_message="You are a helpful assistant.",
    # MAF 新增:检查点支持
    checkpoint_config={"enabled": True}
)

user = UserProxyAgent(
    name="user",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "coding"}
)

# MAF 新增:支持会话 ID 和断点续传
await user.run(
    assistant,
    message="Hello!",
    session_id="my-session-001"
)

4.3 迁移注意事项

  1. 异步优先:MAF 全面拥抱 Python 的 async/await,所有 API 都是异步的
  2. 配置变化:部分配置项的命名和结构有变化,建议参考官方迁移文档
  3. 依赖更新:需要更新 requirements.txt,从 autogen-agentchat 迁移到 agent-framework
  4. 测试覆盖:建议在迁移后增加测试覆盖,特别是检查点和恢复相关的功能

五、与其他框架的对比

5.1 MAF vs LangGraph

LangGraph 是 LangChain 团队推出的图编排框架,与 MAF 的 DAG 工作流有相似之处。

维度MAFLangGraph
多智能体支持原生 GroupChat + DAG需要手动编排
检查点内置,多种存储后端需要额外配置
可观测性OpenTelemetry 原生集成需要第三方集成
企业集成Azure 深度绑定云中立
学习曲线中等较低

5.2 MAF vs CrewAI

CrewAI 以简洁的 API 著称,但在企业级能力上不如 MAF。

维度MAFCrewAI
工作流灵活性DAG + 群聊双模式主要是顺序/层级
状态持久化企业级检查点基础支持
协议支持MCP + A2A + OpenAPI有限
.NET 支持原生
社区活跃度11.6k Star20k+ Star

5.3 MAF vs Google ADK

Google ADK Go 2.0 是 MAF 的直接竞争对手,两者都支持 DAG 编排。

维度MAFGoogle ADK
语言支持Python + .NETGo + Python + TypeScript + Java + Kotlin
云集成Azure AI FoundryVertex AI
工作流引擎DAG + 群聊DAG
Human-in-the-Loop内置内置
开源协议MITApache 2.0

六、生产部署实战

6.1 环境准备

# Python 环境
pip install agent-framework[openai,azure,mcp]

# .NET 环境
dotnet new console -n MyAgentApp
cd MyAgentApp
dotnet add package Microsoft.Agents.AI
dotnet add package Microsoft.Agents.AI.OpenAI

6.2 Azure 部署

from agent_framework import DeploymentConfig, AzureDeployment

config = DeploymentConfig(
    name="production-agent",
    replicas=3,
    scaling_config={
        "min_replicas": 1,
        "max_replicas": 10,
        "scale_on_cpu": 0.7,
        "scale_on_memory": 0.8
    },
    monitoring={
        "enabled": True,
        "log_level": "INFO",
        "metrics_port": 9090
    }
)

deployment = AzureDeployment(config=config)
await deployment.deploy()

6.3 成本优化策略

  1. 模型选择:对非关键路径使用小模型(如 GPT-4o-mini),关键路径使用大模型
  2. 缓存策略:对重复查询启用语义缓存,减少 API 调用
  3. 并行执行:DAG 中的独立节点并行执行,减少总延迟
  4. 检查点复用:对相似任务复用检查点,避免重复计算
from agent_framework import CostOptimizer

optimizer = CostOptimizer(
    model_routing={
        "simple_query": "gpt-4o-mini",
        "complex_analysis": "gpt-4o",
        "code_generation": "gpt-4o"
    },
    cache_config={
        "enabled": True,
        "ttl_seconds": 3600,
        "similarity_threshold": 0.95
    }
)

agent = AssistantAgent(
    name="CostOptimizedAgent",
    cost_optimizer=optimizer,
    llm_config=llm_config
)

七、实际案例:构建一个智能客服系统

让我们通过一个完整的案例来展示 MAF 的实际应用——构建一个支持多轮对话、工具调用和人工升级的智能客服系统。

from agent_framework import (
    AssistantAgent, GroupChat, GroupChatManager,
    MCPToolProvider, HumanApprovalNode, Workflow
)

# 1. 定义专业智能体
triage_agent = AssistantAgent(
    name="TriageAgent",
    system_message="""你是客服分流专员。根据用户问题的类型,将对话路由到合适的专业团队:
    - 技术问题 → TechSupport
    - 账单问题 → BillingSupport
    - 投诉建议 → ComplaintHandler
    - 需要人工 → HumanAgent""",
    llm_config=llm_config
)

tech_support = AssistantAgent(
    name="TechSupport",
    system_message="你是技术支持工程师,擅长解决技术问题。使用知识库工具查找解决方案。",
    tools=[knowledge_base_tool],
    llm_config=llm_config
)

billing_support = AssistantAgent(
    name="BillingSupport",
    system_message="你是账单专员,可以查询和处理账单问题。使用账单系统工具。",
    tools=[billing_system_tool],
    llm_config=llm_config
)

complaint_handler = AssistantAgent(
    name="ComplaintHandler",
    system_message="你是投诉处理专员,负责处理用户投诉和建议。态度要诚恳,解决问题要积极。",
    llm_config=llm_config
)

# 2. 创建群聊
groupchat = GroupChat(
    agents=[triage_agent, tech_support, billing_support, complaint_handler],
    messages=[],
    max_round=20,
    speaker_selection_method="auto"
)

manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)

# 3. 启动客服会话
async def handle_customer_request(request: str, session_id: str):
    result = await manager.run(
        message=request,
        session_id=session_id,
        checkpoint_config={"enabled": True}
    )
    return result

# 4. 使用示例
response = await handle_customer_request(
    "我的账户被扣了两次款,需要退款",
    session_id="customer-123-001"
)

这个案例展示了 MAF 的几个核心能力:

  1. 智能路由:TriageAgent 根据问题类型自动路由
  2. 工具集成:通过 MCP 协议接入知识库和账单系统
  3. 会话持久化:支持跨会话的状态保持
  4. 自动协作:多个专业智能体协同解决问题

八、总结与展望

8.1 MAF 的核心价值

Microsoft Agent Framework 的出现,标志着 AI Agent 框架从"实验性工具"向"生产级基础设施"的转变。它的核心价值在于:

  1. 统一了两个世界的最佳实践:AutoGen 的创新性和 Semantic Kernel 的可靠性
  2. 提供了真正的生产级能力:检查点、可观测性、成本控制
  3. 保持了开发者的灵活性:双语言支持、协议优先、可插拔架构
  4. 降低了多智能体系统的门槛:从"需要专家才能搭建"到"20 分钟上手"

8.2 适用场景建议

场景推荐方案理由
快速原型/研究MAF AgentChat继承 AutoGen 的简洁 API
企业级应用MAF Workflow + Azure确定性编排 + 企业集成
跨框架协作MAF + A2A 协议标准化的智能体通信
成本敏感场景MAF + CostOptimizer智能的模型路由和缓存

8.3 未来展望

MAF 的发展路线图显示,微软正在几个方向上持续投入:

  • Studio 可视化设计器:让非技术用户也能编排复杂的多智能体工作流
  • 边缘部署支持:将 MAF 的能力延伸到边缘设备
  • 更多协议支持:持续跟进 MCP、A2A 等新兴协议
  • 性能优化:减少智能体之间的通信开销,降低 Token 消耗

2026 年被称为"AI Agent 落地元年",而 MAF 正是这场变革中最重要的基础设施之一。无论你是 AutoGen 的老用户,还是正在寻找生产级多智能体框架的新开发者,MAF 都值得深入了解和尝试。


参考资源:

  • Microsoft Agent Framework 官方文档:https://devblogs.microsoft.com/agent-framework/
  • GitHub 仓库:https://github.com/microsoft/agent-framework
  • 迁移指南:AutoGen → MAF 官方迁移文档
  • Azure AI Foundry:https://ai.azure.com

推荐文章

如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
Elasticsearch 聚合和分析
2024-11-19 06:44:08 +0800 CST
Python 基于 SSE 实现流式模式
2025-02-16 17:21:01 +0800 CST
Rust开发笔记 | Rust的交互式Shell
2024-11-18 19:55:44 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
程序员茄子在线接单