尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

MAF快速入门(1)化繁为简的Agent创建范式

MAF快速入门(1)化繁为简的Agent创建范式
📅 发布时间:2026/6/19 7:45:21

MAF快速入门(1)化繁为简的Agent创建范式

合集 - Agent Orchestration(13)
 
1.MAF快速入门(5)开发自定义Executor12-052.MAF快速入门(4)多Agent工作流编排12-023.MAF快速入门(3)聊天记录持久化到数据库11-284.MAF快速入门(2)Agent的花样玩法11-24
5.MAF快速入门(1)化繁为简的Agent创建范式11-17
6.多Agent协作入门:基于A2A协议的Agent通信(下)10-117.多Agent协作入门:基于A2A协议的Agent通信(中)10-098.多Agent协作入门:基于A2A协议的Agent通信(上)10-079.多Agent协作入门:移交编排模式08-0110.多Agent协作入门:群聊编排模式07-2711.多Agent协作入门:顺序编排模式07-1712.多Agent协作入门:并发编排模式07-1413.多Agent协作入门:AgentGroupChat07-10
收起
 

大家好,我是Edison。

MAF(Microsoft Agent Framwork)已经出来有一段时间,最近看到它的commit比较频繁,估计是为了在.NET Conf 2025发布1.0.0的正式版。预览版也并不妨碍我们的学习,那么从今天开始,我们就通过微软官方学习文档来一起进入MAF的世界吧。

MAF简单介绍

Microsoft Agent Framework (MAF) 是微软最新推出的统一的智能体开发框架,用于生成适用于 .NET 和 Python 的 AI Agent(智能体)和 Multi Agent Workflow(多智能体工作流)。 MAF 汇集了 Semantic Kernel 和 AutoGen 两个知名项目的优点,并扩展了其优势,同时添加了新功能。换句话说,它们由同一开发团队构建,是今后构建AI Agent的统一基础。

image

简而言之,MAF是微软推出的智能体开发的“终极武器”!

对于.NET技术栈的开发团队而言,其意义十分重大,它将已有的技术版图组合起来,形成一个AI时代的完整技术栈:

image

对于Edison所在的团队来说,.NET技术栈开发者可以使用MAF快速进入Agent开发领域,转型速度飞快。同时,在机器学习、模型训练 和 推理服务器(Inference Server)方面,我们也在使用Python来做,将各自的优势保留并发挥即可。

AI Agent是什么?

让我们再来看看AI Agent(又称为AI智能体)是什么,它其实是一个使用LLM来处理用户输入、做出决策、调用工具(MCP服务器)来执行并生成响应以完成某个具体的任务。

下图说明了AI Agent中的核心组件及其交互:

image

AI Agent适用于需要自主决策、规划试验 和 基于聊天 的用户交互应用程序,特别是对于输入任务非结构化且无法提前定义的情况,它们特别有用。这一类场景常见于客户支持、教育辅导、研究帮助等领域。

需要注意的是:AI Agent不适合高度结构化且要求严格遵循预定义规则的任务。也就是说,如果应用程序预期有特定类型的输入,并且具有明确定义的作业顺序,则使用 AI Agent可能会带来不必要的不确定性、延迟和成本。

Workflow是什么?

Workflow即工作流,它可以表达预定义的作业序列,工作流旨在处理可能涉及多个AI Agent、人工交互 和 与外部系统的集成的复杂且长时间运行的进程。

很多时候,我们可以显示定义工作流的执行序列,从而更好地控制执行路径。

下图演示了链接两个AI Agent 和 一个函数方法 的工作流示例:

image

工作流提供了一种结构化方法,用于管理涉及多个步骤、决策点 和 与各种系统或Agent交互的复杂流程。

快速开始创建Agent

这里我们创建一个.NET控制台项目,安装以下组件包:

?
1
2
<PackageReference Include="Azure.AI.OpenAI" Version="2.5.0-beta.1" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.0.0-preview.251110.1" />

