Pemahaman dokumen

Gemini API mendukung input PDF, termasuk dokumen panjang (hingga 3.600 halaman). Model Gemini memproses PDF dengan visi native, sehingga dapat memahami konten teks dan gambar di dalam dokumen. Dengan dukungan visi PDF native, model Gemini dapat:

  • Menganalisis diagram, diagram, dan tabel di dalam dokumen
  • Mengekstrak informasi ke dalam format output terstruktur
  • Menjawab pertanyaan tentang konten visual dan teks dalam dokumen
  • Meringkas dokumen
  • Mentranskripsikan konten dokumen (misalnya ke HTML) dengan mempertahankan tata letak dan pemformatan, untuk digunakan di aplikasi downstream

Tutorial ini menunjukkan beberapa kemungkinan cara menggunakan Gemini API untuk memproses dokumen PDF.

Input PDF

Untuk payload PDF di bawah 20 MB, Anda dapat memilih antara mengupload dokumen yang dienkode base64 atau langsung mengupload file yang disimpan secara lokal.

Sebagai data inline

Anda dapat memproses dokumen PDF langsung dari URL. Berikut cuplikan kode yang menunjukkan cara melakukannya:

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)

Detail teknis

Gemini 1.5 Pro dan 1.5 Flash mendukung maksimum 3.600 halaman dokumen. Halaman dokumen harus dalam salah satu jenis MIME data teks berikut:

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

Setiap halaman dokumen setara dengan 258 token.

Meskipun tidak ada batas spesifik untuk jumlah piksel dalam dokumen selain jendela konteks model, halaman yang lebih besar akan diskalakan ke resolusi maksimum 3072x3072 sambil mempertahankan rasio aspek aslinya, sedangkan halaman yang lebih kecil akan diskalakan hingga 768x768 piksel. Tidak ada pengurangan biaya untuk halaman dengan ukuran yang lebih rendah, selain bandwidth, atau peningkatan performa untuk halaman dengan resolusi yang lebih tinggi.

Untuk hasil terbaik:

  • Putar halaman ke orientasi yang benar sebelum mengupload.
  • Hindari halaman yang buram.
  • Jika menggunakan satu halaman, tempatkan perintah teks setelah halaman.

PDF yang disimpan secara lokal

Untuk PDF yang disimpan secara lokal, Anda dapat menggunakan pendekatan berikut:

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)

PDF berukuran besar

Anda dapat menggunakan File API untuk mengupload dokumen dalam ukuran apa pun. Selalu gunakan File API jika total ukuran permintaan (termasuk file, perintah teks, petunjuk sistem, dll.) lebih besar dari 20 MB.

Panggil media.upload untuk mengupload file menggunakan File API. Kode berikut mengupload file dokumen, lalu menggunakan file dalam panggilan ke models.generateContent.

PDF berukuran besar dari URL

Gunakan File API untuk file PDF besar yang tersedia dari URL, yang menyederhanakan proses upload dan pemrosesan dokumen ini secara langsung melalui URL-nya:

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)

PDF besar yang disimpan secara lokal

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)

Anda dapat memverifikasi bahwa API berhasil menyimpan file yang diupload dan mendapatkan metadatanya dengan memanggil files.get. Hanya name (dan secara ekstensi, uri) yang unik.

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))

Beberapa PDF

Gemini API dapat memproses beberapa dokumen PDF dalam satu permintaan, selama ukuran gabungan dokumen dan perintah teks tetap berada dalam jendela konteks model.

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)

Langkah berikutnya

Untuk mempelajari lebih lanjut, lihat referensi berikut:

  • Strategi perintah file: Gemini API mendukung perintah dengan data teks, gambar, audio, dan video, yang juga dikenal sebagai perintah multimodal.
  • Petunjuk sistem: Petunjuk sistem memungkinkan Anda mengarahkan perilaku model berdasarkan kebutuhan dan kasus penggunaan tertentu.