: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.