惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
Scott Helme
Scott Helme
爱范儿
爱范儿
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
V
V2EX
腾讯CDC
博客园_首页
博客园 - 司徒正美
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
罗磊的独立博客
Recorded Future
Recorded Future
博客园 - 聂微东
O
OpenAI News
S
Secure Thoughts
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
Y
Y Combinator Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Project Zero
Project Zero
宝玉的分享
宝玉的分享
K
Kaspersky official blog
N
Netflix TechBlog - Medium
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Webroot Blog
Webroot Blog
云风的 BLOG
云风的 BLOG
Simon Willison's Weblog
Simon Willison's Weblog
C
Check Point Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 热门话题
美团技术团队
L
Lohrmann on Cybersecurity

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
AI 开发狂飙!.NET 11 Preview 4 原生集成向量搜索 + MCP 模板,EF Core 直接对标 RAG 应用
码农刚子 · 2026-05-16 · via 博客园_首页

大家好,我是码农刚子。

微软官方在 .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 代码的程序员。

原文链接:.NET 11 Preview 4 原生集成向量搜索 + MCP 模板,EF Core 直接对标 RAG 应用 - 码农刚子的开发笔记