@N01ennn: Microsoft 悄悄发布了每个人都在尝试从零构建的 RAG 管道,它被称为 Kernel Memory,等等…

X AI KOLs Timeline 工具

摘要

Microsoft 发布了一个名为 Kernel Memory 的归档参考实现,用于构建 RAG 管道,它摄取数据、嵌入并提供带引用的答案,但其目的是作为学习资源,而非生产软件。

Microsoft 悄悄发布了每个人都在尝试从零构建的 RAG 管道 它被称为 Kernel Memory,能将任何文件堆转化为一个带引用回答的 AI 记忆体。 将你的数据投入,Microsoft 的管道会完成其余工作: > 摄取 PDF、Word、PPT、Excel、网页,甚至图像 > 提取文本,分块,嵌入向量 > 存储带元数据的向量,并将原始文件保存在 Blob 存储中 > 提问,它会通过语义加混合搜索拉取相关块 然后,它返回有依据的答案,并附上精确来源链接和完整的 token 使用情况。 并且它可以接入你现有的任何系统: > 支持 Azure OpenAI、OpenAI、Ollama 或 Anthropic 作为模型 > 支持 Qdrant、pgvector、Redis 或 Azure AI Search 作为向量存储 > 每个步骤都是可替换的处理器,因此你可以用自己的组件替换任何部分 注意:Microsoft 于 2026 年 6 月归档了该仓库,并将其作为参考蓝图发布,而非生产软件。但作为理解记忆和 RAG 实际构建方式的地图,没有比这更清晰的了。 一条命令即可运行: docker run kernelmemory/service https://github.com/microsoft/kernel-memory… 收藏此页面。Microsoft 已经绘制了蓝图,你只需在此基础上构建。
查看原文
查看缓存全文

缓存时间: 2026/08/21 15:13

微软悄无声息地发布了大家都在试图从头构建的RAG管道,它被称为Kernel Memory,能将任何文件堆转化为可基于引用作答的AI记忆库。只需放入数据,微软的管道就能完成后续工作:

摄入PDF、Word、PPT、Excel、网页甚至图像
提取文本、分块、向量化
存储向量并保留元数据,将原始文件保存在Blob存储中
提问时通过语义与混合检索拉取相关片段
返回基于上下文的答案,附带精确来源链接及完整的令牌使用量报告
该系统可与现有技术栈无缝集成:
使用Azure OpenAI、OpenAI、Ollama或Anthropic作为模型后端
支持Qdrant、pgvector、Redis或Azure AI Search作为向量存储
每个环节均可替换处理器,允许自定义组件替换

重要提示:微软已于2026年6月将该仓库归档,并将其作为参考蓝图而非生产方案发布。但作为理解记忆系统与RAG实际构建方式的指南,其清晰度无出其右。
一键运行命令:
docker run kernelmemory/service
GitHub仓库:https://github.com/microsoft/kernel-memory
收藏此页。微软已绘制蓝图,你只需在其基础上构建。


microsoft/kernel-memory

来源:https://github.com/microsoft/kernel-memory

这是一个已归档的研究项目。代码仅作学习资源,非生产软件。使用需谨慎,风险自担,不提供支持。

