学习材料: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