Docling — PDFs so aufbereiten, dass KI sie richtig liest
Tabellen, Spalten, Scans und was das Markdown verschweigt. Docling auf dem eigenen Server, geprüft an einem Übungsdokument mit Kontrollwerten, und am Ende ein n8n-Ablauf, der Fragen zu einem PDF beantwortet.
▶ Das ganze Video
Am Stück, oder unten Stufe für Stufe mit Text daneben.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Worum geht's?
Wer eine KI Fragen zu eigenen Dokumenten beantworten lässt, merkt schnell: Die Antwort ist nur so gut wie der Text, den die KI zu sehen bekommt. PDFs sind für Menschen gemacht. Spalten, Tabellen und eingescannte Seiten kommen beim einfachen Auslesen kaputt oder gar nicht an.
Docling wandelt PDFs in sauberes Markdown und ein ausführliches JSON um. In dieser Schulung betreibst Du es selbst und prüfst an einem Übungsdokument mit sechs Kontrollwerten, was es kann und was nicht. Drei Befunde stehen drin, die beim Aufbau wirklich aufgefallen sind: Das Markdown lässt Fußnoten und Text in Bildern weg (Stufe 8), eine andere Texterkennung liefert eine falsche, aber glaubwürdige Telefonnummer (Stufe 7), und Bindestriche am Zeilenende gehen verloren (Stufe 6).
Den Abschluss bildet ein n8n-Ablauf: PDF hochladen, Frage stellen, Antwort mit Beleg. Er beantwortet auch die Fragen, deren Antwort in der Fußnote oder auf dem Stempel steht.
Selbstlern-Kurs zum Durchklicken. Dein Fortschritt wird lokal gespeichert.
? Für wen ist das interessant?
↗ Was Du vorher brauchst
- Einen VPS mit Docker: Self-Hosting & VPS, Docker, SSH.
- Für die Stufen 9 und 10: das n8n aus der n8n-Schulung mit einem Zugang zu einem Sprachmodell.
📚 Die zwölf Stufen
ℹ Stand der Dinge
Gemessen und aufgenommen im September 2026 mit docling-serve 1.35.0 (Docling 2.130.0, Prozessor-Image) auf einem VPS mit 4 vCPU, dazu n8n 2.40.5 und GLM 5.3 (mistral/zai-glm-5-3) über das AuxData-Gateway. Alle Messwerte stehen in kontrollwerte.md.
Docling erscheint sehr häufig neu. Beschriftungen der Oberfläche und Ergebnisse im Detail können sich ändern. Genau dafür gibt es die Kontrollwerte: nach einem Update das Übungs-PDF neu umwandeln und nachsehen (Stufe 11).
Warum Aufbereitung zählt
Die Antwort einer KI ist nur so gut wie der Text, den sie zu sehen bekommt.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Erstens Spalten. Wer ein zweispaltiges PDF einfach von oben nach unten liest, mischt Zeilen aus beiden Spalten. Dann steht die Traglast einer Werkbank plötzlich neben dem falschen Modell.
Zweitens Tabellen. Beim einfachen Auslesen zerfällt eine Tabelle in Zeilen. Welcher Preis zu welcher Spalte gehört, ist danach nicht mehr eindeutig.
Drittens Scans. Eine eingescannte Seite hat gar keinen Text, nur ein Bild. Für die KI ist sie leer, egal wie wichtig der Inhalt ist.
Unser Übungsdokument hat alle drei Stellen, und zu jeder gibt es einen Kontrollwert. So lässt sich nach jeder Umwandlung nachprüfen, was angekommen ist.
1 Was ein PDF eigentlich ist
Ein PDF beschreibt, wo Zeichen auf einer Seite stehen, nicht in welcher Reihenfolge man sie liest. Für einen Menschen ist das egal, er sieht Spalten, Tabellen und Stempel. Ein Programm, das „einfach den Text herausholt“, sieht nur Zeichen an Koordinaten. Drei Stellen gehen dabei regelmäßig schief:
2 Das Übungsdokument
Durch die ganze Schulung läuft ein Dokument: das Produktblatt der fiktiven Nordwerk GmbH, drei Seiten, jede mit einer typischen Falle. Zu jeder Falle gibt es einen Kontrollwert, den Du nach jeder Umwandlung suchst. Lade Dir beides jetzt herunter: nordwerk-produktblatt.pdf und kontrollwerte.md.
| Seite | Schwierigkeit | Kontrollwert |
|---|---|---|
| 1 | zwei Spalten, Satz über den Spaltenumbruch | WB-180 trägt 800 kg |
| 1 | Silbentrennung am Zeilenende | Baden-Württemberg, FI-Schutzschalter |
| 2 | verbundene Kopfzelle | WB-180 ab 5 Stück 459 € |
| 2 | Fußnote unter der Tabelle | Österreich und Schweiz plus eine Woche |
| 3 | eingescannte Seite, kein Text im PDF | 48 Stunden, Hotline 0821 99 88-501 |
| 3 | Stempel im Bild | Eingang 14. Juni 2026 |
3 Was Docling ist
Docling ist ein freies Werkzeug (MIT-Lizenz), ursprünglich von IBM Research, heute ein Projekt der LF AI & Data Foundation. Es erkennt mit eigenen, kleinen Modellen das Layout einer Seite: Überschriften, Absätze, Spalten, Tabellen, Bilder. Daraus macht es Markdown oder ein ausführliches JSON. docling-serve ist die fertige Server-Fassung mit Schnittstelle und Weboberfläche. Die betreiben wir hier, als Container auf dem eigenen Server.
Docling ist kein Sprachmodell und beantwortet keine Fragen. Es bereitet den Text vor, den ein Sprachmodell später liest. In Stufe 9 schließt ein n8n-Ablauf beides zusammen.
✓ Kurz geprüft
Voraussetzungen
Was vor dem ersten Befehl stehen muss.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Einen VPS mit Docker, wie in der Docker- und der Self-Hosting-Schulung. Docling braucht mehr Platz als die meisten Dienste: Das Image belegt auf der Platte fast acht Gigabyte, im Betrieb kommen bis zu zweieinhalb Gigabyte Arbeitsspeicher dazu.
Keine Grafikkarte. Es gibt eine eigene Variante nur für den Prozessor. Unser Dokument mit drei Seiten braucht damit um die zehn Sekunden.
Für die Schritte am Ende das n8n aus der n8n-Schulung und einen Zugang zu einem Sprachmodell. Wer nur umwandeln will, kommt ohne beides aus.
1 Deine Ausgangslage
- Ein VPS mit Docker und Compose, auf den Du Dich per SSH anmeldest: Self-Hosting & VPS, Docker, SSH.
- Platz für Docling. Das Image lädt gut 2 GB herunter und belegt entpackt knapp 8 GB auf der Platte. Im Leerlauf haben wir 0,8 bis 1,9 GB Arbeitsspeicher gemessen, während einer Umwandlung bis zu 2,4 GB. Plane rund 2,5 GB frei ein. Eine Grafikkarte ist nicht nötig, es gibt eine eigene Fassung nur für den Prozessor.
- Für die Stufen 9 und 10: das n8n aus der n8n-Schulung auf demselben Server, mit dem Zugang zum Sprachmodell aus deren Stufe 7. Wer nur umwandeln will, lässt diese beiden Stufen weg.
- Die Übungsdateien: nordwerk-produktblatt.pdf, kontrollwerte.md, compose.yml und frag-das-dokument.json.
2 Drei Regeln, bevor Du anfängst
127.0.0.1. In unserer Einrichtung fragt die Oberfläche nach keinem Passwort. Jeder, der den Port erreicht, könnte Dokumente hochladen und Rechenzeit verbrauchen. Du kommst über einen SSH-Tunnel hinein, wie bei n8n.docker compose down im Ordner /opt/docling entfernt den Container. docker image rm quay.io/docling-project/docling-serve-cpu:v1.35.0 gibt die knapp 8 GB wieder frei. Docling speichert keine Dokumente dauerhaft, es gibt kein Datenvolume.✓ Kurz geprüft
Installieren
Eine Compose-Datei, feste Version, Port nur lokal.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Docling bekommt einen eigenen Ordner. In der Compose-Datei steht das Prozessor-Image mit fester Versionsnummer, die Weboberfläche ist eingeschaltet, und der Port hängt nur an localhost. Dazu zwei Grenzen: höchstens fünfzig Seiten und zwanzig Megabyte pro Dokument.
Die letzten Zeilen hängen Docling zusätzlich an das Netz von n8n. Dann erreicht n8n den Dienst später einfach unter dem Namen docling. Wer kein n8n hat, lässt diese Zeilen weg.
Der erste Start lädt das Image, gut zwei Gigabyte. Das dauert eine gute Minute.
Der Gesundheitscheck antwortet mit ok. Im Leerlauf braucht Docling schon gut ein Gigabyte Arbeitsspeicher, weil die Modelle für Layout, Tabellen und Texterkennung geladen sind.
Für die Weboberfläche öffnest Du auf Deinem Rechner einen SSH-Tunnel, genau wie bei n8n. Dann öffnest Du im Browser localhost, Port fünftausendeins, und hängst U-I an.
1 Ordner und Compose-Datei
/opt/docling anlegen, hineinwechseln, compose.yml mit dem Inhalt unten anlegen (z. B. mit nano compose.yml).docker compose config --quiet meldet nichts, also keinen Fehler.networks: unter dem Dienst und den ganzen Block networks: am Ende löschen.services:
docling:
image: quay.io/docling-project/docling-serve-cpu:v1.35.0
container_name: docling
restart: unless-stopped
ports:
- "127.0.0.1:5001:5001"
environment:
DOCLING_SERVE_ENABLE_UI: "1"
DOCLING_SERVE_MAX_NUM_PAGES: "50"
DOCLING_SERVE_MAX_FILE_SIZE: "20971520"
mem_limit: 5g
networks:
- default
- n8n
networks:
n8n:
name: n8n_default
external: true
latest. Die Umgebungsvariablen schalten die Weboberfläche ein und begrenzen jedes Dokument auf 50 Seiten und 20 MB (20971520 Bytes). mem_limit deckelt den Speicher bei 5 GB, damit eine große Umwandlung nicht den ganzen Server lahmlegt.n8n_default. Docling hängt sich zusätzlich hinein. Dann erreicht n8n es unter dem Namen docling, also http://docling:5001, ohne dass ein Port nach außen offen ist.2 Starten und prüfen
docker compose up -d curl -s http://127.0.0.1:5001/health; echo docker stats --no-stream docling
compose.yml liegt in /opt/docling.{"status":"ok"}, und docker stats zeigt den Container mit gut einem Gigabyte Speicher.curl antwortet nicht: Docling lädt beim Start seine Modelle, einige Sekunden warten. Bleibt es still: docker compose logs docling.3 Der Tunnel von Deinem Rechner
ssh -N -L 5001:127.0.0.1:5001 root@DEIN-SERVER
http://localhost:5001/ui/. DEIN-SERVER ist ein Platzhalter für Adresse oder SSH-Alias. Läuft schon ein Tunnel für n8n, darf er offen bleiben, die Ports stören sich nicht.✓ Kurz geprüft
Die erste Umwandlung
Hochladen, umwandeln, ansehen.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Das ist die Oberfläche von Docling. Unter Convert File lade ich das Übungsdokument hoch: das Produktblatt der Nordwerk GmbH, drei Seiten.
Unter Options stehen alle Stellschrauben. Für den ersten Durchgang bleibt alles auf den Voreinstellungen: Texterkennung an, Tabellen im genauen Modus.
Process File. Auf dem Prozessor unseres Servers dauert das gut fünfzehn Sekunden.
Das Ergebnis gibt es in mehreren Formaten. Am besten lesbar ist Markdown-Rendered: Überschriften, Absätze und Listen, so wie ein Sprachmodell sie später bekommt. Kopf- und Fußzeilen hat Docling als Beiwerk erkannt und weggelassen.
1 Selbst umwandeln
http://localhost:5001/ui/ offen.docker compose logs --tail 20 docling. Ein Hinweis auf zu wenig Speicher heißt: mem_limit oder Server zu klein.2 Die Stellschrauben unter Options
| Einstellung | Voreinstellung | Wofür |
|---|---|---|
| Enable OCR | an | Texterkennung für Seiten und Bilder ohne Text. Stufe 7. |
| OCR Engine | Auto | Welches Erkennungsprogramm. Auto hat bei uns RapidOCR gewählt. |
| Force OCR | aus | Laut Dokumentation: auch vorhandenen Text durch Erkennung ersetzen. Für normale PDFs nicht nötig. |
| Table Mode | Accurate | Genauer Tabellenmodus. Fast ist schneller, bei verschachtelten Köpfen aber ungenauer. |
Die Reiter im Ergebnis: Markdown-Rendered zum Lesen, Markdown als Rohtext, dazu weitere Formate. Kopf- und Fußzeilen des Originals hat Docling als Beiwerk erkannt und weggelassen.
✓ Kurz geprüft
Tabellen
Wo Docling glänzt, und was dabei fehlt.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Seite zwei ist eine Preistabelle. Ihre Kopfzeile ist verschachtelt: Preis netto steht über zwei Spalten, ab einem Stück und ab fünf Stück.
Docling hat daraus eine saubere Tabelle gemacht. Im Markdown sieht man, wie: Die obere Zeile wurde in die Spaltennamen übernommen. Preis netto, ab fünf Stück. Damit ist jeder Wert eindeutig.
Und jetzt der Blick unter die Tabelle. Im Original steht dort eine Fußnote: Lieferung nach Österreich und in die Schweiz eine Woche länger, Mengenrabatt nur je Artikel. Im Markdown fehlt sie. Wohin sie verschwunden ist, klären wir in Stufe acht.
1 Die verschachtelte Kopfzeile
Preis netto - ab 1 Stück und Preis netto - ab 5 Stück. Bei der WB-180 steht 459 € in der zweiten. Kontrollwert erfüllt.Docling hat die obere Zeile („Preis netto“ über zwei Spalten) in die Spaltennamen übernommen. Beim einfachen Auslesen mit einer PDF-Bibliothek zerfällt dieselbe Tabelle in lose Zeilen, die Zuordnung ist dann unklar.
2 Die Fußnote fehlt
Unter der Tabelle steht im Original eine Fußnote: Lieferung nach Österreich und in die Schweiz eine Woche länger, Mengenrabatt nur je Artikelnummer. Im Markdown fehlt sie. Suche im Reiter Markdown mit Strg+F nach „Österreich“: kein Treffer.
✓ Kurz geprüft
Lesereihenfolge
Spalten, Absätze und Silbentrennung.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Seite eins hat zwei Spalten. Der Satz zur Traglast beginnt unten in der linken Spalte und endet oben in der rechten. Docling setzt ihn richtig zusammen: Die WB-180 trägt bis zu achthundert Kilogramm.
Allerdings mit einem Absatzwechsel mitten im Satz, weil das Original an dieser Stelle einen hat. Für eine Suche, die Texte in kleine Stücke schneidet, ist das eine Sollbruchstelle.
Und hier ein kleiner, aber echter Fehler: Wo im Original am Zeilenende getrennt wurde, fehlt jetzt der Bindestrich. Baden-Württemberg und der FI-Schutzschalter stehen jetzt ohne Bindestrich da, als ein zusammengeklebtes Wort. Wer nach dem richtigen Wort sucht, findet es nicht.
1 Der Satz über den Spaltenumbruch
Der Absatzwechsel steht so im Original, dort beginnt die rechte Spalte mit einem neuen Absatz. Für einen Menschen harmlos. Für eine Dokumentensuche, die Texte in kleine Stücke schneidet (wie in Open WebUI und LibreChat), ist es eine Sollbruchstelle: „trägt bis zu“ und „800 kg“ können in verschiedenen Stücken landen.
2 Verlorene Bindestriche
Im Original werden Baden-Württemberg und FI-Schutzschalter genau am Bindestrich getrennt. Docling hat den Bindestrich für eine Silbentrennung gehalten und entfernt. Im Ergebnis steht BadenWürttemberg und FISchutzschalter. Das JSON hat denselben Fehler.
✓ Kurz geprüft
Texterkennung
Die eingescannte Seite, und eine glaubwürdige falsche Zahl.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Seite drei ist ein Scan, leicht schief, mit Rauschen. Ohne Texterkennung wäre sie leer. Docling hat sie gelesen: Reaktionszeit achtundvierzig Stunden, die Hotline mit der Durchwahl fünfhunderteins.
Aber nicht fehlerfrei. Wörter kleben zusammen, und die Nummerierung der Liste stimmt nicht mehr. Versuchen wir eine andere Engine: EasyOCR. Deutsch steht in ihrer Sprachliste schon drin.
EasyOCR braucht deutlich länger, gut dreißig Sekunden statt acht.
Die Wörter sind besser getrennt. Aber schau auf die Telefonnummer: Aus achtundachtzig ist null acht geworden. Eine falsche Nummer, die genauso glaubwürdig aussieht wie die richtige. Zahlen aus Scans also immer gegen das Original prüfen. Für den Rest der Schulung bleibt die Voreinstellung Auto.
1 Seite 3 mit der Voreinstellung
Seite 3 ist ein Scan: leicht schief, mit Rauschen, ohne eine einzige Textzeile im PDF. Ein einfaches Auslesewerkzeug liefert hier 0 Zeichen. Docling hat mit der Voreinstellung (Auto, bei uns RapidOCR) gelesen: Reaktionszeit 48 Stunden, Hotline 0821 99 88-501. Beide Kontrollwerte stimmen. Aber Wörter kleben zusammen („16Uhr“, „gekündigtwird“), und die Nummern der Liste stimmen nicht mehr.
2 Eine andere Engine
en,fr,de,es). Noch einmal Process File. Dann auf Seite 3 die Hotline suchen.| Engine | Dauer | Hotline 0821 99 88-501 | Wortgrenzen |
|---|---|---|---|
| Auto (RapidOCR) | 8 s | ✓ richtig | teils zusammengeklebt |
| EasyOCR | 30–35 s | ✗ „99 08-501“ | besser, dafür Buchstabenfehler („Hontag“) |
| Tesseract | – | Abbruch, im Prozessor-Image nur Englisch | |
Gemessen am 23. September 2026, docling-serve 1.35.0, ganzes Dokument.
✓ Kurz geprüft
API und JSON
Was das Markdown verschweigt.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Dieselbe Umwandlung geht ohne Oberfläche, mit einem einzigen Aufruf an die Schnittstelle. Ich lasse mir Markdown und JSON zugleich geben.
Im Markdown kommt Österreich nicht vor. Null Treffer. Die Fußnote ist dort wirklich weg.
Im JSON dagegen hat Docling die Fußnote erkannt, mit dem Etikett footnote, als Teil der Tabelle. Das Markdown hat sie nur beim Schreiben weggelassen.
Genauso der Eingangsstempel auf dem Scan. Im Markdown stand dort nur ein Platzhalter für ein Bild. Im JSON steht der Text: eingegangen am vierzehnten Juni. Die Lehre: Docling liest mehr, als das Markdown zeigt.
1 Umwandeln ohne Oberfläche
/opt/docling. Das Übungs-PDF liegt dort (von Deinem Rechner mit scp nordwerk-produktblatt.pdf root@DEIN-SERVER:/opt/docling/).ergebnis.json von rund 50 KB. Sie enthält Markdown und JSON zugleich.{"detail": …} mit Field required: Das Feld heißt files, mit s. Keine Antwort und echo $? zeigt 26: curl findet die Datei nicht, falscher Ordner oder Tippfehler im Namen.curl -s -X POST http://127.0.0.1:5001/v1/convert/file \ -F files=@nordwerk-produktblatt.pdf -F to_formats=md -F to_formats=json \ -o ergebnis.json
to_formats darf mehrfach stehen. Die Antwort ist JSON, das Markdown steckt in document.md_content, das ausführliche Dokumentmodell in document.json_content.2 Wo die Fußnote wirklich ist
apt install -y jq jq -r .document.md_content ergebnis.json | grep -c Österreich
jq '.document.json_content.texts[] | select(.label=="footnote") | {label, text, parent}' ergebnis.json
"label": "footnote" und dem Verweis #/tables/0: Docling hat die Fußnote erkannt und der Tabelle zugeordnet. Nur beim Schreiben des Markdowns bleibt sie weg.jq -r .document.md_content ergebnis.json | grep -n image
jq -r '.document.json_content.texts[] | select(.parent["$ref"] | startswith("#/pictures")) | .text' ergebnis.json
<!-- image -->. Im JSON hängt am Bild der erkannte Text: „EINGEGANGEN 14. JUNI 2026“.✓ Kurz geprüft
Der n8n-Ablauf
PDF rein, Antwort raus: ein Formular, Docling, ein Code-Schritt, GLM.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
In n8n füge ich den fertigen Ablauf von der Schulungsseite ein. Er hat fünf Schritte.
Ein Formular nimmt ein PDF und eine Frage an.
Ein HTTP-Aufruf schickt das PDF an Docling, unter dem Namen docling im gemeinsamen Netz, und verlangt Markdown und JSON.
Ein kleiner Code-Schritt baut den Text für die KI: das Markdown, und darunter alles, was im JSON an Tabellen und Bildern hängt. Also genau die Fußnote und den Stempel.
Dahinter beantwortet GLM die Frage, nur aus dem Dokument, und eine Abschlussseite zeigt die Antwort. Veröffentlichen, fertig.
1 Einfügen und veröffentlichen
n8n_default (Stufe 3).getaddrinfo ENOTFOUND docling: Docling ist nicht im Netz von n8n. Die Netz-Zeilen aus Stufe 3 prüfen, dann docker compose up -d im Ordner /opt/docling.2 Was die Knoten tun
- Dokument und Frage — ein n8n-Formular mit Datei- und Textfeld. Es ist mit n8n User Auth geschützt: Nur wer in Deinem n8n angemeldet ist, kann es benutzen.
- Docling — ein HTTP-Aufruf an
http://docling:5001/v1/convert/file, das PDF alsfiles, dazu zweimalto_formats: md und json. Wie der curl-Aufruf aus Stufe 8. - Kontext bauen — ein Code-Schritt: das Markdown, und darunter alle Texte, die im JSON an einer Tabelle oder einem Bild hängen. Das sind genau Fußnote und Stempel.
- Antwort mit dem Modell GLM — eine Basic LLM Chain mit Systemanweisung, Temperatur 0.
- Antwort zeigen — die Abschlussseite des Formulars.
const d = $json.document;
// Fußnoten und Text in Bildern stehen nur im JSON, nicht im Markdown
const ergaenzungen = d.json_content.texts
.filter(t => /^#\/(tables|pictures)\//.test(t.parent?.$ref ?? ''))
.map(t => '- ' + t.text);
return { kontext: d.md_content + '\n\n## Ergänzungen (Fußnoten, Text in Bildern)\n' + ergaenzungen.join('\n') };
parent.$ref sagt, woran ein Textstück hängt. #/tables/… und #/pictures/… sind genau die Stellen, die das Markdown weglässt.Beantworte die Frage nur mit Angaben aus dem Dokument. Wenn die Antwort nicht im Dokument steht, sag das. Nenne kurz die Stelle, auf die du dich stützt. Antworte in höchstens drei Sätzen, als einfacher Text ohne Markdown.
✓ Kurz geprüft
Fragen an das Dokument
Drei Fragen, die ohne das JSON nicht zu beantworten wären.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Erste Frage: Wie lange dauert die Lieferung einer WB-180 nach Österreich? Das steht nur in der Fußnote.
Vier Wochen: drei laut Tabelle und eine für Österreich, mit Beleg. Zweite Frage: Wann ist die Servicevereinbarung eingegangen? Das steht nur auf dem Stempel.
Am vierzehnten Juni. Und zum Schluss eine Frage, deren Antwort nicht im Dokument steht: Gibt es die WB-180 auch mit Eichenplatte?
Das Dokument nennt nur Buche und Multiplex, und genau das sagt die Antwort. Kein erfundenes Ja.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Beim Aufbau haben wir fünf Fragen an drei Fassungen gestellt. Der einfach ausgelesene Text beantwortet die Fußnoten-Frage, scheitert aber an der gescannten Seite.
Das Markdown von Docling löst die gescannte Seite, verliert aber Fußnote und Stempel.
Erst Markdown plus die Ergänzungen aus dem JSON beantwortet alle fünf Fragen richtig.
1 Selbst fragen
| Frage | Wo die Antwort steht | Antwort beim Aufbau |
|---|---|---|
| Wie lange dauert die Lieferung einer WB-180 nach Österreich? | Tabelle + Fußnote | ✓ 3 Wochen laut Tabelle, plus eine Woche laut Fußnote: 4 Wochen |
| Wann ist die Servicevereinbarung eingegangen? | Stempel im Scan | ✓ 14. Juni 2026 |
| Gibt es die WB-180 auch mit Eichenplatte? | nirgends | ✓ Nein: nur Buche (40 mm) oder Multiplex mit Linoleum (30 mm) |
Gemessen am 23. September 2026 mit GLM 5.3, Temperatur 0. Ein Sprachmodell kann bei derselben Frage anders formulieren. Entscheidend ist, dass die Werte stimmen.
2 Der Vergleich: drei Fassungen, fünf Fragen
| Frage | einfach ausgelesen | Docling-Markdown | Markdown + JSON-Ergänzungen |
|---|---|---|---|
| WB-180 ab 5 Stück? | ✓ 459 € | ✓ 459 € | ✓ |
| Lieferung nach Österreich? | ✓ 4 Wochen | ✗ „steht nicht drin“ | ✓ |
| Reaktionszeit und Hotline? | ✗ „steht nicht drin“ | ✓ 48 h, -501 | ✓ |
| Traglast WB-180? | ✓ 800 kg | ✓ 800 kg | ✓ |
| Eingang der Vereinbarung? | ✗ | ✗ | ✓ 14. Juni 2026 |
Jede Fassung für sich hat Lücken: Das einfache Auslesen sieht die Fußnote, aber nicht den Scan. Das Docling-Markdown liest den Scan, verliert aber Fußnote und Stempel. Erst die Kombination beantwortet alle fünf. Die Fragen gingen jeweils mit dem ganzen Text an GLM 5.3, Temperatur 0.
✓ Kurz geprüft
Betrieb und Updates
Rechenzeit, Speicher, und nach jedem Update die Kontrollwerte.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Wie lange braucht Docling? Unser Dokument mit drei Seiten: sechs bis fünfzehn Sekunden auf vier Prozessorkernen, je nachdem, was der Server sonst zu tun hat. Große Handbücher brauchen entsprechend Minuten.
Während der Umwandlung steigt der Speicher auf rund zwei Gigabyte. Die Grenze von fünf Gigabyte in der Compose-Datei schützt den Rest des Servers.
Updates laufen wie bei n8n: neue Versionsnummer eintragen, Image holen, neu starten. Docling erscheint fast jede Woche neu. Danach das Übungsdokument noch einmal umwandeln und mit dem gespeicherten Ergebnis vergleichen.
1 Rechenzeit und Speicher
time curl -s -X POST http://127.0.0.1:5001/v1/convert/file -F files=@nordwerk-produktblatt.pdf -o /dev/null docker stats --no-stream docling
| Messung | Wert |
|---|---|
| Übungs-PDF, 3 Seiten, Voreinstellungen | 6 bis 15 s, je nach Last |
| Speicher im Leerlauf | 0,8 GB nach dem Start, 1,9 GB nach der ersten Umwandlung |
| Speicher während einer Umwandlung | 2,1 bis 2,4 GB |
docling-serve 1.35.0 (Docling 2.130.0), Prozessor-Image, VPS mit 4 vCPU, 23. September 2026.
2 Updates
docling-serve erscheint sehr häufig neu. Das Muster ist dasselbe wie bei n8n: feste Nummer, bewusst erhöhen, prüfen. Die Versionen stehen unter docling-serve/releases.
nano compose.yml # Nummer hinter docling-serve-cpu: erhöhen docker compose pull docker compose up -d curl -s http://127.0.0.1:5001/health; echo
curl -s -X POST http://127.0.0.1:5001/v1/convert/file -F files=@nordwerk-produktblatt.pdf -F to_formats=md -F to_formats=json -o neu.json diff <(jq -r .document.md_content ergebnis.json) <(jq -r .document.md_content neu.json) && echo 'Markdown unverändert'
docker compose up -d reicht.✓ Kurz geprüft
Grenzen
Vier Regeln, und was diese Übung nicht zeigt.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Erstens: Nach jeder Umwandlung die Kontrollwerte prüfen. Eine Tabelle, ein Scan, eine Fußnote. Das dauert eine Minute.
Zweitens: Zahlen aus Scans nie ungeprüft übernehmen. Eine falsche Ziffer sieht aus wie eine richtige.
Drittens: Das Markdown ist nicht alles. Fußnoten und Text in Bildern stehen im JSON.
Viertens: Handschrift, Formeln und sehr freie Layouts bleiben schwierig. Dort hilft nur ein Mensch, der gegenliest.
1 Vier Regeln
- Nach jeder Umwandlung die Kontrollwerte prüfen. Eine Tabelle, ein Scan, eine Fußnote. Das dauert eine Minute.
- Zahlen aus Scans nie ungeprüft übernehmen. Eine falsche Ziffer sieht aus wie eine richtige (Stufe 7).
- Das Markdown ist nicht alles. Fußnoten und Text in Bildern stehen im JSON (Stufe 8).
- Handschrift, Formeln und sehr freie Layouts bleiben schwierig. Dort hilft nur ein Mensch, der gegenliest.
2 Was diese Übung nicht gezeigt hat
- Handschrift und Formeln kommen im Übungs-PDF nicht vor, dazu gibt es hier keine Messung. Docling hat für Formeln und Bilder eigene Anreicherungen, die mehr Rechenzeit kosten.
- Andere Formate. Docling liest auch Word, PowerPoint, HTML und Bilder. Die Fallen sind andere, das Vorgehen bleibt: Kontrollwerte festlegen, umwandeln, nachsehen.
- Große Mengen. Für viele Dokumente gibt es die asynchrone Schnittstelle (
/v1/convert/file/async) und eine Fassung mit Grafikkarte. Beides ist nicht Teil dieser Schulung. - Dokumentensuche. Das Ergebnis lässt sich in Open WebUI oder LibreChat als Wissensquelle laden. Dort entscheidet dann zusätzlich die Schnipselbildung, was ankommt.
✓ Kurz geprüft
Befehle zum Kopieren
Alles aus den zwölf Stufen an einer Stelle, in der Reihenfolge, in der man es braucht.
1 Übungsdateien
- nordwerk-produktblatt.pdf: das Produktblatt mit drei Fallen
- kontrollwerte.md: die Kontrollwerte und alle Messungen dieser Schulung
- compose.yml: die Compose-Datei aus Stufe 3
- frag-das-dokument.json: der n8n-Ablauf zum Einfügen (Datei öffnen, alles kopieren, in n8n Strg+V). Er enthält keine Zugangsdaten, den Zugang wählst Du im Knoten GLM.
2 Installation
services:
docling:
image: quay.io/docling-project/docling-serve-cpu:v1.35.0
container_name: docling
restart: unless-stopped
ports:
- "127.0.0.1:5001:5001"
environment:
DOCLING_SERVE_ENABLE_UI: "1"
DOCLING_SERVE_MAX_NUM_PAGES: "50"
DOCLING_SERVE_MAX_FILE_SIZE: "20971520"
mem_limit: 5g
networks:
- default
- n8n
networks:
n8n:
name: n8n_default
external: true
docker compose up -d curl -s http://127.0.0.1:5001/health; echo docker stats --no-stream docling
ssh -N -L 5001:127.0.0.1:5001 root@DEIN-SERVER # dann: http://localhost:5001/ui/
3 Schnittstelle und JSON
scp nordwerk-produktblatt.pdf root@DEIN-SERVER:/opt/docling/
curl -s -X POST http://127.0.0.1:5001/v1/convert/file \ -F files=@nordwerk-produktblatt.pdf -F to_formats=md -F to_formats=json \ -o ergebnis.json
apt install -y jq
jq -r .document.md_content ergebnis.json | grep -c Österreich
jq '.document.json_content.texts[] | select(.label=="footnote") | {label, text, parent}' ergebnis.json
jq -r '.document.json_content.texts[] | select(.parent["$ref"] | startswith("#/pictures")) | .text' ergebnis.json
4 Im n8n-Ablauf
const d = $json.document;
// Fußnoten und Text in Bildern stehen nur im JSON, nicht im Markdown
const ergaenzungen = d.json_content.texts
.filter(t => /^#\/(tables|pictures)\//.test(t.parent?.$ref ?? ''))
.map(t => '- ' + t.text);
return { kontext: d.md_content + '\n\n## Ergänzungen (Fußnoten, Text in Bildern)\n' + ergaenzungen.join('\n') };
Beantworte die Frage nur mit Angaben aus dem Dokument. Wenn die Antwort nicht im Dokument steht, sag das. Nenne kurz die Stelle, auf die du dich stützt. Antworte in höchstens drei Sätzen, als einfacher Text ohne Markdown.
5 Aufräumen und weiterlesen
cd /opt/docling && docker compose down docker image rm quay.io/docling-project/docling-serve-cpu:v1.35.0
- Docling-Dokumentation
- docling-serve: Schnittstelle, Umgebungsvariablen, Releases
- n8n · Docker · Open WebUI · LibreChat
Quiz
7 Fragen quer durch die Stufen. Ab 6 richtigen Antworten schaltest du dein Zertifikat frei.
Dein Zertifikat
Glückwunsch! Trage deinen Namen ein und drucke das Zertifikat (oder speichere als PDF).