假定我们有如下配置文件定义了我们可以用到的LLM API:

?
1
2
3
4
5
6
7
{
  "OpenAI": {
    "EndPoint": "https://api.siliconflow.cn",
    "ApiKey": "******************************",
    "ModelId": "Qwen/Qwen2.5-32B-Instruct"
  }
}

这里我们使用SiliconCloud提供的 Qwen2.5-32B-Instruct 模型,你可以通过这个URL注册账号:https://cloud.siliconflow.cn/i/DomqCefW 获取免费的Token来进行本次实验。

首先,我们加载配置文件到应用程序中:

// Load configuration
var config = new ConfigurationBuilder().AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true).Build();
var openAIProvider = config.GetSection("OpenAI").Get<OpenAIProvider>();

其中,OpenAIProvider的类定义如下:

复制代码
public sealed class OpenAIProvider
{public string ApiKey { get; init; } = string.Empty;public string ModelId { get; init; } = string.Empty;public string Endpoint { get; init; } = string.Empty;
}
复制代码

Create Agent

其次,我们创建第一个Hello World的Agent:

var jokerAgent = new OpenAIClient(new ApiKeyCredential(openAIProvider.ApiKey),new OpenAIClientOptions { Endpoint = new Uri(openAIProvider.Endpoint) }).GetChatClient(openAIProvider.ModelId).CreateAIAgent(instructions: "You are good at telling jokes.", name: "Joker");

然后,通过简单的一句RunAsync 或 RunStreamingAsync 即可完成一次交互:

复制代码
// Method 1: RunAsync
Console.WriteLine(await jokerAgent.RunAsync("Tell me a joke about a pirate."));
// Method 2: RunStreamingAsync
await foreach (var update in jokerAgent.RunStreamingAsync("Tell me a joke about a car."))
{Console.Write(update);
}
复制代码

最终的结果如下图所示,还挺幽默的:

image

那么,如果是用的AzureOpenAI呢?只需要换成下面即可:

复制代码
var jokerAgent = new AzureOpenAIClient(new Uri(azureOpenAIProvider.Endpoint),new ApiKeyCredential(azureOpenAIProvider.ApiKey)).GetChatClient(azureOpenAIProvider.ModelId).CreateAIAgent(instructions: "You are good at telling jokes.", name: "Joker");
Console.WriteLine(await jokerAgent.RunAsync("Tell me a joke about a pirate."));
复制代码

多轮对话

我们还可以通过AgentThread这个特性来实现具有“短期记忆”的多轮对话:

复制代码
var thread1 = jokerAgent.GetNewThread();
var thread2 = jokerAgent.GetNewThread();
Console.WriteLine(await jokerAgent.RunAsync("Tell me a joke about a pirate.", thread1) + Environment.NewLine);
Console.WriteLine(await jokerAgent.RunAsync("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", thread1) + Environment.NewLine);
Console.WriteLine(await jokerAgent.RunAsync("Tell me a joke about a robot.", thread2) + Environment.NewLine);
Console.WriteLine(await jokerAgent.RunAsync("Now add some emojis to the joke and tell it in the voice of a robot.", thread2) + Environment.NewLine);
复制代码

函数调用

此外,在MAF中进行函数方法调用也是十分的轻松:

定义一个简单的函数方法:

复制代码
public class WeatherServicePlugin
{[Description("Get current weather for a location")]public static async Task<string> GetCurrentWeatherAsync(string location){return $"The weather in {location} is cloudy with a high of 15°C.";}
}
复制代码

然后在创建Agent时将工具列表告诉Agent即可:

复制代码
var agent = new OpenAIClient(new ApiKeyCredential(openAIProvider.ApiKey),new OpenAIClientOptions { Endpoint = new Uri(openAIProvider.Endpoint) }).GetChatClient(openAIProvider.ModelId).CreateAIAgent(instructions: "You are a helpful assistant", tools: [AIFunctionFactory.Create(WeatherServicePlugin.GetCurrentWeatherAsync)]);
Console.WriteLine(await agent.RunAsync("Tell me the weather like in Chengdu?"));
复制代码

