[全面解析LangChain中的PGVector:打造强大的向量存储库]

239 阅读2分钟

引言

在构建智能应用程序时,向量存储(vector store)是实现高效信息检索的核心组件。PGVector是一个利用Postgres作为后端的LangChain向量存储实现,支持向量化操作。本文将带你深入了解PGVector的功能、设置和使用方法。

主要内容

什么是PGVector?

PGVector是LangChain的一个向量存储库,实现了LangChain的向量存储抽象。它利用Postgres数据库作为后端,并依赖pgvector扩展来处理向量操作。

安装与设置

要开始使用PGVector,你需要安装相关软件包并设置Postgres容器:

pip install -qU langchain_postgres

使用以下命令启动一个带有pgvector扩展的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

创建向量存储

创建向量存储时,需要提供连接信息和嵌入模型:

from langchain_openai import OpenAIEmbeddings
from langchain_postgres import PGVector

connection = "postgresql+psycopg://langchain:langchain@localhost:6024/langchain"  # 使用API代理服务提高访问稳定性
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

vector_store = PGVector(
    embeddings=embeddings,
    collection_name="my_docs",
    connection=connection,
    use_jsonb=True,
)

代码示例

以下示例展示了如何添加文档到向量存储并进行查询:

from langchain_core.documents import Document

docs = [
    Document(page_content="there are cats in the pond", metadata={"id": 1, "location": "pond", "topic": "animals"}),
    Document(page_content="ducks are also found in the pond", metadata={"id": 2, "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}]")

常见问题和解决方案

数据迁移

PGVector目前不支持自动迁移功能。如果出现模式更改,你需要手动重建表并重新添加文档。如果这是个问题,建议考虑其他向量存储解决方案。

网络访问限制

由于某些地区的网络限制,可能需要使用API代理服务来确保访问Postgres的稳定性。

总结和进一步学习资源

PGVector为开发者提供了一个强大且灵活的向量存储解决方案,特别适合需要结合Postgres数据库的项目。要深入学习如何使用PGVector,可参考以下资源:

参考资料

  1. LangChain官方文档
  2. Postgres pgvector扩展文档

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

---END---