首页 > 其他分享 >Semantic Kernel 学习笔记:通过 Kernel Memory 初步体验 Retrieval Augmented Generation

Semantic Kernel 学习笔记:通过 Kernel Memory 初步体验 Retrieval Augmented Generation

时间:2024-03-03 10:34:09浏览次数:29  
标签:info Kernel Semantic Handlers Generation 博客园 Handler KernelMemory Microsoft

学习材料:Quick intro to Kernel Memory: install, upload a doc, ask a question

创建控制台项目

dotnet new console
dotnet add package Microsoft.KernelMemory.Core

创建 IKernelMemory 实例

var memory = new KernelMemoryBuilder()
    .WithOpenAIDefaults(OPENAI_API_KEY)
    .Build<MemoryServerless>();

注:默认大模型用的是 gpt-3.5-turbo-16k

运行控制台程序,通过日志可以看到加载了哪些 handler

info: Microsoft.KernelMemory.Handlers.TextExtractionHandler[0]
      Handler 'extract' ready
info: Microsoft.KernelMemory.Handlers.TextPartitioningHandler[0]
      Handler 'partition' ready
info: Microsoft.KernelMemory.Handlers.SummarizationHandler[0]
      Handler 'summarize' ready
info: Microsoft.KernelMemory.Handlers.GenerateEmbeddingsHandler[0]
      Handler 'gen_embeddings' ready, 1 embedding generators
info: Microsoft.KernelMemory.Handlers.SaveRecordsHandler[0]
      Handler save_records ready, 1 vector storages
info: Microsoft.KernelMemory.Handlers.DeleteDocumentHandler[0]
      Handler 'private_delete_document' ready
info: Microsoft.KernelMemory.Handlers.DeleteIndexHandler[0]
      Handler 'private_delete_index' ready
info: Microsoft.KernelMemory.Handlers.DeleteGeneratedFilesHandler[0]
      Handler 'delete_generated_files' ready

导入 PDF 文件

PDF 文件是 博客园鼠标垫.pdf,内容来自这篇博文

导入 PDF 文件的代码

await memory.ImportDocumentAsync("博客园鼠标垫.pdf", documentId: "doc001");

对应上面这行代码的控制台日志输出

info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      Queueing upload of 1 files for further processing [request doc001]
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      File uploaded: 博客园鼠标垫.pdf, 174013 bytes
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      Handler 'extract' processed pipeline 'default/doc001' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      Handler 'partition' processed pipeline 'default/doc001' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      Handler 'gen_embeddings' processed pipeline 'default/doc001' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      Handler 'save_records' processed pipeline 'default/doc001' successfully
info: Microsoft.KernelMemory.Pipeline.BaseOrchestrator[0]
      Pipeline 'default/doc001' complete

从日志看,在 import document 的过程中就完成了 embeddings 的生成并保存至向量数据库。

接下来,基于内存向量数据库中的 embeddings 数据,向 gpt-3.5-turbo-16k 模型提问,Kernel Memory 会自动根据提示词检索对应的 embeddings 然后一起发给大模型,这就是 RAG(Retrieval Augmented Generation)

var question = "博客园鼠标垫在哪买";
var answer = await memory.AskAsync(question);
Console.WriteLine($"Question: {question}\n\nAnswer: {answer.Result}");

运行程序,看看 AI 的回答:

Question: 博客园鼠标垫在哪买

Answer: 博客园鼠标垫可以在淘宝上购买。购买链接为https://item.taobao.com/item.htm?id=761724714914。另外,如果不想在淘宝上购买,也可以通过博客园的企业微信购买。

如果不使用 embedding,ChatGPT 的回答一看就是编出来的

博客园鼠标垫可以在博客园的官方网站上购买,也可以在其他在线购物平台或者实体店中找到。你可以在博客园网站上搜索他们的商店或者联系客服询问购买渠道

RAG 的效果果然明显。

标签:info,Kernel,Semantic,Handlers,Generation,博客园,Handler,KernelMemory,Microsoft
From: https://www.cnblogs.com/dudu/p/18037412

相关文章