Entendimento de documentos

A API Gemini oferece suporte à entrada de PDF, incluindo documentos longos (até 3.600 páginas). Os modelos Gemini processam PDFs com visão nativa e, portanto, são capazes de entender o conteúdo de texto e imagem nos documentos. Com o suporte nativo à visão de PDF, os modelos do Gemini podem:

  • Analisar diagramas, gráficos e tabelas nos documentos
  • Extrair informações em formatos de saída estruturados
  • Responder a perguntas sobre conteúdo visual e de texto em documentos
  • Resumir documentos
  • Transcrever o conteúdo do documento (por exemplo, para HTML) preservando layouts e formatação para uso em aplicativos secundários

Este tutorial demonstra algumas maneiras de usar a API Gemini para processar documentos PDF.

Entrada de PDF

Para payloads de PDF com menos de 20 MB, você pode fazer upload de documentos codificados em base64 ou fazer upload direto de arquivos armazenados localmente.

Como dados inline

É possível processar documentos PDF diretamente de URLs. Confira um snippet de código que mostra como fazer isso:

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)

Detalhes técnicos

O Gemini 1.5 Pro e o 1.5 Flash oferecem suporte a um máximo de 3.600 páginas de documento. As páginas do documento precisam estar em um dos seguintes tipos MIME de dados 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 de documento equivale a 258 tokens.

Embora não haja limites específicos para o número de pixels em um documento além da janela de contexto do modelo, páginas maiores são reduzidas para uma resolução máxima de 3072 x 3072, preservando a proporção original, enquanto páginas menores são aumentadas para 768 x 768 pixels. Não há redução de custo para páginas de tamanhos menores, exceto a largura de banda, ou melhoria de desempenho para páginas de resolução maior.

Para os melhores resultados:

  • Gire as páginas para a orientação correta antes de fazer o upload.
  • Evite páginas desfocadas.
  • Se você estiver usando uma única página, coloque o comando de texto depois dela.

PDFs armazenados localmente

Para PDFs armazenados localmente, use a seguinte abordagem:

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)

PDFs grandes

É possível usar a API File para fazer upload de um documento de qualquer tamanho. Sempre use a API File quando o tamanho total da solicitação (incluindo arquivos, comando de texto, instruções do sistema etc.) for maior que 20 MB.

Chame media.upload para fazer upload de um arquivo usando a API File. O código a seguir faz o upload de um arquivo de documento e o usa em uma chamada para models.generateContent.

PDFs grandes de URLs

Use a API File para arquivos PDF grandes disponíveis em URLs, simplificando o processo de upload e processamento desses documentos diretamente pelos 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)

PDFs grandes armazenados 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)

É possível verificar se a API armazenou o arquivo enviado e acessar os metadados dele chamando files.get. Somente o name (e, por extensão, o uri) são exclusivos.

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

Vários PDFs

A API Gemini é capaz de processar vários documentos PDF em uma única solicitação, desde que o tamanho combinado dos documentos e do comando de texto fique dentro da janela de contexto do 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)

A seguir

Para saber mais, consulte os recursos a seguir:

  • Estratégias de solicitação de arquivo: a API Gemini oferece suporte a solicitações com dados de texto, imagem, áudio e vídeo, também conhecidas como solicitações multimodais.
  • Instruções do sistema: as instruções do sistema permitem orientar o comportamento do modelo com base nas suas necessidades e casos de uso específicos.