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工具链按需检索、读页、抽表、看图,并且全程保留页码引用和评测闭环。