@N01ennn: Microsoft 悄悄发布了每个人都在尝试从零构建的 RAG 管道,它被称为 Kernel Memory,等等…
摘要
Microsoft 发布了一个名为 Kernel Memory 的归档参考实现,用于构建 RAG 管道,它摄取数据、嵌入并提供带引用的答案,但其目的是作为学习资源,而非生产软件。
查看缓存全文
缓存时间: 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部署详情请参阅部署指南,基础设施文档提供具体部署步骤。熟悉相关资源的用户可通过下方按钮快速部署:
通过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();
使用Kernel Memory OpenAPI Web服务进行数据摄入 ======================================================
以下示例展示默认文档摄入流程:
- 文本提取:自动识别文件格式并提取信息
- 文本分块:将文本分割为适合搜索与RAG提示的小片段
- 向量化:使用任意LLM嵌入生成器提取向量
- 存储:将向量保存至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
内存即服务:数据摄入管道 + 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、安全等场景开发的增强功能。
相似文章
@LearnWithBrij:别再像2022年那样构建RAG了。分块→嵌入→检索→生成 这条流水线能用……直到你尝试上线……
一个帖子解释了构建生产级RAG超越简单分块-嵌入-检索-生成所需的四个关键层次:智能查询路由、高级索引、多类型检索和持续评估。
@HowToPrompt__: 整个RAG行业即将被……mp4文件颠覆!它叫做Memvid,可以将你的整个智能体记忆打包…
Memvid是一个开源工具,将智能体记忆打包到mp4文件中,相比传统的RAG管道和向量数据库,性能显著提升。
@N01ennn: 微软将其图系统与向量RAG在8k、120k和完整百万token上下文窗口上对比,百万……
微软研究院的LazyGraphRAG在8k、120k和百万token上下文的数据本地问题上超越了向量RAG,以十分之一的成本赢下92/90/91%的胜率,现已在GitHub上开源。
请帮我理解公司操作系统,我好像漏掉了一块。是记忆吗?
一位开发者寻求关于构建可靠的AI代理与人类在生产中协作的公司操作系统的建议,重点关注长期记忆、工作流状态和代理交接。他们分享了当前的工具栈,并质疑RAG、事件溯源或自定义记忆系统是否是缺失的部分。
@h100envy: 这篇论文彻底改变了我对搭建 RAG 管线的想法:定义节点 -> 为每个节点列出候选…
一篇论文介绍了优化 RAG 管线的 5 步蓝图,通过在用户自己的数据集上为每个节点贪心地选择可互换模块,强调表现最佳的管线是数据集特定的,而非由基准驱动。