微软Agent简介(参考圣杰)

decade
3
2026-03-21

🎯 MAF 定位与核心概念

MAF 是什么?

Microsoft Agent Framework (MAF) 是构建在 Microsoft.Extensions.AI (MEAI) 之上的企业级 Agent 开发框架,提供状态管理、身份定义、工具管理等高级能力。

Agent vs ChatClient

特性

IChatClient

AIAgent

状态

❌ 无状态

✅ 内置会话(AgentSession

身份

❌ 需手动传 System Message

✅ 固定的 Instructions + Name

工具

⚠️ 手动配置 ChatOptions.Tools

✅ Agent 级别统一管理

场景

自定义 AI 功能、单次对话

企业级对话系统、多轮交互

简单理解IChatClient 是纯函数,AIAgent 是有记忆的助手。

三大核心概念

  1. AIAgent:具有身份(Name)、指令(Instructions)和工具(Tools)的智能实体

  2. AgentSession:维护独立对话历史,支持持久化与隔离

  3. AgentRun:每次调用的执行实例(同步或流式)


🔧 环境准备

csharp

#!import ../helper/AIClientHelper.cs
#!import ../helper/MafHelper.cs

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

Console.WriteLine("✅ 依赖加载完成");

🚀 创建第一个 Agent(口语教练)

三步实现

csharp

// 1. 获取底层 ChatClient
var chatClient = AIClientHelper.GetDefaultChatClient();

// 2. 创建 Agent(指定身份与指令)
AIAgent spokenEnglishCoach = chatClient.AsAIAgent(
    instructions: "你是一位专业的英语口语教练。帮助学生提升英语口语,保持鼓励友好的态度。",
    name: "SpokenEnglishCoach"
);

// 3. 调用 Agent(同步模式)
var response = await spokenEnglishCoach.RunAsync("我想提高英语口语,从哪开始?");
Console.WriteLine(response);

同步调用 API

csharp

Task<string> RunAsync(string message, AgentSession? session = null, CancellationToken ct = default)

🌊 流式调用(提升体验)

csharp

await foreach (var chunk in spokenEnglishCoach.RunStreamingAsync("讲解英语连读技巧"))
{
    Console.Write(chunk);   // 逐块输出
}

API 签名
IAsyncEnumerable<string> RunStreamingAsync(...)


🔄 多轮对话的挑战

每次调用 RunAsync()独立的,Agent 无法记住历史:

csharp

await agent.RunAsync("我叫张三");               // 第一轮
await agent.RunAsync("我叫什么名字?");         // ❌ 无法记住

解决方案:使用 AgentSession(下节课详解)

csharp

var session = await agent.CreateSessionAsync();
await agent.RunAsync("我叫张三", session);
await agent.RunAsync("我叫什么名字?", session);  // ✅ 能记住

📚 本节课总结

✅ 核心知识点

  • MAF 基于 MEAI,提供状态、身份、工具等企业级能力

  • IChatClient 无状态,AIAgent 有状态且内置会话

  • 创建 Agent:chatClient.AsAIAgent(instructions, name)

  • 调用方式:RunAsync()(同步) 与 RunStreamingAsync()(流式)

🎯 关键 API

API

说明

AsAIAgent(instructions, name)

创建 Agent

RunAsync(message, session)

同步调用,返回完整响应

RunStreamingAsync(message, session)

流式调用,返回增量块

⚠️ 当前限制

  • 单次调用无记忆 → 需 AgentSession 实现多轮对话