Appearance
Microsoft Agent Framework
![]()
引言
- 理解 Microsoft Agent Framework(MAF)的关键特性与价值;
- 探索 MAF 的核心概念;
- 对比 MAF 与 Semantic Kernel、AutoGen,并提供迁移建议。
学习目标
- 使用 MAF 构建生产级智能体;
- 将 MAF 的核心能力应用于实际场景;
- 将现有智能体框架与工具迁移或集成至 MAF。
代码示例
课程仓库中 xx-python-agent-framework、xx-dotnet-agent-framework 提供了 MAF 的 Python 与 .NET 示例(参考 aka.ms/ai-agents-beginners/agent-framewrok)。
Microsoft Agent Framework 概览

MAF 基于 Semantic Kernel 与 AutoGen 的经验沉淀,支持多种编排模式:
- 顺序编排:按步骤执行工作流;
- 并行编排:多个智能体并发处理;
- 群聊编排:多智能体协作完成单一任务;
- 交接编排:智能体之间依次交接子任务;
- Magnetic 编排:管理者智能体动态维护任务列表并协调子智能体。
面向生产环境,MAF 提供:
- 可观测性:集成 OpenTelemetry,支持 Azure AI Foundry 仪表盘;
- 安全性:在 Azure AI Foundry 托管,提供 RBAC、私有数据保护、内容安全;
- 持久性:线程与工作流可暂停、恢复,支持长时运行;
- 可控性:支持人工在环审批。
互操作性方面:
- 云中立:可部署于容器、本地、多云环境;
- 供应商中立:兼容 Azure OpenAI、OpenAI 等多种 SDK;
- 开放标准:支持 A2A、MCP 等协议;
- 插件与连接器:可接入 Fabric、SharePoint、Pinecone、Qdrant 等数据与记忆服务。
核心概念
Agents

创建智能体:指定推理服务、指令与名称。
python
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent(
instructions="You are good at recommending trips to customers based on their preferences.",
name="TripRecommender",
)也可使用 Azure AI Agent Service、OpenAI Responses/ChatCompletion 或 A2A 远程代理。
运行智能体:使用 .run 或 .run_stream。
python
result = await agent.run("What are good places to visit in Amsterdam?")
print(result.text)工具管理:可在创建或运行时指定工具。
python
def get_attractions(location: Annotated[str, Field(description="The location to get the top tourist attractions for")]) -> str:
return f"The top attractions for {location} are."
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a helpful assistant",
tools=[get_attractions],
)线程管理:get_new_thread() 生成可持久化线程,亦可在运行时自动创建。
python
thread = agent.get_new_thread()
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
serialized = await thread.serialize()
resumed_thread = await agent.deserialize_thread(serialized)中间件:可在函数调用或 LLM 请求前后插入逻辑。
python
async def logging_function_middleware(context: FunctionInvocationContext, next: Callable[[FunctionInvocationContext], Awaitable[None]]):
print(f"[Function] Calling {context.function.name}")
await next(context)
print(f"[Function] {context.function.name} completed")python
async def logging_chat_middleware(context: ChatContext, next: Callable[[ChatContext], Awaitable[None]]):
print(f"[Chat] Sending {len(context.messages)} messages to AI")
await next(context)
print("[Chat] AI response received")记忆机制:
- 运行时内存:线程中临时存储;
- 持久消息:
chat_message_store_factory跨会话保存历史; - 动态记忆:通过
context_providers(如 Mem0)在运行前注入。
python
memory_provider = Mem0Provider(api_key="your-mem0-api-key", user_id="user_123", application_id="my_app")
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a helpful assistant with memory.",
context_providers=memory_provider,
)可观测性:get_tracer()、get_meter() 集成 OpenTelemetry。
Workflows
工作流由执行器(Executors)、边(Edges)与事件(Events)组成,支持多智能体编排与检查点保存。
- 执行器:可为智能体或自定义逻辑;
- 边:支持直连、条件、分支(switch)、扇出/扇入等;
- 事件:包括
WorkflowStartedEvent、WorkflowOutputEvent、WorkflowErrorEvent、ExecutorInvokeEvent、ExecutorCompleteEvent、RequestInfoEvent。
python
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()与其他框架的对比
vs Semantic Kernel
- 智能体创建:SK 需创建 Kernel,再构建智能体;MAF 直接提供扩展方法。
- 线程管理:SK 手动管理,MAF 由智能体直接提供线程;
- 工具注册:SK 将工具注册到 Kernel,MAF 在智能体创建时直接指定。
vs AutoGen
- 编排模型:AutoGen 使用
Teams事件驱动,MAF 使用基于图的Workflows; - 工具封装:AutoGen 需
FunctionTool,MAF 使用@ai_function自动推断模式; - 对话模式:AutoGen 默认单轮(除非设置
max_tool_iterations),MAFChatAgent默认多轮直到任务完成。
代码示例
更多示例同样位于 xx-python-agent-framework 与 xx-dotnet-agent-framework。
常见问题交流
欢迎加入 Azure AI Foundry Discord,与其他学习者探讨 MAF 的使用。
