Skip to content

Microsoft Agent Framework

Agent Framework

引言

  • 理解 Microsoft Agent Framework(MAF)的关键特性与价值;
  • 探索 MAF 的核心概念;
  • 对比 MAF 与 Semantic Kernel、AutoGen,并提供迁移建议。

学习目标

  • 使用 MAF 构建生产级智能体;
  • 将 MAF 的核心能力应用于实际场景;
  • 将现有智能体框架与工具迁移或集成至 MAF。

代码示例

课程仓库中 xx-python-agent-frameworkxx-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

Agent 组件

创建智能体:指定推理服务、指令与名称。

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)、扇出/扇入等;
  • 事件:包括 WorkflowStartedEventWorkflowOutputEventWorkflowErrorEventExecutorInvokeEventExecutorCompleteEventRequestInfoEvent
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),MAF ChatAgent 默认多轮直到任务完成。

代码示例

更多示例同样位于 xx-python-agent-frameworkxx-dotnet-agent-framework

常见问题交流

欢迎加入 Azure AI Foundry Discord,与其他学习者探讨 MAF 的使用。

上一篇

13 智能体记忆管理

下一篇

15 浏览器工具使用