mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
4545 字
12 分钟
PageIndex 实战:抛弃向量库的新一代 RAG,长文档检索准确率冲到 98.7%
2026-05-19

别再把长文档切成碎纸条喂给向量库了,让 AI 像人一样翻目录找答案。

听起来像吹牛?直到我看到这个数字——金融问答基准 FinanceBench 上,传统向量 RAG 准确率卡在 30%~50%,PageIndex 直接干到 98.7%

不是优化,是降维打击。2026 年 3 月,GitHub 23,000+ 星,X 上一堆开发者在转。

我装上跑了几个 PDF,确实有点东西。下面一次讲完。


一、PageIndex 是什么:让 AI 像人一样翻文档#

一句话定义:PageIndex 是一个不用向量数据库的 RAG 框架,它把长文档变成一棵”目录树”,然后让大模型像人一样翻目录找答案

传统 RAG 干的事情,是把你的 PDF 切成几百块碎纸条,每片打个数字标签(embedding),存到向量库里。你提问的时候,它在一堆碎纸条里”找相似度最高的几片”塞给大模型。

PageIndex 干的事情完全不一样:

  • 不切碎——保留原文档的章节、小节、页码结构
  • 不存向量库——只生成一棵带标题和摘要的”目录树”
  • 不算相似度——让 LLM 读着目录,像翻书一样推理”答案该在哪一章哪一节”
什么是 RAG?

RAG = Retrieval-Augmented Generation(检索增强生成)。简单说就是:先去你的资料库里捞相关内容,再把内容喂给 AI 让它回答。是当下让 AI “学会你私有知识”的最主流方案。

核心能力一览#

能力说人话
分层树索引把 PDF 变成”智能目录”,每个节点带标题、摘要、页码
零 chunking不切碎,保留章节完整语义
LLM 推理检索大模型自己想”答案在哪一章”,而不是算余弦相似度
可追溯每个答案能指到具体页码和章节,方便审计
开源 + 云服务双模式GitHub 上自己跑,或者直接调 docs.pageindex.ai 的 API

它最适合的场景,是专业、结构清晰、又长又复杂的文档

  • 上市公司财报、招股书、年报
  • 法律合同、判决书、合规手册
  • 技术规范、API 文档、白皮书
  • 学术论文、研究报告

如果你是律师、金融分析师、做合规的、做尽调的、做政策研究的——这个工具的设计就是冲着你来的。

一张图看懂:两种 RAG 的工作流对比#

传统向量 RAG vs PageIndex 工作流对比

上面是切片喂向量库的老路,下面是 PageIndex 的”建索引树 → LLM 推理 → 精准翻页”新路。两条流水线一对比,差别就清楚了:

传统向量 RAG 流水线

PDF → 文本抽取 → 分块(512-1024 tokens)
→ 向量模型编码 → 存入向量数据库 → 余弦相似度搜索
→ 取 Top-K 块 → 喂给 LLM → 生成答案

PageIndex RAG 流水线

PDF → 生成树状索引(LLM 构建分层目录)
→ 用户提问 → LLM 在树结构上做推理
→ 定位相关节点 → 抓取精确页内容
→ 喂给 LLM → 生成答案(带页码引用)

关键差别:传统 RAG 在”文本相似度”上做检索,PageIndex 在”文档结构”上做推理。前者是”找长得像的段落”,后者是”想想答案应该在哪一章”。

PageIndex 的工作原理(再细一层)#

整个流程拆开看就两步:

第一步:构建文档树索引(只做一次)

