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.