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 README
總結
以上是生活随笔為你收集整理的Kernel Memory 入门系列:快速开始的全部內容,希望文章能夠幫你解決所遇到的問題。