文章摘要:本文描述了 .NET 11 Preview 4 在 AI 应用开发上的重要更新。SDK 新增了内置的 MCP Server 模板,简化了 AI 工具的开发流程。同时,EF Core 的向量搜索能力得到增强,为在 .NET 中构建检索增强生成(RAG) 应用提供了更完善的支持。这些新特性进一步降低了 .NET 开发者将 AI 能力集成到应用中的门槛。

大家好,我是码农刚子。

微软官方在 .NET 11 Preview 4 发布公告中直言:“向量搜索是原生 AI 开发的核心构件之一。”当语义搜索遇上标准化 AI 工具调用协议,.NET 从高性能框架向 AI 原生开发平台的关键一步,正式落地。

引言

2026 年 5 月 12 日,微软发布了 .NET 11 的第四个预览版。在运行时异步模型和进程 API 的大幅更新之外,有一个方向对 .NET 开发者而言意义尤为深远——ASP.NET Core 的 AI 集成和 EF Core 的向量搜索,正在将 .NET 打造成真正面向 AI 工作负载的开发平台

随着大语言模型和 RAG(检索增强生成)应用在企业场景中的迅速普及,开发者面临着两个核心挑战:

  1. 如何高效地进行语义检索? 传统的全文搜索无法理解用户的意图和上下文,而向量相似性搜索正在成为 AI 应用的基础设施。
  2. 如何让 AI 模型安全、标准化地调用现有 API? 每个 AI 应用都需要让大语言模型与外部系统交互,但各家协议五花八门。

. NET 11 Preview 4 给出的答案是:用 EF Core + SQL Server 2025 的原生向量支持解决语义检索问题,用 MCP(Model Context Protocol)Server 模板解决 AI 工具调用标准化问题

本文将从这两个方向出发,剖析 .NET 11 Preview 4 在 AI 开发方面的重大进展,并通过实际案例展示如何结合二者构建真正的 RAG 应用。

一、EF Core 向量搜索:将 RAG 核心能力直接带入 .NET 生态

1.1 什么是向量搜索?为什么它关乎 AI 开发的未来?

在一个标准的 RAG 应用中,用户提问后,系统需要在知识库中检索最相关的内容作为上下文,再由大模型生成答案。传统的检索方式依赖关键词匹配,无法理解“用户可能想知道什么”。

向量搜索的解决方案是把文本转化为嵌入(embedding)——高维数值向量,然后在向量空间中通过距离计算(如余弦相似度)找到语义相近的内容。当用户问“如何重置密码”时,向量搜索能找到文档中描述“忘记登录凭证”的内容,即便原文中没有“密码”二字。

微软官方文档对此的定义是:“SQL Server 向量数据类型允许存储嵌入,这些嵌入是意义的数值表示,可以高效地进行相似性搜索,为语义搜索和检索增强生成(RAG)等 AI 工作负载提供支持。”

1.2 EF Core 的向量进化时间线

EF Core 对向量的支持并非一蹴而就,而是经过了完整的演进:

版本 向量支持状态 说明
EF Core 9 实验性支持(需扩展包) 通过 EFCore.SqlServer.VectorSearch 扩展包实现二进制向量传输 [11†L15-L24]
EF Core 10 原生支持(自 .NET 10) 内置 SqlVector<T> 类型和 EF.Functions.VectorDistance() 函数 [8†L10-L14][18†L12-L15]
.NET 11 Preview 4 持续增强 向量搜索能力进一步成熟,配合 Preview 4 的整体 AI 生态升级 [7†L13-L14]

这意味着,在 .NET 10/11 时代启动新项目的开发者,无需安装额外扩展即可直接使用向量功能。

1.3 实际代码:从模型定义到相似性查询

第一步:定义包含向量的实体模型

在 EF Core 11 中,向量字段可以通过 SqlVector<float> 类型轻松定义:

