引言
在现代应用中,存储和检索数据的能力是其核心组成部分。Supabase 作为一种开源的 Firebase 替代方案,正迅速成为开发者选择的热点。其构建在 PostgreSQL 之上,提供了强大的 SQL 查询能力,并能够与现有工具和框架轻松集成。在这篇文章中,我们将探索如何使用 Supabase 和 pgvector 作为您的向量存储,并通过实例代码演示如何进行文档的相似性搜索。
主要内容
1. 了解 Supabase 和 PostgreSQL
Supabase 是一个开源的 Firebase 替代品,使用 PostgreSQL 作为其数据库后端。PostgreSQL,或称 Postgres,是一种免费且开源的关系数据库管理系统(RDBMS),以其可扩展性和 SQL 标准的合规性著称。
2. 启用 pgvector 扩展
为了在 PostgreSQL 中使用向量(如嵌入)并进行向量搜索,您需要启用 pgvector 扩展。以下是启用的 SQL 代码:
-- 启用 pgvector 扩展
create extension if not exists vector;
3. 创建数据库表和函数
创建一个用于存储文档的表和一个用于搜索文档的函数:
-- 创建存储文档的表
create table
documents (
id uuid primary key,
content text,
metadata jsonb,
embedding vector (1536) -- 使用适用于 OpenAI 嵌入的尺寸
);
-- 创建一个搜索文档的函数
create function match_documents (
query_embedding vector (1536),
filter jsonb default '{}'
) returns table (
id uuid,
content text,
metadata jsonb,
similarity float
) language plpgsql as $$
begin
return query
select
id,
content,
metadata,
1 - (documents.embedding <=> query_embedding) as similarity
from documents
where metadata @> filter
order by documents.embedding <=> query_embedding;
end;
$$;
4. 安装所需的 Python 包
要使用 Supabase 及其向量存储功能,您需要安装相应的 Python 包:
# 使用 pip 安装 supabase
pip install --upgrade --quiet supabase
代码示例
在这个示例中,我们将展示如何使用 Python 来加载文档并进行相似性搜索。
import os
from langchain_community.vectorstores import SupabaseVectorStore
from langchain_openai import OpenAIEmbeddings
from supabase.client import Client, create_client
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
supabase_url = os.environ.get("SUPABASE_URL") # 使用API代理服务提高访问稳定性
supabase_key = os.environ.get("SUPABASE_SERVICE_KEY")
supabase: Client = create_client(supabase_url, supabase_key)
embeddings = OpenAIEmbeddings()
# 创建 Supabase 客户端和嵌入类
vector_store = SupabaseVectorStore(
embedding=embeddings,
client=supabase,
table_name="documents",
query_name="match_documents",
)
# 进行相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
matched_docs = vector_store.similarity_search(query)
for doc in matched_docs:
print(doc.page_content)
常见问题和解决方案
问题 1: 向量尺寸不匹配
解决方案: 确保数据库中的向量尺寸与使用的嵌入模型的尺寸一致。
问题 2: API 访问受限
解决方案: 在某些地区,可能需要使用 API 代理服务来提高访问稳定性。
总结和进一步学习资源
通过本文,我们了解了如何使用 Supabase 和 PostgreSQL 构建强大的向量存储系统。利用这些工具,我们可以轻松实现高效的相似性搜索。对于进一步的学习,您可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---