今天为大家分享一篇长文档 RAG 论文:SproutRAG。
长文档 RAG 最头疼的一个问题,其实很朴素:chunk 到底切多大?
切小了,检索很精准,但上下文容易断;切大了,上下文完整,但噪声又会变多。很多方法选择让 LLM 帮忙切块、扩展上下文,或者给层级节点做摘要。但这样又会带来在线/离线 LLM 成本、粒度固定,以及摘要丢信息的问题。
SproutRAG 的想法很形象:别再死切 chunk,让文档自己长成一棵树。
长文档 RAG 的核心矛盾
RAG 处理长文档时,通常会把文档切成一堆 chunks,再用向量检索找相关片段。
但 chunk 粒度天然有矛盾。
如果切成句子或很短的片段,检索结果会很精准,但证据可能只剩一个局部点,缺少前后逻辑。比如法律合同里,一个责任限制条款可能由连续几句话共同构成,只找其中一句就会漏掉例外条件。
如果切成大段,模型能看到更多上下文,但检索结果也更容易混入无关内容,浪费 token,还可能干扰生成。
已有方法一般有三类:LLM-guided chunking、single-level context expansion、hierarchical summarization。它们分别对应三个代价:要调用 LLM、只能在单一粒度扩上下文、摘要可能压丢原始证据。分块切断语义?哈佛InSemRAG解决了,速度快4倍
SproutRAG 要解决的,就是这个“精准”和“连贯”不能兼得的问题。
SproutRAG方案介绍
Attention-guided tree:让文档自己长成树
SproutRAG 的第一步,是从 sentence-level chunks 出发,把长文档组织成一棵attention-guided binary chunking tree。
它不是人工规定哪些句子该放在一起,也不是让 LLM 先总结一遍文档,而是利用小语言模型 SLLM 的 inter-sentence attention。
简单说,模型会看不同句子之间的注意力关系:哪些句子语义上更相关,就先把它们合并成一个节点;节点再继续合并,最后形成一棵二叉树。
论文中特别强调,SproutRAG 学习的是 attention heads 和 layers 的加权组合,而不是把所有注意力头简单平均。因为不同头捕捉的关系不同,朴素平均会引入 proximity bias,让距离近但语义未必强相关的句子更容易被合并。
这棵树的好处是:文档不再只有一种切法。叶子节点是细粒度句子,中间节点是更大的语义单元,更高层节点则对应更宽的上下文。
Progressive embeddings:每个粒度都有自己的表示
树建好以后,SproutRAG 不会把中间节点压缩成 LLM summary。
它使用progressive embeddings,让不同层级的节点都有自己的向量表示。这样做的关键,是避免 summarization 带来的信息损失。
大白话说,SproutRAG 同时保留了多种尺度:
- 叶子:句子级证据,适合精确命中;
- 中间节点:相邻句子组成的语义片段,适合保留局部上下文;
- 子树:更大的文档区域,适合覆盖长距离相关信息。
这就把“chunk 应该切多大”从一个固定选择,变成了检索时的动态选择。
Hierarchical beam search:检索时沿树找证据
SproutRAG 的检索也不是平铺式向量搜索。
它使用hierarchical beam search,在树上逐层搜索候选节点。检索时,系统可以返回 fine-grained leaves、mid-level nodes,也可以返回 broader subtrees。
这点很重要。普通 flat retrieval 通常只能返回一堆固定大小的 chunks;SproutRAG 则可以根据问题需要,在不同粒度上选证据。
如果问题只需要一个细节,就摘叶子;如果问题需要多句共同构成的解释,就拿中间节点;如果问题需要更宽上下文,就取更大的子树。
所以 SproutRAG 的检索画面不是“在碎片堆里找相似块”,而是“沿着文档树摘证据”。
Joint objective:树结构和向量表示一起学
SproutRAG 不是先随便建一棵树,再训练一个检索器。
论文说,它用 joint objective 端到端训练,同时优化 embeddings 和 tree structure。
这意味着两件事会互相影响:
- 节点表示能不能被检索到;
- 树结构是不是把真正相关的句子合在了一起。
Table 3 的消融实验也围绕这点展开,比较了训练目标、tree/retrieval design,以及 beam sizeb和lambda的影响。
这也是 SproutRAG 和很多层级摘要方法的区别:它不是把层级结构当成后处理,而是让结构本身参与训练。
实验结果
论文在 scientific、legal、open-domain 等四个检索基准上评估 SproutRAG。
摘要里给出的核心结果是:SproutRAG 的 information efficiency,也就是 IE,平均比最强 baseline 提升 6.1%。
SproutRAG 在四个 retrieval benchmarks 上 IE 都是最高。相对最强 baseline,分别提升:
- Dragonball:+8.06;
- SCI-DOCS:+4.65;
- LegalBench-RAG:+4.90;
- MS MARCO:+6.83。
这说明它不是简单把更多内容塞给模型,而是更会挑内容:既能保留上下文,又能避免太多无关噪声。
端到端结果也能看出成本优势。SproutRAG 的 online Tok/Q 是4382,延迟是193ms。对比一下:GraphRAG 是 16238 tokens、2317ms;PageIndex 是 24620 tokens、2847ms。
当然,PageIndex 在部分最终质量指标上更高,比如 HotpotQA / WebQuestions F1 和 Dragonball 指标,但它的在线成本也明显更重。SproutRAG 的定位更像是:在答案质量、检索效率和在线成本之间取得更好的平衡。
定性案例:法律问题不能只拿一句话
法律案例很能说明多粒度检索的价值。
问题是:协议是否限制 provider 的责任?有哪些例外或排除?
MoC 找到了 liability cap,也就是责任上限,但缺少损害排除和例外条件。SAKI-RAG 找到 damage exclusion + liability cap,但仍漏掉 exception sentence。
SproutRAG 则返回了一个 internal clause-level node,把相关条款作为一个更完整的语义单元取出来。
这类问题需要的不是一个孤立句子,而是一组共同构成法律含义的句子。SproutRAG 的树结构正好让系统能返回“刚好够用”的证据单元。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~