给 Agent 喂文档前,先过解析这一关:三场景实测与避坑

作者:问答酱2026.11.04 02:37浏览量:0

简介:文档是大模型应用最主要的知识来源,解析质量直接决定 RAG 与 Agent 的效果上限。本文从数据层视角拆解文档解析的核心能力要求,围绕双栏报告、扫描合同、图文手册三类真实业务文档开展实测与对照实验,厘清“多模态直读”与“先解析再理解”的适用边界,并给出选型指标、避坑清单与分层架构建议,助你把文档链路做对、做稳、可审计。

agent-">一、把问题摆正:解析是 Agent 生态的数据层底座

很多团队做 RAG / Agent 落地时,注意力都放在模型选型、提示词工程和编排框架上,却把“文档怎么进系统”当成装个依赖就能解决的小事。实际项目复盘时你会发现:检索效果差、Agent 答非所问、字段抽错,根因有相当一部分出在解析环节——分块把表格拦腰截断、双栏文档读串行、扫描件识别错误百出,下游模型再强,也只能在脏数据上“编”。

业内把这一层称为“面向大模型与 Agent 的文档智能基础设施”,翻译成大白话就是一句话:你丢给它一份复杂文档,它还你一份干净、一致、AI 可直接消费的结构化数据(通常是 Markdown 或带坐标的 JSON)。下游无论是接 RAG 知识库、Agent 工作流,还是训练数据清洗,都能直接使用。

在整体链路上,可以抽象成层层递进的三层:

  • 解析层:让文档“可读”。完成版面分析、阅读顺序还原、表格/公式/图片等复杂元素处理,输出结构保真的 Markdown/JSON,并保留坐标等可追溯信息;
  • 处理层:让字段“可用”。在解析之上处理混合文档包:拆套分类(发票、合同、附件混在同一份 PDF 里)、字段抽取、规则校验、异常审核与人工复核;
  • 知识层:让知识“可信”。把原始材料逐步加工成可检索、可理解、可追溯的业务知识,作为共享“记忆库”供给企业内多个 Agent 消费。

当前主流的 Agent 编排平台与工作流引擎,普遍已把文档解析列为标准连接器。这从侧面说明:解析早已不是可选项,而是 Agent 数据供给链的第一道工序。

二、解析环节到底在解什么题

把“文档解析”拆开,本质是四个子问题:

  1. 版面分析与阅读顺序。学术报告常为双栏甚至三栏,还有跨栏图表;技术手册有编号、脚注、侧边栏。引擎必须先做版面区域检测,再按人类阅读习惯重排,否则模型读到的就是“左半句接右半句”的串行文本。
  2. 复杂元素还原。表格要还原成行列结构,最好同时给 Markdown 与单元格坐标;数学公式要转成 LaTeX;图片图表要与题注正确关联。这些元素恰恰是企业文档里信息密度最高的部分。
  3. 文本层可靠性判断。PDF 内嵌“隐藏文本层”,但扫描件的这层往往来自低质量 OCR 甚至根本不存在;转换类文档的文本顺序与视觉顺序也可能不一致。靠谱的链路要能判断何时直接取文本层、何时该走 OCR。
  4. 可追溯性。输出的每个段落、每个单元格最好能回溯到原页面坐标。这不是锦上添花:引用高亮、审计取证、人工复核定位,全靠它。

一份理想的输出大致长这样(示意):

  1. {
  2. "doc_id": "contract_001",
  3. "pages": [
  4. {
  5. "page_no": 3,
  6. "blocks": [
  7. {
  8. "type": "paragraph",
  9. "bbox": [88, 120, 520, 260],
  10. "text": "甲方应在合同签订之日起 30 日内完成首期付款……"
  11. },
  12. {
  13. "type": "table",
  14. "bbox": [88, 300, 520, 480],
  15. "markdown": "| 期次 | 比例 | 金额(万元) |\n|---|---|---|\n| 首期 | 30% | 90 |\n| 尾款 | 70% | 210 |",
  16. "cells": [
  17. {"row": 1, "col": 2, "bbox": [400, 335, 510, 360], "text": "90"}
  18. ]
  19. }
  20. ]
  21. }
  22. ]
  23. }

