引言
在现代信息处理系统中,向量存储是构建高效信息检索和增强生成模型的关键组件。本文将介绍如何利用 PGVector
和 langchain-postgres
包,通过 PostgreSQL 实现 LangChain 向量存储,并讨论其设置、使用和常见问题。
主要内容
1. 环境设置
首先,确保安装 langchain_postgres
包,并启动一个包含 pgvector
扩展的 Postgres 容器:
pip install -qU langchain_postgres
启动容器:
docker run --name pgvector-container -e POSTGRES_USER=langchain -e POSTGRES_PASSWORD=langchain -e POSTGRES_DB=langchain -p 6024:5432 -d pgvector/pgvector:pg16
2. 向量存储的初始化
在初始化向量存储时,我们需要提供数据库连接、嵌入模型和其他配置。例如,我们可以使用 OpenAI 的嵌入模型:
from langchain_openai import OpenAIEmbeddings
from langchain_postgres import PGVector
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
connection = "postgresql+psycopg://langchain:langchain@localhost:6024/langchain" # 使用API代理服务提高访问稳定性
vector_store = PGVector(
embeddings=embeddings,
collection_name="my_docs",
connection=connection,
use_jsonb=True,
)
3. 添加和管理文档
可以通过给定ID的方式添加和删除文档:
from langchain_core.documents import Document
docs = [
Document(page_content="there are cats in the pond", metadata={"id": 1, "location": "pond", "topic": "animals"}),
# 其他文档...
]
vector_store.add_documents(docs, ids=[doc.metadata["id"] for doc in docs])
vector_store.delete(ids=["3"])
4. 查询数据
你可以通过相似度搜索来查询存储的文档:
results = vector_store.similarity_search(
"kitty", k=10, filter={"id": {"$in": [1, 5, 2, 9]}}
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
常见问题和解决方案
- 数据迁移问题: 目前没有自动迁移功能,需要手动重建表和重新添加文档。
- 网络访问问题: 由于某些地区的网络限制,建议使用API代理服务来提高访问稳定性。
- 驱动兼容性: 确保使用
psycopg3
连接数据库。
总结和进一步学习资源
本文介绍了使用 PGVector 进行向量存储的基本方法及其设置步骤。对于想要更多了解 RAG(检索增强生成)技术的用户,可以参考以下资源:
参考资料
- LangChain 官方文档: https://api.python.langchain.com
- PostgreSQL 官方文档: https://www.postgresql.org/docs/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—