GitHub狂揽30k星标,别再死磕向量库!这个开源项目让长文档 RAG 准确率飙到 98.7%

lxiol

原文链接:https://mp.weixin.qq.com/s/ifLOB021pxFX5s2F-nEe5w

VectifyAI(一家AI初创公司)做了一个开源项目叫 PageIndex,思路完全反过来:不做切块,不建向量库,让LLM像人一样读文档。

先说个真实场景。

你手里有一份300页的招股说明书,用户问了一个具体问题:”这家公司过去三年的应收账款周转天数是多少?”

用传统的向量RAG,它会怎么干?

先把这300页切成若干个小块——每块500字、每块重叠200字——然后全部向量化。用户问问题的时候,把问题也转成向量,在向量库里找”最相似”的内容块。

结果往往是这样:

  • 找到了一堆提到”应收账款”的段落,但没有一个完整包含周转天数计算的
  • 或者找到的数据是对的,但上下文断了,你看不出这个数字是怎么来的
  • 最离谱的时候,它会给你返回一个看起来很相关、但实际是隔壁章节的内容

原因很简单:相似度不等于相关性。

向量搜索找的是”长得像”,不是”答案对”。

PageIndex想解决什么问题

VectifyAI(一家AI初创公司)做了一个开源项目叫 PageIndex,思路完全反过来:

不做切块,不建向量库,让LLM像人一样读文档。

怎么做到?

它的灵感来自AlphaGo——不是下棋的那个算法本身,而是它的树搜索思路。

人类拿到一本长文档,是怎么读的?

先看目录,找到相关的大章节,再逐级往下翻。这个”目录”就是一个天然的树状结构。

PageIndex就做了一件事:把文档的目录结构重建出来,变成一棵”语义树”,然后让LLM在这棵树上做推理式检索。

两步:

  • 生成文档的树状索引(类似目录,但不是按页码而是按语义分节)
  • 让LLM在这棵树上”走”,根据问题推理出哪条路径最相关

怎么工作的?

第一步:建树

给PageIndex扔一个PDF,它会分析文档结构,自动生成一棵树。

每个节点包含:

  • 标题(章节名)
  • 摘要(这个章节讲了什么)
  • 页码范围(起始页到结束页)
  • 子节点(下级章节)

举个例子,你扔一份美联储年报进去,它会生成这样的结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- `{`
- `"title":"Financial Stability",`
- `"node_id":"0006",`
- `"start_index":21,`
- `"end_index":22,`
- `"summary":"The Federal Reserve's framework for...",`
- `"nodes":[`
- `{`
- `"title":"Monitoring Financial Vulnerabilities",`
- `"node_id":"0007",`
- `"start_index":22,`
- `"end_index":28,`
- `"summary":"The Federal Reserve's monitoring..."`
- `}`
- `]`
- `}`

每棵树的根节点就是整份文档,子节点是章节、孙节点是子章节——跟真实目录的结构完全一致。

第二步:树搜索

用户提问了,比如”美联储对金融稳定性的监控框架是什么?”

这时候LLM不再是去向量库里捞”相似片段”,而是在这棵树上一边推理一边走:

  • 从根节点开始,看这个问题应该往哪个子分支走
  • 走到子节点,继续判断是否相关
  • 找到相关节点后,提取对应页码范围的内容

整个过程是可追溯的——你能看到它走到了哪个节点、看了什么内容、为什么认为这个部分相关。

不像向量搜索,你只知道”第37个向量最接近”,但不知道为什么。

为什么比向量RAG好?

1. 不破坏文档结构

传统RAG的切块是暴力的——500字一刀、重叠200字。一句话可能被切成两半,意思就变了。

PageIndex按文档原生结构分节,不破坏段落的完整性。

2. 上下文感知

向量搜索每次检索是独立的,跟对话历史没什么关系。

PageIndex的检索是上下文驱动的——它在树上走的时候,会结合你的完整问题(包含对话历史和领域知识)来判断哪个分支最相关。

而且它能轻松整合新的上下文。你补充一句”我关注的是科技公司”,它下一次推理的权重就会变。

3. 可解释性强

向量搜索是个黑箱——你只知道”这个chunk的相似度是0.87”。

PageIndex告诉你的是:”我找到了’Monitoring Financial Vulnerabilities’这一章,它在第22到28页,摘要显示它覆盖了美联储的监控框架……”

有页码、有章节名、有摘要,随时可以核对。

4. 人一样的导航方式

PageIndex的设计理念是模拟人类专家读长文档的方式:

  • 先扫目录定方向
  • 再进具体章节找内容
  • 中途发现走错了就折返

这不是什么花哨的技术,但它是真正符合人类认知习惯的。

效果怎么样?

用数据说话。

