Что получится
ИИ-агент для Google Drive и Docs ищет ответы в рабочих файлах: Google Docs, Sheets, Slides, PDF, DOCX и других документах. Он индексирует доступные файлы, отвечает с цитатами и ссылками, а главное - не показывает пользователю то, к чему у него нет доступа.
Такой агент полезен для внутренней базы знаний, регламентов, коммерческих предложений, проектной документации, инструкций, договорных шаблонов и командных папок.
Главный риск
Самая опасная ошибка - сделать “один общий индекс Drive” и отвечать всем из него. Тогда сотрудник может получить фрагменты документов, к которым у него нет прав.
Поэтому агент должен учитывать ACL: права доступа к файлам, папкам и пользователям. Если пользователь не имеет права открыть документ в Google Drive, агент не должен показывать текст этого документа в ответе.
Шаг 1. Определите область индексации
Не начинайте с “весь Google Drive компании”. Выберите узкую область:
- папка с базой знаний;
- папка отдела продаж;
- проектная папка;
- набор регламентов;
- документы для поддержки;
- публичные для команды инструкции.
Для MVP лучше индексировать одну папку и ее подпапки. Так проще проверить права, качество ответов и обновление документов.
Шаг 2. Выберите способ доступа
Для Google Workspace обычно используют Google Drive API. Он позволяет искать файлы, читать метаданные, получать права доступа, скачивать обычные файлы и экспортировать Google Docs/Sheets/Slides в поддерживаемые форматы.
Для текста Google Docs можно использовать Google Docs API: он возвращает структуру документа и текстовые элементы. Для Google Sheets - Google Sheets API. Но для универсального индекса часто удобнее начинать с Drive API и export: документ превращается в text/html, plain text, PDF или DOCX, а дальше идет обычный pipeline извлечения текста.
Шаг 3. Настройте минимальные права
Не выдавайте приложению лишние scopes.
Минимальный подход:
- читать только файлы, к которым пользователь дал доступ;
- или читать только конкретную папку через сервисный аккаунт;
- не давать право на удаление и изменение файлов;
- не хранить refresh token без защиты;
- разделять индексацию и ответы пользователям.
Если агент работает внутри компании, заранее решите: он действует “от имени пользователя” или “от имени сервисного аккаунта”. Это влияет на безопасность и ACL.
Шаг 4. Соберите список файлов
Индексатор должен получать не только текст, но и метаданные.
Для каждого файла сохраняйте:
- file id;
- название;
- MIME type;
- владельца;
- папку;
- ссылку;
- дату изменения;
- список прав доступа или наследуемые правила;
- checksum или версию, если доступно;
- источник текста: export, download, Docs API, OCR.
Не индексируйте корзину, временные файлы, старые архивы и документы без нужных прав.
Шаг 5. Извлеките текст
Разные файлы читаются по-разному.
- Google Docs: через Docs API или export в текст/HTML.
- Google Sheets: через Sheets API или export, если нужна таблица целиком.
- Google Slides: export в текст/HTML/PDF, если нужны заметки и слайды.
- PDF: загрузка файла и извлечение текста; для сканов нужен OCR.
- DOCX: скачивание и парсинг как обычного документа.
- Изображения: OCR только если это действительно нужно.
Сохраняйте ссылку на исходный файл и позицию фрагмента. Ответ без ссылки на источник хуже проверяется.
Шаг 6. Нарежьте документы на фрагменты
Не отправляйте большой документ целиком в модель. Разбейте текст на chunks.
Правила:
- chunk должен сохранять смысловой блок;
- заголовки и путь к файлу добавляйте в metadata;
- таблицы лучше хранить как структурированный текст;
- у каждого chunk должен быть file id;
- у каждого chunk должны быть ACL-метаданные;
- старые версии нужно заменять при обновлении файла.
Если документ часто меняется, храните `modifiedTime` и переиндексируйте только измененные файлы.
Шаг 7. Добавьте поиск с проверкой доступа
RAG-поиск должен проходить в два этапа:
- найти релевантные chunks;
- отфильтровать chunks по правам текущего пользователя.
Без второго этапа агент может случайно процитировать закрытый документ. Проверку можно делать по сохраненным ACL или онлайн через Drive API, если нужна максимальная точность.
В ответе показывайте только те источники, которые пользователь может открыть.
Шаг 8. Настройте ответ с цитатами
Хороший ответ агента:
- коротко отвечает на вопрос;
- показывает 2-5 источников;
- дает ссылки на документы;
- указывает, если данных недостаточно;
- не делает выводы, которых нет в документах;
- не пересказывает закрытые файлы;
- предлагает уточнить папку, проект или период.
Если найдено несколько противоречащих документов, агент должен сказать об этом и показать даты обновления.
Шаг 9. Обработайте таблицы
Google Sheets часто используют как базу процессов: клиенты, статусы, контент-планы, финансы, задачи. Не всегда их нужно превращать в обычный текст.
Для таблиц полезно:
- определить листы;
- прочитать заголовки колонок;
- понять типы данных;
- индексировать строки с ключевыми колонками;
- не отправлять всю таблицу в модель;
- для расчетов использовать код или SQL-подобный слой, а не “считать глазами”.
Если задача аналитическая, лучше подключить отдельный табличный агент или экспортировать данные в аналитическую базу.
Шаг 10. Настройте обновления
Индекс должен обновляться, иначе агент будет отвечать по старым регламентам.
Варианты:
- регулярный cron: проверять измененные файлы раз в час или день;
- incremental sync по `modifiedTime`;
- webhook/notifications, если инфраструктура готова;
- ручная кнопка “переиндексировать папку”.
При удалении доступа к файлу chunk тоже должен перестать участвовать в ответах.
Шаг 11. Добавьте guardrails
Документный агент должен отказываться от опасных действий.
- Не показывать документы без доступа.
- Не раскрывать персональные данные без основания.
- Не отвечать по устаревшему документу, если есть новая версия.
- Не придумывать, если источник не найден.
- Не обобщать договоры и юридические условия как окончательную консультацию.
- Не давать ссылку на файл, если пользователь не имеет доступа.
Для важных ответов можно добавить режим “только с источниками”: если источников нет, ответа нет.
Шаг 12. Проверьте на тестовой папке
Соберите папку с 20-50 документами:
- инструкции;
- таблица с разными листами;
- PDF с текстом;
- PDF-скан;
- старый документ;
- закрытый документ;
- документ с похожим названием;
- файл, доступный только части пользователей.
Проверьте вопросы от разных ролей: админ, менеджер, новый сотрудник, внешний подрядчик. Самый важный тест - пользователь без доступа не должен получить ответ из закрытого файла.
Минимальная архитектура
ИИ-агент для Google Drive состоит из восьми блоков.
- Drive connector: список файлов, metadata, permissions, download/export.
- Extractor: Docs, Sheets, Slides, PDF, DOCX, OCR.
- Chunker: нарезка с заголовками, file id и metadata.
- Vector index: embeddings и поиск по смыслу.
- ACL filter: проверка прав пользователя перед ответом.
- Answer generator: ответ с цитатами и ссылками.
- Sync worker: обновление измененных и удаленных файлов.
- Audit layer: кто что спросил, какие источники использованы, какие файлы отфильтрованы.
Модель отвечает за формулировку ответа. Доступ к документам должен контролировать код.
Частые вопросы
Можно ли просто скачать весь Google Drive и сделать общий индекс?
Технически можно, но для компании это опасно. Нужен учет прав доступа. Иначе агент может раскрыть документы сотрудникам, которые не должны их видеть.
Что лучше: Drive API или Docs API?
Drive API нужен для файлов, папок, прав доступа, поиска, download и export. Docs API полезен, когда нужно аккуратно разобрать структуру Google Docs. На практике часто используют оба.
Как отвечать по Google Sheets?
Если таблица небольшая и справочная, ее можно индексировать как текст. Если там много строк и расчеты, лучше читать структуру таблицы и использовать отдельный табличный/аналитический слой.
Как часто обновлять индекс?
Для регламентов может хватить обновления раз в день. Для рабочих папок лучше incremental sync по времени изменения или webhook-уведомления. В любом случае удаление доступа должно учитываться быстро.
Что делать, если источник найден, но у пользователя нет доступа?
Не показывать этот фрагмент и не пересказывать его. Агент может сказать, что доступных источников недостаточно, или предложить запросить доступ к документу обычным способом.