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) yang mempertahankan tata letak dan pemformatan, untuk digunakan dalam aplikasi downstream (seperti dalam pipeline RAG).
Tutorial ini menunjukkan beberapa kemungkinan cara menggunakan Gemini API dengan dokumen PDF. Semua output hanya berupa teks.
Sebelum memulai: Menyiapkan project dan kunci API
Sebelum memanggil Gemini API, Anda perlu menyiapkan project dan mengonfigurasi kunci API.
Meminta dengan PDF
Panduan ini menunjukkan cara mengupload dan memproses PDF menggunakan File API atau dengan menyertakannya sebagai data inline.
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.
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.
Dokumen yang dienkode dengan base64
Anda dapat memproses dokumen PDF langsung dari URL. Berikut adalah cuplikan kode yang menunjukkan cara melakukannya:
import httpx
import base64
model = genai.GenerativeModel("gemini-1.5-flash")
doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf" # Replace with the actual URL of your PDF
# Retrieve and encode the PDF
doc_data = base64.standard_b64encode(httpx.get(doc_url).content).decode("utf-8")
prompt = "Summarize this document"
response = model.generate_content([{'mime_type':'application/pdf', 'data': doc_data}, prompt])
print(response.text)
PDF yang disimpan secara lokal
Untuk PDF yang disimpan secara lokal, Anda dapat menggunakan pendekatan berikut:
import base64
model = genai.GenerativeModel("gemini-1.5-flash")
doc_path = "/path/to/file.pdf" # Replace with the actual path to your local PDF
# Read and encode the local file
with open(doc_path, "rb") as doc_file:
doc_data = base64.standard_b64encode(doc_file.read()).decode("utf-8")
prompt = "Summarize this document"
response = model.generate_content([{'mime_type': 'application/pdf', 'data': doc_data}, 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 besar dari URL (:#large-pdfs-urls)
Gunakan File API untuk file PDF besar yang tersedia dari URL, yang menyederhanakan proses upload dan pemrosesan dokumen ini secara langsung melalui URL-nya:
import io
import httpx
model = genai.GenerativeModel("gemini-1.5-flash")
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf" # Replace with the actual URL of your large PDF
# Retrieve and upload the PDF using the File API
doc_data = io.BytesIO(httpx.get(long_context_pdf_path).content)
sample_doc = genai.upload_file(data=doc_data, mime_type='application/pdf')
prompt = "Summarize this document"
response = model.generate_content([sample_doc, prompt])
print(response.text)
PDF besar yang disimpan secara lokal (:#large-pdfs-local)
import google.generativeai as genai
model = genai.GenerativeModel("gemini-1.5-flash")
sample_pdf = genai.upload_file(media / "test.pdf")
response = model.generate_content(["Give me a summary of this pdf file.", sample_pdf])
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.
import google.generativeai as genai
myfile = genai.upload_file(media / "poem.txt")
file_name = myfile.name
print(file_name) # "files/*"
myfile = genai.get_file(file_name)
print(myfile)
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.
import io
import httpx
model = genai.GenerativeModel("gemini-1.5-flash")
doc_url_1 = "https://arxiv.org/pdf/2312.11805" # Replace with the URL to your first PDF
doc_url_2 = "https://arxiv.org/pdf/2403.05530" # Replace with the URL to your second PDF
# 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 = genai.upload_file(data=doc_data_1, mime_type='application/pdf')
sample_pdf_2 = genai.upload_file(data=doc_data_2, 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 = model.generate_content([sample_pdf_1, sample_pdf_2, prompt])
print(response.text)
Mencantumkan file
Anda dapat mencantumkan semua file yang diupload menggunakan File API dan URI-nya menggunakan
files.list
.
import google.generativeai as genai
print("My files:")
for f in genai.list_files():
print(" ", f.name)
Menghapus file
File yang diupload menggunakan File API akan otomatis dihapus setelah 2 hari. Anda juga dapat menghapusnya secara manual menggunakan files.delete
.
import google.generativeai as genai
myfile = genai.upload_file(media / "poem.txt")
myfile.delete()
try:
# Error.
model = genai.GenerativeModel("gemini-1.5-flash")
result = model.generate_content([myfile, "Describe this file."])
except google.api_core.exceptions.PermissionDenied:
pass
Cache konteks dengan PDF
import os
from google.generativeai import caching
import io
import httpx
# Define the path to the PDF document (or use a URL)
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf" # Replace with the URL of your large PDF
doc_data = io.BytesIO(httpx.get(long_context_pdf_path).content)
# Upload the PDF document using the File API
document = genai.upload_file(data=doc_data, mime_type='application/pdf')
# Specify the model name and system instruction for caching
model_name = "gemini-1.5-flash-002" # Ensure this matches the model you intend to use
system_instruction = "You are an expert analyzing transcripts."
# Create a cached content object
cache = caching.CachedContent.create(
model=model_name,
system_instruction=system_instruction,
contents=[document], # The document(s) and other content you wish to cache
)
# Display the cache details
print(cache)
# Initialize a generative model from the cached content
model = genai.GenerativeModel.from_cached_content(cache)
# Generate content using the cached prompt and document
response = model.generate_content("Please summarize this transcript")
# (Optional) Print usage metadata for insights into the API call
print(response.usage_metadata)
# Print the generated text
print(response.text)
Mencantumkan cache
Anda tidak dapat mengambil atau melihat konten dalam cache, tetapi Anda dapat mengambil
metadata cache (name
, model
, display_name
, usage_metadata
,
create_time
, update_time
, dan expire_time
).
Untuk mencantumkan metadata untuk semua cache yang diupload, gunakan CachedContent.list()
:
for c in caching.CachedContent.list():
print(c)
Mengupdate cache
Anda dapat menetapkan ttl
atau expire_time
baru untuk cache. Mengubah hal lain
tentang cache tidak didukung.
Contoh berikut menunjukkan cara mengupdate ttl
cache menggunakan
CachedContent.update()
.
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
Menghapus cache
Layanan penyimpanan dalam cache menyediakan operasi penghapusan untuk menghapus konten secara manual
dari cache. Contoh berikut menunjukkan cara menghapus cache menggunakan
CachedContent.delete()
.
cache.delete()
Langkah berikutnya
Panduan ini menunjukkan cara menggunakan
generateContent
dan
membuat output teks dari dokumen yang diproses. 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.
- Panduan keamanan: Terkadang model AI generatif menghasilkan output yang tidak terduga, seperti output yang tidak akurat, bias, atau menyinggung. Pascapemrosesan dan evaluasi manusia sangat penting untuk membatasi risiko bahaya dari output tersebut.