Microsoft Agent Framework 详解 - 微软官方多语言 AI Agent 框架
前言
Microsoft Agent Framework 是微软官方推出的多语言 AI Agent 框架,支持 Python 和 .NET(C#)双语言实现。作为 Semantic Kernel 和 AutoGen 的继任者,它提供了从简单聊天 Agent 到复杂多 Agent 工作流的完整解决方案,特别擅长基于图的工作流编排。本文详细介绍 Microsoft Agent Framework 的核心特性、安装配置、使用方法和实际应用场景。
项目地址:https://github.com/microsoft/agent-framework
官方文档:https://learn.microsoft.com/agent-framework/
Stars:7,735+(快速增长)
发布时间:2025 年 4 月
一、项目简介
1.1 核心定位
Microsoft Agent Framework 是微软推出的统一 AI Agent 开发框架,旨在整合 Semantic Kernel 和 AutoGen 的优势,提供更强大、更易用的 Agent 开发体验。主要特点:
| 特性 | 说明 | 优势 |
|---|---|---|
| 双语言支持 | Python + .NET/C# | 统一 API,跨语言协作 |
| 图工作流 | 基于数据流的图编排 | 复杂流程可视化 |
| DevUI | 交互式开发界面 | 可视化调试和测试 |
| 可观测性 | OpenTelemetry 集成 | 生产级监控 |
| 迁移支持 | Semantic Kernel/AutoGen | 平滑迁移路径 |
| 微软背书 | 官方维护和支持 | 企业级可靠性 |
1.2 与 Semantic Kernel、AutoGen 的关系
Microsoft Agent Framework 不是完全从零开始,而是整合了微软之前两个重要项目:
- Semantic Kernel:专注于 AI 编排和插件系统 → 继承其插件架构和中间件系统
- AutoGen:专注于多 Agent 协作 → 继承其多 Agent 模式和对话能力
- Microsoft Agent Framework:统一两者,提供更完整的解决方案
1.3 核心亮点
图工作流(Graph-based Workflows)
支持基于数据流的图编排,可以连接 Agent 和确定性函数,提供:
- Streaming:流式处理能力
- Checkpointing:状态检查点,支持断点续传
- Human-in-the-loop:人工介入确认
- Time-travel:时间旅行调试能力
DevUI 开发工具
交互式开发者界面,用于 Agent 开发、测试和调试:
- 可视化 Agent 行为
- 实时调试和测试
- 工作流可视化
AF Labs 实验包
实验性功能包,包含前沿特性:
- Benchmarking(基准测试)
- Reinforcement Learning(强化学习)
- Research initiatives(研究计划)
二、快速开始
2.1 安装
Python 安装
# 安装完整包(包含所有子包)
pip install agent-framework --pre
# 注意:首次安装在 Windows 上可能需要几分钟
# 安装所有子包,详见 python/packages 目录
# 或者安装单个子包
pip install agent-framework-core
pip install agent-framework-azure
pip install agent-framework-devui
.NET 安装
# 创建 .NET 项目
dotnet new console -n MyAgent
cd MyAgent
# 添加 Microsoft.Agents.AI 包
dotnet add package Microsoft.Agents.AI
# 或者添加特定提供程序包
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
dotnet add package Microsoft.Agents.AI.Azure --prerelease
2.2 配置认证
使用 Azure OpenAI
# 方式 1:使用 Azure CLI 认证(推荐)
az login
# 设置环境变量(可选)
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-4o-mini"
export AZURE_OPENAI_API_VERSION="2024-02-15-preview"
使用 OpenAI
# 设置 OpenAI API Key
export OPENAI_API_KEY="sk-your-api-key-here"
# 可选:自定义 Base URL
export OPENAI_BASE_URL="https://api.openai.com/v1"
2.3 第一个 Agent(Python)
# 安装:pip install agent-framework --pre
# 认证:使用 az login 登录 Azure CLI
import asyncio
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
async def main():
# 初始化 Azure OpenAI Responses Agent
# endpoint、deployment_name、api_version 可通过环境变量设置
agent = AzureOpenAIResponsesClient(
# 或者显式指定:
# endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
# deployment_name=os.environ["AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME"],
# api_version=os.environ["AZURE_OPENAI_API_VERSION"],
# api_key=os.environ["AZURE_OPENAI_API_KEY"],
credential=AzureCliCredential(), # 使用 Azure CLI 认证
).as_agent(
name="HaikuBot",
instructions="你是一个乐观的助手,善于写诗。",
)
# 运行 Agent
result = await agent.run("写一首关于 Microsoft Agent Framework 的俳句")
print(result)
if __name__ == "__main__":
asyncio.run(main())
预期输出
智能代理新框架,
Python C# 双剑合璧,
微软创新无限。
2.4 第一个 Agent(.NET/C#)
// 安装:dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
// 使用 OpenAI Responses API
using Microsoft.Agents.AI;
using OpenAI;
using OpenAI.Responses;
// 替换为你的 OpenAI API Key
var agent = new OpenAIClient("<apikey>")
.GetResponsesClient("gpt-4o-mini")
.AsAIAgent(
name: "HaikuBot",
instructions: "你是一个乐观的助手,善于写诗。"
);
Console.WriteLine(
await agent.RunAsync("写一首关于 Microsoft Agent Framework 的俳句")
);
使用 Azure OpenAI(Token 认证)
// 安装:
// dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
// dotnet add package Azure.Identity
// 认证:az login
using System.ClientModel.Primitives;
using Azure.Identity;
using Microsoft.Agents.AI;
using OpenAI;
using OpenAI.Responses;
// 替换为你的 Azure OpenAI 资源名和部署名
var agent = new OpenAIClient(
new BearerTokenPolicy(
new AzureCliCredential(),
"https://ai.azure.com/.default"
),
new OpenAIClientOptions()
{
Endpoint = new Uri("https://<resource>.openai.azure.com/openai/v1")
})
.GetResponsesClient("gpt-4o-mini")
.AsAIAgent(
name: "HaikuBot",
instructions: "你是一个乐观的助手,善于写诗。"
);
Console.WriteLine(
await agent.RunAsync("写一首关于 Microsoft Agent Framework 的俳句")
);
三、核心功能详解
3.1 多 Agent 协作
Python 示例
from agent_framework import Agent, GroupChat
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
# 创建多个 Agent
researcher = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(
name="研究员",
instructions="你是一名专业研究员,负责搜集和分析信息。"
)
writer = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(
name="作家",
instructions="你是一名技术作家,负责撰写清晰的文章。"
)
reviewer = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(
name="审稿人",
instructions="你是一名严格的审稿人,负责审查内容质量。"
)
# 创建群聊(多 Agent 协作)
group = GroupChat(
agents=[researcher, writer, reviewer],
max_turns=10 # 最大对话轮数
)
# 运行
result = await group.run(
"请调研最新的 AI Agent 技术趋势,撰写一篇技术文章,并进行质量审查"
)
print(result)
.NET 示例
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.GroupChat;
using OpenAI;
// 创建多个 Agent
var researcher = new OpenAIClient(apiKey)
.GetResponsesClient("gpt-4o-mini")
.AsAIAgent(
name: "研究员",
instructions: "你是一名专业研究员,负责搜集和分析信息。"
);
var writer = new OpenAIClient(apiKey)
.GetResponsesClient("gpt-4o-mini")
.AsAIAgent(
name: "作家",
instructions: "你是一名技术作家,负责撰写清晰的文章。"
);
var reviewer = new OpenAIClient(apiKey)
.GetResponsesClient("gpt-4o-mini")
.AsAIAgent(
name: "审稿人",
instructions: "你是一名严格的审稿人,负责审查内容质量。"
);
// 创建群聊
var group = new GroupChat(
agents: new[] { researcher, writer, reviewer },
maxTurns: 10
);
// 运行
var result = await group.RunAsync(
"请调研最新的 AI Agent 技术趋势,撰写一篇技术文章,并进行质量审查"
);
Console.WriteLine(result);
3.2 图工作流(Graph Workflows)
Python 示例
from agent_framework import Workflow, State
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
# 定义状态
class ArticleState(State):
topic: str
research: str
draft: str
final: str
# 创建工作流
workflow = Workflow[ArticleState]()
# 添加节点
@workflow.node("research")
async def research(state: ArticleState) -> str:
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(name="研究员")
result = await agent.run(f"调研主题:{state.topic}")
return result
@workflow.node("write")
async def write(state: ArticleState) -> str:
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(name="作家")
result = await agent.run(f"根据调研写文章:{state.research}")
return result
@workflow.node("review")
async def review(state: ArticleState) -> str:
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(name="审稿人")
result = await agent.run(f"审查文章:{state.draft}")
return result
# 添加边(定义流程)
workflow.add_edge("research", "write")
workflow.add_edge("write", "review")
# 设置入口和出口
workflow.set_entry_point("research")
workflow.set_finish_point("review")
# 编译工作流
app = workflow.compile()
# 运行
result = await app.invoke({
"topic": "AI Agent 技术趋势"
})
print(result)
3.3 工具使用
Python 示例
from agent_framework import tool, Agent
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
import requests
# 定义工具
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气信息"""
# 实际应用中调用天气 API
return f"{city} 当前天气:晴,温度 25°C"
@tool
def search_web(query: str) -> str:
"""搜索网络信息"""
# 实际应用中调用搜索 API
return f"关于'{query}'的搜索结果..."
# 创建带工具的 Agent
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(
name="助手",
tools=[get_weather, search_web]
)
# 运行
result = await agent.run("北京天气怎么样?另外搜索最新的 AI 新闻")
print(result)
3.4 中间件系统
Python 示例
from agent_framework import Agent, Middleware
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
# 创建日志中间件
class LoggingMiddleware(Middleware):
async def on_request(self, request):
print(f"收到请求:{request}")
return request
async def on_response(self, response):
print(f"返回响应:{response}")
return response
# 创建认证中间件
class AuthMiddleware(Middleware):
async def on_request(self, request):
# 验证用户权限
if not self.check_auth(request.user):
raise Exception("未授权访问")
return request
def check_auth(self, user):
# 实际认证逻辑
return True
# 创建 Agent 并添加中间件
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(
name="助手"
)
agent.middleware.append(LoggingMiddleware())
agent.middleware.append(AuthMiddleware())
# 运行
result = await agent.run("你好")
print(result)
3.5 可观测性(OpenTelemetry)
Python 示例
from agent_framework import Agent, set_tracer_provider
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
# 配置 OpenTelemetry
tracer_provider = TracerProvider()
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317")
tracer_provider.add_span_processor(BatchSpanProcessor(otlp_exporter))
set_tracer_provider(tracer_provider)
# 创建 Agent
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential()
).as_agent(
name="助手"
)
# 运行(自动追踪)
result = await agent.run(
"你好",
metadata={
"user_id": "user-123",
"session_id": "session-456"
}
)
print(result)
# 在 Jaeger/Zipkin 等工具中查看追踪
3.6 DevUI 使用
# 安装 DevUI
pip install agent-framework-devui
# 启动 DevUI
python -m agent_framework.devui
# 访问 http://localhost:3000
# 可以可视化:
# - Agent 行为
# - 工作流执行
# - 消息历史
# - 工具调用
四、实际应用场景
场景 1:客户服务系统
from agent_framework import Workflow, GroupChat
from agent_framework.azure import AzureOpenAIResponsesClient
# 创建专业 Agent
intent_classifier = AzureOpenAIResponsesClient().as_agent(
name="意图分类器",
instructions="分类客户意图:技术支持、账单查询、产品咨询、投诉"
)
tech_support = AzureOpenAIResponsesClient().as_agent(
name="技术支持",
instructions="解决技术问题"
)
billing_support = AzureOpenAIResponsesClient().as_agent(
name="账单支持",
instructions="处理账单和支付问题"
)
# 创建工作流
workflow = Workflow()
@workflow.node("classify")
async def classify(state):
result = await intent_classifier.run(state.query)
return {"intent": result, "query": state.query}
@workflow.node("tech")
async def tech_support_node(state):
return await tech_support.run(state.query)
@workflow.node("billing")
async def billing_support_node(state):
return await billing_support.run(state.query)
# 条件路由
workflow.add_conditional_edges(
"classify",
lambda x: "tech" if "技术" in x["intent"] else "billing"
)
workflow.set_entry_point("classify")
workflow.set_finish_point("tech")
workflow.set_finish_point("billing")
app = workflow.compile()
# 运行
result = await app.invoke({"query": "我的账户无法登录"})
print(result)
场景 2:数据分析助手
from agent_framework import tool, Agent
import pandas as pd
# 定义数据工具
@tool
def query_database(sql: str) -> str:
"""查询数据库"""
# 实际应用中执行 SQL
return "查询结果..."
@tool
def analyze_data(data: str) -> str:
"""分析数据"""
# 数据分析逻辑
return "分析结果..."
@tool
def generate_chart(data: str, chart_type: str) -> str:
"""生成图表"""
# 生成图表
return "图表已生成"
# 创建数据分析 Agent
data_agent = AzureOpenAIResponsesClient().as_agent(
name="数据分析师",
tools=[query_database, analyze_data, generate_chart]
)
# 运行
result = await data_agent.run(
"查询上季度销售数据,分析趋势,并生成柱状图"
)
print(result)
五、从 Semantic Kernel/AutoGen 迁移
迁移指南
微软提供了详细的迁移指南:
主要变化
| Semantic Kernel/AutoGen | Microsoft Agent Framework |
|---|---|
Kernel |
Agent |
Function |
tool |
ChatCompletion |
ResponsesClient |
AgentGroupChat |
GroupChat |
六、性能对比
| 特性 | Microsoft Agent Framework | LangChain | AutoGen |
|---|---|---|---|
| 语言支持 | Python + .NET | Python + JS | Python |
| 图工作流 | ✅ 原生支持 | ✅ LangGraph | ❌ |
| DevUI | ✅ 内置 | ❌ | ❌ |
| 官方支持 | ✅ 微软官方 | 社区 | 微软研究 |
| 迁移路径 | ✅ SK/AutoGen | 部分 | - |
总结
Microsoft Agent Framework 是微软推出的统一 AI Agent 框架,核心优势包括:
- 双语言支持:Python + .NET,统一 API
- 图工作流:强大的编排能力,支持流式、检查点、人工介入
- DevUI:可视化开发工具
- 可观测性:OpenTelemetry 集成
- 迁移支持:从 Semantic Kernel/AutoGen 平滑迁移
- 微软背书:官方维护,企业级可靠性
适合场景:
- 企业级 AI 应用开发
- 需要 .NET 和 Python 混合技术栈
- 复杂多 Agent 协作流程
- 需要可视化工具辅助开发
- 已有 Semantic Kernel/AutoGen 项目需要升级
项目地址:https://github.com/microsoft/agent-framework 🚀
注:本文基于 Microsoft Agent Framework 早期版本编写,具体 API 可能随版本更新而变化,请以官方文档为准。