public class Document
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    
    [Column(TypeName = "vector(1536)")]  // 1536维:OpenAI ada-002的标准维度
    public SqlVector<float> Embedding { get; set; }
}

第二步:生成并存储嵌入

嵌入的生成通过 Microsoft.Extensions.AI 库中的 IEmbeddingGenerator 抽象完成,这与微软正在推进的统一 AI 抽象层保持一致。

using Microsoft.Extensions.AI;

// IEmbeddingGenerator 提供了统一的嵌入生成抽象
IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = 
    /* 配置 OpenAI 或 Azure OpenAI 服务 */;

// 为文档内容生成嵌入
var embedding = await embeddingGenerator.GenerateVectorAsync(
    "文档的全部内容文本...");

// 存储到数据库
context.Documents.Add(new Document 
{ 
    Title = "文档标题", 
    Content = "文档内容", 
    Embedding = new SqlVector<float>(embedding) 
});
await context.SaveChangesAsync();

第三步:执行向量相似性搜索

// 为用户查询生成嵌入
var queryEmbedding = await embeddingGenerator.GenerateVectorAsync(
    "用户输入的问题");

var sqlVector = new SqlVector<float>(queryEmbedding);

// 使用 LINQ 进行相似性排序
var topDocuments = await context.Documents
    .OrderBy(d => EF.Functions.VectorDistance("cosine", d.Embedding, sqlVector))
    .Take(5)
    .ToListAsync();

VectorDistance 函数支持不同的距离度量,除了“cosine”余弦距离外,还支持“euclidean”欧氏距离和“dot”点积距离,开发者可以根据具体场景选择合适的度量方式。微软官方还介绍了更高级的检索策略:“Azure SQL DB Vector Search 示例演示了如何使用原生向量函数构建检索、混合搜索、EF Core/SqlClient 用法等,为 RAG 管道的第一阶段检索提供候选结果。”

二、MCP Server 模板:AI 原生应用开发的“最后一公里”

2.1 MCP:让 AI 模型“会用工具”的开放标准

Model Context Protocol(MCP)由 Anthropic 发起,微软已加入并共同推动其成为 AI 领域的行业标准。简单理解:MCP 是为 AI 应用设计的“USB-C 接口”——标准化了 AI 模型如何发现和使用外部工具与数据。

AI 应用要让 LLM 调用外部函数,以往开发者需要为每个大模型平台单独适配工具调用格式,而 MCP 为 AI 模型和外部服务之间提供了一个标准化的开放协议。微软官方解释:“MCP 服务器是通过 Model Context Protocol(MCP)向客户端暴露能力的服务。”

微软与 Anthropic 合作开发的官方 C# SDK 在 2026 年 3 月已发布 v1.0 稳定版本,全面支持 2025 年 11 月的 MCP 规范,成为 MCP 官方生态中的 Tier 1 级别 SDK。这意味着 .NET 开发者现在拥有一套生产就绪的一流工具包来构建 MCP 服务器和客户端。

2.2 Preview 4 的变化:MCP Server 模板正式落地

.NET 11 Preview 4 引入了一个对 AI 开发者而言极具价值的新特性——MCP Server 项目模板。通过 Microsoft.McpServer.ProjectTemplates 包安装后,开发者可以在 Visual Studio 中直接创建 MCP Server App 项目。

模板的新建向导提供了丰富的配置选项:

  • 传输类型:stdio(适用于本地 CLI 工具集成)或 HTTP(适用于远程服务调用)
  • Native AOT 支持:可将 MCP 服务器编译为自包含的原生二进制
  • 独立发布:生成不依赖 .NET 运行时的独立可执行文件

2.3 实战:三步创建第一个 MCP Server

下面我们来快速体验一个 MCP Server 的构建过程。

第一步:安装模板并创建项目

在终端执行以下命令安装 MCP Server 模板:

dotnet new install Microsoft.McpServer.ProjectTemplates

然后创建新项目:

