Kernel Memory 入门系列:快速开始
Kernel Memory 入门:Quick Start
了解了用户问答和文档预处理的流程之后,我们就可以直接开始使用Kernel Memory了。
1. 安装
项目中只需要通过NuGet安装Microsoft.KernelMemory.Core包即可。
dotnet add package Microsoft.KernelMemory.Core
2. 构建
Kernel Memory的构建过程非常简单,只需要调用KernelMemoryBuilder的Build方法即可。
var memory = new KernelMemoryBuilder()
.WithOpenAIDefaults(Env.Var("OPENAI_API_KEY"))
.Build<MemoryServerless>();
其中默认需要配置LLM和Embedding服务,如果使用OpenAI的服务,可以只需要通过WithOpenAIDefaults方法传入OpenAI的API Key即可。
默认使用的是gpt-3.5-turbo-16k作为文本生成模型,使用text-embedding-ada-002作为Embedding模型。
如果想要自定义其他的模型的话,可以使用以下方式:
var memory = new KernelMemoryBuilder()
.WithOpenAITextGeneration(new OpenAIConfig()
{
APIKey = Env.Var("OPENAI_APIKEY"),
TextModel = "gpt-3.5-turbo"
})
.WithOpenAITextEmbeddingGeneration(new OpenAIConfig()
{
APIKey = Env.Var("OPENAI_APIKEY"),
EmbeddingModel = "text-embedding-ada-002"
})
.Build<MemoryServerless>();
如果是使用的Azure OpenAI的话,通过以下方式配置:
var memory = new KernelMemoryBuilder()
.WithAzureOpenAITextGeneration(new AzureOpenAIConfig(){
APIKey = Env.Var("AZURE_OPENAI_API_KEY"),
Auth = AzureOpenAIConfig.AuthTypes.APIKey,
Endpoint = Env.Var("AZURE_OPENAI_ENDPOINT"),APIType = AzureOpenAIConfig.APITypes.ChatCompletion,
Deployment = "gpt-35-turbo-16k"
})
.WithAzureOpenAITextEmbeddingGeneration(new AzureOpenAIConfig()
{
APIKey = Env.Var("AZURE_OPENAI_API_KEY"),
Auth = AzureOpenAIConfig.AuthTypes.APIKey,
Endpoint = Env.Var("AZURE_OPENAI_ENDPOINT"),
APIType = AzureOpenAIConfig.APITypes.EmbeddingGeneration,
Deployment = "text-embedding-ada-002"
})
.Build<MemoryServerless>();
这里忽略了文件存储、消息队列、向量数据库的配置,默认会使用内存的方式进行存储。
3. 内容导入
Kernel Memory提供了三种内容的导入的方式,第一种就是文件导入,最简单的方法就是直接指定文件的路径,然后调用ImportDocumentAsync方法即可。
await memory.ImportDocumentAsync("./sample-SK-Readme.pdf");
如果不是本地文件的话,也可以使用文件流的方式进行导入。
var fileStream = File.OpenRead("./sample-SK-Readme.pdf");
await memory.ImportDocumentAsync(fileStream, "sample-SK-Readme.pdf");
如果想一次性导入多个文档的话,可以使用Document的方式进行导入。
var document = new Document();
document.AddFile("./sample-SK-Readme.pdf");
await memory.ImportDocumentAsync(document);
Document本身可以添加多个文件,也可以添加文件流。另外Document本身也可以添加筛选的标签。
除了文件的导入,还可以直接导入文本。
var text = """
some content
""";
await memory.ImportTextAsync(text);
还有一种就是直接导入URL,这种方式会自动从URL中获取内容。
var url = "https://raw.githubusercontent.com/microsoft/kernel-memory/main/README.md";
await memory.ImportWebPageAsync(url);
4. 问答和查询
文档导入完成之后,就可以进行问答或者查询了。
问答的话,只需要调用AskAsync方法即可。
var question = "What's Kernel Memory?";
var answer = await memory.AskAsync(question);
其中 answer 包含了答案的内容,以及相关文档以及相关度。
例如使用以下方式获取答案的内容:
Console.WriteLine(answer.Result + "\n");
foreach (var x in answer.RelevantSources)
{
Console.WriteLine($" * {x.SourceName} -- {x.Partitions.First().LastUpdate:D}");
}
/* OUTPUT */
/*
Kernel Memory is an open-source service and plugin specialized in the efficient indexing of datasets through custom continuous data hybrid pipelines. It enables natural language querying for obtaining answers from the indexed data, complete with citations and links to the original sources. Kernel Memory enhances data-driven features in applications built for popular AI platforms. It can be used as a library or as a Docker container.
* content.url -- 2023年12月19日
* sample-SK-Readme.pdf -- 2023年12月19日
*/
如果只想查询有哪些相关文档的话,可以使用SearchAsync 方法
var question = "What's Kernel Memory?";
var results = await memory.SearchAsync(question);
同样的,从Results中可以获取到相关的文档。
foreach (var x in results.Results)
{
Console.WriteLine($" * {x.SourceName} -- {x.Partitions.First().LastUpdate:D}");
}
/* OUTPUT */
/*
* content.url -- 2023年12月19日
* sample-SK-Readme.pdf -- 2023年12月19日
*/
参考
Kernel Memory 入门系列:快速开始的更多相关文章
- YoyoGo微服务框架入门系列-快速编写WEB API
前言 YoyoGo是一个使用Golang编写的一个简单.轻量.快速.基于依赖注入的微服务框架,目前依然在研发阶段,欢迎Star以及一起参与到框架的研发 GitHub地址:https://github. ...
- Semantic Kernel 入门系列:🥑Memory内存
了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...
- 快速入门系列--WebAPI--03框架你值得拥有
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- WPF快速入门系列(8)——MVVM快速入门
一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...
- 快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...
- 快速入门系列--WebAPI--04在老版本MVC4下的调整
WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了.在之前的介绍中,基本上都基于.NET 4.5之后版本,其System.N ...
- 快速入门系列--MVC--01概述
虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...
- 快速入门系列--MVC--02路由
现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...
- 快速入门系列--MVC--07与HTML5移动开发的结合
现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...
随机推荐
- 以程序员为视角,关于商品详情API接口的说明
商品详情API接口是现代电商平台中非常重要的一部分,它提供了获取淘宝商品详细信息的能力.作为一个程序员,了解如何调用这个API接口是非常关键的. 首先,我们需要明确的是,API接口是应用程序与服务 ...
- 【krpano】KRPano打开黑屏: FATAL ERROR
在KRPano开发过程中,初学者打开项目经常遇到如下的问题: FATAL ERROR:tour.xml – loading failed! (0) 或者是: ERROR:Local usage wit ...
- 利用别名简化进入docker容器数据库的操作
之前研究docker和数据库的交互,越发对docker这个东西喜爱了.因为平常偶尔会用到各类数据库测试环境验证一些想法,需要进一步简化进入到这些环境的步骤. 比如我现在有三套docker容器数据库测试 ...
- numpy 索引,切片 ,转置,变值,多个数组的拼接
- Solution Set -「ARC 116」(in progress)
「ARC 116A」Odd vs Even Link. 看 \(n\) 有多少 \(2\) 因子. // Problem: A - Odd vs Even // Contest: AtCoder - ...
- 点云配准算法-旋转矩阵估计-Kabsch-Umeyama algorithm
Kabsch-Umeyama algorithm 参考文献: https://www.wikiwand.com/en/Kabsch_algorithm 面向点云配准,最小化两点集均方根误差(RMSD, ...
- 【v2v迁移】Xen2kvm 迁移-Windows篇
迁移环境: 源平台:华为FusionComputeV100R006C10SPC101 目标平台:基于KVM虚拟化的云平台,本文以原生的libvirt为例 虚拟机:Windows server 2012 ...
- ES6和node模块化
node模块化: 1.输出:exports.a=12; 或者module.exports={ a:12, b:5 } 2.引入:require('./a.js'); 3.引用自定义模块 放到node_ ...
- 语雀崩了,免费送VIP6个月,赶紧薅!!
一.前言 在一个无聊的周一,下午浑浑噩噩的时候,一条公众号信息引起我的关注. 什么东西?语雀这种量级的产品也能崩? 看了一下还真是官方公众号发的!! 心里不由得出现,完蛋整个团队要打包遣散了. 其实小 ...
- GameFramework摘录 - 2.访问器模式(Version、Logger)
访问器模式 Version.Logger等基础模块,功能相对固定但拥有几套不同的行为(如开发版本和正式版本不同),采用访问器模式,便于调整功能或复用 public static class Versi ...