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 框架,核心优势包括:

  1. 双语言支持:Python + .NET,统一 API
  2. 图工作流:强大的编排能力,支持流式、检查点、人工介入
  3. DevUI:可视化开发工具
  4. 可观测性:OpenTelemetry 集成
  5. 迁移支持:从 Semantic Kernel/AutoGen 平滑迁移
  6. 微软背书:官方维护,企业级可靠性

适合场景:

  • 企业级 AI 应用开发
  • 需要 .NET 和 Python 混合技术栈
  • 复杂多 Agent 协作流程
  • 需要可视化工具辅助开发
  • 已有 Semantic Kernel/AutoGen 项目需要升级

项目地址:https://github.com/microsoft/agent-framework 🚀


注:本文基于 Microsoft Agent Framework 早期版本编写,具体 API 可能随版本更新而变化,请以官方文档为准。

发表回复

后才能评论