数据截至 (上游 commit c4b5ed6202d6)
后端层:把原始字节变成可处理形态
30 秒导读: 上一章(01-entry-dispatch.md)讲了 Docling 怎么从一个
source认出格式、挑出「后端 + 流水线」这一对。本章只讲这一对里的后端:它是每种输入格式 的「解码器」,把 PDF / Word / HTML / Markdown 的原始字节,变成下游能处理的形态。关键在于后端 分成两个物种——一种能自己把文档直接变成DoclingDocument(声明式),另一种只负责按页交付 像素和文本、把「读懂」留给流水线(分页式)。这条分界线,正是「为什么 HTML 配简单流水线、PDF 配识别流水线」的根因。
1. 这是什么(零基础也能懂)
一句话定义: 后端(backend)是 Docling 里每种文件格式各自的读取器,住在 backend/ 目录下,
职责是「把这一坨字节解码成我能处理的东西」。
它解决什么问题: 一个 .docx 是 zip 里的 XML,一个 .pdf 是压缩的绘图指令流,一个 .md
是纯文本。它们长得毫不相干。如果让上层流水线直接去啃这些字节,每加一种格式都要改一遍流 水线。
后端层就是那道隔离墙:上层只跟一个统一契约打交道,脏活(解 zip、调 PDF 解析器、跑 marko 解析
Markdown)全塞进各自的后端里。
一句话直觉/类比: 把后端想成读卡器。SD 卡、U 盘、光盘物理接口各不同,但插上读卡器后, 操作系统看到的都是「一个文件系统」。后端就是让千奇百怪的文件格式,对上层呈现出同一副面孔。
但这里有个关键分叉。 不是所有格式都「一样好读」:
- Markdown / HTML / Word 这类格式,结构是明写在字节里的——
#就是标题,<table>就是 表格。读一遍就能直接搭出结构化文档。这类叫**声明式(declarative)**后端。 - PDF / 扫描图片 这类格式,字节里只有「在坐标 (x,y) 画了个字符」,没有「这是标题」「这是 表格」的语义。要靠 AI 模型一页页去认版面、认表格、认公式。这类后端只能先把每一页的像素和 文本单元交出来,叫**分页式(paginated)**后端。
这一章就把这两个物种、它们共享的契约、以及各自的代表实现讲清楚。