Статья

Почта в чате: как Schai GPT находит письмо и где граница приватности

Почта в чате: как Schai GPT находит письмо и где граница приватности

ProfileProfile·4 ч назад·
2
··0·
Если коротко: в чате Schai GPT не нужно вспоминать, в какой папке лежит письмо. Достаточно описать его своими словами — «что там от банка», «письмо от Ивана про счёт», «где договор, который присылали весной». Инструмент поиска по почте переводит эту фразу в поисковый запрос Gmail, забирает кандидатов, читает начало нескольких верхних писем и говорит, какое из них, скорее всего, ваше. Найти и открыть — да. Отправить, ответить, удалить, разложить по папкам, отписаться от рассылки — нет: таких инструментов у него просто не существует, и ниже мы покажем, где это видно.
Пишет Profile — аккаунт, в котором мы разбираем внутренности Schai GPT так, как они устроены на самом деле. Всё, что дальше, взято из кода сервиса, а не из рекламного описания. Там, где кода нет, мы прямо пишем: этого нет.

Что происходит после фразы «найди письмо от Ивана про счёт»

Первым делом ваша фраза уходит не в Gmail, а в модель. Её задача — превратить человеческую просьбу в то, что почта вообще умеет искать: до трёх поисковых запросов, от широкого к узкому. Правила, заложенные в неё, звучат буквально так. Имя или адрес класть в `from:` только если отправитель назван явно, а тему в `from:` не класть никогда. Периоды вроде «за апрель-май» разворачивать в операторы after: и before:, которые понимает поиск Gmail. Ключевые слова давать не одним словом, а синонимами через OR.
Последнее — не перестраховка. Gmail плохо ищет по русским словоформам: «расход» и «расходы» для него разные строки, и запрос по одной из них честно вернёт половину писем. Поэтому модель пишет «расход OR расходы OR затраты» — и попадает там, где единственное ключевое слово промахнулось бы. По той же причине первый, самый широкий запрос строится обычно без дат: дата — самый частый способ отрезать нужное письмо, потому что человек помнит месяц приблизительно.
Дальше по каждому запросу забираются до двенадцати писем, результаты складываются в общий список и чистятся от повторов по идентификатору письма. Список обрывается на двадцати — это потолок, выше которого поиск не поднимается, сколько бы совпадений ни нашлось.
Если не нашлось ничего, поиск не сдаётся молча. Сначала он повторяет первый запрос, сняв с него все ограничения по датам. Если и это пусто — остаётся только отправитель, `from:` без единого слова из темы. И лишь после двух этих попыток в чате появляется честное «по такому запросу писем не нашлось» вместе с просьбой уточнить: точный адрес, период или что примерно было написано.

Почему естественный язык работает лучше ключевого слова

Второй этап — самый интересный. Найденные письма не отдаются вам сырым списком. У шести верхних кандидатов сервис дополнительно запрашивает само письмо и берёт начало текста — до 900 знаков. У остальных остаются только отправитель, тема, дата и короткий фрагмент, который отдаёт сам Gmail. Этот сводный список уходит в модель со второй задачей: найти подходящее по смыслу, а не по точным словам.
Отсюда и разница, которую видно на практике. Ключевое слово ищет по теме — а тему письма вы обычно не помните, потому что её писали не вы. Зато вы помните, о чём там шла речь: «просили подтвердить реквизиты», «прислали акт за август», «жаловались на задержку». Описание содержимого попадает во второй этап, где модель читает начала писем и сопоставляет смысл. Поэтому в правилах первого этапа прямо сказано: если человек описал содержимое письма, делать широкий запрос по двум-трём словам и НЕ сужать — точных слов в письме может не быть вовсе.
Отвечает модель не списком, а выбором: «Похоже, это письмо 1» — и коротко, почему именно оно. Если уверенность прозвучала и нет оговорок вроде «не уверен» или «возможно, это», письмо открывается сразу, без второй вашей просьбы. Если кандидат всего один — тоже сразу. В остальных случаях вы получаете пронумерованный список и открываете нужное словами: «открой второе», «открой про счёт», «последнее».
Путь одного запроса: ваши слова → до трёх запросов Gmail → до двадцати писем → ответ с выбором

Что ИИ видит, а чего не видит

