🎯 MAF 定位与核心概念
MAF 是什么?
Microsoft Agent Framework (MAF) 是构建在 Microsoft.Extensions.AI (MEAI) 之上的企业级 Agent 开发框架,提供状态管理、身份定义、工具管理等高级能力。
Agent vs ChatClient
简单理解:
IChatClient是纯函数,AIAgent是有记忆的助手。
三大核心概念
AIAgent:具有身份(
Name)、指令(Instructions)和工具(Tools)的智能实体AgentSession:维护独立对话历史,支持持久化与隔离
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
⚠️ 当前限制
单次调用无记忆 → 需
AgentSession实现多轮对话