dotnet new mcp-server -n MyCalculatorMcpServer

或者,在 Visual Studio 的“新建项目”界面中,选择 MCP Server App 模板,按向导配置即可。

第二步:实现工具(Tools)

MCP 的核心是“工具”——AI 可调用的能力单元。在生成的模板代码中,添加一个简单的计算工具:

[McpTool("calculator")]
public class CalculatorTool
{
    [McpTool("add")]
    public int Add(
        [McpToolParameter(Description = "第一个加数")] int a,
        [McpToolParameter(Description = "第二个加数")] int b) 
        => a + b;
    
    [McpTool("multiply")]
    public int Multiply(
        [McpToolParameter(Description = "被乘数")] int a,
        [McpToolParameter(Description = "乘数")] int b) 
        => a * b;
}

注解驱动的定义方式让 MCP 开发变得非常直观。AI 客户端(如 GitHub Copilot、Claude Desktop、VS Code)可以通过 MCP 协议自动发现这些工具,并在生成回答时按需调用。

第三步:构建 MCP 客户端

有了 MCP Server 之后,还需要一个客户端来消费它。微软官方提供了客户端快速入门,基本代码结构如下:

using ModelContextProtocol.Client;

// 启动 MCP 客户端连接到服务器
var transport = new StdioClientTransport(new() 
{ 
    Command = "dotnet run",
    Arguments = ["--project", "<path-to-mcp-server>"]
});
McpClient mcpClient = await McpClient.CreateAsync(transport);

// 列出所有可用工具
IList<McpClientTool> tools = await mcpClient.ListToolsAsync();

// 将 MCP 工具作为函数调用能力注入 AI 聊天客户端
IChatClient chatClient = new ChatClientBuilder(openAIClient)
    .UseFunctionInvocation()  // 启用函数调用
    .Build();

// 对话循环,AI 会按需自动调用 tools
while (true)
{
    var userMessage = Console.ReadLine();
    await foreach (var update in chatClient.GetStreamingResponseAsync(
        messages, new() { Tools = tools }))
    {
        Console.Write(update);
    }
}

2.4 MCP 的生态想象

一旦企业内部的业务 API 通过 MCP Server 暴露出来,AI 编程助手(如 GitHub Copilot)可以:

  • 实时查询企业的订单状态
  • 创建 Jira 工单
  • 查询 KPI 仪表盘数据
  • 甚至执行 CI/CD 流水线任务

正如一位 MCP 实践者所言:“MCP 正在迅速成为扩展 AI 智能体能力的基石,用 C# 构建 MCP 服务器从未像现在这样简单和易上手。”

三、强强联合:用 EF Core 向量搜索 + MCP 构建完整 RAG 应用

理解了 EF Core 的向量搜索和 MCP Server 模板之后,一个问题自然浮现——这两者如何协同工作?答案就是 RAG 应用。

设想一个企业智能问答场景:

3.1 数据准备(使用 EF Core 向量存储)

企业内部有大量产品文档、技术手册和 FAQ。首先,使用 EF Core 将文档切分、生成嵌入并存入 SQL Server 2025。

// 文档处理管道
foreach (var chunk in documentChunks)
{
    var embedding = await embeddingGenerator.GenerateVectorAsync(chunk.Content);
    dbContext.DocumentChunks.Add(new DocumentChunk
    {
        Content = chunk.Content,
        Metadata = chunk.Metadata,
        Embedding = new SqlVector<float>(embedding)
    });
}
await dbContext.SaveChangesAsync();

3.2 MCP 工具包装(让 AI 能检索文档)

将“文档检索”能力包装为 MCP 工具:

[McpTool("document_search")]
public class DocumentSearchTool
{
    private readonly AppDbContext _dbContext;
    private readonly IEmbeddingGenerator _embeddingGenerator;
    