Это раздел, который мы обязаны написать без украшений. Доступ к почте Schai GPT не получает по умолчанию — он появляется только после того, как вы сами прошли подключение Google и нажали «Разрешить» на экране согласия. Среди прав, которые мы запрашиваем, есть `gmail.readonly` — в справочнике областей доступа Gmail API оно описано как «просматривать ваши письма и настройки». Это право на чтение всей почты, а не отдельной папки: Gmail не умеет выдавать доступ «только к письмам от банка».
Что из этого реально читается. При поиске сервер запрашивает у Gmail список идентификаторов, затем по каждому — отправителя, тему, дату и короткий фрагмент. Полный текст загружается только у шести верхних кандидатов, обрезается до 2500 знаков при загрузке и до 900 знаков при передаче в модель. Когда вы открываете конкретное письмо, подгружается вся его цепочка: последнее сообщение показывается карточкой в чате, а текст переписки остаётся скрытым контекстом — чтобы ИИ понимал, о чём речь, но не вываливал вам всю ветку обратно.
Что уходит в модель. Уходит ваша формулировка запроса целиком и тот самый сводный список: отправители, темы, даты, фрагменты и начала шести писем. Это не «метаданные» — это текст ваших писем, и делать вид, что модель их не видит, было бы враньём. Что в модель не уходит: письма, которые не попали в двадцатку кандидатов, вложения, содержимое остальных папок и вся остальная почта, которую никто не запрашивал. Поиск ничего не индексирует заранее и не держит копию ящика: каждый запрос идёт в Gmail в момент, когда вы его задали.
Что остаётся на сервере. Обратно в браузер список писем возвращается урезанным — идентификатор, тема, отправитель, дата — плюс текст ответа модели. Токены доступа Google хранятся зашифрованными (AES-256-GCM), ключ лежит в переменных окружения, а не в базе: даже дамп базы не даёт доступа к почте. И да, обе стадии поиска — это платные обращения к модели, они списываются с вашего баланса токенов с общей наценкой сервиса.

Отправить письмо ИИ не может — и это не оговорка

В реестре инструментов Schai GPT почты касаются ровно два: «найти письма» и «открыть найденное письмо». Инструмента «отправить письмо», «ответить на письмо», «удалить», «пометить прочитанным», «отписаться от рассылки» или «разложить по папкам» в этом реестре нет. Это не настройка, которую можно включить в интерфейсе, и не ограничение, которое обходится формулировкой запроса: модель физически не может вызвать то, чего ей не дали.
Единственное, что сервис вообще пишет в вашу почту, — черновик ответа, и запускаете его не вы фразой в чате, а кнопкой. Когда письмо открыто, рядом с полем ввода появляется значок ответа: вы правите согласованный с ИИ текст и нажимаете «Отправить в Gmail». Сервис создаёт черновик в той же цепочке — с правильными заголовками In-Reply-To и References, чтобы ответ встал в ветку, — и открывает Gmail в новой вкладке. Метод создания черновика в Gmail API письмо не отправляет: для отправки существует отдельный вызов, и мы его не делаем. Кнопку «Отправить» в Gmail нажимает человек.
Здесь нужна честная оговорка, без которой раздел был бы приукрашиванием. Право, которое мы запрашиваем для черновиков, называется `gmail.compose`, и в документации Google оно описано шире, чем то, что мы делаем: «управлять черновиками и отправлять письма». То есть формально вы выдаёте право, которого нашему коду хватило бы и на отправку. Мы отправкой не пользуемся — в коде нет ни одного такого вызова, — но правильнее сказать это вслух, чем уверять, что доступ выдан ровно под черновики. Узкого права «только черновики, без отправки» Gmail не предлагает.

Честные границы

Соберём в одном месте то, чего с почтой не происходит, чтобы не пришлось разочаровываться на практике. ИИ не отправляет письма и не отвечает на них сам. Не удаляет, не архивирует, не помечает прочитанными. Не сортирует входящие по папкам и не настраивает фильтры. Не отписывает вас от рассылок. Не ищет по вложениям — файл, приложенный к письму, он не открывает. Не хранит вашу почту у нас: копии ящика нет, есть запрос в Gmail в момент вопроса. И не работает через один только поиск по адресу: если отправитель писал с трёх разных ящиков, объединять их в одного человека он не умеет.
Потолок в двадцать писем тоже стоит держать в голове. Запрос вроде «покажи все письма от Сбербанка» вернёт двадцать верхних, а не все за год. Это не поиск-агрегатор и не аналитика по ящику — это способ быстро добраться до одного конкретного письма.
Почта хранит приглашение, каким оно пришло когда-то. Календарь показывает встречу, какая она сейчас

Почему ссылка на созвон — не в почте

Самая частая неудачная просьба звучит так: «найди письмо со ссылкой на созвон». Она формально исполнима — письмо-приглашение действительно лежит в почте, — и почти всегда даёт плохой результат. Причина простая: письмо фиксирует момент отправки, а встреча живёт дальше. Организатор перенёс время, пересобрал конференцию, заменил Zoom на Телемост — всё это меняет событие в календаре и никак не меняет письмо, которое пришло три недели назад. Плюс приглашений по одной встрече часто несколько: исходное, перенос, напоминание. Какое из них актуально, по письмам не видно.
Поэтому ссылка на подключение берётся не из почты, а из календаря, и в описании соответствующего инструмента это написано прямым текстом: это не поиск по почте. Просмотр календаря — отдельный инструмент, он смотрит вперёд (по умолчанию на две недели) и достаёт из события время, место, организатора, ссылку на само событие и ссылку на подключение.
Ссылку на подключение он собирает не из одного поля, а из четырёх по очереди — и это важная деталь, потому что организаторы кладут её куда придётся. Сначала проверяется `hangoutLink`, затем видео-точка входа в `conferenceData`, затем первая ссылка в описании события, затем первая ссылка в поле «место». Все эти поля описаны в справочнике событий Google Calendar API: первые два заполняет сам Google, когда конференцию создают через календарь, остальные два — живой человек, когда вставляет ссылку Zoom текстом. Если бы мы смотрели только в первое поле, половина встреч выглядела бы «без ссылки».

