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

从提供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 服务之间切换,而无需重写代码。

核心价值
❝
一次编写,多处运行 ------ 无论是 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(...)
核心优势一览

安装依赖
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 生态深度集成:

🔗 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的具体用法,敬请期待!