PDF RAG 处理策略
面试官问你,Agent的RAG遇到PDF应该怎么处理?千万别上来就说”把PDF转成文本,然后切片入库”。这个答案太浅了。因为真实业务里的PDF,不只是文字,里面可能有目录、页眉页脚、表格、图片、流程图、合同条款、扫描件,甚至一页里面有多栏排版。如果你直接粗暴抽文本,最后RAG很可能检索到一堆断裂、重复、缺上下文的垃圾片段。
比较好的回答应该是:PDF处理要分成四层。
第1层:解析层
先判断PDF类型,是原生文本PDF、扫描件PDF,还是图文混排PDF。
- 原生PDF可以直接抽文本
- 扫描件要走OCR
- 图表、流程图、截图、复杂表格,不能只抽文字,要走视觉理解或者多模态模型
Anthropic的Claude PDF Support就是这个思路,它不是只能读文字,还可以理解PDF里的图片、图表和表格。
第2层:结构还原
不要把PDF当成一整坨纯文本,而是尽量保留页码、标题层级、章节、段落、表格、图片说明、脚注、页眉页脚。
- 合同PDF:切片时要知道这是第几章、第几条、第几页
- 财报PDF:要知道这个数字来自哪张表、哪个指标、哪个年份
否则Agent回答的时候看起来很自信,但你根本追不回来源。
第3层:切片和索引
PDF的chunk不能只按固定字数切,更好的方式是按语义结构切:
- 标题下面的段落放一起
- 表格单独结构化
- 图片和图表生成摘要
- 长表格可以按行列字段转成结构化文本
每个chunk都要带metadata:文档ID、页码、章节标题、表格编号、图片描述、时间版本。
可结合Anthropic的Retrieval思路:给每个chunk补一段上下文说明,让模型知道这个片段在原文中属于哪一部,避免检索回来以后”只见树木,不见森林”。
第4层:Agent调用
Agent不应该一次性把整个PDF塞进上下文,而是把PDF能力封装成工具:
search_pdf:检索相关片段read_page:读取指定页extract_table:抽表格analyze_chart:看图表quote_source:返回引用
用户问简单事实,就走向量召回;用户问复杂对比,就先检索多个章节,再让Agent规划阅读;用户问表格和图表,就调用专门的表格或视觉工具。
生产级细节
PDF RAG必须做可追溯引用和评测:
- 回答里最好能带页码、章节、原文片段,避免模型幻觉(Hallucination)
- Anthropic的Citation文档提到:PDF可以按提取出的文本做引用,并返回页码范围
- 评测时不能只看最终答案对不对,还要看:
- 检索片段是否命中
- 页码是否正确
- 表格是否解析准确
- OCR是否漏字
- 图表信息是否被正确理解
总结:这道题的面试标准答案不是”PDF转文本再向量化”,而是——先识别PDF类型 → 再做多模态解析 → 然后还原文档结构 → 按语义切片 → 给chunk补上下文 → 建立向量索引和关键词索引 → 最后通过Agent工具链按需检索、读页、抽表、看图,并且全程保留页码引用和评测闭环。