🔍 深入探索:使用 Qdrant 作为 DSPy 的检索器

在现代人工智能和机器学习的世界中,数据的有效检索和管理显得尤为重要。本篇文章将带你深入了解如何利用 Qdrant 这一强大的向量数据库,来增强 DSPy 的检索能力。我们将探讨数据的加载、配置以及如何通过 Qdrant 来实现高效的检索,帮助你在海量信息中快速找到所需的内容。

🚀 初始设定

在开始之前,我们需要确保你的 Qdrant 实例正在运行。假设它的地址为 http://localhost:6333/。如果你还不熟悉 Qdrant 的设置,可以参考它的快速入门指南。接下来,我们需要安装 DSPy 库,特别是与 Qdrant 相关的模块。

在安装完成后,我们便可以设置常量变量,为后续的数据加载和检索做好准备。

COLLECTION_NAME = "DBPEDIA-DSPY"
QDRANT_URL = "http://localhost:6333"

📥 数据加载

我们将加载一个名为 dbpedia-entities-openai3-text-embedding-3-small-1536-100K 的数据集。该数据集包含了来自 DBPedia 的信息,并且这些数据的嵌入是使用 OpenAI 的 text-embedding-3-small 模型预先计算的。我们只会使用这个数据集的一个小子集,以便更快速地进行实验。

首先,我们需要安装 datasets 库来加载数据集。

接下来,我们将数据集加载到内存中。这里我们选取前 1000 条数据,并移除一些不必要的列,以便于后续处理。

from datasets import load_dataset

dataset = (
    load_dataset(
        "Qdrant/dbpedia-entities-openai3-text-embedding-3-small-1536-100K",
        streaming=True,
        split="train",
    )
    .take(1000)
    .remove_columns(["openai", "combined_text"])
)

🔗 连接 Qdrant 实例

接下来,我们需要配置一个指向 Qdrant 实例的客户端。通过以下代码,我们就可以成功建立连接。

from qdrant_client import QdrantClient

client = QdrantClient(url=QDRANT_URL)

🗄️ 创建集合

在 Qdrant 中,我们需要创建一个集合,以便将数据集加载到其中。创建集合时,我们需要配置适当的维度和距离度量。

from qdrant_client import models

client.create_collection(
    collection_name=COLLECTION_NAME,
    vectors_config=models.VectorParams(
        size=1536,
        distance=models.Distance.COSINE,
    ),
)

📤 数据索引

数据集合创建完成后,我们可以将数据集加载到 Qdrant 中。我们将使用 upload_collection 方法,该方法接受配置批量大小和并行度的参数。此处我们采用默认设置。

vectors = [entry.pop("text-embedding-3-small-1536-embedding") for entry in dataset]

client.upload_collection(collection_name=COLLECTION_NAME, vectors=vectors, payload=dataset)

数据加载完成后,我们可以在浏览器中通过 http://localhost:6333/dashboard 查看数据条目。

🧠 初始化 Qdrant 检索器和 OpenAI 向量化器

有了数据后,接下来我们需要初始化 Qdrant 检索器,并使用 OpenAIVectorizer 来处理向量化。我们需要指定在 Qdrant 中文档内容存放的字段,在本例中是 "text"

import os

