
在一个标准的 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内置SqlVectorT类型和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 中向量字段可以通过SqlVectorfloat类型轻松定义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 SqlVectorfloat Embedding { get; set; } }第二步生成并存储嵌入嵌入的生成通过Microsoft.Extensions.AI库中的IEmbeddingGenerator抽象完成这与微软正在推进的统一 AI 抽象层保持一致。using Microsoft.Extensions.AI; // IEmbeddingGenerator 提供了统一的嵌入生成抽象 IEmbeddingGeneratorstring, Embeddingfloat embeddingGenerator /* 配置 OpenAI 或 Azure OpenAI 服务 */; // 为文档内容生成嵌入 var embedding await embeddingGenerator.GenerateVectorAsync( 文档的全部内容文本...); // 存储到数据库 context.Documents.Add(new Document { Title 文档标题, Content 文档内容, Embedding new SqlVectorfloat(embedding) }); await context.SaveChangesAsync();第三步执行向量相似性搜索// 为用户查询生成嵌入 var queryEmbedding await embeddingGenerator.GenerateVectorAsync( 用户输入的问题); var sqlVector new SqlVectorfloat(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 ProtocolMCP由 Anthropic 发起微软已加入并共同推动其成为 AI 领域的行业标准。简单理解MCP 是为 AI 应用设计的“USB-C 接口”——标准化了 AI 模型如何发现和使用外部工具与数据。AI 应用要让 LLM 调用外部函数以往开发者需要为每个大模型平台单独适配工具调用格式而 MCP 为 AI 模型和外部服务之间提供了一个标准化的开放协议。微软官方解释“MCP 服务器是通过 Model Context ProtocolMCP向客户端暴露能力的服务。”微软与 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模板按向导配置即可。第二步实现工具ToolsMCP 的核心是“工具”——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); // 列出所有可用工具 IListMcpClientTool 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 SqlVectorfloat(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 TaskListSearchResult SearchAsync( [McpToolParameter(Description 用户的问题或查询)] string query) { var queryVector await _embeddingGenerator.GenerateVectorAsync(query); var sqlVector new SqlVectorfloat(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 智能体