Letzte Woche.Google DeepMind veröffentlicht Gemini 2.0Dazu gehören Zwillinge 2.0 Flash (vollständig verfügbar), Gemini 2.0 Flash-Lite (neu und kostengünstig) und Gemini 2.0 Pro (experimentell). Alle Modelle unterstützen mindestens 1 Million Token des Eingabekontextfensters und unterstützt Text, Bild und Audio sowie Funktionsaufrufe/strukturierte Ausgaben. Dieses Papier dient auch als die Grenzen der LLM OCR: Herausforderungen beim Parsen von Dokumenten hinter dem Glamour Das Referenzlesematerial.
Dadurch ergeben sich hervorragende Anwendungsmöglichkeiten für die PDF-Verarbeitung. Die Umwandlung von PDF in strukturierten oder maschinenlesbaren Text war schon immer eine große Herausforderung. Stellen Sie sich vor, wir könnten PDF von Dokumenten in strukturierte Daten umwandeln? An dieser Stelle kommt Gemini 2.0 ins Spiel.
In diesem Tutorial lernen die Leser, wie sie mit Gemini 2.0 strukturierte Informationen wie Rechnungsnummern und Daten direkt aus PDF-Dokumenten extrahieren können:
- Einrichten der Umgebung und Erstellen des Reasoning-Clients
- Umgang mit PDF- und anderen Dokumenten
- Strukturierte Ausgabe mit Gemini 2.0 und Pydantic
- Extrahieren strukturierter Daten aus PDF mit Gemini 2.0
1. die Umgebung einrichten und den Reasoning-Client erstellen
Die erste Aufgabe ist die Installation von google-genai
Python-SDK und den API-Schlüssel abrufen. Wenn der Leser den API-Schlüssel noch nicht hat, kann er ihn von der Seite Google AI Studio Erhalten:Gemini API-Schlüssel erhalten.
%pip installieren "google-genai>=1"
Sobald der Leser im Besitz des SDK und des API-Schlüssels ist, kann er einen Client erstellen und das zu verwendende Modell festlegen, d. h. das neue Gemini 2.0 Flash-Modell, das über eine kostenlose Stufe mit 1.500 Anfragen pro Tag verfügbar ist (ab 6. Februar 2025).
von google importieren genai # Einen Client erstellen api_key = "XXXXX" client = genai.Client(api_key=api_key) # Definieren Sie das Modell, das Sie verwenden wollen model_id = "gemini-2.0-flash" # oder "gemini-2.0-flash-lite-preview-02-05" , "gemini-2.0-pro-exp-02-05"
Hinweis: Wenn der Leser Vertex AI verwenden möchte, muss erKlicken Sie hierErfahren Sie, wie Sie einen Kunden erstellen
2. die Verarbeitung von PDF- und anderen Dokumenten
Das Modell Gemini ist in der LageBilder und VideosDies kann mit einer base64-Zeichenkette oder mit der Dateien
Die Python-API umfasst Upload- und Löschmethoden. Nach dem Hochladen einer Datei kann der Leser die Datei-URI direkt in den Aufruf einbeziehen.Die Python-API umfasst Upload- und Delete-Methoden.
In diesem Beispiel hat der Benutzer 2 PDF-Muster, eine einfache Rechnung und ein Formular mit handschriftlichen Werten.
!wget -q -O https://storage.googleapis.com/generativeai-downloads/data/pdf_structured_outputs/handwriting_form.pdf !wget -q -O https://storage.googleapis.com/generativeai-downloads/data/pdf_structured_outputs/invoice.pdf
Der Leser kann nun den Client verwenden und hochladen
Methode, um eine Datei hochzuladen. Versuchen wir es mit einer der Dateien.
rechnung_pdf = client.files.upload(file="rechnung.pdf", config={'display_name': 'rechnung'})
Hinweis: Die Datei-API erlaubt bis zu 20 GB an Dateien pro Projekt, mit einer maximalen Dateigröße von 2 GB pro Datei. Dateien werden 48 Stunden lang gespeichert. Während dieser Zeit kann mit dem API-Schlüssel des Nutzers auf die Dateien zugegriffen werden, sie können jedoch nicht heruntergeladen werden. Das Hochladen von Dateien ist kostenlos.
Sobald die Datei hochgeladen ist, kann der Leser überprüfen, in wie viele Token sie umgewandelt wurde, was nicht nur hilft, den Kontext zu verstehen, mit dem der Benutzer zu tun hat, sondern auch die Kosten zu verfolgen.
file_size = client.models.count_tokens(model=model_id,contents=invoice_pdf) print(f'Datei: {Rechnung_pdf.display_name} entspricht {file_size.total_tokens} tokens') # Datei: Rechnung ist gleich 821 Token
3. strukturierte Ausgabe mit Gemini 2.0 und Pydantic
Die strukturierte Ausgabe ist eine Funktion, die sicherstellt, dass Gemini immer eine Antwort erzeugt, die einem vordefinierten Format entspricht, wie z. B. einem JSON-Schema. Dies bedeutet, dass der Benutzer mehr Kontrolle über die Ausgabe und deren Integration in die Anwendung hat, da garantiert wird, dass gültige JSON-Objekte mit einem benutzerdefinierten Schema zurückgegeben werden.
Gemini 2.0 unterstützt derzeit 3 verschiedene Arten von JSON-Schema-Definitionen:
- Ein einzelner Python-Typ, wie in der Typisierungsvermerk Dasselbe wird in der
- Pydantisch BaseModel
- genai.types.Schema / Pydantic BaseModel Äquivalent im Wörterbuch
Schauen wir uns ein kurzes textbasiertes Beispiel an.
from pydantic import BaseModel, Feld # Definieren Sie ein Pydantic-Modell # Verwenden Sie die Klasse Field, um eine Beschreibung und einen Standardwert hinzuzufügen, um dem Modell mehr Kontext zu geben Verwenden Sie die Klasse Field, um eine Beschreibung und einen Standardwert hinzuzufügen, um dem Modell mehr Kontext zu geben. class Topic(BaseModel). name: str = Field(description="Der Name des Themas") class Person(BaseModel): first_name: str = Field(description="Der Name des Themas") first_name: str = Field(description="Der Vorname der Person") last_name: str = Field(description="Der Nachname der Person") last_name: str = Field(description="Der Nachname der Person") last_name: str = Field(description="Der Nachname der Person") work_topics: list[Topic] = Field(description="Die Interessengebiete der Person, falls nicht angegeben, bitte eine leere Liste zurückgeben") # Definieren Sie die Eingabeaufforderung prompt = "Philipp Schmid ist Senior AI Developer Relations Engineer bei Google DeepMind und arbeitet an Gemini, Gemma mit der Mission, jedem Entwickler zu helfen zu helfen, KI auf verantwortungsvolle Art und Weise zu entwickeln und davon zu profitieren." # Generieren Sie eine Antwort mit dem Modell Person response = client.models.generate_content(model=model_id, contents=prompt, config={'response_mime_type': 'application/json', 'response_ schema': Person})) schema': Person}) # gibt die Antwort als json-String aus print(antwort.text) # sdk konvertiert die Antwort automatisch in das pydantische Modell philipp: Person = response.parsed # greift auf ein Attribut der json-Antwort zu print(f "Vorname ist {philipp.first_name}")
4. strukturierte Daten aus PDF mit Gemini 2.0 extrahieren
Kombinieren wir nun die Datei-API mit einer strukturierten Ausgabe, um Informationen aus der PDF-Datei zu extrahieren. Der Benutzer kann eine einfache Methode erstellen, die einen lokalen Dateipfad und ein Pydantic-Modell übernimmt und strukturierte Daten für den Benutzer zurückgibt. Die Methode wird:
- Hochladen von Dateien in die Datei-API
- ausnutzen Zwillings-API Erzeugen einer strukturierten Antwort
- Konvertiert die Antwort in ein Pydantic-Modell und gibt die
def extract_structured_data(file_path: str, model: BaseModel):: # Laden Sie die Datei in die Datei-API hoch. # Hochladen der Datei in die Datei-API file = client.files.upload(file=file_path, config={'display_name': file_path.split('/')[-1].split('.') [0]}) # Generieren einer strukturierten Antwort unter Verwendung der Gemini-API prompt = f "Extrahiere die strukturierten Daten aus der folgenden PDF-Datei" response = client.models.generate_content(model=model_id, contents=[prompt, file], config={'response_mime_type': 'application/json', ' response_schema': model}) # Konvertiert die Antwort in das pydantische Modell und gibt sie zurück return response.parsed
In dem Beispiel unterscheidet sich jede PDF-Datei von den anderen. Daher muss der Benutzer für jedes PDF ein eigenes Pydantic-Modell definieren, um die Leistungsfähigkeit von Gemini 2.0 zu demonstrieren. Wenn der Benutzer sehr ähnliche PDFs hat und die gleichen Informationen extrahieren möchte, kann das gleiche Modell für alle PDFs verwendet werden.
Rechnung.pdf
Extrahiert Rechnungsnummer, Datum und alle Listenpositionen einschließlich Beschreibung, Menge, Gesamtwert und Gesamtbruttowerthandschriftliches_formular.pdf
Nummer des Entnahmeformulars, Datum des Beginns der Regelung und Verbindlichkeiten der Regelung zu Beginn und Ende des Jahres
Hinweis: Mit der Pydantic-Funktion können die Benutzer dem Modell mehr Kontext hinzufügen, um es genauer zu machen und eine gewisse Validierung der Daten vorzunehmen. Das Hinzufügen einer umfassenden Beschreibung kann die Leistung des Modells erheblich verbessern. Bibliotheken wie instructor fügen automatische Wiederholungsversuche auf der Grundlage von Validierungsfehlern hinzu, was sehr hilfreich sein kann, aber zusätzliche Anfragekosten verursacht.
Rechnung.pdf
from pydantic import BaseModel, Feld class Item(BaseModel). description: str = Field(description="Die Beschreibung des Artikels") quantity: float = Field(description="Die Menge des Artikels") gross_worth: float = Field(description="Der Bruttowert des Artikels") class Invoice(BaseModel). """Extrahiert die Rechnungsnummer, das Datum und alle Listenpositionen mit Beschreibung, Menge und Bruttowert sowie den Gesamtbruttowert."""" invoice_number: str = Field(description="Die Rechnungsnummer z.B. 1234567890") date: str = Field(description="Das Datum der Rechnung z.B. 2024-01-01") items: list[Item] = Field(description="Die Liste der Positionen mit Beschreibung, Menge und Bruttowert") total_gross_worth: float = Field(description="Der Gesamtbruttowert der Rechnung") Ergebnis = extract_structured_data("Rechnung.pdf", Rechnung) print(type(result)) print(f "Extrahierte Rechnung: {result.invoice_number} am {result.date} mit Gesamtbruttowert {result.total_gross_worth}") for item in result.items: print(f "Artikel: {item_gross_worth}") print(f "Artikel: {Artikel.Beschreibung} mit Menge {Artikel.Menge} und Bruttowert {Artikel.Bruttowert}")
Fantastisch! Das Modell leistet hervorragende Arbeit bei der Extraktion von Informationen aus den Rechnungen.
handschriftliches_formular.pdf
class Form(BaseModel). """Extrahieren Sie die Formularnummer, das Datum für den Beginn und das Ende des Geschäftsjahres sowie die Planverbindlichkeiten zu Beginn und am Ende des Jahres. """" form_number: str = Field(description="Die Formularnummer") start_date: str = Field(description="Effective Date") beginning_of_year: float = Field(description="Die Planverbindlichkeiten zu Beginn des Jahres") end_of_year: float = Field(description="Die Planverbindlichkeiten am Ende des Jahres") Ergebnis = extract_structured_data("handschriftliches_formular.pdf", Formular) print(f'Extrahierte Formularnummer: {result.form_number} mit Startdatum {result.start_date}. \nPlanverbindlichkeiten Anfang des Jahres {result.beginning_of_year} und Ende des Jahres {result.end_of_year}') # Extrahierte Formularnummer: CA530082 mit Beginndatum 02/05/2022. # Planverbindlichkeiten Anfang des Jahres 40000.0 und Ende des Jahres 55000.0
Bewährte Verfahren und Grenzen
Wenn Sie Gemini 2.0 für die PDF-Verarbeitung verwenden, sollten Sie die folgenden Punkte beachten:
- Verwaltung der Dateigröße: Die Datei-API unterstützt zwar große Dateien, aber es empfiehlt sich, PDF-Dateien vor dem Hochladen zu optimieren.
- Token-Limits: Überprüfen Sie bei der Arbeit mit umfangreichen Dokumenten die Anzahl der Token, um sicherzustellen, dass die Benutzer die Modellgrenzen und Budgets einhalten.
- Strukturiertes Ausgabedesign: Das pydantische Modell des Benutzers muss sorgfältig entworfen werden, um alle notwendigen Informationen zu erfassen und gleichzeitig die Übersichtlichkeit zu wahren.
- Fehlerbehandlung: Implementieren Sie eine robuste Fehlerbehandlung für den Datei-Upload und den Verarbeitungsstatus, einschließlich Wiederholungsversuche und Behandlung von Fehlermeldungen von Modellen.
ein Urteil fällen
Die multimodalen Fähigkeiten von Gemini 2.0 in Kombination mit der strukturierten Ausgabe helfen den Benutzern bei der Verarbeitung und Extraktion von Informationen aus PDFs und anderen Dokumenten. Dadurch werden komplexe und zeitaufwändige manuelle oder halbautomatische Datenextraktionsprozesse überflüssig. Egal, ob Sie ein System zur Rechnungsverarbeitung, ein Werkzeug zur Dokumentenanalyse oder eine andere dokumentenzentrierte Anwendung entwickeln, Sie sollten Gemini 2.0 ausprobieren, da es zunächst kostenlos getestet werden kann und anschließend nur 0,1 US-Dollar pro Million Eingabe-Token kostet. Google betont, dass Gemini 2.0 zunächst kostenlos getestet werden kann und dann nur 0,1 $ pro Million Token kostet, was sicherlich die Hürde für Nutzer senkt, die neue Technologie auszuprobieren, aber die langfristige Kosteneffizienz bleibt abzuwarten.