os.environ["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"

from dsp.modules.sentence_vectorizer import OpenAIVectorizer

vectorizer = OpenAIVectorizer(model="text-embedding-3-small")

然后,我们实例化 Qdrant 检索器,配置所需的参数,包括 Qdrant 客户端、集合名称、向量化器和文档字段。

from dspy.retrieve.qdrant_rm import QdrantRM

qdrant_retriever = QdrantRM(
    qdrant_client=client,
    qdrant_collection_name=COLLECTION_NAME,
    vectorizer=vectorizer,
    document_field="text",
)

⚙️ 配置 DSPy 使用 Qdrant 检索器

现在,我们已经成功创建了 qdrant_retriever,接下来就可以配置 DSPy 来使用它。

import dspy

dspy.settings.configure(rm=qdrant_retriever)

🔍 测试检索功能

现在我们可以使用 dspy.Retrieve 类来查询我们的检索器,类似于在 DSPy 的 RAG 管道中的使用方式。

retrieve = dspy.Retrieve()

retrieve("Some computer programs.")

通过上面的代码,我们成功地从 Qdrant 集合中检索到了与查询相关的结果。以下是检索到的结果示例:

Prediction(
    passages=['CounterSpy is a proprietary spyware removal program for Microsoft Windows software developed by Sunbelt Software.', 
              'In computing, the diff utility is a data comparison tool that calculates and displays the differences between two files. Unlike edit distance notions used for other purposes, diff is line-oriented rather than character-oriented, but it is like Levenshtein distance in that it tries to determine the smallest set of deletions and insertions to create one file from the other.', 
              "AudioDesk is an audio workstation application by Mark of the Unicorn (MOTU) for the Mac OS. It is a multi-track recording, editing, and mixing application, with both offline file-based processing and realtime effects. It is a more basic version of MOTU's Digital Performer  DAW software. Much of the graphical user interface (GUI) and its operation are similar to Digital Performer, although it lacks some of Digital Performer's features."]
)

通过这一过程,我们不仅配置了 Qdrant 作为 DSPy 的检索器,还展示了如何有效地加载数据、创建集合、索引数据,并最终实现高效的数据检索。

📝 结语

本文详细探讨了如何使用 Qdrant 作为 DSPy 的检索器,从初始设置到数据加载,再到检索功能的实现,带你一步步了解这一过程。通过这一方法,我们可以更高效地处理和检索海量数据,为你的应用程序提供更强大的支持。

参考文献

  1. Qdrant Documentation – Quick Start Guide
  2. DSPy Documentation
  3. OpenAI API Reference
  4. Hugging Face Datasets Documentation
  5. Qdrant Client Python Library Documentation

Qdrant 是一个先进的向量数据库,旨在提供高效、可扩展和快速的数据处理能力。它在向量数据库性能方面设定了新的基准,能够实现高达 4 倍的请求每秒(RPS)和极低的延迟。无论是高效的数据检索还是快速的索引,Qdrant 都能满足现代 AI 应用的需求。

🔍 Qdrant 的核心特点

高性能

Qdrant 设计为专用的相似性搜索引擎,具有独特的功能,以提供无与伦比的性能和效率。其先进的压缩技术和量化功能显著减少了内存使用,并提升了高维向量的搜索性能,提升幅度可达 40 倍。

云原生架构

Qdrant 提供的云服务支持 AWS、GCP 和 Azure 等平台,具备分布式架构设计,确保可扩展性和维护无忧。其混合云和私有云解决方案为用户提供了灵活的部署选项,确保数据的安全性。

易于使用的 API

Qdrant 提供 OpenAPI v3 规范,支持多种编程语言的客户端库生成,使得开发者可以轻松集成其功能。同时,Qdrant 还支持多租户功能,用户能够在单个集合中有效进行数据的隔离和管理。

企业级安全性

Qdrant 提供了强大的访问管理、备份选项和灾难恢复能力,确保数据的安全与完整。此外,针对企业用户,Qdrant 还提供了专门的解决方案,以实现对生产环境的最大控制。

🚀 用途与应用

Qdrant 广泛应用于多种场景,包括:

  • 检索增强生成(RAG):通过结合检索与生成的能力,提升信息获取的效率。
  • 推荐系统:为用户提供个性化的内容推荐。
  • 高级搜索:实现基于内容的精准搜索。
  • 数据分析与异常检测:通过精确的数据匹配和分析,帮助识别潜在的异常情况。

🌐 开始使用 Qdrant

无论你是想要在本地运行 Qdrant 还是使用云解决方案,你都可以选择最适合自己的方式来开始使用。Qdrant Cloud 是最快的入门方式,用户可以在不需要复杂设置的情况下,快速体验到 Qdrant 的强大功能。

如果你想了解更多关于 Qdrant 的高级功能和使用方法,可以访问其文档以获取详细信息。

联系与支持

对于希望在生产环境中使用 Qdrant 的企业用户,可以联系销售团队,了解更多关于混合云和私有云解决方案的信息。Qdrant 也提供了丰富的资源,如基准测试、博客文章和社区支持,以帮助用户更好地利用向量数据和相似性搜索技术。

结语

Qdrant 是推动下一代 AI 应用的先进向量相似性搜索技术的强大工具,助力开发者在数据管理和应用开发中实现更高的性能和效率。如果你对提升你的应用程序的搜索和匹配能力感兴趣,Qdrant 无疑是一个值得考虑的选择。

发表评论