.NET+AI | MEAI | .NET 平台的 AI 底座 (1)

news/2025/11/13 22:18:05/文章来源:https://www.cnblogs.com/sheng-jie/p/19219744

.NET 平台 AI 生态发展时间线

dotnet-ai-timeline

从提供AI服务统一抽象接口的Microsoft.Extensions.AI,到实现复杂AI工作流编排的Semantic Kernel (SK),再到整合多方优势、专注于智能体(Agent)协作的Microsoft Agent Framework (MAF),微软已经系统性地构建了一条从基础服务集成到高级智能体编排的完整技术栈。而即将发布的.NET 10,更是一个从底层性能、硬件支持到工具链都为AI深度优化的“AI Ready”平台,旨在为智能应用提供坚实的基石。

而作为一名.NET 开发者如何抓住平台机遇,在AI浪潮中激流勇进呢?面对诸如提示工程(Prompt Engineering)、智能体(Agent)、工作流(Workflow)、检索增强生成(RAG)、上下文工程(Contextual Engineering)等层出不穷的技术概念,是不是一时间不知如何着手?

没关系,从今天起,我们将正式开启[.NET+AI]系列文章的推送。本系列旨在陪伴大家由浅入深地开启智能体开发之旅。内容将基于 《.NET+AI|智能体开发进阶》课程课件改写而成,力求简短、接地气、重实操,希望与各位同行者一起,拥抱这个智能变革的时代。

什么是 Microsoft.Extensions.AI?

Microsoft.Extensions.AI (MEAI) 是微软为 .NET 生态系统打造的 AI 功能基础抽象层。它通过提供统一的接口标准,让开发者能够轻松地在不同 AI 服务之间切换,而无需重写代码。

Image

核心价值

一次编写,多处运行 —— 无论是 OpenAI、Azure OpenAI 还是本地 Ollama,只需切换配置即可。

两大核心接口

1️⃣ IChatClient - 聊天服务抽象

用于与大语言模型 (LLM) 进行对话交互,支持:

  • 多模态内容:文本、图像、音频

  • 流式响应:逐步输出,提升体验

  • 工具调用:支持函数调用能力

三个关键方法:

// 完整响应
Task<ChatResponse> GetResponseAsync(...)// 流式响应  
IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(...)// 获取元数据
object? GetService(Type serviceType, ...)

2️⃣ IEmbeddingGenerator - 向量嵌入生成器

将文本转换为向量表示,支持语义搜索和相似度匹配:

// 批量生成
Task<GeneratedEmbeddings<TEmbedding>> GenerateAsync(...)// 单条生成
Task<Embedding<T>> GenerateAsync(TInput value, ...)// 直接获取向量
Task<ReadOnlyMemory<T>> GenerateVectorAsync(...)

核心优势一览

image

安装依赖

dotnet add package Microsoft.Extensions.AI
dotnet add package Microsoft.Extensions.AI.OpenAI

示例 1:使用 IChatClient

using Microsoft.Extensions.AI;
using OpenAI;
using System.ClientModel;// 步骤 1:创建客户端
var clientOptions = new OpenAIClientOptions 
{ 
    // 可替换为任意兼容OpenAI 格式的AI 提供商
    Endpoint = new Uri("https://api.openai.com/v1") 
};
var aiClient = new OpenAIClient(new ApiKeyCredential("your-api-key"), clientOptions);// 步骤 2:获取 IChatClient
IChatClient chatClient = aiClient.GetChatClient("gpt-4").AsIChatClient();// 步骤 3:发送消息(非流式)
var response = await chatClient.GetResponseAsync("你好,请介绍一下自己");
Console.WriteLine(response.Messages[0].Text);// 步骤 4:流式响应
awaitforeach (var chunk in chatClient.GetStreamingResponseAsync("讲个笑话"))
{
    Console.Write(chunk);
}// 步骤 5:获取元数据
var metadata = chatClient.GetRequiredService<ChatClientMetadata>();
Console.WriteLine($"模型: {metadata.DefaultModelId}");

示例 2:使用 IEmbeddingGenerator

