在构建AI项目时,向量存储和检索的性能和效率至关重要。本文将介绍如何使用Qdrant Vector Store结合LlamaIndex进行向量检索,并提供详细的代码示例。
安装依赖
首先,我们需要安装相关的Python库。可以使用pip进行安装:
pip install llama-index-vector-stores-qdrant llama-index-readers-file llama-index-embeddings-fastembed llama-index-llms-openai
设置OpenAI API密钥
在开始之前,请确保已设置OpenAI API密钥。推荐将API密钥设置为环境变量以确保安全性。
使用终端设置环境变量:
export OPENAI_API_KEY=your_api_key_here
在Jupyter Notebook中使用IPython Magic命令:
%env OPENAI_API_KEY=your_api_key_here
在Python脚本中设置环境变量:
import os
os.environ["OPENAI_API_KEY"] = "your_api_key_here"
加载数据
我们将使用一个名为"paul_graham_essay.txt"的文本文件作为示例数据进行操作。以下是下载该文件的代码:
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
然后,我们可以加载该文件:
from llama_index.core import SimpleDirectoryReader
# 加载文档
documents = SimpleDirectoryReader("./data/paul_graham/").load_data()
构建VectorStore索引
接下来,我们将创建Qdrant客户端并构建VectorStore索引:
import qdrant_client
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.vector_stores.qdrant import QdrantVectorStore
from llama_index.embeddings.fastembed import FastEmbedEmbedding
from llama_index.core import Settings
Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")
# 创建Qdrant客户端
client = qdrant_client.QdrantClient(location=":memory:")
vector_store = QdrantVectorStore(client=client, collection_name="paul_graham")
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 构建索引
index = VectorStoreIndex.from_documents(
documents,
storage_context=storage_context,
)
查询索引
在索引构建完成后,我们可以通过以下代码进行查询:
# 设置查询引擎
query_engine = index.as_query_engine()
# 查询示例
response = query_engine.query("What did the author do growing up?")
print(response)
查询结果示例如下:
The author worked on writing and programming before college.
异步构建和查询索引
如果需要进行异步操作,也可以使用以下代码:
import nest_asyncio
import qdrant_client
nest_asyncio.apply()
# 创建异步Qdrant客户端
aclient = qdrant_client.AsyncQdrantClient(location=":memory:")
vector_store = QdrantVectorStore(aclient=aclient, collection_name="paul_graham", prefer_grpc=True)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 异步构建索引
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context, use_async=True)
# 异步查询示例
query_engine = index.as_query_engine(use_async=True)
response = await query_engine.aquery("What did the author do growing up?")
print(response)
可能遇到的错误
- API密钥错误:确保已正确设置API密钥,如果API密钥无效或未设置,可能导致认证失败。
- 数据路径错误:检查数据文件路径是否正确,如果路径错误可能导致数据加载失败。
- 依赖安装错误:确保依赖库已正确安装,如果安装失败可能导致代码无法运行。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: