文章摘要:本文描述了 .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(检索增强生成)应用在企业场景中的迅速普及,开发者面临着两个核心挑战:
- 如何高效地进行语义检索? 传统的全文搜索无法理解用户的意图和上下文,而向量相似性搜索正在成为 AI 应用的基础设施。
- 如何让 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 助手的对话框中提问时,流程如下:
- AI 模型识别到需要调用
document_search工具 - MCP 协议触发 .NET 后端执行向量相似性搜索
- 检索到的文档内容作为上下文返回给 AI
- 大语言模型基于检索结果生成准确、上下文相关的最终回答
整个过程对用户透明——他们只感知到“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 开发方向上的两大战役:
EF Core 向量搜索:将 RAG 应用的核心基础设施——语义检索——原生接入 .NET 开发者熟悉的 ORM 生态。只需配置
vector(1536)类型和使用VectorDistanceLINQ 函数,即可轻松构建混合搜索流水线。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 代码的程序员。