他们把这个方法用在一个金融文档分析系统(Mafin 2.5)上,在 FinanceBench 基准测试里跑了,结果是:

98.7%准确率

这个benchmark考的就是让AI从真实金融文档(SEC文件、年报、财报电话会记录)里提取具体数据——比如毛利率、现金流、债务条款之类的。

对比传统向量RAG,差距非常明显。

他们把完整的测试代码和数据都开源了,放在这个仓库里:github.com/VectifyAI/Mafin2.5-FinanceBench

怎么用?

自托管(开源免费)

1
2
3
4
5
6
7
8
- `# 安装依赖`
- `pip3 install --upgrade -r requirements.txt`
-
- `# 配置API key(支持多模型,LiteLLM统一封装)`
- `echo "OPENAI_API_KEY=your_key">.env`
-
- `# 给PDF建索引`
- `python3 run_pageindex.py --pdf_path /path/to/your/document.pdf`

可选参数:

  • --model:用哪个模型,默认GPT-4o
  • --max-pages-per-node:每个节点最多几页,默认10页
  • --toc-check-pages:从文档前多少页提取目录结构,默认20页
  • --if-add-node-summary:是否生成节点摘要,默认是

还支持Markdown文件:

1
- `python3 run_pageindex.py --md_path /path/to/your/document.md`

云服务(API + MCP)

不想自己搭,可以直接用他们的云服务:

  • Chat平台:直接上传文档对话
  • API:集成到自己系统里
  • MCP:接Claude Desktop等支持MCP的工具

Agentic Vectorless RAG

这是最近更新的一个用法。

结合OpenAI的Agents SDK,可以做一个完全无向量、无切块的Agentic RAG:

1
2
- `# 完整示例在 examples/agentic_vectorless_rag_demo.py`
- `python3 examples/agentic_vectorless_rag_demo.py`

每个检索步骤都是LLM在树上推理的结果,不是向量相似度匹配。适合需要多轮对话、多步推理的复杂场景。

PageIndex File System(大规模扩展)

这是另一个最近的更新亮点。

标准用法是对单份文档建索引,但如果你的文档库有上百万份呢?

PageIndex File System在索引层之上加了一层文件树——它把整个文档库组织成一个更大的树结构,让你能在整个语料上做推理式检索,而不只是单份文档内部。

相当于文档库级别的”目录”。

适合什么场景?

场景

适不适合

长文档问答(年报、招股书、法规文档)

✅ 非常适合

需要可追溯的检索结果

✅ 每个答案都有页码和章节

金融/法律/学术文档分析

✅ 98.7%准确率不是吹的

短文档、FAQ类问答

⚠️ 杀鸡焉用牛刀

对实时性要求极高

⚠️ 建索引需要一次预处理

完全没有技术背景

⚠️ 还是有点门槛

说点缺点

建索引需要预处理

向量RAG是”来一个问题,搜一次”。PageIndex是”先建索引,再无限复用”。

对于单次查询来说,PageIndex多了一步。但如果同一份文档要回答很多问题,索引建一次就够了,后续查询反而更快。

对复杂PDF的解析还有挑战

开源版本用的是标准PDF解析。对于扫描件、图片型的PDF,解析质量会打折扣。他们的云服务有增强OCR,但自托管版暂时没有。

生态还在早期

相比Pinecone、Weaviate这些已经比较成熟的向量数据库,PageIndex的周边工具(监控、备份、可视化)还比较少。

写在最后

PageIndex给我的最大启发,不是某个具体的技术细节,而是它重新定义问题的方式

向量RAG解决的是”怎么快速找到相似的内容”这个问题。但我们真正想要的,是”怎么找到真正相关的内容”。

这两个问题不一样,答案也不一样。

PageIndex选择了一条更难的路——不用向量相似度,而是让LLM在文档结构上做推理。效果确实好,但代价是实现更复杂、对LLM能力要求更高。

这是不是一个更通用的方向?我觉得是。

至少在金融、法律、医疗这些长文档密集的行业,”相似度”和”相关性”的差距是真实存在的,PageIndex解决的是一个真正的问题。

项目地址:github.com/VectifyAI/PageIndex


💬 本文评论区已开启,但暂无读者留言。

本文转载自微信公众号,如有侵权请联系删除。

  • 标题: GitHub狂揽30k星标,别再死磕向量库!这个开源项目让长文档 RAG 准确率飙到 98.7%
  • 作者: lxiol
  • 创建于 : 2026-05-08 21:48:50
  • 更新于 : 2026-06-30 17:05:34
  • 链接: https://blog.lxiol.cn/2026/05/08/GitHub狂揽30k星标别再死磕向量库这个开源项目让长文档-RAG-准确率飙到-987/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。