读取 PDF → 由 LLM 识别章节层级 → 输出一棵 JSON 树。每个节点带:

  • title:章节标题(如「第三节 管理层讨论与分析」)
  • node_id:节点唯一 ID(如 0010
  • start_index / end_index:起止页码
  • summary:LLM 生成的章节摘要
  • nodes:子节点链接
  • text:章节原文(按需返回)

文档保留了天然的层级结构,没有任何关系被切断——交叉引用、上下文、章节归属全在。

第二步:LLM 推理导航(每次查询)

问题来了之后,LLM 只看标题 + 摘要(不读全文),输出推理过程和需要检索的节点 ID。例如问完美世界年报”2025 年研发投入是多少?占营收的比例是多少?”:

推理过程:
问题询问研发投入金额与占比。节点 0012 标题为
"2025年度财务状况与经营成果分析",财务明细一般在这一节披露,
是最相关的位置。节点 0005「第二节 公司简介和主要财务指标」
可能有高层汇总,但通常只给关键指标,不含研发占比拆解。
因此主要检索节点 0012,必要时辅以节点 0005。
检索节点:0012 页码:22 标题:2025年度财务状况与经营成果分析

然后只把这个节点的完整原文塞给 LLM,生成最终答案。

从问题到答案,全程只调 2 次 LLM:一次导航推理,一次答案生成。没有余弦相似度,没有向量数据库,整个推理链可读、可验证——答案错了,你一眼就能看出是”选错了章节”还是”章节对但生成出了问题”。


二、PageIndex 为什么牛:和其他 RAG 怎么选#

先点出痛点

2026 年了,谁还没用过 RAG?但你有没有过这些破事:

  • 问 AI 一个明明文档里写着的问题,它告诉你”没找到”
  • 检索结果是一堆零散段落,前后文都丢了
  • 想让 AI 答得有据,但你根本不知道它从哪里抓的内容
  • 财报里同一个指标在五个地方反复出现,向量库分不清楚到底要看哪个

更绝的是一个你可能没想到的场景:问 AI”合同里不允许退款的条款在哪里”——向量库根本区分不了”不允许退款”和”允许退款”,因为这两句话的 embedding(数字指纹)几乎一模一样。向量空间不理解否定,它只认”相似”。

这些不是你不会用,是传统向量 RAG 这套机制在长结构化文档上天然吃亏

四种主流 RAG 横评#

工具核心方式适合场景主要限制
传统向量 RAG(LlamaIndex、LangChain 等)切片 + 向量相似度搜索大规模通用知识库、海量文档长文档语义割裂,准确率难突破
PageIndex树状索引 + LLM 推理导航长结构化单文档、专业领域多文档扩展性差,token 消耗高
GraphRAG(微软)提取实体关系 + 图谱社区跨多文档全局总结、复杂关系构建慢、更新贵、token 烧得猛
LightRAG实体+关系轻量图谱多跳推理、速度敏感场景仍需 embedding,依赖实体抽取质量

光看表格还是抽象,我给你翻译一下:

  • 传统向量 RAG:图书馆里随机翻 5 张书页给你看
  • PageIndex:先看目录,再翻到第 3 章第 2 节给你看
  • GraphRAG:把整个图书馆的知识画成关系网,问什么先去查网
  • LightRAG:GraphRAG 的轻量版,省点钱

怎么选?#

TIP

决策树(按你的实际场景选)

  • 你只是想问几篇财报 / 长合同 / 大手册的问题 → 无脑选 PageIndex
  • 你有几千上万份文档要做企业知识库 → 传统向量 RAG + 精排
  • 你要做跨文档的全局综述、关系挖掘 → GraphRAG
  • 你要又便宜又快、还能多跳推理 → LightRAG
  • 你又懒又有钱 → 直接调 PageIndex 云端 API,省去自己运维

必须泼一盆冷水#

WARNING

PageIndex 的几个坑,先看清楚再上车

  1. 扩展性差:单文档无敌,几百上千文档时树构建慢、查询贵。别拿它替代企业级向量库。
  2. 成本结构不同:向量 RAG 一旦建好索引,边际查询成本趋近于零;PageIndex 每次查询都要调 LLM 做推理导航,成本随查询量线性增长。日均万次查询的场景,这笔账要好好算。
  3. 依赖文档结构:标题层级混乱、纯扫描件 OCR 不准的 PDF,效果会打折扣;无章节的纯文本会降级为按固定页数均匀切割,优势消失。
  4. 中文用户特别注意:开源版的搜索算法用的是简单字符串匹配,对中文直接失效。中文场景建议走云端 API,而非自托管开源版。
  5. 不适合实时高并发:实测 23 页文档单次查询延迟 3-10 秒,比向量 RAG 慢两到三个数量级,做实时搜索框就别想了。
  6. 重建成本高:文档一更新,整棵树可能要重新构建。

一句话总结:长、结构清晰、对准确性要求高的少量文档,PageIndex 是神器;其他场景请慎重


三、PageIndex 怎么用:Windows 安装到出结果#

好了,终于到了你最想看的部分——怎么在自己电脑上把它跑起来。

我用的是 Windows 11 + Python 3.10 + VS Code,全程跑通。

工具组合说明#

工具类型工具名用途
零代码网页版chat.pageindex.ai上传 PDF 直接对话,无需任何代码
运行环境Python 3.10+PageIndex SDK 的基础环境
核心库pageindex (pypi 包)官方 Python SDK
可选 API KeyOpenAI / 云端 PageIndex Key自托管走 OpenAI,托管走官方 API
可选 MCP 服务pageindex-mcp让 Claude Desktop / Cursor 直接调它
测试文档一份长 PDF(财报/合同/白皮书)越长越能看出差距

PageIndex 有三种用法,按你的技术水平选:

方法谁适合优缺点
方法一:零代码网页版完全不想写代码的小白最快,上传即用,免费额度有限
方法二:Python SDK想写代码、集成到自己项目灵活,按量计费
方法三:开源自托管想完全控制、有 OpenAI Key最灵活,要自己维护

最推荐的起点:先用方法一验证效果,有感觉再上方法二、方法三。


方法一:零代码网页版(最适合小白)#

完全不想写代码?官方提供了一个网页聊天界面:chat.pageindex.ai/chat

PageIndex 网页版首页:上传 PDF 即可对话

用法极简:

  1. 打开 pageindex.ai 注册账号(Google 账号一键登录)
  2. 进入 Chat 界面,点左下角 + Add documents 上传你的 PDF
  3. 等待建树(进度条转完)
  4. 直接在对话框里提问

左侧有 Documents(文档库)、Library、Chats(历史对话)三个入口,管理多份文档很清晰。

我把完美世界 2025 年报丢进去,问”2025 年营收和净利润是多少?同比变化如何?“——它先后展开了 Get document structure(读目录)和 Get page content(抓页面)两个推理步骤,然后给出带页码引用的精确答案:

PageIndex 网页版实测完美世界财报问答

注意看每个数字后面的小角标——那是”溯源页码”,点开就能跳到原 PDF 的对应章节。这就是 PageIndex 区别于传统向量 RAG 的关键体验。

TIP

网页版适合快速验证:先把你最想测的那份财报或合同丢进去,再问几个问题,确认效果好再考虑接 API 或自托管。


方法二:Python SDK(30 秒装好,5 分钟出结果)#

适合想写代码、把 PageIndex 集成到自己工作流的人。

安装 PageIndex SDK#

这条路 30 秒就能搞定:

Terminal window
pip install -U pageindex

截至 2026 年 3 月,最新版本是 0.2.6

pageindex.ai 注册账号,拿一个 API Key(新用户有免费额度可以白嫖)。在 Dashboard 的 API Keys 页面,点 + Create your first key,起个名字(比如 test_key)就行:

PageIndex 后台创建 API Key

WARNING

API Key 只显示一次——创建完立刻复制保存到密码管理器或 .env 文件里,关掉对话框就再也看不到了。丢了只能重新生成。

我实战跑通的脚本 quickstart.py(拿一份完美世界 2025 年年度报告约 200 页 PDF 实测):

from pageindex import PageIndexClient
import time
import json
API_KEY = "你的API_KEY"
PDF_PATH = "./完美世界:2025年年度报告.pdf"
pi_client = PageIndexClient(api_key=API_KEY)
# 1. 提交文档(首次提交,构建文档树)
result = pi_client.submit_document(PDF_PATH)
doc_id = result["doc_id"]
print(f"文档已提交,doc_id: {doc_id}")
# 2. 轮询,等树构建完成
while True:
info = pi_client.get_document(doc_id)
if info.get("status") == "completed":
break
print(f"当前状态: {info.get('status')},等待中...")
time.sleep(5)
# 3. 保存目录树到本地,方便后面查看
tree = pi_client.get_tree(doc_id)["result"]
with open("tree.txt", "w", encoding="utf-8") as f:
f.write(json.dumps(tree, ensure_ascii=False, indent=2))
print("目录树已写入 tree.txt")
# 4. 针对财报的典型问题(异步查询:submit_query + get_retrieval)
questions = [
"2025年公司的营收和净利润是多少?同比变化如何?",
"公司2025年研发投入是多少?占营收的比例是多少?",
"公司的主要业务板块有哪些?各板块2025年表现如何?",
"经营性现金流和净利润的差异原因是什么?",
]
results = []
for i, q in enumerate(questions, 1):
print(f"提交问题 {i}/{len(questions)}{q}")
resp = pi_client.submit_query(doc_id=doc_id, query=q)
retrieval_id = resp["retrieval_id"]
while True:
r = pi_client.get_retrieval(retrieval_id)
if r.get("status") == "completed":
results.append({"question": q, "answer": r.get("result", r)})
break
time.sleep(3)
# 5. 写入 Markdown 结果文件
with open("results.md", "w", encoding="utf-8") as f:
f.write("# 财报检索结果\n\n")
for i, r in enumerate(results, 1):
f.write(f"## 问题 {i}\n\n**{r['question']}**\n\n{r['answer']}\n\n---\n\n")
print("全部完成,结果已写入 results.md")
WARNING

官方文档里的 retrieve() 已经废弃——我第一次照着官方 README 的 pi_client.retrieve(...) 写,返回里直接给了一行 deprecation 警告:Retrieval endpoints are deprecated. Use the chat-completion API。 现在的正确姿势是异步两步走:先 submit_query()retrieval_id,再轮询 get_retrieval() 拿结果。上面的脚本就是踩坑后改对的版本。

跑起来:

Terminal window
python quickstart.py

第一次跑会比较慢——200 页的财报,构建树大概 3-8 分钟。但树只建一次,后续所有查询都复用这棵树。下次跑可以把 doc_id 写死、跳过 submit_document 那步,直接发问。

底层到底怎么工作的?

整个流程每次查询只调 2 次 LLM:第一次”导航推理”(让模型看着目录想”答案在哪一节”,只读标题+摘要,不读全文),第二次”答案生成”(把选中节点的完整原文送进去)。

没有余弦相似度,没有向量数据库,整个推理链可读、可验证——答案错了,你一眼就能看出是”选错了章节”还是”章节对但生成出了问题”。

PageIndex 生成的目录树长什么样#

光看代码抽象,看看真的目录树。下面是 PageIndex 给这份 200 页财报生成的 tree.txt 节选——这就是它喂给 LLM 做”导航推理”的东西:

[
{
"title": "第二节 公司简介和主要财务指标",
"node_id": "0005",
"page_index": 6,
"nodes": [...]
},
{
"title": "第三节 管理层讨论与分析",
"node_id": "0006",
"page_index": 10,
"nodes": [
{ "title": "一、报告期内公司从事的主要业务", "node_id": "0007", "page_index": 10 },
{ "title": "二、报告期内公司所处行业情况", "node_id": "0008", "page_index": 10 },
{ "title": "2025年度经营业绩与核心业务发展分析", "node_id": "0010", "page_index": 14 },
{ "title": "业务经营概况与财务业绩分析", "node_id": "0011", "page_index": 18 },
{ "title": "2025年度财务状况与经营成果分析", "node_id": "0012", "page_index": 22 }
]
}
]

每个节点带 title(章节标题)+ node_id(节点唯一 ID)+ page_index(起始页码)+ text(章节原文)。LLM 看到这棵树,就像你看一本书的目录——“问的是研发投入,那应该看节点 0012「2025年度财务状况与经营成果分析」“。


方法三:开源自托管(完全本地化)#

如果你想完全本地化、不依赖云服务,把 GitHub 项目拉下来自己跑:

Terminal window
git clone https://github.com/VectifyAI/PageIndex.git
cd PageIndex
pip install -r requirements.txt

设置你的 OpenAI API Key(PageIndex 自托管模式默认用 GPT-4o 来做树构建和检索推理):

Terminal window
$env:OPENAI_API_KEY="sk-xxxxx"

然后跑 cookbook 里的示例脚本:

Terminal window
python run_pageindex.py --pdf_path ./your-doc.pdf
WARNING

自托管模式的 token 消耗肉眼可见。100 页的 PDF 构建一次树,保守估计要消耗 10-30 万 token。GPT-4o 跑下来大约 $1-3。先用便宜的 gpt-4o-mini 试效果,确认没问题再上 gpt-4o

中文用户额外注意:开源版自带搜索是简单字符串匹配,对中文直接失效。中文场景强烈建议走方法一或方法二。


进阶玩法:接到 Claude Desktop / Cursor(MCP 模式)#

如果你已经在用 Claude 桌面端或者 Cursor,可以装 PageIndex 的 MCP 服务,让 AI 编辑器直接调它,不用写代码。

打开 Claude Desktop 的配置文件(Windows 路径):

%APPDATA%\Claude\claude_desktop_config.json

加入这一段:

{
"mcpServers": {
"pageindex": {
"command": "npx",
"args": ["-y", "@vectifyai/pageindex-mcp"],
"env": {
"PAGEINDEX_API_KEY": "你的API_KEY"
}
}
}
}

保存后完全退出再打开 Claude Desktop(关掉系统托盘的图标,不是简单关窗口)。再问 Claude:“帮我分析这份 PDF……”,它就会自动调 PageIndex 来翻文档了。

Cursor 用同样的 JSON 格式,路径在设置 → MCP Servers 里。


效果评测:完美世界财报实测结果#

200 页的财报,4 个典型问题,PageIndex 都答出来了,每个数字都能溯源到具体节点和页码。挑两个最能看出差距的说:

问题:2025 年研发投入是多少?占营收的比例?

PageIndex 定位到节点 0012「2025年度财务状况与经营成果分析」,输出:

  • 研发投入:17.82 亿元(同比 -20.00%),占营收 26.75%
  • 资本化 1.57 亿(资本化率 8.81%),费用化 16.25 亿

注意:报表上”研发费用”16.25 亿(费用化部分)和”研发投入”17.82 亿(含资本化)是两个数。传统 RAG 经常混着抓,PageIndex 看目录就知道哪个数在哪节,没有混淆。

问题:经营性现金流和净利润为什么差这么多?

这题最考验”推理导航”——答案散落在现金流量表附注、利润表、权益变动表三处。PageIndex 定位到 001200590043 三个节点,精准抓出”现金流量表补充资料”那张关键表:净利润 6.92 亿 → 加回减值/折旧 ≈ 5.5 亿、加回经营性应收存货变动 6.8 亿、减经营性应付 9.25 亿 → 经营活动现金流 10.93 亿(同比 +89.57%)。

一击命中的关键

传统向量 RAG 大概率会抓回一堆”现金流”和”净利润”的零散段落,但答不出”为什么差异”——差异藏在「现金流量表补充资料」这张表里。PageIndex 看目录就知道去哪查,一击命中。

速度与成本(实测):建树 3-8 分钟(一次性),单次查询 5-15 秒,云服务 ¥0.3-1.5/次。比向量 RAG 慢一个数量级,但对”要精确、要溯源”的财报、合同、合规场景,这延迟可以接受。


三步走,今天就开始#

道理讲完了。打开电脑,照着做就行:

  1. 先注册 pageindex.ai 拿免费额度 —— 5 分钟,不写代码也能在他们 Playground 试一份 PDF
  2. 找一份你工作中真实的长文档(年报、合同、合规手册),跑一次 submit_document + submit_query,看看是不是真的好用
  3. 如果效果惊艳,就接到你的工作流里 —— 装 MCP 让 Claude / Cursor 直接调,或者写 Python 脚本批量处理

最后再提醒一遍:PageIndex 不是万能 RAG,是”长文档专精型 RAG”。看准场景再上,别拿锤子敲螺丝


工具没有最好的,只有最对的。 长文档、求精确、要可追溯——PageIndex 就是你的答案。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

PageIndex 实战:抛弃向量库的新一代 RAG,长文档检索准确率冲到 98.7%
https://law007.me/posts/pageindex-vectorless-rag-tutorial/
作者
Law
发布于
2026-05-19
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录