不用 LLM 做摘要也能搞定长文档检索,NavTree 证明了结构比内容更重要
很多公司在做 RAG 落地时都会遇到一个尴尬点:文档太长,简单的 top-k 检索经常导致召回的片段全都挤在同一个段落里,结果就是模型虽然拿到了很多相关片段,但因为缺乏互补信息,根本答不对需要跨段落综合的复杂问题。为了解决这个问题,很多人在推 RAPTOR 这种分层摘要树,但实际部署起来成本极高,因为在索引阶段就要调用 LLM 给每个簇写摘要,这在处理海量文档时简直是预算杀手。
NavTree 的核心结论很直接:分层检索之所以有效,关键在于它提供了一种在文档中“导航”的结构,而不是那些 LLM 生成的摘要文本。这意味着我们可以完全抛弃索引时的 LLM 调用,用一个确定的平衡分段树(Balanced Segment Tree)来替代,仅通过叶子节点(原始文本块)的检索和树形结构的导航就能达到甚至超过摘要树的效果。
为什么传统的长文档检索经常失效
在实际的业务场景中,长文档 QA 最头疼的是“证据分散”问题。传统的扁平化检索(Flat Retrieval)依赖于向量相似度,这会导致一个结果:如果文档中某一段话与问题的关键词极其匹配,检索器会把该段落周围的所有片段全部抓回来,填满了 context window。但如果答案需要结合文档开头的一个定义和结尾的一个结论,这种“聚簇效应”就会让模型错过关键的互补证据。
RAPTOR 尝试通过递归聚类和摘要来解决,它在索引时把块聚类,然后用 LLM 总结,查询时把摘要节点和原始块一起排秩。虽然效果不错,但它引入了两个不可忽视的成本:
- 索引成本: 每一个聚类节点都要跑一次 LLM 总结,文档量大时,预处理时间是按天计算的。
- 噪声干扰: LLM 生成的摘要有时会丢失细节,或者在总结时引入幻觉,导致检索阶段被误导。
NavTree 如何在零索引成本下实现导航
NavTree 走了一条完全不同的路,它主张“只要结构,不要摘要”。具体操作流程如下:
- 构建确定性分段树:
在索引阶段,NavTree 不调用任何 LLM,而是直接在文本块上构建一个确定性的平衡分段树。这种树结构是静态的,仅仅是为了给文档建立一个层级索引,没有任何文本生成过程,索引时间几乎可以忽略不计。
- 执行混合前沿行走(Frontier Walk):
当用户提出查询时,NavTree 不再是简单地在所有块中搜 top-k,而是采用一种“混合词法与稠密检索”的前沿行走机制。它首先定位到最相关的叶子节点作为锚点,然后沿着树结构从根节点向下搜索。
- 仅输出叶子节点:
这是 NavTree 最关键的改进点——它在整个过程中只把原始的叶子块(Leaf Chunks)交给阅读器(Reader),完全不把中间的导航信息或摘要内容喂给 LLM。这样既保证了信息的原汁原味,又利用了树结构分散检索区域的能力。
性能对比与实际结论
在论文 2610.06902 的对照实验中,研究者为了公平,使用了“匹配成本”(Matched-Cost)的评估方法,这意味着对比的检索器在计算资源和 Token 预算上是等同的。结果非常具有颠覆性:
- 对比扁平检索: NavTree 在长文档多跳 QA(Multi-hop QA)任务上,是唯一一个在类对类(class-vs-class)对比中显著击败 BM25 的分层方法。这意味着在处理需要跨段落推理的问题时,NavTree 的结构化导航能力起到了决定性作用。
- 对比 RAPTOR: 即使是使用了强力集群摘要的抽象式 RAPTOR 变体,在相同的阅读器预算下,NavTree 在所有多块预算(multi-chunk budget)测试中都占据优势。
- 通用性验证: 这种性能提升并不依赖于特定的模型。无论换成更强的编码器,还是使用开源的阅读器,NavTree 的排名优势依然存在。这证明了“仅发射叶子节点”这一结构化策略才是真正的性能杠杆。
落地到公司项目时需要警惕的坑
如果打算把 NavTree 这种思路引入到公司的知识库项目中,不能简单地认为“树结构就万能”,有几个技术细节需要注意:
- 分段树的平衡性: NavTree 依赖于 Balanced Segment Tree。如果你的文档切片大小极不均匀,或者在构建树时没有做好平衡,导航行走可能会在某些分支上陷入局部最优,导致召回率下降。
- 混合检索的权重调优: 它的前沿行走依赖于“词法(Lexical)+ 稠密(Dense)”的混合模式。在实际业务中,关键词匹配和向量匹配的权重比例需要根据文档的专业程度进行微调。如果文档中包含大量专有名词,词法检索的权重需要适当提高,否则导航锚点定不准,后续的行走就会全盘出错。
- 对 Reader 的依赖: 虽然 NavTree 减少了对索引阶段 LLM 的依赖,但它最终输出的是多个分散的叶子块。如果你的阅读器(LLM)处理长上下文的能力较弱,或者对不连续片段的整合能力差,即便 NavTree 找对了块,模型最后依然可能答错。
个人观点:放弃“摘要迷信”
很多团队在做 RAG 优化时,第一反应就是“让 LLM 帮我总结一下”,觉得这样能提高检索精度。但 NavTree 给我们的启示是:摘要本身可能只是一个昂贵的中间件。很多时候,我们需要的不是一段总结好的话,而是一个能够快速定位到文档不同区域的“地图”。
对于企业级应用来说,零索引成本意味着你可以实时更新文档库,而不需要在每次文档变动后重新跑一遍昂贵的摘要树。这种从“内容依赖”转向“结构依赖”的思路,实际上把 RAG 的鲁棒性提高了,因为你不再担心 LLM 总结时丢了关键数字或改了专业术语,你拿到的永远是原文。
如果你的团队目前正被 RAPTOR 这种方案的索引成本折磨,或者发现摘要检索反而引入了噪音,尝试构建一个简单的分段树导航机制,可能会比升级一个更强的 LLM 来写摘要要高效得多。
之前用 RAPTOR 跑十万级文档,光建索引就把预算烧掉三成,后来换 NavTree 的平衡分段树,索引阶段零 LLM 调用,省下的钱够多跑两轮调参。那结构导航确实比摘要文本靠谱,至少我测长文档问答时,跨段落证据的召回率反而稳了。