Einladen & verdienen

So funktionieren Einladungsboni

Teile deinen Einladungslink. Registriert sich ein Freund darüber und lädt Guthaben auf, erhältst du die angezeigte Prämie für seine weiteren Aufladungen.

Tabellen aus großen PDFs extrahieren und Zahlen verifizieren

Ein praxisnaher Workflow zur Extraktion von Tabellen aus großen PDFs über die Gemini API: Schemas mit Null-Werten entwerfen, die Files API gezielt einsetzen, Zitate und Seitenzahlen als Suchhinweise anfordern sowie extrahierte Daten vor dem finalen Export mit dem Originaldokument abgleichen.

Inhalt
Tabellen aus großen PDFs extrahieren und Zahlen verifizieren

Beim Umgang mit komplexen PDF-Dokumenten – wie mehrseitigen Inspektionsberichten für Industrieanlagen oder Finanzaufstellungen – ist einheitlicher, sauberer Text eher die Ausnahme als die Regel. In realen Unternehmensdokumenten wechseln sich digital erzeugte Seiten mit Scans ab, Tabellen weisen oft keine klaren Gitternetzlinien auf und entscheidende Kennzahlen verbergen sich häufig in unübersichtlichen Fußnoten.

Solche Dateien direkt an ein multimodales Modell zu übergeben und die Ausgabe ungeprüft in eine produktive Datenbank zu schreiben, birgt erhebliche Risiken. Da Foundation Models probabilistische Systeme bleiben, darf eine verlässliche Extraktions-Pipeline nicht auf blindem Vertrauen aufbauen. Stattdessen muss sie auf einem durchdachten Schema-Design, dem Erfassen kontextueller Prüfhinweise und einem rigorosen nachträglichen Abgleich mit dem visuellen Original basieren.


1. Datenschema: Felder fixieren und Null-Werte zulassen

Der Mechanismus Gemini Structured Outputs stellt sicher, dass Modellantworten strikt einem vorgegebenen Schema folgen und syntaktisch valides JSON erzeugen. Ist eine Eigenschaft als numerisch deklariert, wird kein überflüssiger Konversationstext den Wert verfälschen.

Die syntaktische Schemakonformität schützt jedoch ausschließlich vor strukturellen Fehlern – sie garantiert keine inhaltliche Richtigkeit:

  • Ein Modell kann in dichten, rahmenlosen Tabellen benachbarte Zeilen vertauschen oder Spalten verschieben;
  • Auf Scans mit geringer Auflösung wird die Ziffer 8 leicht als 3 fehlinterpretiert, und Dezimalpunkte gehen häufig verloren;
  • Fehlt eine Kennzahl oder ist sie unleserlich, versucht ein Modell ohne explizite Erlaubnis zum Auslassen von Werten unter Umständen, eine plausible Zahl zu erfinden.

Um Halluzinationsrisiken zu minimieren, sollten Schemas Felder als nullable deklarieren (Optional oder null). Dies muss von einer expliziten Prompt-Anweisung begleitet werden, null zurückzugeben, sobald eine Zahl nicht mit hoher Zuverlässigkeit entziffert werden kann. Zwar verringert das Zulassen von Null-Werten den Druck zum Erraten von Daten spürbar, eine absolute Garantie gegen Halluzinationen bietet es allein jedoch nicht.


2. Datei-Ingestion: Wann die Files API die richtige Wahl ist

Gemäß der offiziellen Dokumentation zur Dokumentverarbeitung mit Gemini liegen die Grenzwerte bei bis zu 50 MB oder bis zu 1.000 Seiten pro PDF-Datei. Beide Beschränkungen (Dateigröße und Seitenzahl) gelten gleichzeitig; es besteht keine Garantie, dass beide Maxima simultan erreicht werden können – die Verarbeitung bricht ab, sobald das erste Limit erreicht ist.

Die optimale Übertragungsmethode richtet sich nach Dokumentgröße und Anwendungsszenario:

  • Inline-Datenübergabe eignet sich am besten für kleine Dokumente und einmalige Extraktionsaufrufe.
  • Die Files API (client.files.upload) ist für größere Dateien und mehrstufige Workflows konzipiert, bei denen dasselbe Dokument über aufeinanderfolgende Operationen hinweg abgefragt wird (z. B. eine anfängliche Klassifizierung der Abschnitte, gefolgt von der gezielten Tabellenextraktion). Die Nutzung der Files API verhindert, dass die gesamte Dokument-Nutzlast bei jedem API-Aufruf erneut hochgeladen werden muss.

3. Daten abfragen: Schema, Zitat-Hinweise und hypothetische Antwort

Um extrahierte Daten auditierbar zu machen, sollte das Modell angewiesen werden, neben den Zielwerten zusätzliche Metadaten auszugeben: eine ungefähre Seitenzahl (page_number) und einen kurzen, wörtlichen Zitausschnitt (evidence_quote).

