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 记住更多内容的更多相关文章

  1. Kernel Memory Layout on ARM Linux

    这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...

  2. jquery实现更多内容效果

    体验效果:http://hovertree.com/texiao/jquery/33/ 写个“更多内容的展开/收起”的js 代码如下: <!DOCTYPE html> <html&g ...

  3. 【PC端】jQuery+PHP实现浏览更多内容(jquery.more.js插件)

    参数说明: 'amount' : '10', //每次显示记录数 'address' : 'comments.php', //请求后台的地址 'format' : 'json', //数据传输格式 ' ...

  4. WPF MVVM模式下实现ListView下拉显示更多内容

    在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容.这样有两个好处,提高程序性能,减少网络流量.这篇博客中,将介绍如何在WPF ListView中实 ...

  5. jQuery+PHP实现浏览更多内容

    Ajax加载的基本原理:当页面载入时,jQuery向后台请求数据,PHP通过查询数据库将最新的几条记录显示在列表页,在列表页的底部有个“查看更多”的链接,通过触发该链接,向服务端发送Ajax请求,后台 ...

  6. JS脚本实现CSDN免登陆免关闭广告插件自动展开“阅读更多”内容

    最近在CSDN查资料,总是弹出以下弹窗,然后就自动跳转到登录页面,蛋疼! 于是重新捣腾了一下,修改了原来的脚本,最新的脚本代码如下: 温馨提示:在打开CSDN页面后立刻执行以下脚本即可免登陆免关闭广告 ...

  7. 更多内容 - 请关注我的 CSDN 博客

    欢迎关注我的 CSDN 博客 因为粉丝多数是在 CSDN 上,所以更多内容放在了 我的 CSDN 博客: [点击跳转] 地址:https://icode.blog.csdn.net

  8. PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载

    这个效果好,速度快,只能点击更多加载,不能滚动自动加载 一.HTML部分 <div id="more"> <div class="single_item ...

  9. C#学习笔记(四)——变量的更多内容

    一.类型转换 1.转换的类型 2.隐式转换 bool 和string 没有隐式转换,具有隐式转换的都列在下面的表格 . 记住一个规律,就是由精度低的类型转到精度高的类型是很容易的. 3.显式转换 (1 ...

  10. js点击更多显示更多内容效果

    我写了一个简单的分段显示插件,用法很简单:1,把你要分面显示的内容的容器元素增加一个class=showMoreNChildren,并增加一个自定义属性pagesize="8" 这 ...

随机推荐

  1. 《使用Gin框架构建分布式应用》阅读笔记:p251-p271

    <用Gin框架构建分布式应用>学习第14天,p251-p271总结,总21页. 一.技术总结 1.Docker & Docker Compose version: "3. ...

  2. SSAS部署失败方法总结

    最近在自学SSAS,从最简单的入手,却频频遇到问题,为了以后在学习过程中能更快的进行问题的定位,所以在此将遇到的问题以及解决方案进行记录 Q1:数据源"Adventure Works DW2 ...

  3. Qt Creator快捷键记录

    Ctrl + K:代码格式化(先选中要格式化的代码) F4:在头文件和源文件之间切换 Ctrl+/:注释和取消注释 F2:在声明和实现之间切换 Ctrl+K:打开定位器(locator),搜索文件名 ...

  4. 【python】利用tqdm实现git下载时的进度条效果

    注意1:这里是在python3环境下使用的git,安装要使用 pip install Gitpython 来安装在python环境下的git 注意2:这个方法可适用于 windows 环境和 Linu ...

  5. Jmeter并发线程场景下共享变量错乱问题解决

    问题复现 问题描述 使用IF控制器获取前一个请求的后置脚本中设置的全局变量->并发线程下通过vars.get获取变量时,第一个线程和第二个线程获取的变量值一样->导致不同基础数据的请求入参 ...

  6. 使用 C# 入门深度学习:Pytorch 基础

    教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 1.2 Pytorch 基础 本文内容介绍 Pytorcn 的基础 API,主要是数组的创 ...

  7. rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”

    背景 在之前学习 rust 时,使用过一段时间 rustlings 感觉还不错,但是之前的学习只把 rustlings 的题目刷了一半,然后想再从头到尾刷一遍 rustlings 的题目. 在 rus ...

  8. axios获取上传进度报错xhr.upload.addEventListener is not a function

    错误问题 Vue:xhr.upload.addEventListener is not a function 这个问题是因为mockjs改动了axios里面XMLHttpRequest对象致使的 根据 ...

  9. 解码OutOfMemoryError:PermGen Space

    本文由 ImportNew - Peter Pan 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加 ...

  10. Personal Wiki

    What is a PersonalWiki? It's like WardsWiki, but it's yours. It can be: a free-form database a Perso ...