探索Qdrant:如何通过向量相似性搜索提升数据检索

179 阅读3分钟

探索Qdrant:如何通过向量相似性搜索提升数据检索

引言

在海量数据中高效检索有价值的信息一直是技术界的挑战之一。向量相似性搜索作为一种革新性的技术,为此提供了强有力的支持。而Qdrant,作为一款现代的向量相似性搜索引擎,通过其强大的API,为开发者提供了一种简便的方式来存储、搜索和管理带有额外负载的向量点。本篇文章将带你深入了解如何利用Qdrant实现数据的高效检索,并展示使用Qdrant进行一个实际应用的完整过程。

主要内容

1. 什么是Qdrant?

Qdrant是一款开源的向量相似性搜索引擎,旨在通过其高效的向量存储和检索能力帮助开发者进行大规模的数据处理。它的API设计简单且功能强大,能够在生产环境中提供稳定的服务,并支持扩展的过滤功能。

2. 创建Qdrant向量存储

为了在Qdrant中存储数据,我们首先需要创建一个向量存储。这里我们将通过一个包含电影摘要的文档集来进行演示。首先,请确保安装了必要的Python包:

%pip install --upgrade --quiet lark qdrant-client

另外,为了使用OpenAI的嵌入功能,你需要设置OpenAI API Key。由于网络限制问题,建议使用API代理服务:

import os
import getpass

os.environ['OPENAI_API_KEY'] = getpass.getpass('OpenAI API Key:') # 使用API代理服务提高访问稳定性

接下来,使用以下代码创建Qdrant向量存储并将数据存入其中:

from langchain_community.vectorstores import Qdrant
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

docs = [
    Document(
        page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
        metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
    ),
    # 更多示例文档...
]

vectorstore = Qdrant.from_documents(
    docs,
    embeddings,
    location=":memory:",  # 本地模式,仅使用内存存储
    collection_name="my_documents",
)

3. 创建自查询检索器

为了实现更智能的检索,我们需要一个自查询检索器(SelfQueryRetriever)。这个检索器能够根据文档的元数据进行定制化查询。

from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI

metadata_field_info = [
    AttributeInfo(
        name="genre",
        description="The genre of the movie",
        type="string or list[string]",
    ),
    # 更多元数据字段...
]

document_content_description = "Brief summary of a movie"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
    llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)

代码示例

以下是如何使用自查询检索器执行一些实际查询的示例:

# 查询与恐龙相关的电影
retriever.invoke("What are some movies about dinosaurs")

# 查询评分高于8.5的电影
retriever.invoke("I want to watch a movie rated higher than 8.5")

# 更多示例参见文档...

常见问题和解决方案

  • 网络访问问题:在某些地区,访问OpenAI API可能受到限制,建议使用API代理服务来提高访问的稳定性。
  • 数据存储限制:在使用内存模式时,数据量较大会导致存储不足,建议在生产环境中考虑使用持久存储。

总结和进一步学习资源

Qdrant通过其强大的功能和灵活的API接口,为向量相似性搜索提供了一种高效且易用的解决方案。对于有大规模数据处理需求的开发者而言,深入掌握Qdrant的使用技巧将极大提升项目的搜索性能。以下是一些推荐的学习资源:

参考资料

  1. Qdrant 项目:Qdrant GitHub
  2. OpenAI API:OpenAI API 官网

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---