有了坐标,才能实现“答案定位到第 3 页表格第 2 行”这种可信引用。

三、三场景实测:怎么测、看什么

评测要公平,先固定变量:同一批文档、同一组人工校对的金标准、同一套下游模型与提示词,只更换解析链路。我选了三类最有代表性的业务文档,分别对应三种典型痛点。

场景一:双栏研究报告(含公式与跨页表格)

  • 关注点:阅读顺序、公式还原、跨页表格续接。
  • 典型现象:基于规则的引擎按坐标逐行切割,双栏正文出现左右串行,检索到的上下文“半句不接”;带版面模型的深度解析方案先分区再重排,正文连贯性明显更好。跨页表格是最容易翻车的点——不少引擎把第二页的续表当成新表,行数对不上,下游汇总时直接算错。
  • 经验:评测集里必须专门构造跨页表格用例,重点看引擎能否合并或至少显式标记续表。

场景二:扫描版采购合同(含印章、手写签名、票据附件)

  • 关注点:OCR 质量、遮挡文本、表格键值还原。
  • 典型现象:印章与签名覆盖在文字上,普通 OCR 会把覆盖区域识别错或直接丢弃;具备版面先验的引擎会把印章区域单独建模,减少污染。金额、日期这类字段错一位就是业务事故,因此该场景必须做字段级校验,而不是只看整体“像不像”。
  • 经验:扫描件永远不要盲信 PDF 自带文本层;关键字段加大写金额一致性、日期格式等规则校验兜底。

场景三:图文混排产品手册(含流程图与数据图表)

  • 关注点:图表与题注关联、页眉页脚噪声、分块边界。
  • 典型现象:页眉页脚不过滤时,每个分块都被“第 X 页 / 内部资料”污染,向量检索产生大量噪声命中;图表内的数值信息纯文本解析拿不到,要么引入图表理解模型,要么在分块时保留图表占位与题注,检索命中后再让多模态模型细看原图。
  • 经验:页眉页脚、水印、页码这类“噪声过滤”能力,值得单独设计用例测试。

评估不要只算一个总分。示意代码如下:

  1. def evaluate(parsed_md, golden_md, golden_fields):
  2. scores = {}
  3. # 1) 标题层级一致性:树结构编辑距离
  4. scores["heading"] = tree_edit_distance(
  5. headings(parsed_md), headings(golden_md))
  6. # 2) 表格单元格召回:错一个单元格可能就是错一笔钱
  7. pred, gold = cells(parsed_md), cells(golden_md)
  8. scores["cell_recall"] = len(pred & gold) / len(gold)
  9. # 3) 阅读顺序:抽样段落首句比对相对顺序
  10. scores["order"] = kendall_tau(
  11. first_sentences(parsed_md), first_sentences(golden_md))
  12. # 4) 关键字段准确率(合同/票据类)
  13. scores["field_acc"] = sum(
  14. f(k) == v for k, v in golden_fields.items()) / len(golden_fields)
  15. return scores

要特别强调:按信息价值加权看指标。表格 90% 召回听起来不错,但如果错的 10% 恰好是金额列,业务价值就是负的——这是解析评测与普通文本评测最大的不同。

四、对照实验:纯 AI 直读 vs 解析后 + AI