Wesentliche Unterscheidung: page_number und evidence_quote stellen keine Tatsachenbeweise dar; es handelt sich ausschließlich um heuristische Suchhinweise. Da das Modell diese Felder selbst generiert, können Zitatfragmente OCR-Artefakte enthalten oder benachbarte Zeilen zusammenführen, und die angegebene visuelle Seitenzahl kann vom physischen Blattindex des PDF-Containers abweichen.

Hypothetischer Versuchsaufbau

Betrachten wir einen hypothetischen Versuchsaufbau (es wurde kein reales PDF-Dokument bereitgestellt, hochgeladen oder analysiert und keine Live-API-Abfrage ausgeführt): die Modellierung der Kennzahlenextraktion aus einem fiktiven Pumpeninspektionsbericht. In diesem anschaulichen Beispiel untersuchen wir eine hypothetische zweizeilige Tabelle:

Kennung (Identifier)Druck (MPa)Vibration (mm/s)StatusAnmerkungen
Н-101-А1.452.1Normal (В норме)Planmäßige Inspektion
Н-102-В(unleserlich)7.8Warnung (Внимание)Erhöhtes Spiel

Unten sehen Sie ein Beispielschema, das mit Pydantic definiert wurde, zusammen mit der Aufrufsyntax für das offizielle SDK:

from google import genai
from pydantic import BaseModel, Field
from typing import List, Optional

class PumpRecord(BaseModel):
    unit_id: str = Field(
        description="Идентификатор агрегата точно как в таблице"
    )
    inlet_pressure_mpa: Optional[float] = Field(
        default=None,
        description="Давление в МПа. Если значение неразборчиво или отсутствует — null"
    )
    vibration_mms: Optional[float] = Field(
        default=None,
        description="Уровень вибрации в мм/с. При отсутствии данных — null"
    )
    status: str = Field(
        description="Статус узла (например, 'В норме', 'Внимание')"
    )
    page_number: Optional[int] = Field(
        default=None,
        description="Оценочный номер страницы документа (подсказка для аудитора, не подтверждена)"
    )
    evidence_quote: Optional[str] = Field(
        default=None,
        description="Короткий фрагмент строки (до 10 слов), откуда взяты числа (подсказка, не подтверждена)"
    )

class InspectionPayload(BaseModel):
    records: List[PumpRecord]

client = genai.Client()

uploaded_file = client.files.upload(file="hypothetical_inspection.pdf")

response = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {
            "type": "document",
            "uri": uploaded_file.uri,
            "mime_type": uploaded_file.mime_type,
        },
        {
            "type": "text",
            "text": (
                "Извлеки показатели агрегатов в соответствии со схемой. "
                "Если число неразборчиво или отсутствует, возвращай null. "
                "Для каждой записи заполни номер страницы и короткую цитату-подтверждение."
            ),
        },
    ],
    response_format={
        "type": "text",
        "mime_type": "application/json",
        "schema": InspectionPayload.model_json_schema(),
    },
)

payload = InspectionPayload.model_validate_json(response.output_text)

Illustrative JSON-Antwort des Modells

Das folgende JSON veranschaulicht eine hypothetische Antwort des Modells auf diese Anfrage. Wir betonen ausdrücklich: Diese Ausgabe dient als hypothetische strukturelle Illustration und ist nicht das Ergebnis eines tatsächlichen API-Aufrufs oder einer realen physikalischen Messung:

{
  "records": [
    {
      "unit_id": "Н-101-А",
      "inlet_pressure_mpa": 1.45,
      "vibration_mms": 2.1,
      "status": "В норме",
      "page_number": 12,
      "evidence_quote": "Н-101-А 1.45 2.1 В норме"
    },
    {
      "unit_id": "Н-102-В",
      "inlet_pressure_mpa": null,
      "vibration_mms": 7.8,
      "status": "Внимание",
      "page_number": 12,
      "evidence_quote": "Н-102-В [пятно] 7.8 Внимание"
    }
  ]
}

In dieser hypothetischen Antwort tragen sowohl die beiden Instanzen von page_number: 12 als auch die beiden Werte von evidence_quote den Status unverifizierter Hinweise. Obwohl das Modell für den unleserlichen Druckwert des zweiten Aggregats korrekt null ausgegeben hat, gilt keines der extrahierten Attribute a priori als gesicherte Tatsache.


4. Abgleich mit dem visuellen Original und Exportregeln

Extrahierte Datensätze dürfen nicht ohne vorgängige Validierung in nachgelagerte Datenbanken überführt werden. Erforderlich ist ein lückenloses Audit, bei dem jedes Feld mit dem visuellen Rendering der ursprünglichen PDF-Seite abgeglichen wird.