Kernel Memory =============
许可证:MIT(https://github.com/microsoft/kernel-memory/blob/main/LICENSE)

本仓库展示了在特定AI与LLM应用场景下的内存管理最佳实践与参考实现。请注意:提供的代码仅作演示用途,并非微软官方支持的产品。

Kernel Memory(KM)是一个多模态AI服务,专注于通过定制化持续数据混合管道高效索引数据集,支持检索增强生成、合成记忆、提示工程及自定义语义记忆处理。KM可作为Web服务、Docker容器、ChatGPT/Copilot/Semantic Kernel插件及.NET嵌入式库使用。

系统利用先进的嵌入技术与大语言模型,支持通过自然语言查询索引数据,返回带有引用及原始来源链接的答案。Kernel Memory设计为可无缝集成至Semantic Kernel、Microsoft Copilot及ChatGPT的插件系统。

Kernel Memory Azure服务 ==============================
Kernel Memory支持多种部署配置,包括作为Azure服务部署。了解Azure部署详情请参阅部署指南,基础设施文档提供具体部署步骤。熟悉相关资源的用户可通过下方按钮快速部署:

部署到Azure

相关链接:通过Docker运行Kernel Memory 及 Azure服务无服务器示例

通过Aspire运行Kernel Memory

Kernel Memory可通过.NET Aspire轻松运行并集成到其他项目中。示例:

var builder = DistributedApplication.CreateBuilder();  
builder.AddContainer("kernel-memory", "kernelmemory/service")  
.WithEnvironment("KernelMemory__TextGeneratorType", "OpenAI")  
.WithEnvironment("KernelMemory__DataIngestion__EmbeddingGeneratorTypes__0", "OpenAI")  
.WithEnvironment("KernelMemory__Retrieval__EmbeddingGeneratorType", "OpenAI")  
.WithEnvironment("KernelMemory__Services__OpenAI__APIKey", "...你的OpenAI密钥...");  
builder.Build().Run();  

通过.NET Aspire运行

使用Kernel Memory OpenAPI Web服务进行数据摄入 ======================================================
以下示例展示默认文档摄入流程:

  1. 文本提取:自动识别文件格式并提取信息
  2. 文本分块:将文本分割为适合搜索与RAG提示的小片段
  3. 向量化:使用任意LLM嵌入生成器提取向量
  4. 存储:将向量保存至Azure AI Search、Qdrant等向量数据库

示例展示了如何保护隐私信息(指定文档所有者)及如何使用标签组织数据以实现搜索与分面导航。

C#

#r "nuget: Microsoft.KernelMemory.WebClient"  

var memory = new MemoryWebClient("http://127.0.0.1:9001"); // <== KM Web服务URL  

// 导入文件  
await memory.ImportDocumentAsync("会议记录.docx");  

// 导入文件并指定文档ID与标签  
await memory.ImportDocumentAsync("商业计划.docx",  
new Document("doc01")  
.AddTag("user", "[email protected]")  
.AddTag("collection", "商业")  
.AddTag("collection", "计划")  
.AddTag("fiscalYear", "2025"));  

Python

import requests  

# 待导入文件  
files = {  
"file1": ("商业计划.docx", open("商业计划.docx", "rb")),  
}  

# 应用标签(用于查询过滤)  
data = {  
"documentId": "doc01",  
"tags": [  
"user:[email protected]",  
"collection:商业",  
"collection:计划",  
"fiscalYear:2025"  
]  
}  

response = requests.post("http://127.0.0.1:9001/upload", files=files, data=data)  

使用嵌入式无服务器.NET组件直接摄入数据 ==============================================================

var memory = new KernelMemoryBuilder()  
.WithOpenAIDefaults(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))  
.Build();  

// 导入文件  
await memory.ImportDocumentAsync("会议记录.docx");  

// 导入文件并指定文档ID与标签  
await memory.ImportDocumentAsync("商业计划.docx",  
new Document("doc01")  
.AddTag("collection", "商业")  
.AddTag("collection", "计划")  
.AddTag("fiscalYear", "2025"));  

记忆检索与RAG ========================
提问、运行RAG提示及按用户/条件过滤十分简便,答案包含引用及验证所需信息,并指向生成响应的原始文档。

C#

提问:

可针对整个记忆库或通过过滤器指定的子集提问(例如实现安全过滤)。

var answer1 = await memory.AskAsync("会议出席人数?");  

var answer2 = await memory.AskAsync("项目时间线?",  
filter: MemoryFilters.ByTag("user", "[email protected]"));  

令牌使用报告:

foreach (var report in tokenUsage)  
{  
Console.WriteLine($"{report.ServiceType}: {report.ModelName} ({report.ModelType})");  
Console.WriteLine($"- 输入 : {report.ServiceTokensIn}");  
Console.WriteLine($"- 输出: {report.ServiceTokensOut}");  
}  

输出示例:
Azure OpenAI: gpt-4o (TextGeneration)

  • 输入 : 24356 tokens
  • 输出: 103 tokens

数据血缘与来源引用:

await memory.ImportFileAsync("NASA新闻.pdf");  
var answer = await memory.AskAsync("NASA关于猎户座飞船的最新消息?");  
Console.WriteLine(answer.Result + "\n");  
foreach (var x in answer.RelevantSources)  
{  
Console.WriteLine($" * {x.SourceName} -- {x.Partitions.First().LastUpdate:D}");  
}  

输出示例:
是的,NASA发布了关于猎户座飞船的消息。NASA邀请媒体参观新型测试版[…]

  • NASA新闻.pdf – 2023年8月1日

Python

import requests  
import json  

data = {  
"question": "项目时间线?",  
"filters": [{"user": ["[email protected]"]}]  
}  

response = requests.post(  
"http://127.0.0.1:9001/ask",  
headers={"Content-Type": "application/json"},  
data=json.dumps(data),  
).json()  

print(response["text"])  

OpenAPI

