在现代AI的应用中,向量存储和高效查询变得尤为重要。本文将介绍如何使用LlamaIndex与Pinecone进行向量存储和查询。我们将通过示例演示如何创建Pinecone索引,加载文档并构建向量存储,然后进行查询。
创建Pinecone索引
首先,我们需要配置Pinecone并创建一个索引。
# 引入必要库
from pinecone import Pinecone, ServerlessSpec
import os
# 设置API密钥
os.environ["PINECONE_API_KEY"] = "<Your Pinecone API key, from app.pinecone.io>"
# 初始化Pinecone
api_key = os.environ["PINECONE_API_KEY"]
pc = Pinecone(api_key=api_key)
# 创建索引
pc.create_index(
name="quickstart",
dimension=1536,
metric="euclidean",
spec=ServerlessSpec(cloud="aws", region="us-west-2"),
)
pinecone_index = pc.Index("quickstart")
将<Your Pinecone API key, from app.pinecone.io>
替换为你的Pinecone API密钥。
加载文档,构建PineconeVectorStore和VectorStoreIndex
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, StorageContext
from llama_index.vector_stores.pinecone import PineconeVectorStore
# 创建数据目录并下载示例数据
!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'
# 加载文档
documents = SimpleDirectoryReader("./data/paul_graham").load_data()
# 初始化向量存储
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 从文档构建索引
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
这里我们从简单的目录中读取文本文件并加载数据,然后使用这些数据构建向量存储和索引。
查询索引
接下来,我们将展示如何查询构建好的索引。
# 设置日志级别为DEBUG以获得更详细的输出
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
# 显示查询结果
from IPython.display import Markdown, display
display(Markdown(f"<b>{response}</b>"))
查询结果将会显示作者在成长过程中所做的事情。
可能遇到的错误
- API 密钥未设置: 如果API密钥未设置,将会抛出
EnvironmentError
。 - 索引创建失败: 可能由于API密钥无效或Pinecone服务问题导致索引创建失败。
- 文档加载失败: 如果指定路径的文档不存在或权限问题,将导致文档加载失败。
通过以上步骤,我们可以高效地创建向量存储并进行查询。如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: