在本文中,我们将演示如何使用Postgres数据库中的PGVector包来进行向量相似性搜索。具体而言,我们会展示如何使用PGVector创建一个向量存储,并结合自查询检索器(SelfQueryRetriever)来对电影文档集合进行检索。
技术背景介绍
PGVector是一个针对Postgres数据库的向量相似性搜索插件。它允许我们在数据库中存储向量并进行快速的相似性检索,非常适合于需要进行语义搜索的场景,例如搜索电影的相似性。
核心原理解析
PGVector通过将文档进行向量化后存储在Postgres数据库中,然后利用向量的余弦相似性或其他相似性度量进行快速检索。结合OpenAI的嵌入服务(OpenAIEmbeddings),我们可以对文本数据进行向量化,从而实现复杂的语义搜索。
代码实现演示
以下是使用PGVector创建电影文档向量存储及自查询检索器的完整代码实现:
# 安装必要的库
%pip install --upgrade --quiet lark pgvector psycopg2-binary
# 导入相关库
import os
import getpass
from langchain_community.vectorstores import PGVector
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI
# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
# 创建PGVector向量存储
collection = "movie_collection"
embeddings = OpenAIEmbeddings()
# 创建电影文档集合
docs