Wichtige Klarstellung zum Beispiel: Die zweizeilige Tabelle, Seite 12, der physische Versatz auf Blatt 14, die Kompressorenabteilung und der visuelle Verifikations-Workflow stellen eine rein hypothetische Illustration des Prozesses dar. Es wurde kein reales PDF-Dokument bereitgestellt oder analysiert, und die nachfolgend beschriebenen Schritte spiegeln wider, was ein Prüfer in der Praxis verifizieren würde, um bedingte Entscheidungen zu treffen, falls das visuelle Rendering die angegebenen Werte bestätigt.

Schrittweise Datensatzprüfung: Was ein Prüfer kontrollieren würde

  1. Aggregat Н-101-А:

    • Seite und Lokalisierung: Das Modell lieferte den Hinweis page_number: 12. Der Prüfer würde das visuelle Rendering von Seite 12 öffnen (oder Blatt 14, falls vorangestellte Deckblätter einen physischen Versatz erzeugt haben) und die Zieltabelle der Kompressorenabteilung lokalisieren.
    • Kennung: In der ersten Spalte würde der Prüfer die Kennung Н-101-А auf exakte Übereinstimmung prüfen.
    • Druck und Einheiten: In der Spalte für den Eingangsdruck würde der Prüfer kontrollieren, ob der Wert 1.45 klar lesbar ist und die physikalische Einheit den Schemaanforderungen entspricht (МПа / MPa).
    • Vibration und Einheiten: Unter Vibration würde der Prüfer den Wert 2.1 und die entsprechende Einheit kontrollieren (мм/с / mm/s).
    • Status: Unter dem Betriebszustand würde das Vorhandensein des Status В норме (Normal) bestätigt.
    • Bedingte Entscheidung: Bestätigt das Rendering der Seite alle Felder, Werte und physikalischen Einheiten, wäre die Zeile für den Export freigegeben (Export / Accepted).
  2. Aggregat Н-102-В:

    • Seite und Lokalisierung: In derselben hypothetischen Tabelle würde der Prüfer zur zweiten Zeile übergehen.
    • Kennung: Der Prüfer würde das Vorhandensein der Kennung Н-102-В überprüfen.
    • Vibration und Status: Der Prüfer würde den Vibrationswert 7.8 und den Status Внимание (Warnung / Attention) mit der visuellen Ebene abgleichen.
    • Druck: Das Modell gab null zurück. Der Prüfer würde die entsprechende Zelle im Seiten-Rendering untersuchen: Ist anstelle eines Messwerts ein dunkler, verschmierter Fleck (ein Scanfehler) zu sehen, bestätigt dies die Entscheidung des Modells, null auszugeben – dennoch fehlt damit ein essenzieller physikalischer Messwert.
    • Bedingte Entscheidung: Da die visuelle Prüfung bestätigt, dass ein kritischer Druckwert fehlt, wäre die Zeile für den automatisierten Export gesperrt und würde zur manuellen Überprüfung vorgemerkt (Hold for manual review), was einen erneuten Scan oder einen Abgleich mit Sicherungsprotokollen erfordert.

Geprüftes Ergebnis nach der Verifikation

Die zusammenfassende Tabelle zeigt im Detail, was der Prüfer kontrollieren würde und welche bedingte Routing-Entscheidung die Validierungs-Pipeline nach visueller Bestätigung auslösen würde:

AggregatDruck (MPa)Vibration (mm/s)StatusWas der Prüfer kontrollieren würde (hypothetische Prüfung)Bedingte Pipeline-Entscheidung (falls Rendering Werte bestätigt)
Н-101-А1.452.1В норме (Normal)Würde Übereinstimmung der Kennung, Zahlenwerte und Einheiten (MPa, mm/s) anhand des Renderings prüfenFür Export freigegeben (Bereit zur Übernahme) – unter Vorbehalt der vollständigen visuellen Bestätigung aller Felder
Н-102-Вnull (ausgelassen)7.8Внимание (Warnung)Würde Scanfehler (Fleck) in der Druckzelle bestätigen und Vibrationswert gegenprüfenZur manuellen Überprüfung zurückgehalten (Operator-Prüfung) – wegen bestätigten Fehlens einer kritischen Messgröße

Architektonisches Validierungsmuster

Eine robuste Ingestions-Pipeline teilt verarbeitete Datensätze in zwei separate Ströme auf:

  • Grüner Korridor (Verifizierter Export): Ausschließlich reserviert für Zeilen, bei denen jedes Pflichtfeld visuell mit dem Rendering der Quellseite abgeglichen wurde und alle physikalischen Einheiten den Schemastandards entsprechen.
  • Prüfwarteschlange (Quarantäne): Alle Datensätze mit null in kritischen Feldern, widersprüchlichen Maßeinheiten oder mehrdeutigen Zitaten werden für die manuelle Prüfung durch einen menschlichen Operator in Quarantäne verschoben.

Offizielle Dokumentation und Leitfäden

Bereit, Ihren LLM-Workflow zu optimieren?

Verbinden Sie Modelle über eine API, verwalten Sie Schlüssel und behalten Sie KI-Kosten im Blick.

Kostenlos starten