L'API Gemini supporta l'input PDF, inclusi i documenti lunghi (fino a 3600 pagine). I modelli Gemini elaborano i PDF con la visione nativa e sono quindi in grado di comprendere sia i contenuti di testo che quelli delle immagini all'interno dei documenti. Con il supporto della visione di PDF nativa, i modelli di Gemini sono in grado di:
- Analizzare diagrammi, grafici e tabelle all'interno dei documenti
- Estrai le informazioni in formati di output strutturati
- Rispondere a domande sui contenuti visivi e di testo nei documenti
- Riassunto di documenti
- Trascrivere i contenuti dei documenti (ad es. in HTML) preservando i layout e la formattazione, per l'utilizzo in applicazioni a valle
Questo tutorial mostra alcuni possibili modi per utilizzare l'API Gemini per elaborare i documenti PDF.
Input PDF
Per i payload PDF di dimensioni inferiori a 20 MB, puoi scegliere tra caricare documenti codificati in base64 o caricare direttamente i file archiviati localmente.
Come dati in linea
Puoi elaborare i documenti PDF direttamente dagli URL. Ecco uno snippet di codice che mostra come:
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)
Dettagli tecnici
Gemini 1.5 Pro e 1.5 Flash supportano un massimo di 3600 pagine di documento. Le pagine del documento devono essere in uno dei seguenti tipi MIME di dati di testo:
- 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
Ogni pagina del documento equivale a 258 token.
Sebbene non esistano limiti specifici al numero di pixel in un documento oltre alla finestra di contesto del modello, le pagine più grandi vengono ridimensionate a una risoluzione massima di 3072 x 3072 mantenendo le proporzioni originali, mentre le pagine più piccole vengono ridimensionate a 768 x 768 pixel. Non è prevista una riduzione dei costi per le pagine di dimensioni inferiori, ad eccezione della larghezza di banda, né un miglioramento delle prestazioni per le pagine di risoluzione superiore.
Per ottenere risultati ottimali:
- Ruota le pagine nell'orientamento corretto prima del caricamento.
- Evita pagine sfocate.
- Se utilizzi una singola pagina, posiziona il prompt di testo dopo la pagina.
PDF archiviati localmente
Per i PDF archiviati localmente, puoi utilizzare il seguente approccio:
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 di grandi dimensioni
Puoi utilizzare l'API File per caricare un documento di qualsiasi dimensione. Utilizza sempre l'API File quando le dimensioni totali della richiesta (inclusi i file, il prompt di testo, le istruzioni di sistema e così via) sono superiori a 20 MB.
Chiama media.upload
per caricare un file utilizzando l'API File. Il seguente codice carica un file di documento e lo utilizza in una chiamata a models.generateContent
.
PDF di grandi dimensioni da URL
Utilizza l'API File per i file PDF di grandi dimensioni disponibili tramite URL, semplificando il processo di caricamento ed elaborazione di questi documenti direttamente tramite i relativi URL:
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 di grandi dimensioni archiviati localmente
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)
Puoi verificare che l'API abbia archiviato correttamente il file caricato e recuperarne i metadati chiamando files.get
. Solo name
(e per estensione uri
) sono univoci.
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))
Più PDF
L'API Gemini è in grado di elaborare più documenti PDF in un'unica richiesta, purché le dimensioni combinate dei documenti e del prompt di testo rimangano all'interno della finestra di contesto del modello.
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)
Passaggi successivi
Per saperne di più, consulta le seguenti risorse:
- Strategie di prompt dei file: l'API Gemini supporta i prompt con dati di testo, immagini, audio e video, noti anche come prompt multimodali.
- Istruzioni di sistema: le istruzioni di sistema ti consentono di indirizzare il comportamento del modello in base alle tue esigenze e ai tuoi casi d'uso specifici.