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的统一基础。

简而言之,MAF是微软推出的智能体开发的“终极武器”!
对于.NET技术栈的开发团队而言,其意义十分重大,它将已有的技术版图组合起来,形成一个AI时代的完整技术栈:

对于Edison所在的团队来说,.NET技术栈开发者可以使用MAF快速进入Agent开发领域,转型速度飞快。同时,在机器学习、模型训练 和 推理服务器(Inference Server)方面,我们也在使用Python来做,将各自的优势保留并发挥即可。
AI Agent是什么?
让我们再来看看AI Agent(又称为AI智能体)是什么,它其实是一个使用LLM来处理用户输入、做出决策、调用工具(MCP服务器)来执行并生成响应以完成某个具体的任务。
下图说明了AI Agent中的核心组件及其交互:

AI Agent适用于需要自主决策、规划试验 和 基于聊天 的用户交互应用程序,特别是对于输入任务非结构化且无法提前定义的情况,它们特别有用。这一类场景常见于客户支持、教育辅导、研究帮助等领域。
需要注意的是:AI Agent不适合高度结构化且要求严格遵循预定义规则的任务。也就是说,如果应用程序预期有特定类型的输入,并且具有明确定义的作业顺序,则使用 AI Agent可能会带来不必要的不确定性、延迟和成本。
Workflow是什么?
Workflow即工作流,它可以表达预定义的作业序列,工作流旨在处理可能涉及多个AI Agent、人工交互 和 与外部系统的集成的复杂且长时间运行的进程。
很多时候,我们可以显示定义工作流的执行序列,从而更好地控制执行路径。
下图演示了链接两个AI Agent 和 一个函数方法 的工作流示例:

工作流提供了一种结构化方法,用于管理涉及多个步骤、决策点 和 与各种系统或Agent交互的复杂流程。
快速开始创建Agent
这里我们创建一个.NET控制台项目,安装以下组件包:
<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:
{
"OpenAI": {
"EndPoint": "https://api.siliconflow.cn",
"ApiKey": "******************************",
"ModelId": "Qwen/Qwen2.5-32B-Instruct"
}
}
首先,我们加载配置文件到应用程序中:
// Load configuration
var config = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true)
.Build();
var openAIProvider = config.GetSection("OpenAI").Get<OpenAIProvider>();
var azureOpenAIProvider = config.GetSection("AzureOpenAI").Get<OpenAIProvider>();
(1)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);
}
最终的结果如下图所示,还挺幽默的:

那么,如果是用的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."));
(2)多轮对话
我们还可以通过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);
(3)函数调用
此外,在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?"));
最终显示的结果如下:

而在实际开发中,基于MAF和原有的ASP.NET Core框架,将依赖注入和生命周期管理纳入进来,可以实现更为强大的模块化力量。
(4)人工审批的函数调用
相信我们在使用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确认后,它才会调用工具执行。

如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2025 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》,下方扫码获取~

① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)

② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

以上资料如何领取?

为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!


这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


以上全套大模型资料如何领取?

1191

被折叠的 条评论
为什么被折叠?