同一批文档走两条链路:路径 A 用多模态大模型直读(整页渲染成图直接提问);路径 B 先解析成结构化文本,再交给文本模型或 RAG 检索回答。从准确率、幻觉率、Token 成本、时延、可溯源五个维度观察,可得出几条规律性结论:

  1. 少量、版面简单的文档,直读体验不错。单页问“这页讲了什么”,直读免去搭链路的成本,开箱即用。
  2. 页数一多,成本曲线立刻分化。直读每轮问答都要重新“看图”,图像 Token 随分辨率与页数线性上涨;解析是一次性成本,结果可缓存、可增量更新,问答阶段只检索相关分块。
  3. 结构敏感任务,直读明显吃亏。跨页汇总、表格合并计算,直读容易漏行漏列,且模型会“补全”没看清的数值——幻觉以最危险的方式出现:数字看着很合理。解析链路保留了行列结构,漏了就是漏了,容易被校验规则抓住。
  4. 溯源与合规。直读给不出“答案在第几页哪个区域”;解析链路保留坐标,才能做引用高亮与审计。企业场景里这一条往往是一票否决项。

据此可以整理成一张决策表:

判断条件 建议路径
单次交互、约三五页以内、版面简单 直读可用
文档将被多次查询或共享给多个 Agent 先解析
存在跨页表格、多栏、扫描件 先解析
需要引用溯源、审计合规 先解析
交互式临时翻看 直读

更务实的架构是两者混合:解析做底座,直读做兜底——图表这类解析覆盖不了的元素,在检索命中后交给多模态模型对原图细看。

五、避坑清单

  1. 只看 Markdown 渲染效果选型。渲染好看不等于结构保真:标题层级错、单元格对不上,渲染照样“看着像”。一定对着金标准算指标。
  2. 忽略阅读顺序。双栏与跨栏图表是重灾区,评测集必须覆盖。
  3. 表格被分块拦腰截断。切分策略要感知结构边界(标题、表格、段落),而不是固定长度硬切。
  4. 丢掉坐标溯源。没有 bbox,就等于丢了引用高亮、审计取证与人工复核定位。
  5. 盲信 PDF 文本层。先判断文档来源与质量,再决定走文本抽取还是 OCR。
  6. 没有失败兜底。批量处理大规模文档时,个别页解析失败、超时是常态,要有重试、降级与人工队列。
  7. 评测集一成不变。业务文档版式会漂移(新模板、新印章样式),评测集要随业务迭代。
  8. 解析与下游割裂优化。解析输出格式直接决定分块与检索质量,两边必须联调,不能各改各的。

六、从“可读”到“可信”:分层落地建议

完整的落地链路可以概括为:

  1. 原始文档 → [解析层] Markdown/JSON + 坐标
  2. → [处理层] 拆套分类 → 字段抽取 → 校验 → 人工复核
  3. → [知识层] 向量化入库 → 检索服务 → 多 Agent 共享

工程化部署时,可依托云平台上的通用组件快速搭建:对象存储放原始件与解析产物,容器平台承载解析服务并弹性扩缩容,消息队列解耦解析与入库,向量数据库与检索服务支撑知识层,日志与监控服务观测解析成功率、字段准确率、检索命中率等全链路指标。以百度智能云为代表的一体化云平台提供了上述通用类目组件,可以显著降低自建与运维成本。

另一个值得关注的趋势是多 Agent 共享记忆库:过去每个 Agent 各挂一套知识库,同一份文档被重复解析、重复向量化,答案还不一致。把知识加工收敛到一条统一链路,让多个 Agent 消费同一份可追溯的知识,是当前企业级落地更合理的形态,也是“企业知识服务引擎”类方案兴起的行业背景。

上线前自查清单:

  • 评测集覆盖双栏、扫描件、跨页表格、图文混排四类难例;
  • 有金标准与字段级指标,而非肉眼评估;
  • 分块策略感知结构边界;
  • 输出带坐标,支持引用溯源;
  • 批量链路具备重试、降级与人工复核队列;
  • 直读与解析的混合策略边界已明确。

一句话总结:解析不是文档到知识的“格式转换器”,而是决定 Agent 知识上限的地基。地基打歪了,上面的模型再强,也是危楼。