[利用PGVector进行高效文本搜索:LangChain与Postgres的完美结合]

138 阅读2分钟
# 引言

在不断发展的人工智能与大数据时代,信息检索与管理显得尤为重要。通过与数据库技术的结合,向量存储(Vector store)能显著提升数据查询的效率与精度。本文将探讨如何利用PGVector在Postgres中实现LangChain的vectorstore抽象,为您的应用提供高效的文本搜索能力。

# 主要内容

## 1. LangChain_postgres包简介

`langchain_postgres`是`langchain_community`的衍生包,专门用于在Postgres数据库中实现向量存储。此包的诞生解决了一些早期版本中的瓶颈,现在它完全依赖于`psycopg3`驱动,确保了连接的稳定和高效。

## 2. 安装与设置

首先,下载并安装必备的Python包:

```shell
pip install -qU langchain_postgres

然后,使用以下命令启动一个带有pgvector扩展的Postgres容器:

# 启动Postgres容器并启用pgvector扩展
docker run --name pgvector-container -e POSTGRES_USER=langchain -e POSTGRES_PASSWORD=langchain -e POSTGRES_DB=langchain -p 6024:5432 -d pgvector/pgvector:pg16

3. 向量存储初始化

初始化向量存储需要创建一个连接对象,并使用特定的嵌入模型:

from langchain_core.documents import Document
from langchain_postgres.vectorstores import PGVector
from langchain_openai import OpenAIEmbeddings

# 使用API代理服务提高访问稳定性
connection = "postgresql+psycopg://langchain:langchain@localhost:6024/langchain"

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

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

4. 管理向量存储

向向量存储中添加和删除文档,以及执行查询,如下示例所示:

# 添加文档
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"])

# 查询文档
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. 连接问题:确保使用最新的psycopg3驱动,并正确配置连接字符串。
  2. 数据迁移:目前不支持数据迁移,如有必要需手动备份并重新添加数据。
  3. 网络限制:因网络限制,需考虑使用API代理服务。

总结和进一步学习资源

PGVector结合LangChain为数据查询提供了一种高效的解决方案。在使用过程中,需注意版本兼容性与网络配置。想要深入了解PGVector,可以访问详细文档

参考资料

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


---END---