引言
近年来,随着深度学习技术的进步,基于嵌入技术的文档检索(Retriever-Augmented Generation, RAG)成为了一个热门话题。Supabase 作为一个开源的 Firebase 替代方案,与 PostgreSQL 相结合,为实现这种智能文档检索提供了一个理想的解决方案。本文将详细介绍如何利用 Supabase 和 OpenAI 嵌入模型来设置和使用 RAG 系统。
主要内容
Supabase 概述
Supabase 是一个基于 PostgreSQL 的开源实时数据库平台,可以作为 Firebase 的替代。它提供了全面的数据库管理功能和实时同步能力,使得开发者可以快速构建强大的数据库应用。
环境设置
配置 API 密钥
要访问 OpenAI 模型,我们首先需要设置 OPENAI_API_KEY 环境变量。在你的 OpenAI 帐户下获取 API 密钥并设置如下:
export OPENAI_API_KEY=<your-openai-api-key>
同样,获取你的 Supabase 项目的 SUPABASE_URL 和 SUPABASE_SERVICE_KEY:
export SUPABASE_URL=<your-supabase-url>
export SUPABASE_SERVICE_KEY=<your-supabase-service-key>
初始化 Supabase 数据库
通过以下步骤来设置你的 Supabase 数据库:
-
访问 database.new 来初始化你的 Supabase 数据库。
-
打开 SQL 编辑器并运行以下脚本以启用 pgvector 并将数据库设置为向量存储:
-- 启用 pgvector 扩展以处理嵌入向量
create extension if not exists vector;
-- 创建存储文档的表
create table
documents (
id uuid primary key,
content text, -- 对应 Document.pageContent
metadata jsonb, -- 对应 Document.metadata
embedding vector(1536) -- 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 $$
#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;
$$;
使用 LangChain
安装 LangChain CLI:
pip install -U langchain-cli
创建一个新的 LangChain 项目:
langchain app new my-app --package rag-supabase
在 server.py 文件中添加以下代码来集成 RAG:
from rag_supabase.chain import chain as rag_supabase_chain
add_routes(app, rag_supabase_chain, path="/rag-supabase")
代码示例
以下是一个简单的代码示例,展示如何使用 Supabase 和 OpenAI 来实现文档检索:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/rag-supabase") # 使用API代理服务提高访问稳定性
# 假设我们要查找与某个查询向量相匹配的文档
query_embedding = get_query_embedding("你的查询内容")
results = runnable.run({
"query_embedding": query_embedding
})
for result in results:
print(f"文档ID: {result['id']}, 相似性: {result['similarity']}")
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,可能无法直接访问 OpenAI API。解决方案是使用代理服务以提高 API 访问的稳定性。
-
向量维度不匹配:确保数据库中设置的向量维度与 OpenAI 提供的嵌入维度一致。
-
API 密钥泄漏风险:始终确保环境变量的保密性,不要将敏感信息写入版本控制系统。
总结和进一步学习资源
本文探讨了如何利用 Supabase 和 OpenAI 来实现 RAG 系统。通过结合这两个强大的工具,你可以构建具有智能文档检索能力的应用程序。以下是一些推荐的学习资源:
参考资料
- Supabase 官方文档
- OpenAI API 参考文档
- LangChain GitHub 仓库
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---