跳到主要內容

【2026 最新】Docling 模型來源怎麼查?五步建立離線 OCR 資產清單與驗收紀錄

最後更新: ·
Docling 模型來源教學:離線 OCR 資產追溯與驗收

你把掃描檢驗報告留在電腦裡,用 OCR(光學字元辨識,把圖片上的字變成文字)整理成表格。客戶接著問:「你用的是哪個模型?權重從哪下載?基底又是什麼?」這時,只回答「我用 Docling,而且離線跑」,還交不出一份可追查的 Docling 模型來源清單。

這篇寫給第一次負責文件自動化、願意把幾行指令交給工程同事一起執行的讀者。我們用虛構的檢驗報告情境,拆成五步:訂條件、選管線、留資產證據、斷網驗證、交付品質紀錄。你會得到一套盤點方法;文中的十頁報告是驗收設計,並非 AlphaLab 已完成的 OCR 測試成績。

先說結論:可追溯=配置+檔案指紋+來源證據+重跑紀錄

把模型清單想成一間廚房的進貨簿。Docling 是安排工作順序的廚房;版面、表格、OCR 模型是不同材料;執行設定是食譜。只記店名,無法說明今天這道菜用了哪批材料。

  • 程式授權、模型授權、基底與訓練資料,是四個分開的欄位;有一格已知,不能替其他格填答案。
  • 預先下載的模型庫是「倉庫」;實際被這次配置讀取的檔案,才是「領料紀錄」。
  • 斷網跑得完,支持的是那次配置與樣本可在該隔離環境完成;完整血緣與契約符合性仍需逐項證據。

一、先把 Docling 模型來源問題拆成五張收據

「來源」至少有五種意思:誰發布檔案、從哪個網址取得、採用哪種授權、模型沿用哪個基底、訓練資料從哪來。不要用發布者的名稱、國別或下載站台,代替其他四種答案。例如權重放在 Hugging Face,說明的是取得入口;它不是訓練歷史的完整證明。

截至 2026 年 11 月 9 日查閱,Docling 程式庫採 MIT 授權;Heron 版面模型卡標示 Apache 2.0;docling-models 儲存庫同時列出 CDLA-Permissive-2.0 與 Apache 2.0。這正是應往下看各子目錄及適用檔案、保存授權原文的原因,不能把整條管線寫成「全部 MIT」。

若你已讀過 套件來源與信任邊界教學,這裡多加了一層:安裝套件之外,第一次推論可能再取得權重、設定檔、字典與處理器。盤點應延伸到這些執行資產。

二、五步建立可交付的 Docling 模型來源清單

①「先寫採購條件」:把未知留在表上

怕工程做完才發現客戶要的是另一種「來源」?先寫一份假想允許清單。本例條件是:文件留在指定主機、關閉遠端推論、保留所有資產的取得網址與雜湊、逐項審閱授權;模型基底或訓練資料的必要資訊若證據不足,就列待確認並暫緩正式資料上線。這些是本例自行設定的條件,不是 Docling 提供的認證。

每一列至少填 stage(用途)、package_version、asset_path、source_url、revision、sha256、license_evidence、base_model_evidence、training_data_evidence 與 status。找不到的格子寫 unknown,並記錄下一個要找的文件或供應方。

驗收方式很具體:隨便選一個模型檔,另一位同事能從清單回到來源頁、固定版本與本機路徑;若只能回到某家公司首頁,證據還不夠細。

②「鎖住食譜」:明確指定 OCR,別只記預設值

Docling 的標準 PDF 管線會分工處理版面與表格,OCR 又有多種引擎可選。官方模型目錄列有 Heron、TableFormer、不同 OCR 引擎及可選 VLM(視覺語言模型,一起處理圖與文字的模型)。安裝 Docling 不代表每次都載入 Granite Docling。要看你選的是標準 PDF 管線還是 VLM 管線,以及另外開了哪些功能。

