📌 项目地址:VectifyAI/PageIndex | ⭐ 37,097 颗星 | 🔧 Python | 📜 未标注

向量 RAG 的老毛病

做 RAG 的人多半遇到过这种情况:问一份财报里的某个数据,检索回来的三段文字看着挺相关,就是不含答案;真正有答案的那张表格附注,因为措辞和问题完全不像,根本没被召回。

原因很简单。向量检索靠的是语义相似度,但相似不等于相关。README 里这句话说得非常直白:相似度搜索会漏掉“相关但不相似”的内容,也会返回“相似但不相关”的内容。它只做匹配,不做推理。文档越专业、越长,这个问题越严重。

PageIndex 的思路:把检索变成推理

PageIndex(VectifyAI 出品,37097 个 star)干脆扔掉了向量库和切块,换成两步:

  1. 建索引:给每份文档生成一个层级树状索引,结构类似书的目录
  2. 检索:让 LLM 在这棵树上逐层推理导航,找到该读的章节,就像一个行家翻长报告时直接翻到对的那一节

README 提到这个思路受 AlphaGo 启发:不暴力扫全文,而是用推理做选择性展开。

和向量 RAG 摆在一起看

README 的对比表值得原样转述:

Vector RAG PageIndex
索引 向量索引 树状索引
检索 语义相似度搜索 LLM 在树上推理
结果 黑盒,README 原话叫 “vibe retrieval” 可追溯到明确的引用位置
上下文 只有查询的 embedding 完整上下文:对话历史、领域知识等

我觉得”vibe retrieval”这个说法挺准的。向量检索没法解释为什么返回这几段。PageIndex 的每条结果都能指回文档的具体位置,可审计、可解释。金融、法律、医疗这些对溯源有硬性要求的场景,这一点是实打实的优势,不是锦上添花。

上手

pip install -U pageindex

README 里的初始化代码:

import os
from pageindex import PageIndexClient

os.environ["OPENAI_API_KEY"] = "your-openai-key"

client = PageIndexClient(
    index="gpt-5.6-luna",
    ...

README 的 Quickstart 到这里被截断了,完整的索引、检索、对话 API 用法要看官方 Docs(README 顶部有链接)。

几种使用形态:

  • 本地模式:用自己的 LLM key,索引、检索、对话全在本机跑,数据不出本地
  • 云模式:同一个客户端指向 PageIndex Cloud,换 API key 就行
  • PageIndex Flash:针对文本型 PDF 的快速树索引生成,现在是本地模式的默认索引方式
  • PageIndex File System:文件级树索引层,把索引从单份文档扩展到整个文档库,官方说可以到百万级
  • PageIndex App:官方托管的文档分析应用,不写代码直接用

成本这笔账

别光看优点。这个架构把检索成本从向量计算换成了 LLM 推理:每次检索至少一次 LLM 调用,token 消耗和延迟都明显高于向量检索。精度和可解释性是用钱换的。

所以它不适合的场景很清楚:短文档、简单事实查询、高并发低延迟需求,这些向量 RAG 依然更合适。PageIndex 的甜区是 README 点名的那类文档:财报、法律文书、监管备案、技术手册、医学文献、学术教材。共同点是答案藏得深,需要多步推理和上下文理解才能定位。

我的建议

37k star 说明向量 RAG 在专业长文档上的痛点是普遍的。如果你的系统里已经调过 embedding 模型、调过 chunk 大小、调过 top-k,效果还是差口气,那问题可能不在参数,在架构。拿一两份你最头疼的文档,跑一下 PageIndex 本地模式和现有方案对比,是最快的验证方式。

这篇文章对你有帮助吗?

发表回复