通过 Kernel Memory 初步体验 Retrieval Augmented Generation
学习材料: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 的过程中就完成了 embedding 的生成并保存至向量数据库。
从源码看,生成 embedding 是由 OpenAITextEmbeddingGenerator 调用 Semantic Kernel 中的 OpenAITextEmbeddingGenerationService 完成的。
接下来,基于内存向量数据库中的 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 的效果果然明显。
分类:
AI
标签:
AI
, semantic-kernel
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
2017-03-03 DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie
2016-03-03 超出TCP连接端口数限制(MaxUserPort)引起的服务器问题
2008-03-03 热烈欢迎两位园友加盟
2007-03-03 2006年100首好歌
2006-03-03 [公告]Google个性化主页可以正常阅读博客园的RSS了
2005-03-03 [新功能]定制页面的Html Meta
2004-03-03 请推荐好的工作流产品