本例選標準 PDF 管線、EasyOCR 的繁中與英文,關閉圖片描述、程式碼與公式增強。這是為了讓稽核範圍容易看清,不代表此組合一定最適合你的文件。2.149.0 的設定程式碼將 OCR 預設設為自動選擇;可重查的配方應明確填入引擎與語言。

在已備妥 Python 3.10 以上的獨立工作資料夾中,先連網建立環境。以下固定 Docling 版本,並保留相依套件版本;正式搬到另一台主機時,還要備妥對應作業系統、Python 與硬體的離線安裝包。pip freeze --all 是版本快照,不是含所有安裝檔及雜湊的完整鎖檔。

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install "docling[easyocr]==2.149.0"
python -m pip freeze --all > requirements.snapshot.txt
python -m pip inspect > packages.json

接著把下段存成 convert_local.py。ch_tra 是此處 EasyOCR 的繁中代碼;Docling 的 EasyOCR 實作也列明其語言映射與模型目錄處理。範例只接受本機假報告,輸出 Markdown;它刻意不包含批次重試、結構化欄位抽取或生產服務。

from pathlib import Path
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import EasyOcrOptions, PdfPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption

options = PdfPipelineOptions(
    artifacts_path=Path("models").resolve(),
    enable_remote_services=False,
    do_ocr=True,
    do_table_structure=True,
    do_picture_description=False,
    do_code_enrichment=False,
    do_formula_enrichment=False,
)
options.ocr_options = EasyOcrOptions(
    lang=["ch_tra", "en"], use_gpu=False,
    download_enabled=False, force_full_page_ocr=True,
)
Path("pipeline-options.json").write_text(
    options.model_dump_json(indent=2), encoding="utf-8"
)
converter = DocumentConverter(format_options={
    InputFormat.PDF: PdfFormatOption(pipeline_options=options)
})
result = converter.convert(Path("fake-report.pdf"))
Path("result.md").write_text(result.document.export_to_markdown(), encoding="utf-8")

驗收看 pipeline-options.json:OCR 是否真的是 EasyOCR、語言是否一致、模型路徑是否正確。force_full_page_ocr=True 是對本例掃描假報告要求整頁 OCR;這和一般帶文字層 PDF 的處理選擇不同。

③「清點材料」:先下載,再留固定版本與指紋

怕執行到一半才發現少一份權重?先準備明確選取的模型資產。官方下載器 2.149.0接受模型名稱與 EasyOCR 語言參數。以下分開下載版面、表格及 OCR,避免用無篩選的全模型下載當成清單。

docling-tools models download layout tableformer --output-dir ./models
docling-tools models download easyocr --easyocr-lang ch_tra --easyocr-lang en --output-dir ./models

下載完成,保存終端紀錄、實際取得網址與每個模型庫的 commit SHA(某次版本的固定編號)。main 是會移動的分支名稱;只記它,日後可能拿到不同檔案。對照下載紀錄、下載器與本機檔案,把設定檔、字典、tokenizer/processor(文字與圖片前處理資產)也列入,不能只找 .safetensors。

下面存成 inventory.py,用 Python 標準函式庫逐檔計算 SHA-256(檔案內容的指紋)。此腳本做的是目錄存貨清點:不會自動查出授權、下載來源或證明某檔真的被載入。它會拒絕跑出模型根目錄的符號連結,並以串流讀取避免一次吃進整個大檔。

from pathlib import Path
import hashlib, json

root = Path("models").resolve(strict=True)
rows = []
for path in sorted(root.rglob("*")):
    if not path.is_file():
        continue
    resolved = path.resolve(strict=True)
    resolved.relative_to(root)
    digest = hashlib.sha256()
    with resolved.open("rb") as handle:
        for chunk in iter(lambda: handle.read(1024 * 1024), b""):
            digest.update(chunk)
    rows.append({"asset_path": str(path.relative_to(root)),
                 "bytes": resolved.stat().st_size,
                 "sha256": digest.hexdigest()})
Path("assets.json").write_text(
    json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8"
)

執行 python inventory.py 後,將 assets.json 接回前面的來源欄位。雜湊相同支持「內容與這份留存檔一致」;下載站或檔案若原本就不可信,自己算出的指紋不會把它變可信。對外部根目錄的合法共享快取,本例腳本會報錯,先把核准檔案複製到受控目錄再清點。

