教程中心进阶
进阶

用 Microsoft Agent Framework 1.0 搭企业级智能体(Python/.NET,原生 MCP+A2A)

2026.07.23· 7 个步骤 · 22 分钟阅读· 🏗️ Microsoft Agent Framework

如果你在微软技术栈(.NET / Azure)里干活,又想正经做多智能体系统,Microsoft Agent Framework(MAF)1.0 是 2026 年最值得关注的一站式框架。它在 2026 年 4 月 3 日 GA,把原本的 AutoGen(多智能体编排)Semantic Kernel(企业级 SDK)合并成一个开源框架,原生支持 MCP 与 A2A,还内置 OpenTelemetry 观测。本教程用 Python 带你从零跑通一个会调用工具、还能多智能体协作的 Agent。

🏗️ 本教程适合:已经在用 Azure / .NET,或想做"可长期维护、有企业支持承诺"的生产级 Agent 的开发者。你只需要会一点 Python(或 C#)、能装包、有一个 OpenAI 或 Azure OpenAI 的 Key。

先搞懂:MAF 1.0 解决了什么?

用一句话理解:MAF 是微软把"对话式多智能体(AutoGen)"和"企业级 LLM SDK(Semantic Kernel)"焊在一起的统一框架。它的几个关键能力,正好是企业落地最在意的:

能力通俗解释对你意味着什么
多供应商模型一套代码调 OpenAI / Azure / Claude / Gemini / Bedrock / Ollama模型可随时替换,不被锁死
原生 MCP + A2A直接接入 MCP 工具服务器、与其它框架的 Agent 互操作生态互通,省去自研适配
多智能体编排顺序 / 并行 / 自定义工作流把多个 Agent 串起来复杂任务拆解给不同专家 Agent
OpenTelemetry 观测分布式追踪、日志、监控开箱即用出问题时能定位到哪一步
长期支持承诺1.0 起 API 稳定、向后兼容生产环境敢用,不怕半夜 Breaking Change

新手建议:先跑通单 Agent + 工具,再上多智能体工作流。MAF 概念比 LangChain 轻量、比手写循环省心,但比"纯 SDK 调一次"要重,适合"真要做产品"而非"随手试一下"。

Step 1:装环境与依赖

1 一条命令装好整个框架

MAF 支持 Python 3.10+(Windows / macOS / Linux 均可)。最简单的方式是安装全家桶:

# 开发/本地探索:装全部子包,所有功能直接可用
pip install agent-framework

# 想更轻量,只装核心(含 Azure OpenAI / OpenAI + 工作流编排)
pip install agent-framework-core

# 接 Azure AI Foundry 时
pip install agent-framework-foundry

# 验证安装
python -c "import agent_framework; print(agent_framework.__version__)"
💡 如果你用 .NET 而非 Python,对应的是 dotnet add package Microsoft.Agents.AI,API 一一对应。本教程以 Python 为例,思路完全相通。

Step 2:配置模型 API Key

2 把 Key 放进环境变量或 .env

MAF 的客户端会按"显式参数 → 环境变量 → 配置文件"的顺序解析凭证。在项目根目录建一个 .env

# 用 OpenAI
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_MODEL=gpt-4o

# 或接 Azure OpenAI
AZURE_OPENAI_API_KEY=xxxx
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_MODEL=gpt-4o

# 或接 Azure AI Foundry
FOUNDRY_PROJECT_ENDPOINT=https://your-project.services.ai.azure.com
FOUNDRY_MODEL=gpt-5.3

Key 别泄露!.env 加进 .gitignore,千万别提交到仓库。如果同时设了 OPENAI_API_KEY 和 Azure 变量,想强制走 Azure,要在代码里显式传 credential=AzureCliCredential()

Step 3:创建你的第一个 Agent

3 几行代码跑起来

OpenAIChatClient 当客户端,包一层 Agentawait agent.run(...) 即可:

import asyncio
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient

async def main():
    agent = Agent(
        client=OpenAIChatClient(),   # 自动读 OPENAI_API_KEY
        instructions="你是一个简洁友好的助手,回答不超过三句话。",
    )
    result = await agent.run("用一句话介绍 Microsoft Agent Framework。")
    print(result)

asyncio.run(main())
🔑 关键点:Agent 就是"客户端 + 人设指令"的封装。instructions 决定了它的性格和职责——这和你在 Dify 里写的提示词是同一回事,只是现在用代码管理、可进版本库。

Step 4:给 Agent 加工具(函数调用)

4 让 Agent 能调用你的真实代码

光会聊天不够,Agent 真正的价值是"动手"。给它注册一个普通 Python 函数当工具:

import asyncio
from typing import Annotated
from pydantic import Field
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient

def get_weather(
    location: Annotated[str, Field(description="要查询天气的城市")]
) -> str:
    """获取指定城市的天气。"""
    # 真实场景这里调用天气 API;演示返回模拟值
    return f"{location} 今天晴,最高 26°C,适合出门。"

async def main():
    agent = Agent(
        client=OpenAIChatClient(),
        instructions="你是天气助手,需要时用 get_weather 工具查真实天气。",
    )
    agent.add_function_tool(get_weather)   # 注册工具
    print(await agent.run("北京今天适合跑步吗?"))

asyncio.run(main())

工具描述很重要!函数名下方的 docstring 和 Field(description=...) 是模型判断"要不要调用、怎么填参数"的唯一依据。写得含糊,模型就会瞎填或干脆不调。

Step 5:多智能体顺序工作流

5 让"写手"和"审稿"两个 Agent 接力

真实任务常需要多个专家 Agent 协作。MAF 用 SequentialBuilder 把参与者串成流水线:

import asyncio
from agent_framework import Agent, Message
from agent_framework.openai import OpenAIChatClient
from agent_framework.orchestrations import SequentialBuilder

async def main():
    client = OpenAIChatClient()
    writer = Agent(client=client,
                   name="writer",
                   instructions="你是简洁的文案,只写一句有冲击力的标语。")
    reviewer = Agent(client=client,
                     name="reviewer",
                     instructions="你是审稿人,对上一句给一句简短反馈。")

    workflow = SequentialBuilder(participants=[writer, reviewer]).build()
    async for event in workflow.run("给 Microsoft Agent Framework 1.0 写句标语", stream=True):
        if event.type == "output":
            for msg in event.data:
                print(f"[{msg.author_name}]: {msg.text}")

asyncio.run(main())
💡 除了顺序,MAF 还支持并行、自定义编排,以及把 workflow 托管到 Azure Functions / Durable Task / A2A 服务上运行。先做顺序,理解事件流后再扩展。

Step 6:接入 MCP 工具与 A2A 互操作

6 复用别人的工具,跨框架对话

MAF 1.0 的杀手锏是原生 MCP + A2A:你不必自己造工具,直接连现成的 MCP 服务器;也能让 MAF 的 Agent 和 LangGraph / CrewAI 的 Agent 通过 A2A 协议互相调用。

# 概念示意:把外部 MCP 服务器暴露的能力变成 Agent 可调用工具
# 1) 启动一个 MCP server(如 filesystem / fetch / 自定义)
# 2) 在 MAF 里用 MCP 连接器挂载:
#    from agent_framework.mcp import McpConnection
#    mcp = McpConnection(command="npx", args=["-y", "@modelcontextprotocol/server-fetch"])
#    agent.add_mcp_server(mcp)

# A2A:让本框架 Agent 作为"客户端"发现并调用其它框架的 Agent
#    from agent_framework.a2a import A2ACardResolver
#    card = A2ACardResolver(url="https://other-agent.example/.well-known/agent.json").get()

MCP 让工具"即插即用":你之前在其它项目里写的 MCP server,MAF 直接复用,不用重写。A2A 则让"不同框架的 Agent 组队"成为现实——这对企业里多团队各自用不同框架的情况特别友好。

Step 7:观测、守卫与部署

7 让生产环境"看得见、管得住"

上线前,三件事建议一次配齐:

1) 可观测性:内置 OpenTelemetry,分布式追踪一行开启
   # 设置环境变量即可把 trace 导出到 Collector / Application Insights
   OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

2) 中间件守卫:用 middleware 管道做内容安全、合规、日志
   # 在 Agent 上挂 middleware,不改动提示词就能加策略

3) 部署:Foundry 托管只需多加两行
   # pip install agent-framework-foundry
   # 把 Agent 用 FoundryChatClient + AzureCliCredential 包起来,
   # 即可部署到 Foundry 托管基础设施,获得托管运行与计费
🎉 到这你已经掌握了 MAF 的核心闭环:建 Agent → 加工具 → 多智能体编排 → 接 MCP/A2A → 观测与部署。它最适合"要长期维护、要企业支持、要在 Azure 上跑"的严肃项目。

常见问题速查

现象大概率原因 & 解决
报 "module not found"只装了 core,却用了 foundry/mcp 子模块 → 补装对应子包
走了 OpenAI 而非 Azure同时存在两套变量 → 显式传 credential=AzureCliCredential()
工具没被调用函数 docstring / Field 描述太含糊,或 instructions 没提要用工具
多 Agent 没输出忘了 async for 消费 event 流,或 stream=True 漏写