    [McpTool("search")]
    public async Task<List<SearchResult>> SearchAsync(
        [McpToolParameter(Description = "用户的问题或查询")] string query)
    {
        var queryVector = await _embeddingGenerator.GenerateVectorAsync(query);
        var sqlVector = new SqlVector<float>(queryVector);
        
        return await _dbContext.DocumentChunks
            .OrderBy(d => EF.Functions.VectorDistance("cosine", d.Embedding, sqlVector))
            .Take(5)
            .Select(d => new SearchResult { Content = d.Content, Score = d.Similarity })
            .ToListAsync();
    }
}

3.3 AI 问答流程

当用户在 AI 助手的对话框中提问时,流程如下:

  1. AI 模型识别到需要调用 document_search 工具
  2. MCP 协议触发 .NET 后端执行向量相似性搜索
  3. 检索到的文档内容作为上下文返回给 AI
  4. 大语言模型基于检索结果生成准确、上下文相关的最终回答

整个过程对用户透明——他们只感知到“AI 能准确回答关于产品的问题”。

四、AI 生态全景:除了 Preview 4,还有哪些重要拼图?

Preview 4 的 AI 集成只是 .NET AI 战略的一个组成部分。回顾历史,微软在 .NET 生态中布局 AI 的深度远超大多数开发者所认知:

组件 说明
Microsoft.Extensions.AI 提供统一的 C# 抽象层,支持聊天模型、嵌入生成、函数调用等,已在 .NET 11 中进一步成熟
C# SDK for MCP 官方 C# 实现,已发布 v1.0 稳定版,支持 stdio 和 HTTP 传输
Semantic Kernel 轻量级 AI 编排框架,支持插件化开发和 Agent 工作流
.NET AI Templates 提供 AI 聊天 Web 应用脚手架,支持多种 AI 服务提供商
EF Core Vector Search 原生向量搜索支持,SQL Server 2025 提供 DiskANN 向量索引加速
.NET Agent Framework 支持多步骤推理和工具调用决策的新框架(预览中)

微软将 AI 能力正式纳入 .NET 核心库,使开发者能够统一调用大模型(支持 OpenAI API / 本地模型),而不再关心各厂商的 SDK 差异,并可随时切换模型。

五、总结与展望

.NET 11 Preview 4 在 AI 开发方向上的两大战役:

  1. EF Core 向量搜索:将 RAG 应用的核心基础设施——语义检索——原生接入 .NET 开发者熟悉的 ORM 生态。只需配置 vector(1536) 类型和使用 VectorDistance LINQ 函数,即可轻松构建混合搜索流水线。

  2. MCP Server 模板:让 .NET 开发者无需纠结协议细节就能为 AI 智能体提供标准化、类型安全的工具调用入口。搭配 Native AOT 发布的能力,MCP 服务器可实现极速启动和低内存占用。

二者结合起来,.NET 开发者可以用最熟悉的 C# 技术栈去驾驭 RAG、语义搜索、AI Agent 等前沿 AI 场景,而不用转向 Python 或其他生态。

正如微软官方所言:“向量数据类型允许存储嵌入,这些嵌入是意义的数值表示,可以高效地进行相似性搜索,为语义搜索和 RAG 等 AI 工作负载提供支持。”这句话准确概括了 .NET 11 AI 战略的核心:将 AI 基础设施深度融入 .NET 的原生开发体验,而非作为孤立的附加组件

Preview 4 只是开始。随着 .NET 11 正式版在 2026 年 11 月临近,我们可以期待更多的 AI 抽象、更完善的向量索引支持(如 DiskANN 近近似搜索)、以及更深度的 LLM 编排能力。

对于 .NET 开发者而言,现在是验证这些能力并规划 AI 战略的最佳时机。AI 开发狂飙的时代已经到来,而 .NET 正在成为这列快车上的关键引擎。

⚠️ 温馨提醒:预览版仅供评估和测试使用,请勿在生产环境部署。

我是刚子,一个写了六年 .NET 代码的程序员。