還要分清下載、載入、執行三種狀態:官方下載器可能取得不同推論引擎的資產;檔案存在不代表本次使用。讓工程同事保留模型初始化日誌,必要時搭配作業系統的檔案存取追蹤,將真正讀取的路徑回填為 observed_loaded;僅由設定推定的先寫 configured,其餘寫 prefetched_only。不要把設定快照包裝成完整執行追蹤。

一筆能照著填的例子:Docling 2.149.0 把 EasyOCR 資產放在 models/EasyOcr;對照 EasyOCR 1.7.2 的設定,繁中識別模型 zh_tra_g1 的檔名是 chinese.pth,下載指向官方 release 的 pre-v1.1.6/chinese.zip。先核對你的 packages.json 中 EasyOCR 版本,再開那一版設定檔,把這個 release URL、解壓後路徑與本機 SHA-256 放在同一列。若只有配方和設定證據,狀態仍是 configured;取得實際載入紀錄後才升為 observed_loaded。這個網址本身也不替模型基底或訓練資料的未知欄位作答。

Docling 模型來源盤點:已下載、已指定與觀測到載入三種狀態
三種狀態要分開記:目錄盤點不是載入追蹤;載入紀錄還要對回來源證據。

④「關門試煮」:用隔離環境驗證這一份配方

怕「離線」只是因為上次已偷偷下載過?將核准的環境、模型目錄、假報告與程式搬到受控測試主機,切斷其對外網路,重新啟動程序。既有快取也應清點或隔離,避免讀到清單外的備料。不要在唯一的遠端管理連線上直接操作斷網。

HF_HUB_OFFLINE=1 python convert_local.py > run.log 2>&1
python inventory.py
python -m pip freeze --all > requirements.after.txt

Hugging Face 環境變數文件說明 HF_HUB_OFFLINE=1 對 Hub 存取的作用;它不會替所有第三方套件建立網路隔離。EasyOCR 的 download_enabled=False 也只是該引擎的一項設定。真正的無對外連線條件,要由測試主機或網路層執行,並保留封鎖與連線觀測紀錄。

Docling 進階設定特別區分遠端服務與模型下載:enable_remote_services=False 管的是受該選項控制的遠端資料處理,模型取得另循下載機制。所以本例同時固定本機輸入、資產路徑與引擎下載選項,再以環境隔離驗證。

驗收保存開始/結束時間、退出狀態、run.log、輸出檔及前後雜湊差異。若模型缺檔就停下補證據,別在這次試跑臨時開網。成功結論應寫成「這份版本、配方與十頁樣本,在此隔離條件下完成」,而不是替所有文件、插件及未來版本背書。

⑤「驗菜再交貨」:來源與品質各自過關

怕清單很漂亮,批號卻錯一個字?另外做十頁完全虛構的檢驗報告。先保留人工定稿的標準答案,再把頁面轉成掃描影像型 PDF;確認測的是圖片辨字,而非只讀原本的文字層。樣本可涵蓋正向頁、旋轉頁、淡字與跨頁表格,並逐頁標記類型。這是你要執行的評測設計,不是本文提供的效能結果。

  • 批號:像「AB-0108」整串精確比對;漏字、連字號及 O/0 混淆分開記。
  • 材質:每個欄位對照標準答案;保留原字與正規化規則,別把相近名稱自動當同一種。
  • 表格:逐格核對列、欄、數值、小數點與單位;文字都認對但列對錯,也算錯。
  • 資產清單核對:每個 observed_loaded 資產都能對到路徑、雜湊與證據;必要條件的 unknown 仍標待處理。

自行設定的例子:十頁各有一個批號,若九個完全一致,樣本批號精確匹配率是 9 ÷ 10=90%;這只是算式示範,不是 Docling 成績。表格欄位應另報「核對幾格、錯幾格」,不要把一個文件轉換成功率當成所有內容的正確率。想延伸到金額與交叉欄位核對,可讀 OCR 證據與算術驗證。

