PageIndex 是由 VectifyAI 开源的一套 "基于推理的 RAG" 框架,旨在解决传统向量 RAG 在专业文档场景中的局限性。
核心问题:传统 RAG 依赖向量相似度检索,经常出现"相似度很高,但相关性很差"的情况。例如:
PageIndex 的核心理念是:文档不是一堆无序的段落,而是有层级结构的树。
与其切块向量化,不如:
| 特性 | PageIndex(推理派) | 传统 RAG(向量派) |
|---|---|---|
| 检索方式 | 树结构 + 推理 | 向量相似度 |
| 文档处理 | 保留原始结构,不切块 | 切块,打断上下文 |
| 可追溯性 | 路径透明,节点可定位 | 黑盒,难回溯 |
| 适用场景 | 专业文档、长文本、高准确率要求 | 海量数据、轻量级应用 |
| 性能指标 | FinanceBench 98.7% | 普遍远低于此 |
在权威财务文档 Benchmark —— FinanceBench 上:
┌─────────────────────────────────────────────────────────┐
│ 1. OCR/解析文档 │
│ - 使用自研 OCR 模型(支持长上下文) │
│ - 将 PDF/扫描件转为结构化文本 │
│ - 保留层级标题、页码 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 2. 生成目录树(PageIndex Tree) │
│ - 文档转换为一棵树 │
│ - 每个节点包含:标题、摘要、子节点、页码 │
│ - 相当于把文档"知识地图化" │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 3. 用户提问 → 树搜索 │
│ - 大模型从树根开始推理 │
│ - 逐步筛选节点 │
│ - 直到找到最相关的分支 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 4. 返回节点上下文 │
│ - 返回答案 │
│ - 附带原始节点内容 │
│ - 提供检索路径(可追溯) │
└─────────────────────────────────────────────────────────┘
{
"title": "年度报告 2023",
"page": 1,
"summary": "公司2023年度财务与运营概况",
"children": [
{
"title": "财务报表",
"page": 5,
"summary": "包含资产负债表、利润表、现金流量表",
"children": [
{
"title": "现金流量表",
"page": 12,
"summary": "详细记录经营活动、投资活动、筹资活动现金流",
"children": [
{
"title": "经营活动现金流",
"page": 13,
"summary": "主营业务产生的现金流入流出"
}
]
}
]
}
]
}
用户提问:"2023年经营活动现金流同比变化多少?"
检索路径:
"年度报告 2023"
→ "财务报表"
→ "现金流量表"
→ "经营活动现金流"
每一步都是基于推理的选择,而非相似度匹配。
传统 RAG 的局限:
1. 智能查询重构(Query Reformulation)
1. 相关性精筛
1. 上下文感知合成
| 项目 | 核心机制 | 特点 |
|---|---|---|
| PageIndex | 树结构 + 推理 | 无向量、无切块、路径透明 |
| r1-reasoning-rag | DeepSeek-R1 + Tavily + LangGraph | 递归检索、动态信息检索 |
| SIM-RAG | Reasoner + Critic 解耦 | 自我修炼、生成训练数据 |
| NVIDIA Nemotron RAG | 查询重写 + 推理 | Q2E、Q2D、CoT 查询扩展 |
将 DeepSeek-R1 的推理能力结合 Agentic Workflow 应用于 RAG 检索。
GitHub: https://github.com/deansaco/r1-reasoning-rag
流程:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户提问 │────→│ 检索资讯 │────→│ 分析资讯 │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌─────────────────────┘
↓
┌─────────────┐
│ 资讯是否足够?│
└──────┬──────┘
│
┌───────────┴───────────┐
↓ ↓
┌─────────────┐ ┌─────────────┐
│ 是 │ │ 否 │
└──────┬──────┘ └──────┬──────┘
↓ ↓
┌─────────────┐ ┌─────────────┐
│ 生成答案 │ │ 进一步查询 │
└─────────────┘ └─────────────┘
r1-reasoning-rag/
├── agent.py # 核心 workflow 定义
├── llm.py # R1 模型定义
└── prompts.py # 提示词定义
├── VALIDATE_RETRIEVAL # 验证检索信息是否足够
└── ANSWER_QUESTION # 指导问答代理
| 维度 | PageIndex | 通用推理 RAG |
|---|---|---|
| 核心机制 | 文档树结构 + 树搜索 | 多轮推理 + 动态检索 |
| 是否需要向量 | 否 | 通常需要 |
| 是否需要切块 | 否 | 通常需要 |
| 检索方式 | 树遍历 | 迭代检索 |
| 适用文档 | 结构化长文档 | 各类文档 |
| 透明度 | 高(路径完全可见) | 中(推理过程可见) |
PageIndex 更适合:
未来 RAG 可能分化为两大流派:
向量派:
如果你的场景是:
快速开始:
# PageIndex
git clone https://github.com/VectifyAI/PageIndex.git
cd PageIndex
pip3 install -r requirements.txt
echo "CHATGPT_API_KEY=your_key" > .env
python3 run_pageindex.py --pdf_path /path/to/document.pdf
# r1-reasoning-rag
git clone https://github.com/deansaco/r1-reasoning-rag.git
PageIndex 和推理 RAG 代表了 RAG 技术的下一代演进方向:
核心洞察:
参考资源:
还没有人回复