MEAI .NET平台的AI底座

img

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

img

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

什么是 Microsoft.Extensions.AI?

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

img

核心价值在于, 一次编写, 多处运行。对于多个多个大模型, 只需要切换配置即可。

两大核心接口

  • IChatClient - 聊天服务抽象

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

  • 多模态内容:文本、图像、音频
  • 流式响应:逐步输出,提升体验
  • 工具调用:支持函数调用能力

三个关键方法

1
2
3
4
5
6
7
8
// 完整响应
Task<ChatResponse> GetResponseAsync(...)
 
// 流式响应  
IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(...)
 
// 获取元数据
object? GetService(Type serviceType, ...)
  • IEmbeddingGenerator - 向量嵌入生成器

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

1
2
3
4
5
6
7
8
// 批量生成
Task<GeneratedEmbeddings<TEmbedding>> GenerateAsync(...)
 
// 单条生成
Task<Embedding<T>> GenerateAsync(TInput value, ...)
 
// 直接获取向量
Task<ReadOnlyMemory<T>> GenerateVectorAsync(...)

核心优势一览

特性 说明
服务无关 轻松切换AI提供商, 代码无需改动
DI & 中间件 深度集成.NET依赖注入和中间件模式
多模态支持 统一处理文本、图像、音频等内容
流式响应 支持实时输出, 提升用户体验
高扩展性 可为任何AI服务实现自定义客户端
易于测试 统一抽象简化Mock和单元测试

安装依赖

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

示例1: 使用IChatClient

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
 // 步骤 1:创建 客户端
 // 步骤 2:获取IChatClient
 var chatClient = new OpenAIClient(
 new ApiKeyCredential(ApiKey),
 new OpenAIClientOptions { Endpoint = new Uri(ApiHost) }
 ).GetChatClient(ModelId).AsIChatClient();

 // 步骤 3:发送消息(非流式)
 var response = await chatClient.GetResponseAsync("你好,请介绍一下自己");
 Console.WriteLine(response.Messages[0].Text);

 // 步骤 4:流式响应
 await foreach (var chunk in chatClient.GetStreamingResponseAsync("讲个笑话"))
 {
     Console.Write(chunk);
 }

 // 步骤 5:获取元数据
 var metadata = chatClient.GetRequiredService<ChatClientMetadata>();
 Console.WriteLine($"模型: {metadata.DefaultModelId}");

img

示例2: 使用 IEmbeddingGenerator

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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}");
 

img

与生态系统的集成

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

img

1
2
3
4
5
6
7
8
9
// 在 Semantic Kernel 中使用 IChatClient
var kernel = Kernel.CreateBuilder()
    .AddAIChatClient(chatClient)
    .Build();
 
 // 在 Microsoft Agent Framework 中使用
var agent = new ChatAgent(chatClient)
    .WithMemory()
    .WithTools(weatherTool, calculatorTool);

小结

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

  • 🎯 统一标准:告别各家 SDK 的差异
  • 🚀 快速切换:提供商切换只需改配置
  • 🔧 易于扩展:中间件模式支持自定义功能
  • 🧪 简化测试:统一抽象便于 Mock