curl http://127.0.0.1:9001/ask -d'{"query":"NASA关于猎户座飞船的消息?"}' -H 'Content-Type: application/json'  

完整示例请参阅:包含摄入、搜索与RAG查询的完整示例、使用无服务器组件的示例

Kernel Memory Docker镜像 ==========================
如需快速测试服务,可使用以下命令启动Kernel Memory服务(需OpenAI密钥):

docker run -e OPENAI_API_KEY="..." -it --rm -p 9001:9001 kernelmemory/service  

若需自定义Azure OpenAI、Azure文档智能等服务,应创建appsettings.Development.json文件覆盖默认配置,或使用配置向导:

cd service/Service  
dotnet run setup  

然后启动配置好的Docker镜像:
Windows:

docker run --volume .\appsettings.Development.json:/app/appsettings.Production.json -it --rm -p 9001:9001 kernelmemory/service  

Linux/macOS:

docker run --volume ./appsettings.Development.json:/app/appsettings.Production.json -it --rm -p 9001:9001 kernelmemory/service  

相关链接:配置指南、部署到Azure

内存即服务:数据摄入管道 + RAG Web服务 ===============================================================
根据应用场景,可选择通过异步可扩展服务远程运行或在本地进程内执行。

若仅处理小型文件、使用.NET且允许导入时阻塞进程,可使用MemoryServerless。但若存在以下场景:

  • 应用使用TypeScript、Java、Rust等语言编写
  • 仅需Web服务处理数据导入与查询
  • 需导入大文档(处理时间较长)且需保持界面响应
  • 需要独立运行的导入流程(支持故障重试)
  • 需跨语言定义混合管道(如Python、TypeScript等)

则适合部署内存服务。可将Kernel Memory部署为后端服务,使用默认摄入逻辑或自定义工作流(包含Python/TypeScript/Java等编写的步骤),利用异步非阻塞的内存编码流程,通过MemoryWebClient上传文档与提问。

完整服务运行指南请参阅Kernel Memory服务文档。

嵌入式内存组件(即“无服务器”)
Kernel Memory作为异步Web服务运行时能实现最佳性能与扩展性,可处理数千文档而不阻塞应用。但也可在.NET控制台/桌面应用中以同步模式嵌入MemoryServerless实例运行。每个请求立即处理,客户端需负责处理瞬时错误。

扩展 ==========
Kernel Memory依赖外部服务运行有状态管道、存储数据、处理嵌入及生成文本响应。项目包含扩展组件,支持自定义文件存储、队列、向量库及LLM配置:

  • AI:Azure OpenAI、OpenAI、ONNX、Ollama、Anthropic、Azure AI文档智能、Azure AI内容安全
  • 向量存储:Azure AI Search、PostgreSQL、SQL Server、Elasticsearch、Qdrant、Redis、MongoDB Atlas、内存存储
  • 文件存储:Azure Blob存储、AWS S3、MongoDB Atlas、本地磁盘、内存存储
  • 摄入管道:Azure队列、RabbitMQ、内存队列

自定义内存摄入管道 ===================================
文档摄入作为有状态管道运行,按预定义序列执行步骤。默认情况下,Kernel Memory通过管道提取文本、分块内容、向量化并存储数据。若需自定义管道,可修改步骤顺序、添加新步骤或通过为每个阶段提供自定义处理器替换现有组件,实现完全灵活的数据处理:

// 内存配置(如计算与存储嵌入的方式)  
var memoryBuilder = new KernelMemoryBuilder()  
.WithoutDefaultHandlers()  
.WithOpenAIDefaults(Environment.GetEnvironmentVariable("OPENAI_API_KEY"));  
var memory = memoryBuilder.Build();  

// 插入自定义.NET处理器  
memory.Orchestrator.AddHandler("步骤1");  
memory.Orchestrator.AddHandler("步骤2");  
memory.Orchestrator.AddHandler("步骤3");  

// 使用自定义处理器导入文档  
await memory.ImportDocumentAsync(  
new Document("mytest001")  
.AddFile("file1.docx")  
.AddFile("file2.pdf"),  
steps: new[] { "步骤1", "步骤2", "步骤3" });  

Kernel Memory(KM)与Semantic Kernel(SK) ===========================================
Semantic Kernel是面向C#、Python、Java的SDK,用于构建AI解决方案。SK包含封装数据库直接调用的库,支持向量搜索。SK维护三种语言版本,但支持的存储引擎(即“连接器”)列表因语言而异。

Kernel Memory(KM)是基于Semantic Kernel构建的服务,包含为RAG、安全等场景开发的增强功能。

相似文章