API Gemini поддерживает ввод PDF-файлов, включая длинные документы (до 3600 страниц). Модели Gemini обрабатывают PDF-файлы с использованием встроенного видения и поэтому способны понимать как текстовое, так и графическое содержимое внутри документов. Благодаря встроенной поддержке PDF-файлов модели Gemini могут:
- Анализируйте диаграммы, диаграммы и таблицы внутри документов.
- Извлекайте информацию в структурированные выходные форматы.
- Отвечать на вопросы о визуальном и текстовом содержимом документов.
- Обобщить документы.
- Транскрибируйте содержимое документа (например, в HTML), сохраняя макеты и форматирование, для использования в последующих приложениях (например, в конвейерах RAG).
В этом руководстве демонстрируются некоторые возможные способы использования API Gemini с документами PDF. Весь вывод является только текстовым.
Прежде чем начать: настройте проект и ключ API.
Прежде чем вызывать API Gemini, вам необходимо настроить проект и ключ API.
Получите и защитите свой ключ API
Для вызова API Gemini вам понадобится ключ API. Если у вас его еще нет, создайте ключ в Google AI Studio.
Настоятельно рекомендуется не проверять ключ API в вашей системе контроля версий.
Вам следует хранить свой ключ API в хранилище секретов, например Google Cloud Secret Manager .
В этом руководстве предполагается, что вы получаете доступ к своему ключу API как к переменной среды.
Установите пакет SDK и настройте свой ключ API.
Python SDK для Gemini API содержится в пакете google-generativeai
.
Установите зависимость с помощью pip:
pip install -U google-generativeai
Импортируйте пакет и настройте сервис с помощью своего ключа API:
import os import google.generativeai as genai genai.configure(api_key=os.environ['API_KEY'])
Подсказки с 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 поддерживает запросы с текстовыми, графическими, аудио- и видеоданными, также известные как мультимодальные запросы.
- Системные инструкции . Системные инструкции позволяют вам управлять поведением модели в зависимости от ваших конкретных потребностей и вариантов использования.
- Рекомендации по безопасности . Иногда генеративные модели искусственного интеллекта дают неожиданные результаты, например, неточные, предвзятые или оскорбительные. Постобработка и человеческая оценка необходимы для ограничения риска вреда от таких результатов.