/ AIBLOG

技术笔记

把 PDF 交给 AI 之前:用 Docling 转成 Markdown,并检查阅读顺序

知识库回答出现错行、数字错配时,问题可能已经发生在文档进入检索系统之前。一份 PDF 即使在屏幕上看起来清楚,转出的文字也可能把双栏内容交错排列,或把表格中的数值放到错误标题下。

Docling 的官方示例使用 DocumentConverter 将文件转换为文档对象,再导出 Markdown。[1] 本文把这一流程改写为一个本地文件示例,资料核对日期为 2026 年 10 月 19 日。

先准备一份可以人工核对的样本

本文建议先选几页有代表性、已获处理授权的 PDF,包含标题、普通段落和一张小表格。记录你预期看到的内容:

样本元素

人工核对点

标题

层级是否合理,是否混入页眉

双栏正文

是否按正确顺序连接

表格

列名、行名和数值能否对应

数字

小数点、负号、单位是否保留

脚注

是否被错误插入正文句子

先让转换质量可观察,再扩大到批量处理。不要一开始就把整批资料送进索引,之后才发现结构性错误。

在独立 Python 环境安装

根据官方安装文档,Docling 可通过 Python 包安装。[2] 在已经建立的独立虚拟环境中运行:

1python -m pip install docling

记录实际 Python 和 Docling 版本,并按项目已有方式保存依赖。这里不要求修改系统 Python;如果项目已经使用 uv 或其他环境管理工具,应沿用现有约定。

Docling 官方文档说明,默认情况下所需模型可能在首次使用时自动下载;也提供预取模型用于离线环境的方式。[3] 因此,“处理本地文件”与“第一次运行完全不访问网络”是两件需要分别验证的事。

转换一份本地 PDF

把授权样本放到 inputs/sample.pdf,在演示目录保存 convert_pdf.py:

1from pathlib import Path
2from docling.document_converter import DocumentConverter
3
4source = Path("inputs/sample.pdf")
5output = Path("outputs/sample.md")
6
7if not source.is_file():
8 raise FileNotFoundError(source)
9
10if output.exists():
11 raise FileExistsError(output)
12
13converter = DocumentConverter()
14document = converter.convert(str(source)).document
15markdown = document.export_to_markdown()
16
17output.parent.mkdir(parents=True, exist_ok=True)
18output.write_text(markdown, encoding="utf-8")
19print(f"输出:{output},字符数:{len(markdown)}")

然后执行:

1python convert_pdf.py

示例主动拒绝覆盖已有输出,方便保留上一轮结果。这里的预期是生成一个 UTF-8 Markdown 文件;它并不保证每个段落和表格都正确,仍需下一步对照检查。示例未在读者环境执行。

对照原页,而不是只读转换结果

建议把原 PDF 与 Markdown 并排查看,逐项检查样本表。特别留意那些读起来通顺、实际却改变含义的错误,例如:

  • 把“未通过”中的“未”漏掉;
  • 把某列数值移动到另一列;
  • 把页脚插进正文句子;
  • 把两栏的半句话连成一段。

本文建议用简短记录保存“文件、页码、问题、处理方式和复查状态”。读者可以手工修正衍生文件,也可以调整转换配置,但都应保留与原始来源的关系。

如果需要保留更丰富的结构信息,可继续查看官方的文档模型、序列化和分块接口。[1] 本文示例只导出 Markdown,没有实现页码映射或引用追踪。

区分模型下载与远程处理

Docling 官方高级选项说明,使用远程处理服务需要显式选择相应配置;模型权重下载则属于另一类网络行为。[3]

如果任务要求离线,应先按官方流程预取模型,再在目标网络条件下验证。不要为了消除错误而直接启用远程服务,也不要在没有检查插件、OCR 和模型配置的情况下承诺所有资料都不会外传。

进入知识库前,再做一道验收

本文建议只有通过样本核对的转换配置才进入后续分块流程,并至少保留原文件标识、文档版本和衍生文件位置。分块之后,再检查一条事实是否仍带有足够上下文,例如表格数值旁边是否保留了项目名和单位。

给 Agent 的任务可以写成:

使用指定的授权 PDF 样本,在独立目录完成 Docling 转换。保留原文件,输出到新路径,对照标题、阅读顺序、表格与数字列出质量检查结果。未核对的页码明确标记,不自动导入生产知识库。

参考来源

本文为原创整理;转换脚本、核对表和处理建议为作者设计。不保证 OCR 或表格转换达到特定准确率。