Für RAG- und LLM-Pipelines

PDF zu Markdown für RAG

Wandle PDFs in sauberes, chunking-freundliches Markdown für Retrieval und LLM-Ingestion um: Tabellen und Formeln intakt, Scans per OCR, viel weniger Tokens als der Rohtext der PDF. Steuere es über die REST API oder das gehostete MCP.

Kurze Antwort

Markdown ist die saubere Eingabe, die RAG will

Rohen PDF-Text einzubetten gibt dem Retriever verrauschte Chunks: Überschriften, Listen und Tabellen kollabieren, die Lesereihenfolge bricht und binärer/Layout-Müll dringt ein. Konvertiere die PDF zuerst zu Markdown und die Dokumentstruktur überlebt, also kannst du nach Überschriften und Abschnitten chunken, Tabellen und Formeln als Fakten erhalten und viel weniger Tokens pro Passage verbrauchen. Sauberere Chunks rein, besseres Retrieval raus.

Warum es zählt

Was sauberes Markdown deiner Pipeline bringt

Saubere Chunk-Grenzen

Überschriften und Abschnitte überleben, also erzeugt das Teilen nach Struktur kohärente, eigenständige Chunks statt Schnitte mitten im Satz.

Weniger Tokens

Reines Markdown ist viel günstiger einzubetten und als Kontext zu senden als rohe PDF-Dumps oder HTML, also indexierst und rufst du mehr für weniger ab.

Tabellen bleiben Fakten

Spalten werden zu echten Markdown-Tabellen, nicht zu wirren Zeilen, also bleiben tabellarische Zahlen abrufbar statt durcheinandergewürfelt.

Formeln erhalten

Mathematische Notation bleibt erhalten statt zu unleserlichen Zeichen abgeflacht zu werden, die die Embeddings verschmutzen.

Scans werden Text

OCR verwandelt reine Bild-PDFs und gescannte PDFs in auswählbares Markdown in vielen Sprachen, also sind Scans ebenfalls indexierbar.

Links & Fußnoten

Hyperlinks und Fußnoten werden als Markdown-Links übernommen statt verworfen, sodass Referenzen intakt bleiben.

Anleitung

Eine PDF in vier Schritten ingestieren

Ein vorhersehbarer Lebenszyklus über HTTPS mit einem Bearer-API-Schlüssel. Das gehostete MCP stellt dieselben Schritte als Agent-Tools bereit.

1

Job anlegen

Schick die PDF-URL (oder die hochgeladenen Bytes) per POST an /api/v2/jobs. Du bekommst eine Job-ID und einen Status.

2

Bis ready abfragen

Mach GET /api/v2/jobs/{id}, bis status ready oder error ist. Bei error lies error_code/error_message. In bezahlten Tarifen registriere einen Webhook statt zu pollen.

3

Markdown abholen

Mach GET /api/v2/jobs/{id}/download. Beachte truncated und pages: truncated bedeutet, dass ein langes Dokument bis zum Zeitbudget teilweise zurückgegeben wurde.

4

Chunken & einbetten

Teile nach Überschriften/Abschnitten, betten die Chunks ein und indexiere sie in deinem Vector Store. Die Markdown-Struktur hält die Grenzen sauber.

# 1. Job aus einer PDF-URL anlegen
curl -s -X POST https://pdf2md.dev/api/v2/jobs \
  -H "Authorization: Bearer p2m_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/paper.pdf"}'
# -> { "job_id": "...", "status": "queued" }
# 2. Status abfragen, bis ready oder error
curl -s https://pdf2md.dev/api/v2/jobs/JOB_ID \
  -H "Authorization: Bearer p2m_your_key"
# -> { "status": "ready", "pages": 24, "truncated": false }
#    bei Fehler: { "status": "error", "error_code": "...", "error_message": "..." }
# 3. Markdown abholen, dann chunken + einbetten
curl -s https://pdf2md.dev/api/v2/jobs/JOB_ID/download \
  -H "Authorization: Bearer p2m_your_key"

Lieber Agent-Tools? Das gehostete MCP stellt denselben Lebenszyklus bereit (pdf_to_markdown_create_job_from_url, _get_job, _get_markdown), damit Claude, ChatGPT und Agent-Frameworks PDFs ohne lokalen Server ingestieren können.

Chunking

Chunking-Strategien für Markdown

Sauberes Markdown gibt dir natürliche Nahtstellen zum Teilen, also bleiben die Chunks kohärent und abrufbar.

Nach Überschriften teilen

Nutze die Überschriften-Hierarchie als Chunk-Grenzen, damit jeder Chunk ein eigenständiger Abschnitt mit eigenem Kontext ist.

Tabellen ganz halten

Teile nie innerhalb einer Markdown-Tabelle; eine halbe Tabelle verliert ihren Sinn. Halte jede Tabelle, samt Überschrift, in einem Chunk.

Etwas Überlapp hinzufügen

Ein kleiner Überlapp von ein oder zwei Sätzen zwischen benachbarten Chunks bewahrt den Kontext an den Grenzen und verbessert den Recall.

Überschriftenpfad mitführen

Stelle die Abschnittsüberschrift (oder den Pfad der Überschriften) jedem Chunk voran, damit das Embedding erfasst, woher er stammt.

