长PDF
处理长 PDF(比如几百页的招股书、技术白皮书、长篇财报)是 RAG 系统最核心的硬核实战场景。
如果直接无脑把整本 PDF 的文本转成向量丢进去,不仅会发生你提到的上下文爆掉(Context Overflow),更会因为长文本的“迷失在中间(Lost in the Middle)”效应,导致大模型严重漏掉核心信息。
要完美驯服长 PDF 并且死死卡住上下文窗口,工业界沉淀出了一套“感知-切片-路由-聚合”的组合铁拳:
一、 物理卡碎:高级版长 PDF 处理管线
长 PDF 处理的胜负手,在第一步解析(Parsing)阶段就已经决定了。绝对不要用基础的 pypdf 进行无脑的字符拉取,那会把表格和排版搅成一团浆糊。
1. 结构化解析(Layout-Aware Parsing)
使用 Markdown 格式作为长 PDF 转换的物理终点。
- 工具选择:使用
MinerU、Marker、Nougat或LlamaParse等具备视觉版面分析(Layout Analysis)能力的工具。 - 物理效果:它们能把 PDF 里的多栏排版、复杂的财报三张表(资产负债表等)完美还原为 Markdown 语法中的
|隔开的标准表格,并把一、二级标题精准翻译为#和##。这保证了后续切片时,数据的骨架不会散。
2. 父子块双层切片策略(Parent-Child Chunking)
这是目前防止检索失真最稳的切片模型:
- 子块(Child Chunk - 100~200 Token):切得极细,专门用来做 Embedding 和向量数据库检索。因为块小,语义聚焦,能把 PDF 某个角落里的一句细节指标精准打捞出来。
- 父块(Parent Chunk - 1000~2000 Token):包含子块所在的上下完整段落甚至整页内容。
- 路由机制:在向量库里我们只搜“子块”,但一旦子块中签,系统顺藤摸瓜,把这个子块对应的巨大“父块”捞出来喂给大模型。这既保证了检索的绝对锐利,又保证了大模型有充足的上下文去理解来龙去脉。
二、 如果上下文(Context)爆了,如何定点爆破?
当你使用 RAG-Fusion(多路并发检索) 捞出了大量文档,或者用户问了一个极为宏观的问题(如“总结这本 300 页 PDF 里面所有的系统架构设计缺陷”),捞出来的 Chunks 瞬间撑爆了 128K 上下文时,你可以祭出以下四道防火墙:
防火墙 1:最立竿见影的“全能重排王”(Reranker 算子)
向量库(Vector DB)找出来的 Top-50 文档,是基于“粗暴的向量相似度”,这里面有大量的滥竽充数。
- 做法:在向量库吐出 50 个 Chunks 后,千万别直接喂给 LLM。在中间加一个 Reranker(重排模型,如 BGE-Reranker、Cohere Rerank)。
- 原理:Reranker 是一个交叉注意力(Cross-Attention)模型,它会把用户的提问和这 50 个 Chunk 组合成一对对的精细输入,像考官一样当场给它们打出真实的语义相关性分值。
- 效果:通过重排,直接卡死只切出前 5 个(Top-5)最致命的黄金 Chunk 喂给 LLM,其余 45 个直接物理丢弃。上下文瞬间从“臃肿爆表”缩减到“几千 Token 的高纯度精髓”。
防火墙 2:分布式分而治之(Map-Reduce 推理模式)
如果你的任务是全局归纳(比如提炼全书大纲),重排模型没法删数据,因为每个 Chunk 都有用。这时候必须在应用层改变 LLM 的调用架构:
【 Map-Reduce 架构应对长 PDF 全局归纳 】
┌───────────────────────────────────────────────────┐
│ 长 PDF 拆出的 50 个有用 Chunks (总长 200,000 Token)│
└─────────────────┬─────────────────────────────────┘
│
┌──────────────┼──────────────┐ (分批并发提交)
▼ ▼ ▼
[ 批次 1 ] [ 批次 2 ] [ 批次 3 ] (每批控制在 4000 Token 内)
│ │ │
▼ (Map 阶段) ▼ (Map 阶段) ▼ (Map 阶段)
[微型大模型] [微型大模型] [微型大模型] (高并发,提炼出局部摘要)
│ │ │
▼ ▼ ▼
[局部摘要 1] [局部摘要 2] [局部摘要 3] (各自缩减到 500 Token)
│ │ │
└──────────────┼──────────────┘ (拼装组合)
│
▼ (Reduce 阶段)
【 终极大模型 (LLM) 】 ────> 吐出最终的 300 页 PDF 全局总结大表
- Map 阶段:把超长数据切成几千 Token 的并发组,让速度快、便宜的小模型同时去提炼“局部摘要”。
- Reduce 阶段:把所有局部摘要拼成一张几千字的小表,送进大模型的大脑,完成终极拼图。上下文永远不会爆。
防火墙 3:长文本感知调度(Chunked Prefill & vLLM)
如果是在你自己部署的端到端服务器上发生物理卡死或 OOM(显存溢出):
- 必须在底层的推理引擎(如 vLLM)中开启 Chunked Prefill 算子。
- 它会把长文本的庞大 KV Cache(键值缓存)打碎成多个 Chunk 分批加载、分批预填,阻止首字生成时因为巨大的 Attention 矩阵突发挤爆显卡显存。
三、 混合多模态:长 PDF 的最终大绝招(RAPTOR)
如果你面对的是逻辑错综复杂的教科书或研报,目前学术界和工业界最推崇的高阶长 PDF 方案是 RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)。
- 它的做法:
- 先把 PDF 切成底层的底层底层小 Chunks(叶子节点)。
- 用大模型把这些相邻的小 Chunks 聚类并各自生成一份“高层摘要”(变成父节点)。
- 再对父节点继续聚类、生成摘要,在后台构建出一棵递归的知识树(Tree Structure)。
- 检索时:当用户问宏观问题,系统去树的顶部直接捞“大高层摘要”;当用户问微观细节,系统顺着树枝去底部捞“细节小 Chunk”。通过在知识树上做自适应路由,用几千字就能直接概括几百万字的 PDF 精髓,优雅地在物理上绕过了任何上下文窗口的硬件限制。
你现在处理的长 PDF 大概是多少页的体量?其核心内容是文本密集型(如小说、法律条文),还是包含了海量的财务结构化表格?
