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应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...
随机推荐
- shopee商品详情接口的应用
Shopee是东南亚和台湾地区最大的电子商务平台之一,成立于2015年,目前覆盖6个国家和地区.作为一家新兴电商平台,Shopee拥有快速增长的销售额和庞大的用户群体,为开发者提供了丰富的商业机会.其 ...
- Python+Flask接口实现简单的ToKen功能
话不多说,上代码 from flask import request, jsonify from functools import wraps class TokenRequired: @classm ...
- brpc internal
brpc 内部实现 thread model pthread 1:1atomic cache同步降低性能 fiber n:1 -> nginx 多核难以扩展, 用户不能做阻塞操作. contex ...
- 如何在Vue3中配置国际化语言i18n
1. 安装 vue-i18n npm i vue-i18n -S 2. 创建一个i8n的配置文件 如:i18nConfig.js // 配置 vue-i18n 实现国际化语言设置 import { c ...
- Solution -「BZOJ 3771」Triple
Description Link. 给你一个序列,你每次可以取 \(1\sim3\) 个数然后计算和,问你对于每一种和,方案数是多少. Solution 设一个 OGF \(A(x)=\sum_{i= ...
- git升级编译安装
一.删除旧版本git 方法一. yum remove git -y (centos环境) apt-get remove git -y (Ubuntu环境) 方法二. which git [root@p ...
- modbus转profinet网关连接UV系列流量计程序实例
modbus转profinet网关连接UV系列流量计程序实例 用户现场是西门子1200PLC通过兴达易控Modbus转Profinet网关连接流量计的配置,对流量瞬时值及报警值监控及控制程序案例 硬件 ...
- 2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1, 每一次移动,你可以选择 相邻 两个数字并将它们交换。 请你返回使 nums 中包含 k
2023-09-30:用go语言,给你一个整数数组 nums 和一个整数 k . nums 仅包含 0 和 1, 每一次移动,你可以选择 相邻 两个数字并将它们交换. 请你返回使 nums 中包含 k ...
- 爬虫系列——requests
文章目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,reques ...
- 为什么idea建议使用“+”拼接字符串
前言 各位小伙伴在字符串拼接时应该都见过下面这种提示: 内容翻译:报告StringBuffer.StringBuilder或StringJoiner的任何用法,这些用法可以用单个java.lang.S ...