Как спросить, чтобы нашлось с первого раза

Из механизма выше практические правила выводятся сами: сообщайте то, что помогает первому этапу построить запрос (кто, когда), и то, что помогает второму этапу узнать письмо (о чём там речь). Не сообщайте того, чего не помните точно.
Плохо → Лучше → Почему второе работает «найди письмо» → «найди письмо от Ивана про счёт» → есть отправитель для from: и предмет для ключевых слов; без них первый этап строит запрос наугад «письмо про оплату» → «письмо, где просили оплатить счёт до конца месяца» → описание содержимого попадает во второй этап, где читаются начала писем; «оплата» как тема встречается в сотне рассылок «письмо от 14 марта» → «письмо от бухгалтерии про акт, где-то в марте» → точная дата, в которой вы ошиблись на день, отрезает нужное письмо; широкий запрос без дат надёжнее «найди письмо со ссылкой на созвон» → «пришли ссылку на встречу с Ильёй» → ответ берётся из календаря, где ссылка актуальна, а не из письма, где она могла устареть «что там от банка» → «что там от банка за последнюю неделю» → само по себе работает, но период сужает выдачу до двадцати писем осмысленно, а не по алфавиту случая
Отдельно про имена. Отправителя достаточно назвать так, как он подписан в почте, — целиком адрес писать не нужно, поиск Gmail находит и по имени. А вот имя в предмет запроса лучше не тащить: «письмо Ивана» и «письмо про Ивана» — разные вещи, и первый этап специально учат не класть тему в `from:`.
И про продолжение разговора. После того как список показан, работают ссылки на позиции: номер, порядковое слово («первое», «последнее») или слово из темы. Это не новый поиск — сервис обращается к тому же списку, что у вас перед глазами. Если список уже сменился, честный ответ будет «не нашёл это письмо в последнем списке»: угадывать, какое письмо вы имели в виду час назад, никто не станет.

Как выдать доступ и как его отозвать

Выдать доступ — четыре шага. Откройте чат Schai GPT и в меню «плюс» выберите «Личный помощник». Перейдите на вкладку Google и нажмите «Подключить». На экране согласия Google внимательно прочитайте список прав: мы запрашиваем их одним набором — чтение почты и черновики, календарь на чтение и запись, Диск, Документы и Таблицы, — потому что подключение общее для всех инструментов помощника, а не отдельное для почты. Разрешите доступ и вернитесь в чат: на вкладке Google появится ваш адрес и отметка, что подключение живо.
Отозвать доступ — два пути, и лучше знать оба. Первый: там же, «Личный помощник» → Google → «Отключить». Сервис останавливает уведомления Gmail, отзывает токен на стороне Google и удаляет запись о подключении из базы — не просто прячет кнопку. Второй путь, независимый от нас: страница подключённых приложений в аккаунте Google. Там доступ снимается даже в том случае, если до нашей кнопки вы не добрались, и Google подробно описывает, как посмотреть и убрать доступ стороннего приложения. Правильная привычка — периодически заглядывать туда и убирать всё, чем не пользуетесь, не только нас.
Если доступ был отозван на стороне Google, помощник не сделает вид, что почта пуста: подключение помечается как требующее переподключения, и вы увидите кнопку «Переподключить» вместо тишины. То же самое произойдёт, если вы подключались давно и прав на черновик у нас ещё нет, — сервис попросит переподключиться, а не покажет код ошибки Google.

Коротко

Поиск письма в чате — это две стадии: модель собирает до трёх запросов Gmail из вашей фразы, а потом выбирает по смыслу из найденных, читая начала шести верхних писем. Описывайте содержимое, а не угадывайте тему: второй этап читает текст, а поиск по теме промахивается чаще. Точные даты помогают реже, чем мешают. Широкий запрос без дат надёжнее. Доступ выдаётся ко всей почте на чтение — иначе Gmail не умеет. В модель уходят ваша формулировка и фрагменты найденных писем, не весь ящик. Отправки нет. Есть черновик ответа по кнопке — отправляете его вы сами, руками, в Gmail. Ссылка на созвон живёт в календаре. Просите «пришли ссылку на встречу», а не «найди письмо со ссылкой». Доступ отзывается в двух местах: у нас — кнопкой «Отключить», и в настройках Google — независимо от нас.
0

Пока нет комментариев

Почта в чате: как Schai GPT находит нужное письмо