最终显示的结果如下:

image

而在实际开发中,基于MAF和原有的ASP.NET Core框架,将依赖注入和生命周期管理纳入进来,可以实现更为强大的模块化力量。

人工审批的函数调用

相信我们在使用GitHub Copilot之类的编码智能体时会遇到,当它想要执行某个命令行或工具调用时会先征求你的审批,同意后它才会执行。其实,在Agent开发中,人工审批的工具调用也是一个常见的需求,而在MAF中,它也支持我们快速实现这个需求。

下面这个示例演示了如何实现人工审批的工具调用:

复制代码
var weatherTool = AIFunctionFactory.Create(WeatherServicePlugin.GetCurrentWeatherAsync);
var approvalRequiredWeatherTool = new ApprovalRequiredAIFunction(weatherTool);
var agent = new OpenAIClient(new ApiKeyCredential(openAIProvider.ApiKey),new OpenAIClientOptions { Endpoint = new Uri(openAIProvider.Endpoint) }).GetChatClient(openAIProvider.ModelId).CreateAIAgent(instructions: "You are a helpful assistant", tools: [approvalRequiredWeatherTool]);
var thread = agent.GetNewThread();
var response = await agent.RunAsync("Tell me the weather like in Chengdu?", thread);
var userInputRequests = response.UserInputRequests.ToList();
while(userInputRequests.Count > 0)
{// Ask the user to approve each function call request.var userInputResponses = userInputRequests.OfType<FunctionApprovalRequestContent>().Select(functionApprovalRequest =>{Console.WriteLine($"The agent would like to invoke the following function, please reply Y to approve: Name {functionApprovalRequest.FunctionCall.Name}");return new ChatMessage(ChatRole.User, [functionApprovalRequest.CreateResponse(Console.ReadLine()?.Equals("Y", StringComparison.OrdinalIgnoreCase) ?? false)]);}).ToList();// Pass the user input responses back to the agent for further processing.response = await agent.RunAsync(userInputResponses, thread);userInputRequests = response.UserInputRequests.ToList();
}
Console.WriteLine(Environment.NewLine + $"Agent: {response}");
复制代码

执行结果如下图所示:只有当我们人工输入Y确认后,它才会调用工具执行。

image

小结

本文介绍了MAF的基本功能,AI Agent和Workflow的基本概念,以及通过一个.NET控制台项目快速创建了一个Agent的代码示例。

下一篇,我们将继续MAF的学习。

示例源码

Github: https://github.com/EdisonTalk/MAFD

参考资料

Microsoft Learn,《Agent Framework Tutorials》

 

 

2025-12-05 23:05:41【出处】:https://www.cnblogs.com/edisontalk/p/-/quick-start-on-maf-chatper01

=======================================================================================

您的资助是我最大的动力!
金额随意,欢迎来赏!
付款后有任何问题请给我留言。

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。(●'◡'●)

因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!

如果对你有所帮助,赞助一杯咖啡!打           付款后有任何问题请给我留言!!!

本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/19313912

【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!

相关新闻

  • NFL如何用统一数据平台提升比赛与体验
  • 每日反思(2025年12月5日)
  • 如何将 iPhone 或 iPad 备份移至外置硬盘

最新新闻

  • 2026沈阳钻石回收没有证书能卖吗?实测1200笔无票钻石成交记录 - 奢品小当家
  • 本草拾光商行 —— 承德满族人,全品类回收,专业爱好驱动,报价地道 - 深鉴新闻
  • 广州古董珠宝也能卖高价,懂行老板不压价 - 奢品小当家
  • 20260619 了解V8规则
  • 2026 年 6 月最新无锡同城购宠评分榜实测|7 家正规猫舍犬舍横向测评,附近实体门店避坑全攻略 - 吉林同城获客
  • 广州租办公室哪里好?万博德舜大厦A塔居首,2026年6月四大商务区深度横评 - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号