Понимание документа

API Gemini поддерживает ввод PDF-файлов, включая длинные документы (до 3600 страниц). Модели Gemini обрабатывают PDF-файлы с использованием встроенного видения и поэтому способны понимать как текстовое, так и графическое содержимое внутри документов. Благодаря встроенной поддержке PDF-файлов модели Gemini могут:

  • Анализируйте диаграммы, диаграммы и таблицы внутри документов.
  • Извлечение информации в структурированные выходные форматы
  • Отвечать на вопросы о визуальном и текстовом содержимом документов.
  • Обобщить документы
  • Транскрибируйте содержимое документа (например, в HTML) с сохранением макетов и форматирования для использования в последующих приложениях.

В этом руководстве демонстрируются некоторые возможные способы использования API Gemini для обработки PDF-документов.

PDF-ввод

Для полезных данных PDF размером менее 20 МБ вы можете выбрать между загрузкой документов в кодировке Base64 или прямой загрузкой локально сохраненных файлов.

Как встроенные данные

Вы можете обрабатывать PDF-документы непосредственно с URL-адресов. Вот фрагмент кода, показывающий, как это сделать:

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)

Технические детали

Gemini 1.5 Pro и 1.5 Flash поддерживают до 3600 страниц документов. Страницы документа должны иметь один из следующих типов текстовых данных MIME:

  • 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
  • Уценка — text/md
  • CSV – text/csv
  • XML — text/xml
  • RTF — text/rtf

Каждая страница документа эквивалентна 258 токенам.

Хотя не существует конкретных ограничений на количество пикселей в документе, кроме контекстного окна модели, страницы большего размера уменьшаются до максимального разрешения 3072x3072 с сохранением исходного соотношения сторон, а страницы меньшего размера масштабируются до 768x768 пикселей. Снижение затрат на страницы меньшего размера не происходит, за исключением пропускной способности или повышения производительности для страниц с более высоким разрешением.

Для достижения наилучших результатов:

  • Перед загрузкой поверните страницы в правильную ориентацию.
  • Избегайте размытых страниц.
  • Если вы используете одну страницу, разместите текстовую подсказку после страницы.

PDF-файлы, хранящиеся локально

Для локально хранящихся PDF-файлов вы можете использовать следующий подход:

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-файлы

Вы можете использовать File API для загрузки документа любого размера. Всегда используйте File API, если общий размер запроса (включая файлы, текстовую подсказку, системные инструкции и т. д.) превышает 20 МБ.

Вызовите media.upload , чтобы загрузить файл с помощью File API. Следующий код загружает файл документа, а затем использует его при вызове models.generateContent .

Большие PDF-файлы с URL-адресов

Используйте File API для больших PDF-файлов, доступных по URL-адресам, упрощая процесс загрузки и обработки этих документов непосредственно через их 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-файлы, хранящиеся локально

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 успешно сохранил загруженный файл, и получить его метаданные, вызвав files.get . Только name (и, соответственно, uri ) уникальны.

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

Несколько PDF-файлов

API Gemini способен обрабатывать несколько PDF-документов за один запрос, при условии, что общий размер документов и текстовое приглашение остаются в пределах контекстного окна модели.

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)

Что дальше

Чтобы узнать больше, посетите следующие ресурсы:

  • Стратегии запроса файлов . API Gemini поддерживает запросы с текстовыми, графическими, аудио- и видеоданными, также известные как мультимодальные запросы.
  • Системные инструкции . Системные инструкции позволяют вам управлять поведением модели в зависимости от ваших конкретных потребностей и вариантов использования.