PageIndex:RAG中向量搜索的替代方案——分析与本地部署
PageIndex提出用分层文档结构替代RAG中的向量搜索。文档被分割为页面,由大语言模型构建带节点摘要的目录树。搜索查询由大语言模型引导至相关节点,随后提取对应页面作为上下文。无需分块、嵌入或向量数据库。
扩展性限制
PageIndex针对单文档优化。对于文档集合,建议采用以下方案:
- 元数据过滤(开发中,类似向量存储)。
- 通过生成描述搜索(适用于小规模数据)。
- 语义搜索(回退至向量嵌入)。
带摘要的目录树可将上下文压缩4–5倍。TF-IDF或BM25等替代方案需建立索引。存储数千文档的目录树问题尚未解决。此处,大语言模型用相关性搜索替代相似性搜索,类似于通过目录导航复杂文本。
在FinanceBench上声称准确率达98.7%(向量搜索约90%),通过推理实现。成本高出数十倍。已在gpt-4o和gpt-5.4上测试。
本地模型实验
测试基于一篇关于《赛博朋克2077》的学术文章(PDF,约1.7万词元)。Markdown处理流程类似LangChain的MarkdownTextSplitter——按标题分割。
PDF处理流程自动提取标题,但存在以下问题:
- JSON输出错误——文本处理(移除参考文献、引文)。
- 准确率阈值60%——可通过环境变量ACCURACY_THRESHOLD降低。
- 准确率低因大语言模型匹配节点与片段——将MAX_TOKENS从2万提高。
模型表现:
- gemma3:27b——目录幻觉(准确率<60%)。
- gpt-oss:20b——准确率57–63%,稳定。
- qwen3:14b——准确率69.57%,但存在JSON错误。
16GB GPU耗时:约30分钟(错误修正占主导)。
目录示例(gpt-oss:20b,准确率0.63):
{
"doc_name": "2077.pdf",
"structure": [
{
"title": "引言",
"node_id": "0000",
"start_index": 1,
"end_index": 3,
"summary": "本文探讨电子游戏《赛博朋克2077》如何...",
"text": "从《赛博朋克2077》视角看预测与..."
},
{
"title": "文献综述",
"node_id": "0001",
"start_index": 3,
"end_index": 3,
"summary": "部分文档呈现文献综述...",
"text": "将《赛博朋克2077》置于更广泛的...",
"nodes": [
// ... 子节点
]
}
// ... 其余节点
]
}
配置与本地部署
安装:liteLLM==1.82.0(新版本存在漏洞)。勿使用pip install pageindex——该命令用于API。
笔记本:MinimalPageindexLocalPDF.ipynb、MinimalPageindexLocalMD.ipynb。
utils.py修改:OLLAMA_HOST、OLLAMA_TIMEOUT。
page_index.py修改:ACCURACY_THRESHOLD、MAX_TOKENS。
处理流程:
- 加载文档(PDF/MD)。
- 大语言模型构建目录(find_toc_pages)。
- 分割为页面/行。
- 构建带摘要的节点树。
- 准确率修正。
- 搜索:大语言模型按查询选择节点 → 页面提取 → 最终RAG。
PageIndex将大语言模型集成至检索过程,实现可追溯的搜索(带页面/章节引用)。适用于复杂文档,但生产环境资源消耗高。
关键要点
- 扩展性:无向量搜索时,尚无大规模集合的现成解决方案。
- 准确率:依赖模型;本地模型(qwen3:14b)达69%,但存在错误。
- 成本:相比向量RAG,准确率提升8–9%需消耗10倍至N倍资源。
- 格式:PDF自动检测标题;MD通过Markdown结构处理。
- 修改:需环境变量调整阈值和词元数以适配较弱硬件。
— Editorial Team
暂无评论。