三、Granite 的模型卡怎麼讀?已揭露的寫實,沒證據的留白

如果之後改用 Granite Docling,先另開一份配置與來源清單,不要沿用標準管線的通過紀錄。Granite Docling 258M 模型卡列出 Idefics3 架構、SigLIP2 視覺編碼器與 Granite 165M 語言模型,並說明公開資料集與內部合成資料兩類訓練來源。這些是模型作者公開陳述,應保存該次模型卡版本並逐項引用。

「使用 Idefics3 架構」和「直接沿用某份 Idefics3 權重」不是同一句話;除非另有權重初始化證據,不要互相代換。若客戶要求逐筆訓練資料來源或完整上游血緣,而目前收集到的材料不足以回答,就在對應欄寫 unknown,列出缺哪種證據;模型名稱不能替這格作證。

交付包建議包含六樣東西:環境版本快照、配置 JSON、資產與來源清單、留存的模型卡及授權、斷網執行證據、逐欄品質結果。來源過關與辨識品質過關是兩道獨立的門;其中一道卡住,就先不要把真實客戶文件接進正式流程。

四、常見問題:八個容易混在一起的判斷

1. Docling 是一個 OCR 模型嗎?

不是。它是文件轉換工具,管線能搭配不同版面、表格、OCR 或 VLM 元件;清單要追到所選元件。

2. 用本機,就證明完整模型來源了嗎?

不能。執行位置與模型血緣回答不同問題,需各自保留證據。

3. 關閉遠端服務,就不會下載權重嗎?

不能這樣推論。官方把遠端資料處理與模型取得分開,還要準備資產並驗證網路邊界。

4. assets.json 能證明哪些模型真的執行了嗎?

不能。它只清點指定目錄;載入與執行要補初始化日誌、檔案存取及對應配置。

5. 有 Apache 2.0,就能滿足客戶所有條件嗎?

不一定。授權是其中一項;本例還要求資產取得、血緣證據與執行環境,應逐項對照。

6. 模型卡沒寫清楚的地方怎麼填?

填 unknown。清楚註記尚缺哪項證據,避免把作者、架構或站台名稱拿來補空白。

7. 十頁都過,就能證明任何報告都可靠嗎?

不能。它只涵蓋這十頁的版型與擾動;新材質名稱、新掃描器或新表格都值得補入樣本。

8. 更新套件後,清單還能沿用嗎?

要重新比對。建立新版本快照、檔案清單與執行紀錄,將變動資產連回證據,再跑相同樣本。

給新手的三個重點

  • 先鎖配方,再清點倉庫,最後補實際領料證據。
  • 來源追溯交代「用了什麼、依據在哪」;品質驗收交代「這份文件讀對多少」。
  • 未知不是可以省略的一列。它決定下一步要補文件、換配置,或延後接正式資料。

接著閱讀

左右滑動查看更多推薦

下一步:先替一個模型補齊進貨簿

今天先選一份假報告,寫下配方,替一個真正讀取的模型檔補上來源、版本、指紋與未知欄位。再讓同事拿這份清單重找一次。當「可追溯=配置+檔案指紋+來源證據+重跑紀錄」四項能對上,下一次討論就能從「我相信這個工具」前進到「這份交付可以逐項核對」。

你可以從 AlphaLab AI 教學與分析挑下一個實作主題,或到 AlphaLab 課程把單次文件處理延伸成自己的工作流程。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

週日 Weekly 週報+週二、週四 Alpha Signal,每週最多三封。

我們不會 spam,隨時可退訂。已訂閱?管理訂閱偏好(會寄登入連結到你的信箱)

主題篩選與退訂說明

寄送日期以台灣時間為準。主題偏好會篩選每期精選,並非每篇新文章的即時通知;當期符合主題的文章不足時會略過寄送。

未勾選任何主題會收到所有主題的精選,並不會停止寄信。

取消勾選 Alpha Signal 可停止週二、週四短報,仍保留週日週報。若要停止所有電子報,請使用信件底部的「取消訂閱」。