Chunks richtig dimensionieren

Ziele auf ein paar hundert Tokens pro Chunk: zu groß verwässert die Relevanz, zu klein verliert Kontext. Die Markdown-Struktur macht das leicht justierbar.

Boilerplate entfernen

Entferne wiederholte Kopf- und Fußzeilen, damit sie die Embeddings nicht dominieren; der Konverter entfernt bereits den meisten Layout-Lärm.

Im Code

Eine minimale Ingestion in Python

Anlegen, abfragen, abholen und dann nach Überschriften teilen, bereit zum Einbetten und Indexieren in deinem Vector Store.

# pip install requests
import requests, time, re
API = "https://pdf2md.dev/api/v2"
H = {"Authorization": "Bearer p2m_your_key"}
job = requests.post(f"{API}/jobs", headers=H,
    json={"url": "https://example.com/paper.pdf"}).json()
jid = job["job_id"]
while True:
    j = requests.get(f"{API}/jobs/{jid}", headers=H).json()
    if j["status"] in ("ready", "error"): break
    time.sleep(3)
md = requests.get(f"{API}/jobs/{jid}/download", headers=H).text
# einfaches Teilen nach Top-Level-Überschriften -> Chunks bereit zum Einbetten
chunks = re.split(r"\n(?=# )", md)

Warum Tabellen besser abgerufen werden

Eine verwürfelte Tabelle bettet sich als Rauschen ein, also passt die Zahl, die du brauchst, selten zu einer Anfrage. Als echte Markdown-Tabelle bleiben Zeilen und Überschriften ausgerichtet, also bleiben tabellarische Fakten wie Preise, Metriken und Daten in Antworten durchsuchbar und zitierbar.

Polling vs. Webhooks

Für ein paar Dokumente frage GET /api/v2/jobs/{id} alle paar Sekunden ab. Für Massen- oder Backend-Pipelines in einem bezahlten Tarif registriere einen Webhook (oder übergib callback_url) und wir machen einen POST an dich bei ready oder error, also sparst du dir das Pollen komplett.

Bau es in deine Pipeline ein

Derselbe Konverter ist eine REST API und ein gehosteter MCP-Endpunkt, mit maschinenlesbarer Discovery, damit Skripte und Agenten ihn direkt steuern können.

FAQ

Häufige Fragen

Warum Markdown für RAG statt des Rohtexts der PDF?

Die Rohextraktion verliert die Struktur (Überschriften, Listen und Tabellen kollabieren und die Lesereihenfolge bricht), was verrauschte Chunks erzeugt. Markdown erhält die Struktur, also liefert das Chunking nach Überschriften sauberere, besser abrufbare Passagen und nutzt viel weniger Tokens als Roh-Dumps oder HTML.

Überleben Tabellen und Formeln?

Ja. Spalten werden zu echten Markdown-Tabellen statt zu wirren Zeilen, und mathematische Notation bleibt erhalten statt abgeflacht zu werden, also bleiben numerische und tabellarische Fakten abrufbar. Mehr zum Extrahieren von Tabellen.

Kann ich das in einer Pipeline automatisieren?

Ja. Nutze die REST API (anlegen, abfragen, herunterladen) mit einem Bearer-API-Schlüssel oder das gehostete MCP für Agent-Frameworks. In bezahlten Tarifen entfernt ein Webhook das Pollen. Es gibt nichts zu hosten. Sieh dir das Python-Tutorial für ein vollständiges Beispiel an.

Wie gehe ich mit langen Dokumenten um?

Jede Konvertierung läuft bis zu einem Zeitbudget pro Tarif; ein langes Dokument wird mit truncated=true teilweise zurückgegeben, statt zu scheitern. Lies truncated und teile sehr große Dateien auf, oder nutze einen höheren Tarif mit größerem Budget.

Verarbeitet es gescannte PDFs für die Ingestion?

Ja. Reine Bild-PDFs und gescannte PDFs werden per OCR in auswählbares Markdown in vielen Sprachen umgewandelt, also werden Scans zu abrufbarem Text in deinem Index.

Wie sollte ich das Markdown für RAG chunken?

Teile nach der Überschriften-Hierarchie, damit jeder Chunk ein eigenständiger Abschnitt ist, halte Tabellen ganz, füge einen kleinen Überlapp zwischen Chunks hinzu und stelle die Abschnittsüberschrift voran, damit das Embedding den Kontext kennt. Ziele auf ein paar hundert Tokens pro Chunk.

Warum werden Markdown-Tabellen besser abgerufen als Rohtext?

Die Rohextraktion verwürfelt Spalten zu Rauschen, also passt der Wert, den du brauchst, selten zu einer Anfrage. Eine echte Markdown-Tabelle hält Zeilen und Überschriften ausgerichtet, also bleiben tabellarische Fakten durchsuchbar und zitierbar.

Gibt es einen Gratis-Tarif zum Testen?

Ja. Ein kostenloses Google-Konto schaltet einen API-Schlüssel und das gehostete MCP frei: 3 Slots, 10-MB-Dateien, ein Zeitbudget von 15 Minuten und 1 Stunde Aufbewahrung. Bezahlte Tarife erhöhen jedes Limit und ergänzen Webhooks und Batch-Anlage.