Belge anlama

Gemini API, uzun dokümanlar (3.600 sayfaya kadar) dahil olmak üzere PDF girişini destekler. Gemini modelleri, PDF'leri yerel görüntüleme ile işler ve bu nedenle dokümanlar içindeki hem metin hem de resim içeriklerini anlayabilir. Gemini modelleri, yerel PDF görüntüleme desteğiyle şunları yapabilir:

  • Dokümanlar içindeki diyagramları, grafikleri ve tabloları analiz etme
  • Bilgileri yapılandırılmış çıkış biçimlerine ayıklayın
  • Dokümanlardaki görsel ve metin içerikleriyle ilgili soruları yanıtlama
  • Belgeleri özetleme
  • Aşağı akış uygulamalarında kullanılmak üzere doküman içeriğini (ör. HTML'ye) düzen ve biçimlendirmeyi koruyarak metne dönüştürme

Bu eğitimde, PDF belgelerini işlemek için Gemini API'yi kullanmanın bazı olası yolları gösterilmektedir.

PDF girişi

20 MB'tan az PDF yük verileri için base64 kodlu dokümanları yükleme veya yerel olarak depolanan dosyaları doğrudan yükleme arasında seçim yapabilirsiniz.

Satır içi veri olarak

PDF belgelerini doğrudan URL'lerden işleyebilirsiniz. Bunun nasıl yapıldığını gösteren bir kod snippet'i aşağıda verilmiştir:

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)

Teknik ayrıntılar

Gemini 1.5 Pro ve 1.5 Flash en fazla 3.600 belge sayfasını destekler. Doküman sayfaları aşağıdaki metin veri MIME türlerinden birinde olmalıdır:

  • 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
  • İndirim - text/md
  • CSV - text/csv
  • XML - text/xml
  • RTF - text/rtf

Her belge sayfası 258 jetona eşittir.

Bir belgedeki piksel sayısıyla ilgili olarak modelin bağlam penceresinden başka belirli bir sınırlama yoktur. Daha büyük sayfalar, orijinal en boy oranlarını koruyarak maksimum 3072x3072 çözünürlüğe kadar küçültülür. Daha küçük sayfalar ise 768x768 piksele kadar büyütülür. Daha düşük boyutlardaki sayfalar için bant genişliği dışında bir maliyet azaltımı veya daha yüksek çözünürlükteki sayfalar için performans iyileştirmesi yoktur.

En iyi sonuçlar için:

  • Sayfaları yüklemeden önce doğru yönde döndürün.
  • Bulanık sayfalardan kaçının.
  • Tek sayfa kullanıyorsanız metin istemini sayfanın sonuna yerleştirin.

Yerel olarak depolanan PDF'ler

Yerel olarak depolanan PDF'ler için aşağıdaki yaklaşımı kullanabilirsiniz:

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)

Büyük PDF'ler

Herhangi bir boyutta doküman yüklemek için File API'yi kullanabilirsiniz. Toplam istek boyutu (dosyalar, metin istemi, sistem talimatları vb. dahil) 20 MB'tan büyük olduğunda her zaman File API'yi kullanın.

Dosya API'sini kullanarak dosya yüklemek için media.upload çağrısı yapın. Aşağıdaki kod, bir doküman dosyası yükler ve ardından dosyayı models.generateContent çağrısında kullanır.

URL'lerden büyük PDF'ler

URL'lerden erişilebilen büyük PDF dosyaları için File API'yi kullanarak bu dokümanları doğrudan URL'leri üzerinden yükleme ve işleme sürecini basitleştirin:

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)

Yerel olarak depolanan büyük PDF'ler

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)

API'nin yüklenen dosyayı başarıyla depoladığını doğrulamak ve files.get çağrısını yaparak meta verilerini almak için: Yalnızca name (ve buna bağlı olarak uri) benzersizdir.

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

Birden fazla PDF

Gemini API, belgelerin ve metin isteğinin toplam boyutu modelin bağlam penceresinde kaldığı sürece tek bir istekle birden fazla PDF belgesini işleyebilir.

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)

Sırada ne var?

Daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atın:

  • Dosya istemi stratejileri: Gemini API, çoklu formatlı istem olarak da bilinen metin, resim, ses ve video verileriyle istemleri destekler.
  • Sistem talimatları: Sistem talimatları, modelin davranışını belirli ihtiyaçlarınıza ve kullanım alanlarınıza göre yönlendirmenize olanak tanır.