using Microsoft.Extensions.AI;
using Azure.AI.OpenAI;// 步骤 1:创建客户端
var azureClient = new AzureOpenAIClient(
    new Uri("https://your-resource.openai.azure.com/"),
    new ApiKeyCredential("your-api-key")
);// 步骤 2:获取嵌入生成器
var embeddingClient = azureClient.GetEmbeddingClient("text-embedding-3-small");
IEmbeddingGenerator<string, Embedding<float>> generator = 
    embeddingClient.AsIEmbeddingGenerator();// 步骤 3:生成嵌入向量
var documents = new[]
{
    "Microsoft.Extensions.AI 统一了 .NET 的 AI 抽象",
    "向量嵌入用于语义搜索和相似度匹配"
};var embeddings = await generator.GenerateAsync(documents);
Console.WriteLine($"生成了 {embeddings.Count} 个向量");
Console.WriteLine($"向量维度: {embeddings[0].Dimensions}");// 步骤 4:获取单个向量
var vector = await generator.GenerateVectorAsync("测试文本");
Console.WriteLine($"向量长度: {vector.Length}");

与生态系统的集成

MEAI 不是孤立存在的,它与 .NET AI 生态深度集成:

Image

🔗 Semantic Kernel

// 在 Semantic Kernel 中使用 IChatClient
var kernel = Kernel.CreateBuilder()
    .AddAIChatClient(chatClient)
    .Build();

🤖 Microsoft Agent Framework

// 在 Agent Framework 中使用
var agent = new ChatAgent(chatClient)
    .WithMemory()
    .WithTools(weatherTool, calculatorTool);

小结

Microsoft.Extensions.AI 为 .NET 开发者带来了:

  • 🎯 统一标准:告别各家 SDK 的差异

  • 🚀 快速切换:提供商切换只需改配置

  • 🔧 易于扩展:中间件模式支持自定义功能

  • 🧪 简化测试:统一抽象便于 Mock

下一节我们将介绍MEAI的具体用法,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NOIP2025模拟7

前言: 我菜菜菜菜菜菜,所以只改了两道题。T2:原子(atom) 思路: 建图图图图图。 根据题意我们可以建出来一个完全图,然后求出图中最少有几条链就行。 我们发现,链的数量其实就是每个点的(出度减去入度)的加和…

20232304 2025-2026-1 《网络与系统攻防技术》实验六实验报告

20232304 2025-2026-1 《网络与系统攻防技术》实验六实验报告 1.实验内容 1.对给定Metasploitable2靶机进行发现,以及端口和漏洞扫描; 2.通过下面四个漏洞的渗透攻击从而掌握Metasploit的用法:Vsftpd源码包后门漏洞…

AT_arc104_e Random LIS

啦啦啦睡前小练习,5min 秒了呀。 先 \(O(n^n)\) 枚举 \(n\) 个数的相对大小关系,但是极为不满,\(6\) 个数的实际有效状态只有 \(4683\) 个。 现在只用计数一个上升序列,满足 \(a_i\le b_i,a_{i+1}>a_{i}\)。先将…

kettle从入门到精通 第五十四课 ETL之kettle接收http请求

1、kettle官网没有介绍kettle可以处理http请求,只有讲解kettle如何发起请求。但是kettle处理http请求需求又是实实在在的需求,所以经过一些时间的摸索,终于解开谜题。 2、kettle转换处理http请求,如下图所示:1)通…

P13714 淘汰(Hard ver.)

思路:考虑DP,对于每一位存在关键操作,操作后该位不再变化,之前该位状态无关紧要。设$f_S$表示集合$S$的位未固定,不在$S$的位已固定且与$y$相同的最小花费。预处理$g_S$,即集合$S$上与$y$相同的AND操作的最小费用…

Windows 10 本地部署工作流自动化工具 n8n

参考豆包 deepseek https://docs.n8n.io/ https://zhuanlan.zhihu.com/p/1968808989946016165 https://blog.csdn.net/qq_43499921/article/details/154605297 https://www.n8nclub.com.cn/article/docker_n8n#1ef34a8…

Gary Yen教授在BICTA2025做主旨汇报并访问本课题组

