jev-doc-search - 用多选式概率检索在长文档中定位答案页
jev-doc-search 是 VectifyAI 维护的示例项目,演示如何把「哪一页回答了这个问题」转化为多选概率判断,并借助 PageIndex 的层级树结构,在超出单次上下文长度的长文档中逐层缩小范围。项目采用 Apache-2.0 许可,尚无正式 release。
jev-doc-search 是 VectifyAI 维护的一个文档检索示例项目,仓库创建于 2026-09-30。它要解决的问题很具体:在一份几百页的报告里,找出真正回答了某个问题的页面。据项目说明,它的做法不是向量数据库加嵌入检索,而是把「哪一页回答了这个问题」改写为一道多选题——把候选页面作为选项交给模型,模型为每个选项返回一个概率,概率最高的页面即为答案。项目适合需要处理长 PDF、又希望检索过程可解释、可逐层追踪的开发者参考。
维护者与状态
项目由 VectifyAI 维护,仓库地址为 VectifyAI/jev-doc-search。仓库创建时间为 2026-09-30,最后一次提交在 2026-10-03,属于非常新的项目。截至 2026-10-26,仓库星标数为 156。事实表显示该项目尚无正式 release,也就是说目前没有可引用的版本号,使用时应以仓库中的脚本与说明为准。
主要能力
以下能力均来自项目自述,属于维护者对自身方法的描述,并非第三方评测结论。
- 扁平页检索(flat page search)。项目把每一页文本作为一个选项,构成一次多选判断,模型返回每一页的概率,概率最高者被选为答案页。项目提供了 page_search.py 脚本,可直接对较短的 PDF 提问。
- 树状检索(tree search)。当文档过长时,扁平检索会遇到两个限制:一是所有页面文本都要进入请求,而状态与选项需要控制在 32k token 以内;二是一次多选最多支持 255 个选项。项目借助 PageIndex 把文档按自身结构转成层级树——根节点是整份文档,子节点是章节,每个章节带标题、摘要和页码范围,再往下是页面——于是每一层只做一次小规模多选,选项数量与 token 占用都大幅下降。
- 逐层下探与行级定位。据项目说明,检索从根节点开始,每次在若干子节点中选一个,直到抵达页面;树还可以再往下一层,在选中页面内对行做一次多选,定位到具体行。
- Top-K 与束搜索。项目指出,每一步只取概率最高的选项比较脆弱,正确答案若排在第二就会丢失。因此可以保留概率最高的 K 个键,在树中即保留每层最优的 K 条路径,并按各步概率的几何平均值排序。
- 用 Noul 做候选校验。项目说明,多选是相对的,概率之和为 1,即使没有任何选项真正回答问题也总会给出一个赢家;而 Noul 是带独立概率的是非判断,可以把候选页面的全文放进状态中单独评估,再按阈值保留或丢弃。
- 完整检索脚本。tree_search.py 把上述三点组合起来:以宽度为 3 的束在任意深度的树中下行,对束末端的 3 个章节分别做页面多选,过长章节按窗口切分,最后对最多 16 个候选页面各做一次 Noul 校验,保留概率不低于 0.5 的页面,若没有则保留最好的 2 个。
使用入口
仓库地址:VectifyAI/jev-doc-search。
据项目说明,运行前需要安装依赖并配置两个 API key:
pip install -r requirements.txt export TYPESAFE_API_KEY="..." export PAGEINDEX_API_KEY="..."
短文档可以直接用扁平检索脚本,传入 PDF 与问题,脚本会打印最可能的页面及其文本:
python page_search.py handbook.pdf "How many vacation days do new employees get?"
长文档使用完整树状检索脚本,脚本会上传 PDF、构建树、打印 doc_id,然后输出检索落到的章节与保留的页面:
python tree_search.py NVIDIA_10K.pdf "What was NVIDIA's total revenue for fiscal year 2026?"
项目还说明,对同一份文档追问时可以把 doc_id 而不是 PDF 传给脚本,避免重复上传。
许可与限制
项目采用 Apache-2.0 许可证。
据项目说明,使用前需要自行准备 TypeSafe 与 PageIndex 两个服务的 API key,检索能力依赖这两个外部服务;扁平检索受 32k token 与 255 个选项的上限约束,超出后需要改用树状检索。项目自述中的示例结果仅针对其测试的两份年报,属于维护者给出的演示,不构成通用性能承诺。此外,仓库尚无正式 release,接口与脚本可能随提交变化,接入前应核对仓库当前内容。