88 递归检索器与查询引擎:探索分层数据的强大工具

递归检索器与查询引擎:探索分层数据的强大工具

在编程的世界里,处理分层数据是一项常见但复杂的任务。今天,我们将深入探讨一种名为“递归检索器(RecursiveRetriever)”的模块,它能够帮助我们更高效地处理和查询分层数据。

动机

递归检索的概念不仅仅局限于直接检索最相关的节点,还包括探索节点之间的关系,以进一步检索其他检索器或查询引擎并执行它们。例如,一个节点可能代表一个结构化表格的简洁摘要,并链接到该结构化表格上的SQL/Pandas查询引擎。如果检索到该节点,我们还希望查询底层查询引擎以获取答案。

这种技术对于具有分层关系的文档尤其有用。在本例中,我们将通过一个关于亿万富翁的Wikipedia文章(PDF格式)来演示,该文章包含文本和各种嵌入的结构化表格。我们首先为每个表格创建一个Pandas查询引擎,但也通过一个IndexNode表示每个表格(存储链接到查询引擎);这个节点与其他节点一起存储在向量存储中。

在查询时,如果检索到IndexNode,则将查询底层查询引擎/检索器。

设置说明

我们使用camelot从PDF中提取基于文本的表格。

%pip install llama-index-embeddings-openai
%pip install llama-index-readers-file pymupdf
%pip install llama-index-llms-openai
%pip install llama-index-experimental
import camelot

默认设置

import os

os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings

Settings.llm = OpenAI(model="gpt-3.5-turbo")
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")

加载文档(和表格)

我们使用PyMuPDFReader读取文档的主要文本。

我们还使用camelot从文档中提取一些结构化表格。

file_path = "billionaires_page.pdf"
# 初始化PDF阅读器
reader = PyMuPDFReader()
docs = reader.load(file_path)
# 使用camelot解析表格
def get_tables(path: str, pages: List[int]):
    table_dfs = []
    for page in pages:
        table_list = camelot.read_pdf(path, pages=str(page))
        table_df = table_list[0].df
        table_df = (
            table_df.rename(columns=table_df.iloc[0])
            .drop(table_df.index[0])
            .reset_index(drop=True)
        )
        table_dfs.append(table_df)
    return table_dfs
table_dfs = get_tables(file_path, pages=[3, 25])
# 显示2023年顶级亿万富翁列表
table_dfs[0]
# 显示顶级亿万富翁列表
table_dfs[1]

创建Pandas查询引擎

我们为每个结构化表格创建一个Pandas查询引擎。

这些可以单独执行,以回答有关每个表格的查询。

# 定义这些表格的查询引擎
llm = OpenAI(model="gpt-4")

df_query_engines = [
    PandasQueryEngine(table_df, llm=llm) for table_df in table_dfs
]
response = df_query_engines[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值