如何使用Microsoft.KernelMemory来快速地构建和管理你的数据索引 - anech

如何使用Microsoft.KernelMemory来快速地构建和管理你的数据索引 - anech

💡 原文中文,约3000字,阅读约需7分钟。
📝

内容提要

Microsoft Kernel Memory 是微软开源的数据索引与查询服务,利用嵌入和 LLM 支持自然语言查询并引用来源,可作为 Semantic Kernel、Copilot 和 ChatGPT 插件。它支持自定义管道、多种向量存储与队列后端,通过 NuGet 安装后可导入文档、添加标签、删除文档并用 AskAsync 查询。

🔎

延伸解读

灵活的后端配置

Microsoft.KernelMemory 允许开发者自由组合向量存储、内容存储和异步队列等后端。例如,可以同时使用 Qdrant 作为向量存储、本地文件系统作为内容存储、RabbitMQ 作为异步摄取队列,以及 OpenAI 作为嵌入生成器。这种模块化设计使得系统能够适应不同的基础设施和性能需求,而无需绑定到特定供应商。

标签过滤提升查询精度

在导入文档时,可以为文档添加多个标签,如用户、日期、集合等。查询时,通过 MemoryFilter 指定标签条件,能够将自然语言问题的答案限定在特定子集内。例如,询问会议参与人数时,可以过滤出特定用户和日期的文档,从而获得更精确的答案,并避免无关信息的干扰。

自定义管道扩展处理逻辑

除了使用默认的文档摄取管道,KernelMemory 还支持通过实现自定义处理器(handler)来扩展每个步骤的处理逻辑。开发者可以创建自己的处理类,并将其添加到 orchestrator 中,从而在数据索引过程中插入特定的业务逻辑,满足个性化需求。

❓

Q&A

Microsoft.KernelMemory 是什么?它有什么主要功能?

Microsoft.KernelMemory 是一个开源的服务和插件,专门用于通过自定义的连续数据混合管道对数据集进行高效索引。它利用先进的嵌入和 LLM,支持使用自然语言查询索引数据,并提供引用和链接到原始来源。它还可以作为 Semantic Kernel、Microsoft Copilot 和 ChatGPT 的插件,与流行的 AI 平台无缝集成。

如何使用 Microsoft.KernelMemory 创建和配置一个实例?

首先安装 NuGet 包 Microsoft.KernelMemory.Core,然后创建一个 KernelMemoryBuilder 对象,并配置后端、连接器和插件。例如:var memory = new KernelMemoryBuilder().WithQdrantVectorStore(…).WithSimpleFileStorage(…).WithRabbitMQPipeline(…).WithOpenAIDefaults(Env.Var("OPENAI_API_KEY")).Build(); 也可以扩展接口来自定义。

如何向 Microsoft.KernelMemory 导入文档并添加标签?

使用 ImportDocumentAsync 方法导入文本文件,并可以添加标签。例如:await memory.ImportDocumentAsync("meeting-transcript.docx", tags: new() { { "user", "Blake" }, { "date", "2023-11-08" } }); 也可以导入多个文件并添加多个标签,如:await memory.ImportDocumentAsync(new Document("file001").AddFile("business-plan.docx").AddFile("project-timeline.pdf").AddTag("user", "Blake").AddTag("collection", "business").AddTag("collection", "plans").AddTag("fiscalYear", "2023"));

如何从 Microsoft.KernelMemory 中删除已导入的文档?

可以使用 DeleteDocumentAsync 方法删除文档。例如:await memory.DeleteDocumentAsync("file001");

如何使用自然语言查询 Microsoft.KernelMemory 中的索引数据?

使用 AskAsync 方法,提供问题和可选的过滤器。例如:var answer = await memory.AskAsync("How many people attended the meeting?", filter: new MemoryFilter().ByTag("user", "Blake").ByTag("date", "2023-11-08")); 返回的 MemoryAnswer 对象包含答案和来源信息。

Microsoft.KernelMemory 支持哪些后端和模式?

Microsoft.KernelMemory 支持多种后端,包括向量存储(如 Qdrant)、内容存储(如本地文件系统)、异步摄取队列(如 RabbitMQ)以及 LLM 嵌入生成器(如 OpenAI)。它还支持自定义管道和多种模式,具体可参考 GitHub 文档。

🏷️

标签

➡️

继续阅读