Kernel Memory 让 SK 记住更多内容
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/
Kernel Memory 让 SK 记住更多内容的更多相关文章
- Kernel Memory Layout on ARM Linux
这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...
- jquery实现更多内容效果
体验效果:http://hovertree.com/texiao/jquery/33/ 写个“更多内容的展开/收起”的js 代码如下: <!DOCTYPE html> <html&g ...
- 【PC端】jQuery+PHP实现浏览更多内容(jquery.more.js插件)
参数说明: 'amount' : '10', //每次显示记录数 'address' : 'comments.php', //请求后台的地址 'format' : 'json', //数据传输格式 ' ...
- WPF MVVM模式下实现ListView下拉显示更多内容
在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容.这样有两个好处,提高程序性能,减少网络流量.这篇博客中,将介绍如何在WPF ListView中实 ...
- jQuery+PHP实现浏览更多内容
Ajax加载的基本原理:当页面载入时,jQuery向后台请求数据,PHP通过查询数据库将最新的几条记录显示在列表页,在列表页的底部有个“查看更多”的链接,通过触发该链接,向服务端发送Ajax请求,后台 ...
- JS脚本实现CSDN免登陆免关闭广告插件自动展开“阅读更多”内容
最近在CSDN查资料,总是弹出以下弹窗,然后就自动跳转到登录页面,蛋疼! 于是重新捣腾了一下,修改了原来的脚本,最新的脚本代码如下: 温馨提示:在打开CSDN页面后立刻执行以下脚本即可免登陆免关闭广告 ...
- 更多内容 - 请关注我的 CSDN 博客
欢迎关注我的 CSDN 博客 因为粉丝多数是在 CSDN 上,所以更多内容放在了 我的 CSDN 博客: [点击跳转] 地址:https://icode.blog.csdn.net
- PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载
这个效果好,速度快,只能点击更多加载,不能滚动自动加载 一.HTML部分 <div id="more"> <div class="single_item ...
- C#学习笔记(四)——变量的更多内容
一.类型转换 1.转换的类型 2.隐式转换 bool 和string 没有隐式转换,具有隐式转换的都列在下面的表格 . 记住一个规律,就是由精度低的类型转到精度高的类型是很容易的. 3.显式转换 (1 ...
- js点击更多显示更多内容效果
我写了一个简单的分段显示插件,用法很简单:1,把你要分面显示的内容的容器元素增加一个class=showMoreNChildren,并增加一个自定义属性pagesize="8" 这 ...
随机推荐
- Ubuntu 22.04 LTS 在线/离线安装 Docker
Docker 安装方式 时间:2024-10 准备环境 root@ubuntu2204:~# hostnamectl Static hostname: ubuntu2204 Icon name: co ...
- 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现二
一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...
- 拯救php性能的神器webman-初入门
无意间发现的这个神器webman,真是秋名山上的腾源拓海! 该框架是workerman下的一个web开发的生态,我们可以先看看这里workerman的官方网站. workerman早有耳闻,知道它蛮厉 ...
- JAVA并发编程学习笔记之synchronized
监视器 java中同步是通过监视器模型来实现的,JAVA中的监视器实际是一个代码块,这段代码块同一时刻只允许被一个线程执行.线程要想执行这段代码块的唯一方式是获得监视器. 监视器有两种同步方式:互斥与 ...
- Django+SimpleUI
1.安装 pip install django-simpleui -i https://pypi.tuna.tsinghua.edu.cn/simple 2.修改配置文件 # 修改project的se ...
- Educational Codeforces Round 155 (Rated for Div
B. Chips on the Board 题解:贪心 显然我们可以把题意转化为:对于任意一个\((i,j)\),我们可以花费\(a_{i,j}\)的代价占据第\(i\)行和第\(j\)列,求占据所有 ...
- ZSTU2023校赛
篠塚真佑実的树 给定\(n\)个节点的树,其中\(m\)个节点存在传送门,当飞船经过存在传送门的节点的时候,可以选择无消耗地传送至其他存在传送门的节点,现在有\(q\)次询问,每次询问给出起点\(st ...
- 2019GPLT
2019GPLT 7-2 6翻了 从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9:但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27.其他内容 ...
- Redis中常见的延迟问题
使用复杂度高的命令 Redis提供了慢日志命令的统计功能 首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日 ...
- linux 软连接使用
转载请注明出处: 在Linux系统中,软连接(Symbolic Link)是一种特殊类型的文件链接,类似于Windows系统中的快捷方式.它允许用户通过一个文件路径访问另一个文件或目录,而不需要拥有原 ...