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

推荐订阅源

Recorded Future
Recorded Future
C
Cyber Attacks, Cyber Crime and Cyber Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
Google Online Security Blog
Google Online Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
WordPress大学
WordPress大学
博客园 - 聂微东
L
LINUX DO - 最新话题
月光博客
月光博客
小众软件
小众软件
T
Troy Hunt's Blog
A
Arctic Wolf
量子位
I
Intezer
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
NISL@THU
NISL@THU
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
有赞技术团队
有赞技术团队
N
News and Events Feed by Topic
美团技术团队
The Cloudflare Blog
P
Privacy International News Feed
S
Security Affairs
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
N
News | PayPal Newsroom
Apple Machine Learning Research
Apple Machine Learning Research
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
V
Vulnerabilities – Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
Application and Cybersecurity Blog
Application and Cybersecurity Blog
IT之家
IT之家
Hacker News: Ask HN
Hacker News: Ask HN
雷峰网
雷峰网

博客园 - Agile.Zhou

AgileAI - 一个新的 .NET AI 库 并发,并行与异步 为什么说 IO 操作异步才有意义 自定义 Visual Studio 主题 使用 Azure AI Foundry 微调模型 SK + Neo4j 实现简单问答系统 AgileConfig-1.11.0 发布:增强的权限管理 LongRunningTask-正确用法 如何正确实现一个 BackgroundService Dynamic adaptation to application sizes (DATAS) GC 策略 使用 AutoGen Studio 打造你的私有团队 在 Aspire 项目下使用 AgileConfig 使用 SK 进行向量操作 本地部署 DeepSeek Janus Pro 文生图大模型 .NET 依赖注入中的 Captive Dependency 在 Development 环境下依赖注入的行为可能有所不同 使用 SK Plugin 给 LLM 添加能力 使用 SemanticKernel 对接 Ollma 在 Github Action 管道内集成 Code Coverage Report
Kernel Memory 让 SK 记住更多内容
Agile.Zhou · 2025-01-13 · via 博客园 - Agile.Zhou

Kernel Memory (KM) 是一种多模态 AI 服务,专注于通过自定义的连续数据混合管道高效索引数据集。它支持检索增强生成(RAG)、合成记忆、提示工程以及自定义语义记忆处理。KM 支持自然语言查询,从已索引的数据中获取答案,并提供完整的引用和原始来源链接。

通过 KM 我们可以让 LLM 认识更多新的知识。比如认识新的文本内容,WORD文档,PDF, PPT,甚至是直接爬取一个网页然后进行 embedding,连爬虫都帮你写好了。

KM 看起来是专为 RAG 设计的一套框架。很多同学可能已经知道 SK 里面有 Semantic Memory (SM),它可以用来做 RAG。咋一看很容易就把 KM 当作了 SM。但其实 KM 跟 SM 并不是一回事。虽然 KM 是从 SM 发展而来的。但现在 KM 已经可以脱离 SK 独立运行。

KM 现在可以方便的集成进 .NET Backend/Console/Desktop 应用程序里面,使这些程序立马获得本地识别文档的能力。这种模式叫做Synchronous Memory API (aka “serverless”)

如果你的场景是想要搭建大规模的文档识别跟问答平台那么你可能需要把 KM 作为一个完整的服务,异步来处理这些文档与问答请求。这种模式叫做Memory as a Service - Asynchronous API

使用 KM 导入文本

使用 KM 还是需要搭配 LLM 的能力。这里还是使用本地的 Ollama 来运行 llama3.1:8b 的模型。下面让我们看看怎么使 KM 认识以下这段我刚编的关于 QIQI 动物园的文字。

Qiqi Zoo features 10 monkeys, 8 tigers, 6 elephants, 4 horses, 100 ostriches, and 99 koalas.\n\n" +
                       "Ticket Prices:\n\n" +
                       "Adults: 100 RMB\n" +
                       "Children: 50 RMB\n" +
                       "Contact: 13813818188\n" +
                       "Address: 999 Xinghu Street, Suzhou Industrial Park, Jiangsu, China.

以下代码我们指示了使用 ollama 来进行文本生成跟文本 embedding 生成。同时指定了使用一个简易的内存数据库来存储跟检索向量。然后把 Qiqi zoo 的文本内容导入进去,之后就可以问相关的问题了。

            var modelName = "llama3.1:8b";
            var ollamaEndpoint = "http://localhost:11434";
            var ollamaApiClient = new OllamaApiClient(new Uri(ollamaEndpoint), modelName);
            var ollamaModelConfig = new OllamaModelConfig() { ModelName = modelName };
            var textEmbeddingGenerator = new OllamaTextEmbeddingGenerator(ollamaApiClient, ollamaModelConfig);

            var memory = new KernelMemoryBuilder()
                .WithOllamaTextGeneration(modelName, ollamaEndpoint)
                .WithOllamaTextEmbeddingGeneration(modelName, ollamaEndpoint)
#pragma warning disable KMEXP03
                .AddIngestionMemoryDb(new SimpleVectorDb(SimpleVectorDbConfig.Volatile, textEmbeddingGenerator))
#pragma warning restore KMEXP03
                .Build<MemoryServerless>();

            var text = "Qiqi Zoo features 10 monkeys, 8 tigers, 6 elephants, 4 horses, 100 ostriches, and 99 koalas.\n\n" +
                       "Ticket Prices:\n\n" +
                       "Adults: 100 RMB\n" +
                       "Children: 50 RMB\n" +
                       "Contact: 13813818188\n" +
                       "Address: 999 Xinghu Street, Suzhou Industrial Park, Jiangsu, China.";

            await memory.ImportTextAsync(text, "doc01");

            var query = Console.ReadLine();

            while (!string.IsNullOrEmpty(query))
            {
                var answer = await memory.AskAsync(query);

                Console.WriteLine(answer);

                query = Console.ReadLine();
            }

问几个关于这段文字的问题,回答的非常精准。

导入文档

我们还可以使用 KM 来直接识别 word,ppt,pdf 等文档。你都不用自己预处理这些文档,微软简直太贴心了。

 await memory.ImportDocumentAsync(new Document("file001").AddFile("memory/QiqiZoo.docx"));

导入网页

除了本地的文本,文档这些内容,KM 还能直接从远程网页上获取内容。简直了,爬虫都不用自己写了。

await memory.ImportWebPageAsync("https://www.cnblogs.com/kklldog/p/18538651", "web001");

总结

KM 是微软从 SK Semantic memory 的开发经历与用户反馈总结孵化出来的一个框架。它提供了许多开箱即用的能力来让开发者获取 RAG 的能力。它支持导入多种多样的文档(docx,pdf,ppt,json,html...)。它可以直接集成进你的应用内,也可以作为后端服务提供更强大的处理与扩展能力。如果你想快速构建一个问答知识库,不妨试试 Kernel Memory。

参考:https://microsoft.github.io/kernel-memory/