Kernel Memory 入门:Quick Start

了解了用户问答和文档预处理的流程之后,我们就可以直接开始使用Kernel Memory了。

1. 安装

项目中只需要通过NuGet安装Microsoft.KernelMemory.Core包即可。

dotnet add package Microsoft.KernelMemory.Core

2. 构建

Kernel Memory的构建过程非常简单,只需要调用KernelMemoryBuilderBuild方法即可。

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日
*/

参考

  1. Kernel Memory README

Kernel Memory 入门系列:快速开始的更多相关文章

  1. YoyoGo微服务框架入门系列-快速编写WEB API

    前言 YoyoGo是一个使用Golang编写的一个简单.轻量.快速.基于依赖注入的微服务框架,目前依然在研发阶段,欢迎Star以及一起参与到框架的研发 GitHub地址:https://github. ...

  2. Semantic Kernel 入门系列:🥑Memory内存

    了解的运作原理之后,就可以开始使用Semantic Kernel来制作应用了. Semantic Kernel将embedding的功能封装到了Memory中,用来存储上下文信息,就好像电脑的内存一样 ...

  3. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

  4. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  5. WPF快速入门系列(8)——MVVM快速入门

    一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...

  6. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  7. 快速入门系列--WebAPI--04在老版本MVC4下的调整

    WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了.在之前的介绍中,基本上都基于.NET 4.5之后版本,其System.N ...

  8. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

  9. 快速入门系列--MVC--02路由

    现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...

  10. 快速入门系列--MVC--07与HTML5移动开发的结合

    现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...

随机推荐

  1. 青语言V1.0正式发布

    大家好,距离6月1日青语言发布第一个版本已经过去了三个月,而今我们按计划发布青语言的1.0版本. 青语言主页:https://qingyuyan.cn V1发布宣传视频:https://www.bil ...

  2. 从零开发Java入门项目--十天掌握

    ​ 原文网址:从零开发Java入门项目--十天掌握_IT利刃出鞘的博客-CSDN博客 简介 这是一个靠谱的Java入门项目实战,名字叫蚂蚁爱购.从零开发项目,视频加文档,十天就能学会开发Java项目, ...

  3. Ds100p -「数据结构百题」11~20

    11.P3203 [HNOI2010]弹飞绵羊 某天,\(Lostmonkey\) 发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏. 游戏一开始,\(Lostmonkey ...

  4. Solution Set -「CSP-S 2020」

    Problem. 1 - Junior Julian 模拟模拟模拟摸死 CTR 的母. 考场代码: #include<cstdio> namespace solveIt { void re ...

  5. 一个关于 i++ 和 ++i 的面试题打趴了所有人

    前言 都说大城市现在不好找工作,可小城市却也不好招人. 我们公司招了挺久都没招到,主管感到有些心累. 我提了点建议,是不是面试问的太深了,在这种小城市,能干活就行. 他说自己问的面试题都很浅显,如果答 ...

  6. HarmonyOS 4.0 实况窗上线!支付宝实现医疗场景智能提醒

    本文转载自支付宝体验科技,作者是蚂蚁集团客户端工程师博欢,介绍了支付宝如何基于 HarmonyOS 4.0 实况窗实现医疗场景履约智能提醒. 1.话题背景 8 月 4 日,华为在 HDC(华为 202 ...

  7. 《流畅的Python》 读书笔记 230926

    写在最前面的话 缘由 关于Python的资料市面上非常多,好的其实并不太多. 个人认为,基础的,下面的都还算可以 B站小甲鱼 黑马的视频 刘江的博客 廖雪峰的Python课程 进阶的更少,<流畅 ...

  8. C++的模板类在HotSpot VM中的应用

    模板是c++的一种特性,允许函数或者类通过泛型(generic types)的形式表现或者运行.模板可以使得函数或类在对应不同的类型(types)的时候正常工作,而无需为每一种类型分别写一份代码. 在 ...

  9. ORA-10456: cannot open standby database; media recovery session may be in progress

    SQL> alter database recover managed standby database disconnect from session;Database altered.SQL ...

  10. 关于fdisk -l

    摘取:https://blog.csdn.net/digitalkee/article/details/104226846 # fdisk -l Disk /dev/hda: 160.0 GB, 16 ...