Comprensión de documentos

La API de Gemini admite la entrada de PDF, incluidos los documentos largos (hasta 3,600 páginas). Los modelos de Gemini procesan archivos PDF con visión nativa y, por lo tanto, pueden interpretar el contenido de texto e imagen dentro de los documentos. Con la compatibilidad nativa con la visión de PDF, los modelos de Gemini pueden hacer lo siguiente:

  • Analizar diagramas, gráficos y tablas dentro de documentos
  • Extrae información en formatos de salida estructurados
  • Responde preguntas sobre el contenido visual y de texto en los documentos
  • Resume documentos
  • Transcribir el contenido de un documento (p.ej., a HTML) y conservar los diseños y el formato para usarlo en aplicaciones posteriores

En este instructivo, se muestran algunas formas posibles de usar la API de Gemini para procesar documentos PDF.

Entrada de PDF

En el caso de las cargas útiles de PDF de menos de 20 MB, puedes elegir entre subir documentos codificados en base64 o subir directamente archivos almacenados de forma local.

Como datos intercalados

Puedes procesar documentos PDF directamente desde URLs. Aquí tienes un fragmento de código que muestra cómo hacerlo:

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)

Detalles técnicos

Gemini 1.5 Pro y 1.5 Flash admiten un máximo de 3,600 páginas de documentos. Las páginas del documento deben estar en uno de los siguientes tipos MIME de datos de texto:

  • 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

Cada página del documento equivale a 258 tokens.

Si bien no hay límites específicos para la cantidad de píxeles en un documento además de la ventana de contexto del modelo, las páginas más grandes se reducen a una resolución máxima de 3,072 x 3,072, a la vez que conservan su relación de aspecto original, mientras que las páginas más pequeñas se aumentan a 768 x 768 píxeles. No hay reducción de costos para las páginas de tamaño inferior, a excepción del ancho de banda, ni mejora del rendimiento para las páginas de resolución más alta.

Para lograr resultados óptimos, haz lo siguiente:

  • Rota las páginas a la orientación correcta antes de subirlas.
  • Evita las páginas borrosas.
  • Si usas una sola página, coloca la instrucción de texto después de la página.

PDFs almacenados de forma local

Para los archivos PDF almacenados de forma local, puedes usar el siguiente enfoque:

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)

Archivos PDF grandes

Puedes usar la API de File para subir un documento de cualquier tamaño. Usa siempre la API de File cuando el tamaño total de la solicitud (incluidos los archivos, el mensaje de texto, las instrucciones del sistema, etcétera) sea superior a 20 MB.

Llama a media.upload para subir un archivo con la API de archivos. El siguiente código sube un archivo de documento y, luego, lo usa en una llamada a models.generateContent.

Archivos PDF grandes de URLs

Usa la API de File para archivos PDF grandes disponibles desde URLs, lo que simplifica el proceso de carga y procesamiento de estos documentos directamente a través de sus URLs:

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 grandes almacenados de forma local

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)

Para verificar que la API almacenó correctamente el archivo subido y obtener sus metadatos, llama a files.get. Solo name (y, por extensión, uri) son únicos.

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

Varios archivos PDF

La API de Gemini puede procesar varios documentos PDF en una sola solicitud, siempre que el tamaño combinado de los documentos y la instrucción de texto permanezca dentro de la ventana de contexto del modelo.

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)

¿Qué sigue?

Para obtener más información, consulta los siguientes recursos:

  • Estrategias de indicaciones de archivos: La API de Gemini admite indicaciones con datos de texto, imagen, audio y video, también conocidos como indicaciones multimodales.
  • Instrucciones del sistema: Las instrucciones del sistema te permiten dirigir el comportamiento del modelo según tus necesidades y casos de uso específicos.