长文档进 RAG 怎么处理?我的分块+摘要+分层方案

王老师559 阅读

把一本几百页的手册塞进 RAG,你会发现一个尴尬问题:全局性问题答不了。"这本书主要讲了什么?""第三章和第四章的关系是什么?"——这些需要看全局的问题,向量检索天然不擅长,因为每块只包含局部信息。

问题根源:分块让信息碎片化了。模型只能看到检索回来的几小块,看不到文档全貌。

我的三层方案

第一层:文档摘要。每篇文档入库时,用 LLM 生成一段摘要(500 字以内),摘要也做 embedding 存进库。全局性问题先命中摘要,再定位到具体文档。

第二层:章节摘要。如果文档有明确章节结构,每章也生成摘要。这样"第三章讲什么"这种问题能直接命中章节摘要。

第三层:段落块。保留细粒度的段落块用于具体问题检索。

检索时分层打分:先看文档摘要和章节摘要(全局语义),再看段落块(细节)。全局问题命中高层,细节问题命中低层。

实现注意

  1. 摘要生成成本。几百页文档每页都生成摘要,LLM 调用费可观。我只对文档级和章节级生成摘要,段落级不做,成本可控。

  2. 摘要质量影响全局检索。摘要生成得不好,全局问题就答不了。我用的是专门优化的摘要 prompt,要求提取关键信息而不是复述。

  3. 长文档的分块顺序。不要用固定长度从头切到尾。按章节结构切,每章一个块,超长章节再细分。保留章节标题作为块的上下文前缀。

  4. 上下文组装。最终喂给模型的 context,我按"文档摘要 + 相关章节摘要 + 相关段落"组装,并标注来源层级。模型能看到全局和局部。

实测:加上分层方案后,全局性问题准确率从 35% 提到 78%,细节问题保持 85% 以上。长文档 RAG 的体验提升非常明显。

长文档处理没有银弹,核心思路是保留不同粒度的信息并让检索能命中对应层级

评论0

还没有评论,来抢沙发~