当前位置: 首页 > news >正文

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

.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.jsqmd.com/news/39721/

相关文章:

  • NOIP2025模拟7
  • 20232304 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • AT_arc104_e Random LIS
  • kettle从入门到精通 第五十四课 ETL之kettle接收http请求
  • P13714 淘汰(Hard ver.)
  • Windows 10 本地部署工作流自动化工具 n8n
  • Gary Yen教授在BICTA2025做主旨汇报并访问本课题组
  • EUC 2024 题解(瞎写的
  • 污染控制化学及工程考点背诵手册
  • 关于AI元人文构想与价值工程生态系统的全面研究报告
  • 杂记 - 2
  • 算法随笔 - LogTrick
  • LeetCode 面试经典 150_栈_简化路径(53_71_C++_中等)(栈+stringstream) - 实践
  • 污染控制化学及工程知识点整理
  • 夯实MySQL基础:SQL核心与MySQL入门全解析
  • 400万美元ARR,小企业和个人AI客服Beside融资3200万美元;KalpaLabs:不到1000美元训练语音模型丨日报
  • 优先级队列的学习 - 教程
  • Codeforces Round 1063 (Div. 2)题解
  • 25.11.13联考题解
  • 2025.11.13模拟赛
  • 2025.11.13博客
  • 【排查实录】Web 页面能打开,服务器能通接口,客户端却访问失败?原因全在这! - 实践
  • s2 NOIP模拟赛15-div2新太阳睡觉中心
  • LCA-雷达题解
  • 如何在团队士气低落时重建信任与动力
  • noip2023T3 题解
  • #题解#牛客: 小心火烛的歪#枚举组合#位运算#dfs#
  • 2025 年 11 月螺丝打包机,五金打包机,称重打包机厂家最新推荐,权威测评排名与工业采购选择指南!
  • 2025 年 11 月螺丝打包机,五金打包机,称重打包机厂家最新推荐,权威测评排名与工业采购选择指南!
  • 深入解析:list的迭代器