LlamaIndex-Recursive Retriever + Query Engine

:Recursive Retriever + Query Engine

概念解释

Recursive Retriever(递归检索器):递归检索器的概念是我们不仅探索直接最相关的节点,还探索节点关系到其他检索器/查询引擎并执行它们。例如,一个节点可能代表一个结构化表格的简洁摘要,并链接到该结构化表格的SQL/Pandas查询引擎。如果检索到该节点,我们还希望查询底层查询引擎以获取答案。

Query Engine(查询引擎):查询引擎是执行查询的基础。它负责从索引中检索相关文档,对检索到的节点进行后处理,并将查询、相关数据和提示组合发送给LLM以返回响应。

递归检索器和查询引擎的演示

在这个演示中,我们将展示如何在具有层次关系的数据上使用“RecursiveRetriever”模块。

设置说明

我们使用 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.
### 使用 `--recursive` 参数的方法及作用 #### 1. **Git 中的 `--recursive` 参数** `--recursive` 是 Git 提供的一个重要参数,主要用于处理子模块(submodules)。当一个仓库依赖于其他独立的 Git 仓库时,这些外部仓库被称为子模块。为了确保主仓库与其子模块同步更新并正常工作,`--recursive` 参数发挥了重要作用。 - 如果在克隆仓库时使用了 `git clone --recursive <repository-url>` 命令,则会递归地初始化并克隆所有的子模块[^4]。 - 若未使用该参数而仅运行普通的 `git clone`,则只会下载主仓库的内容,而不包含其子模块中的文件。这可能导致后续操作失败,因为缺少必要的资源[^3]。 #### 2. **具体应用场景** 对于某些复杂的开源项目来说,它们可能由多个相互关联的小型库组成。例如 DORIS 数据库系统就需要先完成基础环境搭建后再引入额外组件支持功能扩展;此时如果忽略掉 `--recursive` 配置项就很容易遇到错误提示像 "fatal: No such ref..." 这样的情况发生[^2]。 因此,在实际开发过程中应当养成良好习惯即始终记得加上这个标志位来保障整个工程结构完整无缺: ```bash $ git clone --recursive https://example.com/repo.git ``` 另外值得注意的是,即使已经完成了初始阶段的操作之后再次面对新增加或者修改过的子模块定义表单也需要重新执行相应指令才能生效: ```bash $ git submodule update --init --recursive ``` 此命令能够帮助开发者及时获取最新版次级存储单元内的变动信息以便继续推进下一步骤的工作流程[^5]。 --- ### 示例代码展示 以下是关于如何正确运用 `--recursive` 参数的具体实例演示: 假设存在这样一个名为 MyProject 的大型软件工程项目,并且它内部集成了几个第三方插件作为辅助工具包形式存在的话,那么我们可以按照下面的方式来进行完整的复制过程: ```bash # 正确方式:一次性完全拷贝包括所有子模块在内的全部内容 $ git clone --recursive https://github.com/user/MyProject.git # 错误示范(不推荐): 只能获得顶层目录下的东西而已 $ git clone https://github.com/user/MyProject.git ``` 假如后来得知官方维护者又向其中添加了一些新特性对应的附加模块怎么办呢?没关系,只需简单补充一句就能轻松搞定啦! ```bash # 更新现有的子模块至最新的状态 $ cd MyProject/ $ git pull origin main $ git submodule update --init --recursive ``` 以上步骤可以保证无论何时何地都能保持与上游源一致的状态! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

需要重新演唱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值