技术背景介绍
RAG(检索增强生成)是一种结合检索和生成的技术,在生成式AI中非常有用。Lantern 是一个开源的向量数据库,基于PostgreSQL构建,能够在数据库内进行向量搜索和嵌入生成。在本文中,我们将演示如何使用Lantern和OpenAI的API实现RAG。
核心原理解析
RAG的核心原理是在生成内容之前通过检索步骤获取相关文档,然后利用这些文档生成更加准确和上下文相关的内容。Lantern利用其向量数据库的特性,使这一过程高效、快速。
环境搭建
首先我们需要设置环境变量来访问OpenAI和Lantern的API。
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 创建您的Lantern数据库。
- 在您喜欢的SQL客户端中,使用以下SQL脚本设置数据库:
-- 创建存储文档的表
create table
documents (
id uuid primary key,
content text, -- 对应 Document.pageContent
metadata jsonb, -- 对应 Document.metadata
embedding REAL[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
如果要添加到现有项目中,只需运行:
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")
(Optional) 配置LangSmith以跟踪、监控和调试LangChain应用:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=your_langchain_api_key
export LANGCHAIN_PROJECT=your_project # 如果未指定,默认为 "default"
在目录中直接启动LangServe实例:
langchain serve
这将启动一个运行在本地http://localhost:8000的FastAPI应用。我们可以在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技术在诸多场景中都可以应用,比如:
- 文档问答系统
- 客服机器人
- 内容生成和优化
实践建议
- 确保嵌入维度与数据库定义一致。
- 优化SQL查询以提升检索效率。
- 利用LangSmith进行监控和调试,确保应用在不同环境下的稳定性。
如果遇到问题欢迎在评论区交流。