Gemini API ile belge işleme özelliklerini keşfedin

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

  • Dokümanlar içindeki diyagramları, grafikleri ve tabloları analiz edin.
  • Bilgileri yapılandırılmış çıkış biçimlerine ayıklayın.
  • Dokümanlardaki görsel ve metin içerikleriyle ilgili soruları yanıtlama
  • Belgeleri özetleyin.
  • Aşağı akış uygulamalarında (ör.RAG ardışık düzenlerinde) 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, Gemini API'yi PDF dokümanlarıyla kullanmanın bazı olası yolları gösterilmektedir. Tüm çıkışlar yalnızca metindir.

Başlamadan önce: Projenizi ve API anahtarınızı oluşturun

Gemini API'yi çağırmadan önce projenizi oluşturmanız ve API anahtarınızı yapılandırmanız gerekir.

PDF'lerle istem gösterme

Bu kılavuzda, File API'yi kullanarak veya satır içi veri olarak ekleyerek PDF'lerin nasıl yükleneceği ve işleneceği gösterilmektedir.

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
  • Markdown - 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.

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.

Base64 kodlu belgeler

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:

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)

Yerel olarak depolanan PDF'ler

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

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)

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 (:#large-pdfs-urls)

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:

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)

Yerel olarak depolanan büyük PDF'ler (:#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)

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.

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)

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.

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)

Dosyaları listeleme

files.list kullanarak File API kullanılarak yüklenen tüm dosyaları ve URI'lerini listeleyebilirsiniz.

import google.generativeai as genai

print("My files:")
for f in genai.list_files():
    print("  ", f.name)

Dosya silme

File API kullanılarak yüklenen dosyalar 2 gün sonra otomatik olarak silinir. files.delete simgesini kullanarak da bunları manuel olarak silebilirsiniz.

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

PDF'lerle bağlam önbelleğe alma

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)

Önbellekleri listeleme

Önbelleğe alınmış içeriği almak veya görüntülemek mümkün değildir ancak önbelleğe alınmış meta verileri (name, model, display_name, usage_metadata, create_time, update_time ve expire_time) alabilirsiniz.

Yüklenen tüm önbellekleri meta verileriyle birlikte listelemek için CachedContent.list() kullanın:

for c in caching.CachedContent.list():
  print(c)

Önbelleği güncelleme

Önbelleğe yeni bir ttl veya expire_time ayarlayabilirsiniz. Önbellekle ilgili başka bir şeyin değiştirilmesi desteklenmez.

Aşağıdaki örnekte, CachedContent.update() kullanılarak bir önbelleğin ttl değerinin nasıl güncelleneceği gösterilmektedir.

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

Önbelleği silme

Önbelleğe alma hizmeti, önbellekten manuel olarak içerik kaldırmak için bir silme işlemi sağlar. Aşağıdaki örnekte, CachedContent.delete() kullanılarak bir önbelleğin nasıl silineceği gösterilmektedir.

cache.delete()

Sırada ne var?

Bu kılavuzda, generateContent işlenen belgelerden metin çıkışları oluşturmak için nasıl kullanılacağı gösterilmektedir. Daha fazla bilgi edinmek için aşağıdaki kaynakları inceleyin:

  • Dosya istemi stratejileri: Gemini API, metin, resim, ses ve video verileriyle istemi destekler. Bu, çoklu formatlı istem olarak da bilinir.
  • 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.
  • Güvenlik kılavuzu: Üretken yapay zeka modelleri bazen yanlış, önyargılı veya rahatsız edici gibi beklenmedik çıkışlar üretebilir. Bu tür çıkışlardan kaynaklanan zarar riskini sınırlamak için işlem sonrası ve gerçek kişiler tarafından değerlendirme yapılması önemlidir.