Supabase 是一个开源的 Firebase 替代方案,建立在功能强大的 PostgreSQL 之上,使得 SQL 查询能力得到充分发挥,同时也能与现有工具和框架简单集成。Supabase 提供了一套开源工具包,旨在使用 PostgreSQL 和 pgvector 开发 AI 应用。通过 Supabase 客户端库,我们可以在大规模下存储、索引和查询向量嵌入。
在这篇文章中,我们将展示如何使用 Supabase 和 Postgres 创建一个自查询检索器。具体来说,我们将:
- 创建一个 Supabase 数据库
- 启用 pgvector 扩展
- 创建一个文档表格和
match_documents
函数,以便让 SupabaseVectorStore 使用 - 向向量存储(数据库表)加载示例文档
- 构建并测试一个自查询检索器
设置 Supabase 数据库
首先,前往 https://database.new 来配置您的 Supabase 数据库。在 Supabase Studio 中,跳转到 SQL 编辑器并运行以下脚本来启用 pgvector 并将您的数据库设置为向量存储:
-- Enable the pgvector extension to work with embedding vectors
create extension if not exists vector;
-- Create a table to store your documents
create table
documents (
id uuid primary key,
content text, -- corresponds to Document.pageContent
metadata jsonb, -- corresponds to Document.metadata
embedding vector (1536) -- 1536 works for OpenAI embeddings, change if needed
);
-- Create a function to search for documents
create function match_documents (
query_embedding vector (1536),
filter jsonb default '{}'
) returns table (
id uuid,
content text,
metadata jsonb,
similarity float
) language plpgsql as $$
#variable_conflict use_column
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;
$$;
创建 Supabase 向量存储
接下来,我们要创建一个 Supabase 向量存储,并用一些数据进行初始化。确保安装最新版本的 langchain,支持 OpenAI 的功能:
%pip install --upgrade