PageIndex 是一个无需向量数据库的推理型 RAG 框架,通过构建文档树索引并利用大模型进行类人化检索,解决传统向量检索在长篇专业文档中相似度不等于相关性的问题。
# PageIndex:无向量、基于推理的 RAG
基于推理的 RAG ◦ 无向量数据库 ◦ 无需分块 ◦ 类人检索
📢 最新动态
**🔥 发布:**
- [**PageIndex Chat**](https://chat.pageindex.ai):首个专为专业长文档构建的类人文档分析智能体 [平台](https://chat.pageindex.ai)。也可通过 [MCP](https://pageindex.ai/mcp) 或 [API](https://docs.pageindex.ai/quickstart)(测试版)集成。
**📝 文章:**
- [**PageIndex 框架**](https://pageindex.ai/blog/pageindex-intro):介绍 PageIndex 框架 —— 一种*智能体化、上下文内*的*树索引*,使 LLM 能够对长文档执行*基于推理*的*类人检索*,无需向量数据库或分块。
**🧪 实战指南:**
- [无向量 RAG](https://docs.pageindex.ai/cookbook/vectorless-rag-pageindex):使用 PageIndex 进行基于推理的 RAG 的最小化实践示例。无向量、无分块,并具备类人检索能力。
- [基于视觉的无向量 RAG](https://docs.pageindex.ai/cookbook/vision-rag-pageindex):无 OCR、纯视觉的 RAG,利用 PageIndex 基于推理的原生检索工作流,直接在 PDF 页面图像上工作。
# 📑 PageIndex 简介
您是否对长篇专业文档的向量数据库检索准确性感到沮丧?传统的基于向量的 RAG 依赖于语义*相似度*而非真正的*相关性*。但 **相似度 ≠ 相关性** —— 我们在检索中真正需要的是**相关性**,而这需要**推理**。在处理需要领域专业知识和多步推理的专业文档时,相似度搜索往往力不从心。
受 AlphaGo 启发,我们提出了 **[PageIndex](https://vectify.ai/pageindex)** —— 一个**无向量**、**基于推理的 RAG** 系统,它从长文档中构建**分层树索引**,并利用 LLM 在索引*之上进行推理*,实现**智能体化、上下文感知的检索**。
它模拟*人类专家*如何通过*树搜索*浏览复杂文档并提取知识,使 LLM 能够通过*思考*和*推理*找到最相关的文档章节。PageIndex 分两步进行检索:
1. 生成文档的“目录”**树结构索引**
2. 通过**树搜索**执行基于推理的检索
### 🎯 核心特性
与传统的基于向量的 RAG 相比,**PageIndex** 具有以下特点:
- **无向量数据库 (No Vector DB)**:使用文档结构和 LLM 推理进行检索,而非向量相似度搜索。
- **无需分块 (No Chunking)**:文档被组织成自然章节,而非人工分块。
- **类人检索 (Human-like Retrieval)**:模拟人类专家浏览和提取复杂文档知识的方式。
- **更好的可解释性与可追溯性**:检索基于推理 —— 可追溯且可解释,并附有页码和章节引用。不再有晦涩、近似的向量搜索(“氛围检索”)。
PageIndex 支持的基于推理的 RAG 系统在 FinanceBench 上达到了**最先进的** [98.7% 准确率](https://github.com/VectifyAI/Mafin2.5-FinanceBench),在专业文档分析中展示了优于基于向量的 RAG 解决方案的性能(详情请参阅我们的[博客文章](https://vectify.ai/blog/Mafin2.5))。
### 📍 探索 PageIndex
欲了解更多信息,请参阅 [PageIndex 框架](https://pageindex.ai/blog/pageindex-intro)的详细介绍。查看此 GitHub 仓库以获取开源代码,并查阅[实战指南](https://docs.pageindex.ai/cookbook)、[教程](https://docs.pageindex.ai/tutorials)和[博客](https://pageindex.ai/blog)以获取更多使用指南和示例。
PageIndex 服务提供 ChatGPT 风格的[聊天平台](https://chat.pageindex.ai),也可通过 [MCP](https://pageindex.ai/mcp) 或 [API](https://docs.pageindex.ai/quickstart) 集成。
### 🛠️ 部署选项
- 自托管 —— 使用此开源仓库在本地运行。
- 云服务 —— 通过我们的 [聊天平台](https://chat.pageindex.ai/) 即时试用,或通过 [MCP](https://pageindex.ai/mcp) 或 [API](https://docs.pageindex.ai/quickstart) 集成。
- _企业版_ —— 私有化或本地部署。[联系我们](https://ii2abc2jejf.typeform.com/to/tK3AXl8T)或[预约演示](https://calendly.com/pageindex/meet)了解更多详情。
### 🧪 快速上手
- 试用 [**无向量 RAG**](https://github.com/VectifyAI/PageIndex/blob/main/cookbook/pageindex_RAG_simple.ipynb) 笔记本 —— 一个使用 PageIndex 进行基于推理的 RAG 的*最小化*实践示例。
- 体验 [*基于视觉的无向量 RAG*](https://github.com/VectifyAI/PageIndex/blob/main/cookbook/vision_RAG_pageindex.ipynb) —— 无 OCR;一个最小化、原生推理的 RAG pipeline,直接在页面图像上工作。
# 🌲 PageIndex 树结构
PageIndex 可以将冗长的 PDF 文档转换为语义化的**树结构**,类似于“目录”,但针对大型语言模型 (LLM) 的使用进行了优化。它非常适合:财务报告、监管文件、学术教科书、法律或技术手册,以及任何超出 LLM 上下文限制的文档。
下面是一个 PageIndex 树结构示例。也可以查看更多示例[文档](https://github.com/VectifyAI/PageIndex/tree/main/tests/pdfs)和生成的[树结构](https://github.com/VectifyAI/PageIndex/tree/main/tests/results)。
```
...
{
"title": "Financial Stability",
"node_id": "0006",
"start_index": 21,
"end_index": 22,
"summary": "The Federal Reserve ...",
"nodes": [
{
"title": "Monitoring Financial Vulnerabilities",
"node_id": "0007",
"start_index": 22,
"end_index": 28,
"summary": "The Federal Reserve's monitoring ..."
},
{
"title": "Domestic and International Cooperation and Coordination",
"node_id": "0008",
"start_index": 28,
"end_index": 31,
"summary": "In 2023, the Federal Reserve collaborated ..."
}
]
}
...
```
您可以使用此开源仓库生成 PageIndex 树结构,或使用我们的 [API](https://docs.pageindex.ai/quickstart)
# ⚙️ 包使用方法
您可以按照以下步骤从 PDF 文档生成 PageIndex 树。
### 1. 安装依赖
```
pip3 install --upgrade -r requirements.txt
```
### 2. 设置您的 OpenAI API key
在根目录下创建一个 `.env` 文件并添加您的 API key:
```
CHATGPT_API_KEY=your_openai_key_here
```
### 3. 在您的 PDF 上运行 PageIndex
```
python3 run_pageindex.py --pdf_path /path/to/your/document.pdf
```
可选参数
您可以使用额外的可选参数自定义处理过程:
```
--model OpenAI model to use (default: gpt-4o-2024-11-20)
--toc-check-pages Pages to check for table of contents (default: 20)
--max-pages-per-node Max pages per node (default: 10)
--max-tokens-per-node Max tokens per node (default: 20000)
--if-add-node-id Add node ID (yes/no, default: yes)
--if-add-node-summary Add node summary (yes/no, default: yes)
--if-add-doc-description Add doc description (yes/no, default: yes)
```
Markdown 支持
我们也为 PageIndex 提供 Markdown 支持。您可以使用 `-md_path` 标志为 Markdown 文件生成树结构。
```
python3 run_pageindex.py --md_path /path/to/your/document.md
```