当前位置: 欣欣网 > 码农

Rust 实现下一代人工智能的高性能向量数据库

2024-03-21码农

Qdrant(读作:象限)是一个为下一代人工智能应用而生的向量相似性搜索引擎和向量数据库。它不仅提供了一个生产就绪的服务,还有一套方便的API用于存储、搜索和管理向量点——附加了额外载荷的向量。Qdrant专门针对扩展筛选支持进行了优化,使其适用于各种基于神经网络或语义的匹配、分面搜索和其他应用。Qdrant用Rust语言编写,保证即使在高负载下也能快速且可靠。现在,让我们深入了解Qdrant,以及如何开始使用它。

快速入门

Python 客户端

通过 Python 客户端快速开始体验Qdrant,您可以用如下命令进行安装:

pip install qdrant-client

Python 客户端示例:

from qdrant_client import QdrantClient
# 创建内存中的Qdrant实例,用于测试、CI/CD
qdrant = QdrantClient(":memory:")
# 或者使用磁盘持久化数据,快速原型制作
client = QdrantClient(path="path/to/db")

客户端-服务器模式

推荐用于生产环境的方法是用客户端-服务器模式。您可以使用如下命令来运行容器:

docker run -p 6333:6333 qdrant/qdrant

现在,您可以用任何客户端连接到这个服务了,包括Python:

qdrant = QdrantClient("http://localhost:6333"# 用于生产的Qdrant实例连接

客户端库支持

Qdrant 提供以下官方及社区客户端库,以便简易集成到您的应用程序栈中:

  • 官方客户端:Go、Rust、JavaScript/TypeScript、Python、.NET/C#、Java

  • 社区贡献:Elixir、PHP、Ruby、Java

  • 核心特性

    筛选与载荷

    Qdrant可以将任意JSON载荷附加到向量上,这不仅可以存储数据,还可以根据这些载荷中的值进行数据筛选。载荷支持多种数据类型和查询条件,包括关键词匹配、全文筛选、数值范围、地理位置等。筛选条件可以以各种方式组合,如 should must must_not 条件,确保您可以在相似度匹配之上实现任何期望的业务逻辑。

    使用稀疏向量的混合搜索

    针对向量嵌入在特定关键词搜索上的局限性,Qdrant 引入了对稀疏向量的支持,除了常规的密集向量。稀疏向量可以被看作是BM25或TF-IDF排名的泛化。它们使您能够有效地利用基于变压器的神经网络对单个令牌进行加权。

    向量量化与磁盘存储

    Qdrant提供多种选项,使向量搜索更加经济和资源高效。内建的向量量化可以将RAM使用率降低高达97%,并动态管理搜索速度和精度之间的权衡。

    分布式部署

    Qdrant通过两种关键机制提供全面的水平扩展支持:

  • 通过分片进行大小扩展和通过复制进行吞吐量增强

  • 零停机滚动更新和无缝动态扩展集合的能力

  • 高亮功能

  • 查询规划和载荷索引 - 利用存储的载荷信息来优化查询执行策略。

  • SIMD硬件加速 - 利用现代CPU x86-x64和Neon架构提供更好的性能。

  • 异步I/O - 使用io_uring即使在网络附加存储上也能最大化磁盘吞吐量利用。

  • 预写式日志 - 即使在停电期间也能确保数据持久性并确认更新。

  • 集成项目

    以下是一些Qdrant集成示例和/或文档:

  • Cohere:使用 Cohere 嵌入和 Qdrant 构建 QA 应用的博客文章

  • DocArray:将 Qdrant 用作 DocArray 中的文档存储

  • Haystack:将 Qdrant 用作 Haystack 的文档存储以及相关博客文章

  • LangChain:使用 Qdrant 作为 LangChain 的内存后端

  • LlamaIndex:将 Qdrant 用作 LlamaIndex 的向量存储

  • OpenAI - ChatGPT 检索插件:使用 Qdrant 作为 ChatGPT 的内存后端

  • Microsoft Semantic Kernel:将 Qdrant 用作 Semantic Kernel 的持久内存

  • 完整文档与实例

    为了深入理解和应用Qdrant,您可以参考以下资源:

  • 快速开始指南 [1]

  • 带有 SentenceBERT 和 Qdrant 的 End to End Colab 笔记本演示 [2]

  • 详细文档 [3]

  • 步骤教程创建您的第一个神经网络项目与Qdrant [4]

  • 实际应用案例

  • 发现语义文本搜索 🔍 [5] :超越基于关键词的搜索,找到短文本中有意义的联系。只需几分钟就可以使用预训练的神经网络部署神经搜索体验文本搜索的未来。

  • 探索相似图像搜索 - 食品发现 🍕 [6] :当谈到食物时,发现远不止文本搜索。人们常常基于外观而不是描述和成分选择餐点。即使他们不知道菜名,Qdrant也可以帮助用户通过视觉搜索找到他们的下一顿美餐。

  • 精通极端分类 - 电子商务产品分类 📺 [7] :进入极端分类的前沿领域,这是一个处理具有数百万标签的多类别和多标签问题的新兴机器学习领域。体验预训练变换模型和Qdrant如何革新电子商务产品分类。

  • API接口

  • REST API :您可以通过 在线OpenAPI 3.0文档 [8] 访问,OpenAPI方便地为几乎任何框架或编程语言生成客户端。

  • gRPC接口 :Qdrant同样提供了gRPC接口,您可以在 这里 [9] 找到相应文档。

  • 结论

    Qdrant是一个开创性的向量数据库,它为我们打开了利用强大的向量搜索功能的大门,以支持我们的AI应用。无论您是在构建推荐引擎、实施语义搜索还是探索图像识别任务,Qdrant都提供了一个强大而灵活的平台来实现您的目标。随着AI和机器学习技术的不断成熟和普及,利用Qdrant等工具,我们能够为所欲为地探索和创新。

    参考资料

    [1]

    快速开始指南: https://github.com/qdrant/qdrant/blob/main/QUICK_START.md

    [2]

    带有 SentenceBERT 和 Qdrant 的 End to End Colab 笔记本演示: https://colab.research.google.com/github/qdrant/qdrant/blob/main/examples/grpc/colab/Qdrant + sentence-transformers.ipynb

    [3]

    详细文档: https://qdrant.tech/docs/

    [4]

    步骤教程创建您的第一个神经网络项目与Qdrant: https://github.com/qdrant/qdrant/blob/main/QUICK_START.md

    [5]

    发现语义文本搜索 🔍: https://live.qdrant.tech

    [6]

    探索相似图像搜索 - 食品发现 🍕: https://live.qdrant.tech/food_discovery

    [7]

    精通极端分类 - 电子商务产品分类 📺: https://live.qdrant.tech/ecomerce_products

    [8]

    在线OpenAPI 3.0文档: https://qdrant.github.io/qdrant/redoc/index.html

    [9]

    这里: https://qdrant.github.io/qdrant/grpc/index.html

    文章精选

    「Rust