2025年11月7日至8日,本课题组成功举办了一场高水平的国际学术交流活动。此次活动邀请到了国际计算智能领域著名学者、四川大学人工智能讲席教授Gary G. Yen教授莅临本组进行学术访问与交流,并出席在武汉举办的第20届…

EUC 2024 题解(瞎写的

这场比赛,感觉题目很好。但是总的有点奇异搞笑。 A. Grove 退火哦耶! 官方题解给的是最大独立集搜索,也很搞笑哥们。 B. Charming Meals 显然的 \(a\) 的前缀依次匹配 \(b\) 的后缀,\(a\) 的后缀依次匹配 \(b\) 的…

污染控制化学及工程考点背诵手册

污染控制化学及工程考点背诵手册(修订版) 一、固体废物污染及控制(核心考点) (一)基础概念固体废物定义:生产/生活/其他活动产生的丧失利用价值或被抛弃的固态、半固态及容器中气态物质,含危险废物。 危险废物…

关于AI元人文构想与价值工程生态系统的全面研究报告

关于AI元人文构想与价值工程生态系统的全面研究报告岐金兰 2025年11月13日 本报告系统性地阐述了一套旨在应对当前人工智能伦理挑战的创新型理论体系。 📚 报告全文概览 以下是本报告各章节的核心概要,可以帮助读者…

图论有关问题

mndzk,mndbu。 最短路相关 1. 三角形不等式 对于单源最短路,记 \(dis_i\) 为原点到 \(i\) 的最短路径长度。那么 \(\forall (u,v,w) \in E,dis_{u}+w \ge dis_v\)。且在边 \((u,v,w)\) 在最短路上时取等。这个比较显…

杂记 - 2

作者:So_noSlack-2025.11.03想写点东西,总结一下最近的经历吧。 上次写是 \(2025.09.29\),这又过了一个月了,\(10\) 月份的第一周国庆,写写学校作业,回老家了一趟,其他好像也没干什么。对于 \(\text{OI}\) 貌似…

算法随笔 - LogTrick

这类 \(O(\log V)\) 的 trick,都是利用了值变化单调且变化幅度大的特性 每次下降或上升都跨越一个“数量级”,因此变化次数有限,即使包在循环中整体也只会是 \(O(n \log V)\) 而非 \(O(n^2)\)。 下面举几个比较典型…

杂记 - 4

作者:So_noSlack-2025.11.13今天是 \(2025\) 年 \(11\) 月 \(13\) 日。 最近感觉状态好多了,从 \(25.11.11\) 开始每天写做题笔记,写完题之后或者写之前把思路简单写一下。感觉挺有用的,顺便把每个算法都整理一下。…

智能眼镜论文笔记

智能眼镜论文笔记 目录智能眼镜论文笔记0x00 概要0x01 论文内容总结1.1 AI for Service1.1.1 研究背景与核心范式1.1.2 核心技术挑战与解决方案1.1.3 Alpha-Service 框架设计1.1.4 思考1.2 EgoLife1.2.1 背景1.2.2 数据…

杂记 - 3

高一?我怎么已经高一了。 仿佛上一次抬头,我还在小学的教室里,和有趣的同学们一同上数学课。作为数学课代表的我,当然对数学课满腔热情,积极回应老师的每一个问题。下课和同学聊八卦、分零食,最好的朋友教我打篮…

LeetCode 面试经典 150_栈_简化路径(53_71_C++_中等)(栈+stringstream) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

污染控制化学及工程知识点整理

污染控制化学及工程(第一章)核心内容梳理 一、思维导图二、简答题及解说 1. 简述环境地球化学的核心研究内容及在环境污染治理中的作用 答案:核心研究内容包括环境生物地球化学循环的过程与关键反应、影响因素、耦合…

夯实MySQL基础:SQL核心与MySQL入门全解析

夯实MySQL基础:SQL核心与MySQL入门全解析在数据驱动的时代,MySQL作为全球最受欢迎的关系型数据库管理系统之一,已成为软件开发、数据分析等领域的核心工具。无论是小型项目的数据存储,还是大型网站的高并发数据处理…

400万美元ARR,小企业和个人AI客服Beside融资3200万美元;KalpaLabs:不到1000美元训练语音模型丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、…