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 поддерживает запросы с текстовыми, графическими, аудио- и видеоданными, также известные как мультимодальные запросы.
- Системные инструкции . Системные инструкции позволяют вам управлять поведением модели в зависимости от ваших конкретных потребностей и вариантов использования.