.NET+AI | Agent | 从 ChatClient 到 AIAgent (1)
2026/7/3 14:39:52 网站建设 项目流程

目录

一句话简介

🎯 核心价值

📝 Agent vs ChatClient:什么时候用 Agent?

🏗️ MAF 架构定位

💻 快速开始:创建第一个 Agent

三步创建 Agent

完整示例:口语教练 Agent

🌊 流式调用:提升用户体验

对比:同步 vs 流式

流式调用示例

🏢 MAF 核心概念

三大核心组件

⚠️ 当前限制:无法记住历史

💡 解决方案:AgentThread

🎯 总结


一句话简介

Microsoft Agent Framework (MAF) 是微软推出的企业级 AI Agent 开发框架,基于 Microsoft.Extensions.AI 构建,为开发者提供状态管理、身份定义和工具管理等高级能力。


🎯 核心价值

  • 状态管理:内置 AgentThread 实现多轮对话记忆

  • 身份定义:固定的 Instructions 和 Name,无需每次传入

  • 工具管理:Agent 级别统一管理工具集合

  • 企业级:构建在 MEAI 之上,适合生产环境


📝 Agent vs ChatClient:什么时候用 Agent?

很多开发者会困惑:我已经有 IChatClient 了,为什么还需要 Agent?

特性

IChatClient

AIAgent

定位

💬 底层 AI 调用抽象

🤖 高级智能体封装

状态管理

❌ 无状态,每次调用独立

✅ 内置对话线程 (AgentThread)

身份定义

❌ 需手动传入 System Message

✅ 固定的 Instructions 和 Name

工具管理

⚠️ 需手动配置 ChatOptions.Tools

✅ Agent 级别统一管理

使用场景

🔧 单次对话场景

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

简单来说:

  • ChatClient= 纯函数:给定输入,返回输出,不保留状态

  • Agent= 有记忆的助手:有固定身份、能记住上下文、能使用工具


🏗️ MAF 架构定位

MAF 构建在 Microsoft.Extensions.AI 之上,提供更高层次的抽象,让开发者专注于业务逻辑。


💻 快速开始:创建第一个 Agent

三步创建 Agent

完整示例:口语教练 Agent

// 1. 获取底层 ChatClient var chatClient = AIClientHelper.GetDefaultChatClient(); // 2. 创建 Agent AIAgent spokenEnglishCoach = chatClient.CreateAIAgent( instructions: "你是一位专业的英语口语教练。帮助学生提升英语口语能力,始终保持鼓励和友好的态度。", name: "SpokenEnglishCoach" ); // 3. 调用 Agent (同步模式) var response = await spokenEnglishCoach.RunAsync( "我想提高英语口语能力,但不知道从哪里开始。你能给我一些建议吗?" ); Console.WriteLine($"🤖 {spokenEnglishCoach.Name}: {response}");

核心要点:

  • 🔧instructions:定义 Agent 的角色和行为(System Message)

  • 🔧name:Agent 的唯一标识,用于日志和调试

  • 🔧RunAsync:同步调用,等待完整响应


🌊 流式调用:提升用户体验

同步调用需要等待完整响应,用户体验不佳。流式调用可以逐字显示 AI 的响应,就像 ChatGPT 那样。

对比:同步 vs 流式

流式调用示例

// 流式调用,逐块输出 await foreach (var chunk in spokenEnglishCoach.RunStreamingAsync( "请讲解如何练习英语的连读技巧,并给出例子。" )) { Console.Write(chunk); // 逐块输出,不换行 }

核心差异:

  • 同步RunAsync()Task<string>

  • 流式RunStreamingAsync()IAsyncEnumerable<string>


🏢 MAF 核心概念

三大核心组件

组件

功能

说明

AIAgent

智能代理

具有固定身份(Name + Instructions)和工具集合

AgentThread

对话线程

维护独立的对话历史,支持序列化

AgentRun

执行实例

每次调用创建一个 Run,返回响应


⚠️ 当前限制:无法记住历史

上面的示例中,每次调用RunAsync()都是独立的单次对话,Agent 不会记住之前的内容。

问题演示:

// 第一轮 var response1 = await spokenEnglishCoach.RunAsync("我叫张三,我想学英语口语。"); // 第二轮 - Agent 无法记住 "我叫张三" var response2 = await spokenEnglishCoach.RunAsync("你知道我叫什么名字吗?"); // ❌ Agent 会回答:抱歉,我不知道您的名字...

💡 解决方案:AgentThread

要实现多轮对话记忆,需要使用AgentThread

// 创建对话线程 var thread = agent.GetNewThread(); // 所有对话使用同一个 thread await agent.RunAsync("我叫张三", thread); await agent.RunAsync("你知道我叫什么吗?", thread); // ✅ 能够记住:"您好,张三!"

AgentThread 将在下节课详细讲解。


🎯 总结

  • MAF 定位:构建在 MEAI 之上的企业级 Agent 框架,提供状态管理和工具能力

  • Agent vs ChatClient:Agent 是有状态、有身份的智能体,适合多轮对话场景

  • 创建 AgentchatClient.CreateAIAgent(instructions, name)三步完成

  • 调用模式:同步调用RunAsync()和流式调用RunStreamingAsync()

  • 核心概念:Agent(智能代理)、Thread(对话线程)、Run(执行实例)

  • ⚠️当前限制:单次调用无历史记忆,需使用 AgentThread 解决(下节课)

下节课预告:《多轮对话与上下文管理》—— 深入 AgentThread 的创建、使用和持久化。

引入地址

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询