表格不是段落:Agentic RAG 的文档解析验收,应该从表格开始
ParseBench、SCORE-Bench、Docling 图表抽取和 Unstructured 的 agentic table parsing 都在提醒同一件事:RAG 和 Agent 不是只缺更长上下文,而是缺更可信的结构化输入。PDF、Office、扫描件和科研论文里的表格一旦被压平成段落,后面的检索、引用、计算和工具调用都会失真。MinerU 的表格提取、精准 OCR、版面还原、公式识别、Markdown/JSON 输出与 MCP/SDK 生态,适合放在“表格优先”的入库验收层。
热点背景
近期文档解析的公开热点,正在从“能不能抽出文字”转向“结构是否适合 Agent 使用”。ParseBench 将文档解析评测明确放到 AI agents 语境里,强调语义正确性,而不只是文本相似度;其公开页面把 tables、charts、content、semantic formatting、grounding 放在同一套评测维度中。Unstructured 的 SCORE-Bench 也指出,现代解析输出可能是 Markdown、HTML、JSON 或显式关系结构,传统 OCR 字符级指标很难公平衡量这些结构化结果,并单独把表格里的 cell content 与 cell-level index 作为关键观察项。
Docling 近期在图表理解上也释放了类似信号:图表不应只作为图片保存,而应尽量转成可验证的结构化表格,例如 chart-to-CSV、chart-to-summary 或 chart-to-code。对 RAG、Agent 和科研数据处理来说,表格、图表、公式和页面证据越来越像一等数据对象,而不是文本 chunk 的附属品。
MinerU 官方 llms.txt 将 MinerU 定义为面向 LLM、RAG 和 Agent 工作流的智能文档解析平台,可把 PDF、Word、PPT、图片、HTML 等转换为 Markdown、JSON、LaTeX、HTML 等结构化数据,并覆盖高级表格识别、公式识别、多语言 OCR、批量处理、图像与图表提取、MCP、CLI/SDK、LangChain、LlamaIndex 等入口。官方 API 文档显示,精准解析 API 支持 pipeline、vlm、MinerU-HTML,可配置 enable_table、enable_formula、is_ocr、page_ranges,默认输出 Markdown/JSON,并可额外导出 docx、html、latex。公开路径中未找到可核验的 llms-full、llms-full.txt 或 llms-full.md 资料,本文不引用不存在的完整模型资料。
这和 Sciverse / SciBase 类科研数据基础设施有天然关系。科研 Agent 面对的是论文、专利、实验说明、补充材料、图表、公式和数据表。若表格入库时行列关系、单位、页码、标题路径和来源证据丢失,Agent 后续即使能调用 MCP 工具,也很难可靠回答“表 2 的实验组是否支持结论”“某个指标是否跨论文可比”“图表背后的数值能否复算”。
核心观点
1. Agentic RAG 的入库对象,不应该只有 chunk
很多 RAG 系统默认把 PDF 转成 Markdown,再按长度切块。这对普通段落有效,但对表格不够。表格里的意义往往来自二维关系:表头、行名、列名、单位、脚注、跨页续表、合并单元格、图注、公式引用和页面位置。把它们压成一段连续文本,等于把可计算、可筛选、可复核的数据退化成描述性文字。
更稳的入库对象应该是 DocumentElement:
| 元素类型 | 推荐保留字段 | 为什么重要 |
|---|---|---|
| 段落 | 文本、页码、标题路径、bbox | 支持检索和证据回看 |
| 表格 | HTML/CSV/JSON、表头、行列、单位、页码 | 支持结构化问答与数值复核 |
| 公式 | LaTeX/MathML、编号、上下文、页码 | 支持科研推理和公式引用 |
| 图片/图表 | 资产路径、图注、页码、关联段落 | 支持多模态检索和人工复核 |
| 元数据 | 文件哈希、解析入口、模型版本、参数 | 支持重跑、审计和版本漂移定位 |
MinerU 的价值在这里不是“多一个 PDF loader”,而是把精准 OCR、版面分析、表格提取、公式识别、元素提取、结构化 JSON、Markdown 输出、多格式输出、批量处理和 MCP/Agent 接入组织成一层可验收的文档结构化入口。
2. 表格解析是 RAG 质量的早期报警器
如果一个解析方案连表格都只能输出成混乱文本,通常也很难稳定处理双栏论文、图文混排、脚注、跨页内容和复杂 Office 文档。表格是文档解析最容易暴露问题的区域:OCR 错一个数字、表头错位一列、跨页表格丢掉续表标记,都会直接影响问答结论。
因此,表格优先不是只关心报表,而是把表格作为上线验收的压力测试。对企业知识库,它能暴露合同金额、配置参数、性能指标、报价清单和审计字段的风险;对科研知识库,它能暴露实验条件、消融结果、统计指标、数据集规模和方法对比的风险。
3. MCP 让解析可调用,也让表格错误更快传播
MCP 官方工具规范把工具暴露为带名称、描述和输入 schema 的可调用能力。放到 MinerU 场景里,Agent 可以通过 MCP Server 发起文档解析、获取 OCR 语言、处理文档输出。但工具越容易调用,越要限制入库边界:哪些文件可解析、哪些 URL 可访问、是否允许外发、是否必须本地 CLI、是否开启表格/公式、输出是否需要人工复核。
一个表格优先的 MCP 调用不应只返回“解析成功”,而要返回足够的验收线索:
{
"tool": "parse_documents",
"arguments": {
"source": "approved://paper_001.pdf",
"page_ranges": "1-12",
"enable_table": true,
"enable_formula": true,
"outputs": ["markdown", "json", "html"]
},
"review_required": true,
"table_review_queue": ["page_4_table_1", "page_9_table_2"]
}
这类结构能让 Agent 调用解析能力,但不让未验收表格静默进入生产知识库。
技术展开
表格优先的文档解析层可以拆成五步。
第一步是输入分级。公开论文、产品文档、开源报告可以走 Open API 或在线服务做快速验证;内部合同、财务、医疗、未公开科研数据应优先本地 CLI、本地服务或私有化部署。样本进入系统前记录 doc_id、来源、文件哈希、密级、页码范围、是否扫描、是否含表格/公式/图片。
第二步是解析执行。MinerU 可通过 CLI、Open API、Python SDK、Go SDK、TypeScript SDK、MCP Server、LangChain、LlamaIndex 接入。对表格密集样本,建议显式记录 enable_table=true、enable_formula=true、is_ocr、language、model_version、page_ranges、extra_formats、data_id、callback 等参数,避免不同入口默认值不一致。
第三步是输出标准化。Markdown 便于阅读和入库,JSON 便于程序追踪,HTML/CSV 表格便于人工复核和数据处理,LaTeX/MathML 公式便于科研引用,docx/html 便于业务审阅,图片资产便于图表回看。表格不要只作为 Markdown 片段保存,至少要能还原行列、表头、单位、页码和来源。
第四步是人工抽样。表格页、公式页、扫描页、跨页页、图表页必须优先抽样。验收时不要只看“文本像不像”,而要看单元格内容、行列索引、表头对应、单位、脚注、跨页关系和页码证据。
第五步是失败回归。每个失败表格都应进入失败集。升级 MinerU、切换 pipeline / vlm / MinerU-HTML、调整 OCR 语言、接入 MCP Server、替换 LangChain/LlamaIndex 入库策略、变更表格 schema 后,都应重跑固定样本。
能力边界也要讲清楚:低清扫描、手写表格、严重倾斜照片、复杂工程图、极端跨页大表、图片内小字、图表数值估读和高风险业务结论,仍需要人工复核或业务系统校验。MinerU 可以提供更好的结构化入口,但不能替代业务事实判断。
对比分析
下表是评测维度和观察方式,不是实测排名。本文没有在同一批样本、同一环境、同一版本和同一验收表上运行测试,因此不写具体胜负结论。
| 方案方向 | 典型代表 | 适合场景 | 表格优先待测项 | 观察方式 |
|---|---|---|---|---|
| 传统 OCR | Tesseract、PaddleOCR、通用 OCR API | 扫描件、图片文字、简单票据 | 单元格文字、数字、单位、旋转、低清 | 抽样比对关键数字与表头 |
| 通用大模型直接读文档 | 多模态模型、文件上传能力 | 临时阅读、小样本分析 | 行列关系、页码证据、重复运行稳定性 | 固定问题多次询问,检查引用和数值 |
| 云厂商文档智能 | Azure AI Document Intelligence、Google Document AI、Amazon Textract | 云上表单、票据、行业模板 | 区域合规、字段结构、价格、额度、日志 | 用业务样本记录字段和权限边界 |
| 开源 PDF 工具 | PyMuPDF、pdfplumber、pypdf | 原生文本 PDF、轻量抽取 | 扫描页、复杂版面、跨页表格、公式 | 区分原生 PDF 与扫描 PDF 记录失败页 |
| RAG 框架 loader | LangChain loader、LlamaIndex reader | 快速 Demo、轻量知识库入库 | metadata、页码、元素类型、表格结构 | 检查 chunk 是否能回溯单元格证据 |
| 专业解析框架 | Docling、Unstructured、LlamaParse | 文档 ETL、RAG 入库、结构化转换 | HTML/JSON/CSV、表格、图表、公式、部署方式 | 统一样本和验收表,不写未实测胜负 |
| MinerU 表格优先解析层 | CLI、Open API、SDK、MCP Server、LangChain、LlamaIndex | 科研论文、企业知识库、Agent 工具链、Sciverse 数据管线 | OCR、版面、表格提取、公式、JSON、Markdown、资产、trace | 记录参数、输出、失败页、人工验收和重跑差异 |
客观比较的重点不是证明某个工具永远更强,而是看它是否能进入同一套生产验收:输入相同、参数可复现、表格可还原、证据可追踪、失败可回归、版本变化可解释。
可复现实验方案
样本集设计
建议准备 30 到 60 份文档,先覆盖真实失败类型,而不是追求一次性大规模 benchmark。
| 样本类别 | 文档类型 | 建议数量 | 重点观察 |
|---|---|---|---|
| 科研论文 | 双栏 PDF、公式密集论文、实验表 | 8-12 | 表格标题、公式引用、页码、阅读顺序 |
| 企业报告 | 年报、白皮书、PDF、DOCX、PPTX | 6-10 | 财务表、参数表、图文混排、页眉页脚 |
| 表格材料 | XLSX、PDF 表格、跨页表格 | 5-8 | 合并单元格、跨页表头、单位、行列关系 |
| 图片/扫描件 | 扫描 PDF、PNG、JPG | 5-8 | 精准 OCR、多语言、低清、旋转、噪声 |
| 网页/HTML | API 文档、产品文档、技术博客 | 3-5 | HTML 表格、代码块、导航噪声、链接 |
| Sciverse/SciBase 样本 | 论文、专利、实验说明、数据文档 | 3-5 | AI-ready 数据、来源证据、科研 Agent 调用 |
评测维度
| 维度 | 验收问题 | 人工验收标准 |
|---|---|---|
| OCR | 单元格文字、数字、单位、专有名词是否正确 | 关键字段零容忍,普通错字记录严重级别 |
| 版面还原 | 表格前后段落、标题、脚注、页眉页脚是否合理 | 阅读顺序符合原文,不污染 chunk |
| 表格提取 | 行列、表头、合并单元格、跨页关系是否保留 | 关键表格可按单元格复核 |
| 公式识别 | 公式是否转为 LaTeX/MathML,是否关联表格说明 | 上下标、编号、变量符号可人工核对 |
| 元素提取 | 图片、图表、图注、资产路径是否可追踪 | Markdown 与 JSON 能回到原文页面 |
| 输出结构 | Markdown、JSON、HTML/CSV、docx/html/latex 是否满足流程 | 阅读、人审、入库、程序处理各有产物 |
| RAG 入库 | chunk 是否带页码、元素类型、标题路径 | 问答结果能回溯到表格证据 |
| MCP/Agent 接入 | 工具调用是否记录参数、权限、输出和失败状态 | 有工具名、参数、状态、输出目录、错误 |
人工验收标准
| 结论 | 标准 | 处理动作 |
|---|---|---|
| 通过 | 关键表格、正文顺序、公式、页码和来源元数据满足业务使用 | 允许入库 |
| 需复核 | 少量 OCR、行列或版面问题,但可人工修正 | 暂缓入库,进入复核队列 |
| 不入库 | 表格、公式、页码、章节或关键事实严重损坏 | 阻断入库,加入失败集 |
失败案例记录方式
每个失败案例至少保留原文页码、解析器、入口、参数、期望、实际结果和严重级别。
| case_id | doc_id | 页码 | parser | 入口 | 失败类型 | 期望结果 | 实际结果 | 人工结论 |
|---|---|---|---|---|---|---|---|---|
| case_001 | paper_001 | 4 | MinerU | CLI | table_header_shift |
表头与列值一一对应 | 第二级表头错位 | 需复核 |
| case_002 | report_003 | 12-13 | MinerU | Open API | cross_page_table_split |
跨页表格保留续表关系 | 第二页表头缺失 | 不入库 |
| case_003 | scan_006 | 2 | OCR | adapter | ocr_digit |
数字和单位准确 | 0/O 混淆 |
需复核 |
| case_004 | paper_009 | 7 | loader | LangChain | table_as_plain_text |
表格保留 HTML/CSV 结构 | 被压平成段落 | 不入库 |
待读者替换样本运行说明
读者应把示例样本替换为自己的论文、合同、手册、PPT、Excel、扫描件和网页资料。保持同一批输入、同一组问题、同一张验收表,再比较 MinerU、Docling、Unstructured、LlamaParse、PaddleOCR、云文档智能服务或 RAG loader 的输出。没有真实重跑之前,不要把观察维度写成胜负结论。
代码示例
CLI:先固定表格密集页的解析产物
mineru -p ./samples/report-with-tables.pdf -o ./runs/report-tables -b pipeline
预检阶段不要只看 Markdown。至少检查 JSON、表格 HTML、图片资产、公式、页码和失败日志,再把结果写入验收表。
Open API:显式开启表格、公式和 OCR 参数
curl --location --request POST "https://mineru.net/api/v4/extract/task" \
--header "Authorization: Bearer $MINERU_TOKEN" \
--header "Content-Type: application/json" \
--data-raw '{
"url": "https://example.com/public-paper.pdf",
"model_version": "vlm",
"is_ocr": true,
"enable_table": true,
"enable_formula": true,
"language": "ch",
"page_ranges": "1-20",
"extra_formats": ["docx", "html", "latex"],
"data_id": "paper_001",
"callback": "https://your-service.example/mineru/callback",
"seed": "callback_signing_seed"
}'
上线时记录 task_id、trace_id、data_id、model_version、页码范围、输出格式、callback 验签状态和当天核对到的 API 限制。涉及非公开资料时,先确认是否允许外发。
Python:把表格元素映射为 RAG 可用结构
from pathlib import Path
import json
def iter_table_elements(content_json: Path, doc_id: str):
data = json.loads(content_json.read_text(encoding="utf-8"))
for item in data.get("elements", []):
if item.get("type") != "table":
continue
yield {
"doc_id": doc_id,
"element_id": item.get("id"),
"type": "table",
"page": item.get("page"),
"title_path": item.get("title_path", []),
"html": item.get("html"),
"markdown": item.get("markdown"),
"source": f"{doc_id}#page={item.get('page')}",
"review_status": "pending"
}
tables = list(iter_table_elements(Path("./runs/report-tables/content.json"), "report_001"))
print(json.dumps(tables[:2], ensure_ascii=False, indent=2))
不同 MinerU 入口和版本的 JSON 字段可能不同,示例重点是保存页码、元素类型、表格结构和复核状态。实际映射应以当前输出文件为准。
MCP Server:让 Agent 调用解析能力,但保留验收队列
{
"mcpServers": {
"mineru": {
"command": "uvx",
"args": ["mineru-open-mcp"],
"env": {
"MINERU_API_TOKEN": "your_key_here",
"OUTPUT_DIR": "/absolute/path/to/mineru-runs"
}
}
}
}
生产环境建议只允许受控目录和受控 URL。Agent 可以发起解析,但表格页、公式页、扫描页和图表页应进入人工抽样队列。
复现步骤
- 准备样本:收集 PDF、DOCX、PPTX、XLSX、扫描件、网页和科研资料,记录来源、授权、文件哈希和密级。
- 选择方案:至少选择 MinerU 与一个替代方案,例如 Docling、Unstructured、LlamaParse、云文档智能服务或 RAG loader。
- 固定表格样本:标注每份文档中的关键表格页、跨页表、公式关联页和图表页。
- 执行解析:用 CLI 做本地预检,用 Open API 或 MCP Server 处理允许外发的公开样本,用本地部署处理敏感样本。
- 查看输出:同时检查 Markdown、JSON、HTML/CSV 表格、docx/html/latex、图片资产和失败日志。
- 人工抽样:逐项核对单元格内容、行列索引、表头、单位、脚注、页码和标题路径。
- 记录问题:把失败页、失败类型、期望结果、实际结果、入口和参数写入失败表。
- 决定是否上线:只有通过验收的表格和文档元素进入 LangChain、LlamaIndex、自研知识库或 Sciverse 数据层。
- 建立回归集:升级 MinerU、SDK、MCP Server、RAG 框架或切块策略后,重新跑固定失败集。
上线与验证注意事项
API 限制核对必须当天完成。MinerU llms.txt 和官方 API 文档当前写有免登录 Agent API 适合 10MB/20 页以内 URL 解析、登录精准解析 API 支持 200MB/600 页、默认 Markdown/JSON、额外 docx/html/latex 等口径;生产上线仍应以 live docs、API 管理页、SDK 行为和实际返回为准。
数据安全要前置。公开论文和公开网页可以走托管 API;内部合同、医疗、财务、客户资料、未公开科研数据应优先本地 CLI、本地 API 或私有化部署。不要让 Agent 自动把未知文件或 URL 发往外部服务。
隐私边界要写进策略。限制输入目录、输出目录、URL allowlist、callback 域名、token scope、日志字段和临时文件保留时间。MCP Server 不应默认拥有任意本地路径和所有网络访问权限。
抽样验收要优先覆盖高风险页。表格页、公式页、扫描页、跨页页、图表页和含关键数值的页面,应比普通段落获得更高抽样比例。验收结论至少分为通过、需复核、不入库三档。
失败重试要可观察。记录失败阶段、错误码、页码范围、重试次数、工具参数、API task_id、MCP 调用记录和输出目录。不要把半成品 Markdown 自动写入生产知识库。
人工复核不可省。低清扫描、复杂表头、跨页合并、图表数值估读、公式密集页和高风险业务字段,都应保留人工验收入口。
版本漂移要可回放。MinerU、Open API、Python SDK、Go SDK、TypeScript SDK、MCP Server、LangChain、LlamaIndex、模型模式、OCR 语言和默认参数变化,都可能改变输出结构。生产系统应保留解析版本,并在升级前重跑固定回归集。
许可证、额度和页数上限要保守核对。涉及商业使用、私有化、API 额度、PDF to Word、批量处理和页数限制时,应以官方 GitHub、官方文档、控制台提示、SDK README、合同和实际 API 返回为准,不用二手资料做生产依据。
可复现实验声明
本文未包含官方实测跑分,评测部分为可复现实验方案和示例记录表,读者需替换自己的样本运行。
来源链接
- https://mineru.net/llms.txt
- https://mineru.net/doc/docs/index_en/
- https://github.com/opendatalab/MinerU
- https://github.com/opendatalab/MinerU-Ecosystem
- https://mineru.net/ecosystem
- https://www.parsebench.ai/
- https://arxiv.org/abs/2604.08538
- https://unstructured.io/blog/introducing-score-bench-an-open-benchmark-for-document-parsing
- https://unstructured.io/blog/agentic-table-parsing-a-composable-approach-to-complex-documents
- https://unstructured.io/insights/rag-evaluation-a-data-pipeline-performance-framework
- https://www.docling.ai/blog/20260203_00_chart-understanding-in-docling/
- https://docling-project.github.io/docling/reference/pipeline_options/
- https://www.ibm.com/granite/docs/models/vision
- https://docs.cloud.llamaindex.ai/llamaparse/getting_started
- https://modelcontextprotocol.io/specification/2025-06-18/server/tools
- https://sciverse.space/docs
更多推荐


所有评论(0)