Изучите возможности обработки документов с помощью Gemini API

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

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

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

Прежде чем начать: настройте проект и ключ API.

Прежде чем вызывать API Gemini, вам необходимо настроить проект и ключ API.

Подсказки с PDF-файлами

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

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

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 размером менее 20 МБ вы можете выбрать между загрузкой документов в кодировке Base64 или прямой загрузкой локально сохраненных файлов.

Документы в кодировке Base64

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

import httpx
import base64

model = genai.GenerativeModel("gemini-1.5-flash")
doc_url = "https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"  # Replace with the actual URL of your PDF

# Retrieve and encode the PDF
doc_data = base64.standard_b64encode(httpx.get(doc_url).content).decode("utf-8")

prompt = "Summarize this document"

response = model.generate_content([{'mime_type':'application/pdf', 'data': doc_data}, prompt])
print(response.text)

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

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

import base64

model = genai.GenerativeModel("gemini-1.5-flash")
doc_path = "/path/to/file.pdf" # Replace with the actual path to your local PDF

# Read and encode the local file
with open(doc_path, "rb") as doc_file:
    doc_data = base64.standard_b64encode(doc_file.read()).decode("utf-8")

prompt = "Summarize this document"

response = model.generate_content([{'mime_type': 'application/pdf', 'data': doc_data}, prompt])

print(response.text)

Большие PDF-файлы

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

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

Большие PDF-файлы с URL-адресов (:#large-pdfs-urls)

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

import io
import httpx

model = genai.GenerativeModel("gemini-1.5-flash")
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf" # Replace with the actual URL of your large PDF

# Retrieve and upload the PDF using the File API
doc_data = io.BytesIO(httpx.get(long_context_pdf_path).content)
sample_doc = genai.upload_file(data=doc_data, mime_type='application/pdf')

prompt = "Summarize this document"

response = model.generate_content([sample_doc, prompt])
print(response.text)

Большие PDF-файлы, хранящиеся локально (:#large-pdfs-local)

import google.generativeai as genai

model = genai.GenerativeModel("gemini-1.5-flash")
sample_pdf = genai.upload_file(media / "test.pdf")
response = model.generate_content(["Give me a summary of this pdf file.", sample_pdf])
print(response.text)

Вы можете убедиться, что API успешно сохранил загруженный файл, и получить его метаданные, вызвав files.get . Только name (и, соответственно, uri ) уникальны.

import google.generativeai as genai

myfile = genai.upload_file(media / "poem.txt")
file_name = myfile.name
print(file_name)  # "files/*"

myfile = genai.get_file(file_name)
print(myfile)

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

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

import io
import httpx

model = genai.GenerativeModel("gemini-1.5-flash")

doc_url_1 = "https://arxiv.org/pdf/2312.11805" # Replace with the URL to your first PDF
doc_url_2 = "https://arxiv.org/pdf/2403.05530" # Replace with the URL to your second PDF

# 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 = genai.upload_file(data=doc_data_1, mime_type='application/pdf')
sample_pdf_2 = genai.upload_file(data=doc_data_2, 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 = model.generate_content([sample_pdf_1, sample_pdf_2, prompt])
print(response.text)

Список файлов

Вы можете перечислить все файлы, загруженные с помощью File API, и их URI, используя files.list .

import google.generativeai as genai

print("My files:")
for f in genai.list_files():
    print("  ", f.name)

Удалить файлы

Файлы, загруженные с помощью File API, автоматически удаляются через 2 дня. Вы также можете удалить их вручную, используя files.delete .

import google.generativeai as genai

myfile = genai.upload_file(media / "poem.txt")

myfile.delete()

try:
    # Error.
    model = genai.GenerativeModel("gemini-1.5-flash")
    result = model.generate_content([myfile, "Describe this file."])
except google.api_core.exceptions.PermissionDenied:
    pass

Кэширование контекста PDF-файлов

import os
from google.generativeai import caching
import io
import httpx

# Define the path to the PDF document (or use a URL)
long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf" # Replace with the URL of your large PDF
doc_data = io.BytesIO(httpx.get(long_context_pdf_path).content)

# Upload the PDF document using the File API
document = genai.upload_file(data=doc_data, mime_type='application/pdf')

# Specify the model name and system instruction for caching
model_name = "gemini-1.5-flash-002" # Ensure this matches the model you intend to use
system_instruction = "You are an expert analyzing transcripts."

# Create a cached content object
cache = caching.CachedContent.create(
    model=model_name,
    system_instruction=system_instruction,
    contents=[document], # The document(s) and other content you wish to cache
)

# Display the cache details
print(cache)

# Initialize a generative model from the cached content
model = genai.GenerativeModel.from_cached_content(cache)

# Generate content using the cached prompt and document
response = model.generate_content("Please summarize this transcript")

# (Optional) Print usage metadata for insights into the API call
print(response.usage_metadata)

# Print the generated text
print(response.text)

Получение списка кешей

Невозможно получить или просмотреть кэшированный контент, но вы можете получить метаданные кэша ( name , model , display_name , usage_metadata , create_time , update_time и expire_time ).

Чтобы просмотреть метаданные для всех загруженных кешей, используйте CachedContent.list() :

for c in caching.CachedContent.list():
  print(c)

Обновить кэш

Вы можете установить новый ttl или expire_time для кеша. Изменение чего-либо еще в кеше не поддерживается.

В следующем примере показано, как обновить ttl кэша с помощью CachedContent.update() .

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

Удалить кэш

Служба кэширования предоставляет операцию удаления для ручного удаления содержимого из кэша. В следующем примере показано, как удалить кеш с помощью CachedContent.delete() .

cache.delete()

Что дальше

В этом руководстве показано, как generateContent и генерировать выходные данные из обработанных документов. Чтобы узнать больше, посетите следующие ресурсы:

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