如何用Microsoft.Extensions.VectorData实现语义搜索?

摘要:本文介绍了Microsoft.Extensions.Vector的基本概念 和 基本使用,结合Embedding Model(如all-minilm) 和 VectorStore(如Qdrant),我们可以快速实现语义搜索,而不仅仅是关键字
大家好,我是Edison。 上周水了一篇Microsoft.Extensions.AI的介绍文章,很多读者反馈想要了解更多。很多时候,除了集成LLM实现聊天对话,还会有很多语义搜索和RAG的使用场景,那么今天就给大家介绍一下如何完成语义搜索。 Microsoft.Extensions.VectorData介绍 语义搜索正在改变应用程序查找和解释数据的方式,它专注于语义关联,而不仅仅是关键字匹配。 Microsoft.Extensions.VectorData是一组 .NET代码库,旨在管理 .NET 应用程序中基于向量的数据。这些库为与向量存储交互提供了一个统一的 C# 抽象层,使开发人员能够有效地处理嵌入并执行向量相似性查询。 更多该代码库的内容请参考:Luis 《Introducting Microsoft.Extensions.VectorData》 在接下来的demo中,我们会使用以下工具: (1) Qdrant 作为 VectorStore (2) Ollama 运行 all-minilm 模型 作为 Emedding生成器 ollama pull all-minilm Qdrant向量搜索引擎 Qdrant是一个向量相似性搜索引擎,它提供了一个生产就绪的服务,拥有便捷的 API来存储、搜索和管理带有额外负载的点(即向量)。它非常适合需要高效相似性搜索的应用程序。我们可以在 Docker 容器中运行 它,这也使它成为对开发人员友好的选择。 容器运行Qdrant: docker run -p 6333:6333 -p 6334:6334 \ -v $(pwd)/qdrant_storage:/qdrant/storage \ qdrant/qdrant 验证Qdrant运行:访问 server:6333/dashboard 开始DEMO案例 安装NuGet包: Microsoft.Extensions.AI (preview) Microsoft.Extensions.Ollama (preivew) Microsoft.Extensions.AI.OpenAI (preivew) Microsoft.Extensions.VectorData.Abstractions (preivew) Microsoft.SemanticKernel.Connectors.Qdrant (preivew) 这里我们假设做一个CloudService的语义搜索,分下面一些步骤来实现它。 Step1. 配置文件appsettings.json: { "Embedding": { "EndPoint": "http://localhost:11434", "Model": "all-minilm" }, "Qdrant": { "Host": "edt-dev-server", "Port": 6334 } } Step2.加载配置: var config = new ConfigurationBuilder() .AddJsonFile($"appsettings.json") .Build(); Step3.初始化Embedding生成器:这里我们使用的是本地的Ollama运行all-minilm模型来做。
阅读全文