Verständnis von Dokumenten

Die Gemini API unterstützt die PDF-Eingabe, einschließlich langer Dokumente (bis zu 3.600 Seiten). Gemini-Modelle verarbeiten PDFs mit nativer Bilderkennung und können daher sowohl Text als auch Bildinhalte in Dokumenten verstehen. Dank der nativen Unterstützung von PDF-Vision können Gemini-Modelle Folgendes tun:

  • Diagramme, Grafiken und Tabellen in Dokumenten analysieren
  • Informationen in strukturierte Ausgabeformate extrahieren
  • Fragen zu visuellem und Textinhalt in Dokumenten beantworten
  • Dokumente zusammenfassen
  • Transkribieren von Dokumentinhalten (z.B. in HTML) unter Beibehaltung von Layout und Formatierung zur Verwendung in nachfolgenden Anwendungen

In dieser Anleitung werden einige Möglichkeiten zur Verarbeitung von PDF-Dokumenten mit der Gemini API veranschaulicht.

PDF-Eingabe

Bei PDF-Nutzlast unter 20 MB können Sie zwischen dem Hochladen von Base64-codierten Dokumenten oder dem direkten Hochladen lokal gespeicherter Dateien wählen.

Als Inline-Daten

Sie können PDF-Dokumente direkt über URLs verarbeiten. Hier ist ein Code-Snippet, das zeigt, wie das geht:

from google import genai
from google.genai import types
import httpx

client = genai.Client()

doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"

# Retrieve and encode the PDF byte
doc_data = httpx.get(doc_url).content

prompt = "Summarize this document"
response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[
      types.Part.from_bytes(
        data=doc_data,
        mime_type='application/pdf',
      ),
      prompt])
print(response.text)

Technische Details

Gemini 1.5 Pro und 1.5 Flash unterstützen maximal 3.600 Dokumentseiten. Dokumentseiten müssen einen der folgenden MIME-Typen für Textdaten haben:

  • PDF – application/pdf
  • JavaScript – application/x-javascript, text/javascript
  • Python – application/x-python, text/x-python
  • TXT – text/plain
  • HTML – text/html
  • Preisvergleichsportal – text/css
  • Markdown – text/md
  • CSV – text/csv
  • XML – text/xml
  • RTF – text/rtf

Jede Dokumentseite entspricht 258 Tokens.

Die Anzahl der Pixel in einem Dokument ist abgesehen vom Kontextfenster des Modells nicht begrenzt. Größere Seiten werden jedoch auf eine maximale Auflösung von 3.072 × 3.072 herunterskaliert, wobei ihr ursprüngliches Seitenverhältnis beibehalten wird. Kleinere Seiten werden auf 768 × 768 Pixel skaliert. Es gibt keine Kosteneinsparungen für Seiten mit niedrigerer Größe, abgesehen von der Bandbreite, und keine Leistungsverbesserung für Seiten mit höherer Auflösung.

Für optimale Ergebnisse:

  • Drehen Sie die Seiten vor dem Hochladen in die richtige Ausrichtung.
  • Vermeiden Sie unscharfe Seiten.
  • Wenn Sie eine einzelne Seite verwenden, platzieren Sie den Textprompt nach der Seite.

Lokal gespeicherte PDFs

Für lokal gespeicherte PDFs können Sie den folgenden Ansatz verwenden:

from google import genai
from google.genai import types
import pathlib
import httpx

client = genai.Client()

doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"

# Retrieve and encode the PDF byte
filepath = pathlib.Path('file.pdf')
filepath.write_bytes(httpx.get(doc_url).content)

prompt = "Summarize this document"
response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[
      types.Part.from_bytes(
        data=filepath.read_bytes(),
        mime_type='application/pdf',
      ),
      prompt])
print(response.text)

Große PDFs

Mit der File API können Sie Dokumente beliebiger Größe hochladen. Verwenden Sie immer die File API, wenn die Gesamtgröße der Anfrage (einschließlich der Dateien, des Textprompts, der Systemanweisungen usw.) mehr als 20 MB beträgt.

Rufe media.upload auf, um eine Datei mit der File API hochzuladen. Im folgenden Code wird eine Dokumentdatei hochgeladen und dann in einem Aufruf von models.generateContent verwendet.

Große PDFs über URLs

Verwenden Sie die File API für große PDF-Dateien, die über URLs verfügbar sind. So wird der Upload und die Verarbeitung dieser Dokumente direkt über ihre URLs vereinfacht:

from google import genai
from google.genai import types
import io
import httpx

client = genai.Client()

long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"

# Retrieve and upload the PDF using the File API
doc_io = io.BytesIO(httpx.get(long_context_pdf_path).content)

sample_doc = client.files.upload(
  # You can pass a path or a file-like object here
  file=doc_io,
  config=dict(
    mime_type='application/pdf')
)

prompt = "Summarize this document"

response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[sample_doc, prompt])
print(response.text)

Lokal gespeicherte große PDFs

from google import genai
from google.genai import types
import pathlib
import httpx

client = genai.Client()

long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"

# Retrieve the PDF
file_path = pathlib.Path('A17.pdf')
file_path.write_bytes(httpx.get(long_context_pdf_path).content)

# Upload the PDF using the File API
sample_file = client.files.upload(
  file=file_path,
)

prompt="Summarize this document"

response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[sample_file, "Summarize this document"])
print(response.text)

Sie können prüfen, ob die API die hochgeladene Datei erfolgreich gespeichert hat, und die zugehörigen Metadaten abrufen, indem Sie files.get aufrufen. Nur die name (und in gewissem Maße auch die uri) sind eindeutig.

from google import genai
import pathlib

client = genai.Client()

fpath = pathlib.Path('example.txt')
fpath.write_text('hello')

file = client.files.upload('example.txt')

file_info = client.files.get(file.name)
print(file_info.model_dump_json(indent=4))

Mehrere PDFs

Die Gemini API kann mehrere PDF-Dokumente in einer einzigen Anfrage verarbeiten, solange die Gesamtgröße der Dokumente und des Textprompts innerhalb des Kontextfensters des Modells liegt.

from google import genai
import io
import httpx

client = genai.Client()

doc_url_1 = "https://arxiv.org/pdf/2312.11805"
doc_url_2 = "https://arxiv.org/pdf/2403.05530"

# Retrieve and upload both PDFs using the File API
doc_data_1 = io.BytesIO(httpx.get(doc_url_1).content)
doc_data_2 = io.BytesIO(httpx.get(doc_url_2).content)

sample_pdf_1 = client.files.upload(
  file=doc_data_1,
  config=dict(mime_type='application/pdf')
)
sample_pdf_2 = client.files.upload(
  file=doc_data_2,
  config=dict(mime_type='application/pdf')
)

prompt = "What is the difference between each of the main benchmarks between these two papers? Output these in a table."

response = client.models.generate_content(
  model="gemini-2.0-flash",
  contents=[sample_pdf_1, sample_pdf_2, prompt])
print(response.text)

Nächste Schritte

Weitere Informationen finden Sie in den folgenden Ressourcen:

  • Strategien für Prompts aus Dateien: Die Gemini API unterstützt Prompts mit Text-, Bild-, Audio- und Videodaten, auch als multimodale Prompts bezeichnet.
  • Systemanweisungen: Mit Systemanweisungen können Sie das Verhalten des Modells basierend auf Ihren spezifischen Anforderungen und Anwendungsfällen steuern.