← Усі статті

Розумний реєстр документів: безкоштовний OCR Google Drive і обхід лімітів Gemini

Google Apps Script, прихований OCR Drive API, ротація ключів Gemini і LockService — пайплайн каталогізації архіву на Habr.

Зміст

Коротко

Як автоматично пройти гігабайти PDF і DOCX на Google Drive, витягнути назви та анотації наукових статей і не згоріти на лімітах Gemini API? На Habr описали зв'язку Google Apps Script, вбудованого OCR Drive, тригерів за часом, LockService і ротації API-ключів — без платних парсерів документів.

Що сталося

Завдання автора — систематизувати великий архів наукових робіт: для кожного файлу потрібні точна назва, короткий опис і перевірка, чи фігурує конкретний вчений серед співавторів. Перший наївний скрипт на Apps Script вперся одразу в три стіни.

Ліміт 6 хвилин на один запуск: OCR важкого PDF плюс запит до LLM займає 15–40 секунд. Бінарні формати: GAS «з коробки» не читає PDF/DOCX. Квоти Gemini на безкоштовному тарифі — швидкий HTTP 429.

Рішення складається з кількох прийомів. Прихований OCR Google Drive: через Drive API копіюєте PDF/DOCX у тимчасовий Google Docs з ocr: true. Текст забираєте через DocumentApp, тимчасовий файл видаляєте в finally.

Обхід 6 хвилин — Google Таблиця як проста БД: кешуєте оброблені імена, тригер часу щохвилини перезапускає скрипт. LockService закриває гонку паралельних запусків на одному файлі.

Ротація ключів Gemini: масив ключів з AI Studio, при 429 — наступний; якщо обійшли коло — пауза 30 секунд. Відповідь LLM як JSON (responseMimeType: application/json) — title і summary одним викликом.

Чому це важливо

Патерн показує, що Apps Script — платформа для довгих фонових пайплайнів, якщо правильно розбити роботу на ітерації. Для розробників із архівом у Drive це дешевше за окремий сервер з OCR — особливо коли обсяг сотні–тисячі файлів.

Слабке місце — залежність від квот Google. Зв'язка безкоштовний OCR + Flash Lite + пул ключів дає порядку 1500 документів на день на трьох ключах.

На практиці

  1. Підключіть Drive API в редакторі Apps Script.
  2. OCR через Drive.Files.copy з ocr: truetry/finally з видаленням temp-файлу.
  3. Реєстр у Google Sheets; перед обходом — set уже готових імен.
  4. Time-driven trigger + видалення тригерів після завершення каталогу.
  5. LockService.getScriptLock() навколо обробки одного файлу.
  6. Пул GEMINI_API_KEYS, перемикання при 429, Utilities.sleep(30000) при RPM.
  7. responseMimeType: "application/json" — структурована відповідь без парсингу ```json.
  8. Нетекстові формати — заглушка без токенів.

Підсумок

Стаття на Habr — практичний рецепт автономного реєстру документів на Google Drive: OCR без сторонніх сервісів, LLM для полів, стійкість до таймаутів і квот. Деталі — в оригіналі.