- BrainTools - https://www.braintools.ru -
Меня зовут Денис. Прошлый мой рассказ был про поиск работы и про то, как нейросеть заполняет фильтры, не проглатывая справочник на 140 тысяч токенов. Сейчас другой продукт. Почта. Несколько ящиков, сводка «что сделать сегодня», сроки, черновик ответа.
И вот на этом продукте я чуть не совершил самую дорогую маркетинговую ошибку [1] из доступных в России: написать на главной, что мы «соответствуем 152-ФЗ», потому что перед моделью подменяем паспорт и карту метками.
Спойлер: это не обезличивание. И юрист мне это объяснил так, что желание ставить галочку прошло.
Сначала всё выглядело прилично. Письмо не уезжает в модель целиком и как есть. Перед вызовом шлюз вырезает очевидное: почту, телефон, номер карты, паспортные куски. В промпт уходит текст с дырками. В голове сразу собирается слоган: «персональные данные не покидают контур».
Потом я почитал, что такое обезличивание после 1 сентября 2025 года. Критерий простой и злой: без дополнительной информации нельзя понять, чьи это данные. Приказ РКН № 140. Свободный текст письма этому критерию почти никогда не удовлетворяет. Даже если вычеркнуть ФИО. Потому что остаётся «договор с ООО „Вектор“ на 12,4 млн, оплатить до пятницы, Иван ждёт». Этого хватает, чтобы человек определился. Метка [CARD] не превращает письмо в анонимный набор слов.
Я называю это честно: минимизация, маскирование, в терминах приказа — скорее псевдонимизация. Не анонимизация. На лендинге так и написано, специально скучно. Маркетолог внутри меня каждый раз пытается это «улучшить». Я ему не даю.
Дальше была вторая красивая ложь. Шлюз — российское юрлицо, база у нас в России, значит трансграничной передачи нет. Нет. Если пользователь сам выбрал зарубежную модель, запрос уходит на серверы за рубежом. Российская обёртка это не отменяет. Статья 12 никуда не делась от того, что посередине стоит ООО.
Третья ложь, самая соблазнительная: «провайдер пишет, что соблюдает принципы 152-ФЗ, вопрос закрыт». Не закрыт. Его заявление не заменяет поручение на обработку. Без основания передача шлюзу — это передача персональных данных третьему лицу. Бумажка провайдера — не ваша бумажка.
И четвёртая, про согласие. Пользователь нажал «подключить ящик» — и я уже думал, что этого хватает на переписку. Не хватает на корреспондентов. Их данные я обрабатываю не потому, что Иван согласился за Петра. Основание другое: законный интерес [2], пункт 7 части 1 статьи 6, и его ещё надо уметь объяснить, а не повесить в подвал сайта.
Архитектура получилась скучнее слогана. Зато её не стыдно разбирать на ревью.
Российские модели стоят по умолчанию. Alice AI, YandexGPT, GigaChat. Обработка в России. Это не «вопрос ПДн закрыт». Это меньший контур и осознанный дефолт.
Зарубежная модель дешевле. Она остаётся в каталоге. Но только если человек выбрал её сам: на ящик, на сводку или по умолчанию. Тихого переключения нет. Если российский провайдер выключен, письмо не уезжает «пока за рубеж, а то пользователь ждёт». Вызов не выполняется. Деньги не списываются. Для продукта это больно: сводка пустая, поддержка получает «почему не разобрало». Для закона это единственный вариант, который не является враньём в момент инцидента.
Упал шлюз — запасного маршрута нет. Fail-closed. Не «попробуем другую модель, пользователь не заметит». Заметит. И это правильно.
Текст письма у нас короткоживущий: 48 часов, потом удаляем. Оригинал всё это время лежит у Яндекса, Mail.ru [3], Gmail или Exchange. Мы не вторая вечная копия переписки. В админке сотрудника нет тела письма. Я себе это запретил первым, потому что знаю, как выглядит «ну глянь глазами, там баг». Баг чинится на синтетике и на логах без содержания. Иначе админка становится ещё одним почтовым клиентом, только без пароля пользователя и с доступом ко всем.
В календарь наружу уходит отдельная гадость, которую легко испортить «чтобы было полезнее». Подписка, которую человек сам добавляет в Яндекс, Google или Apple, получает дату и подпись «MailBro: срок по письму» плюс ссылку на задачу. Тема, отправитель и текст не уходят. Один продакт-тикет «давайте хотя бы тему» я закрыл. Тема письма — это часто и есть персональные данные корреспондента, ещё и в чужом календаре.
Уведомление Роскомнадзора — не абзац в политике. Локализация базы — не то же самое, что локализация инференса. Поручение со шлюзом — отдельный договор, а не абзац «мы используем современных провайдеров». GigaChat без нормального контура обработки я в этот продукт живым не включал. Надежда «отечественная модель всё спишет» — это надежда, не основание.
Если вы делаете ИИ поверх чужих документов в России, запомните одну фразу, которую я теперь пишу в подвале вместо гордого бейджа: замена персональных данных метками снижает объём того, что уходит в модель, но не является обезличиванием.
Сэкономите себе один очень неприятный созвон.
MailBro из этой каши и вырос:
Не как «законный почтовый клиент». Как секретарь, у которого отправка всё равно на человеке, а маршруты модели не переключаются тайком.
Самая понятная фича для почтового ИИ звучит так: «он сам ответит». Я её не сделал. Не потому что модель не умеет писать. Умеет. Иногда даже слишком гладко. А потому что один автоответ в проде стоит дороже, чем год разговоров про «магию».
Контекст простой. У человека пять ящиков. Утро. Сводка: подписать договор, ответить Анне, оплатить счёт. Рядом уже лежит черновик. Палец тянется к «Отправить» не глядя, потому что сервис сам сказал «черновик готов». Если в этот момент письма уходят без второго взгляда, я больше не инструмент. Я тот скрипт, который разослал резюме в 1300 вакансий со словом «директор», включая молокодоильное производство под Магаданом. Я этот цирк уже видел. Повторять [4] на чужой рабочей почте не хочу.
Первая версия мечты: модель классифицирует письмо, если уверенность высокая — отвечает сама, если низкая — зовёт человека. Красиво на слайде. В почте «высокая уверенность» — это часто уверенный тон, а не верный факт. Модель не знает, что счёт уже оплачен утром в банке. Не знает, что «давайте в среду» вы сказать не можете. Не знает, что адресат — не тот Иван.
Вторая мечта: пусть отправляет только «безопасные» письма. Приглашение принято, спасибо, получили. Я сел выписывать безопасные классы и через двадцать минут вычеркнул список. «Спасибо, получил» на письме из суда — уже не спасибо. «Перенесём» на письме из налоговой — уже позиция.
Третья мечта, инженерная: OAuth, красивые скоупы, «отправить» как отдельное разрешение, которое можно отозвать. Для части корпоративной почты это будущее. Для Яндекса, Mail.ru [3] и Gmail в 2026 году вход в чужую программу — это пароль приложения. Отдельный, типа «Почта», показывается один раз, включается вместе с IMAP, у Яндекса может ожить через несколько часов. Не через «войти с Яндекс ID» в смысле полного доступа к аккаунту. Я специально не прошу обычный пароль. Его же люди потом не могут выкинуть из чужого сервиса, не сменив вход везде.
Пароль приложения удаляется в Яндекс ID одной строкой. С этого момента я перестаю и читать, и отправлять. Основной пароль я не видел и не храню. Это не подвиг. Это минимальная гигиена, до которой почему-то доходят не все «ИИ-почты».
Кнопка «Написать» открывает форму: от какого ящика, кому, копия, тема, текст. Черновик можно сохранить. У задачи в очереди черновик часто уже лежит. Его надо прочитать. Потом подтвердить. Пока подтверждения нет, письмо не уходит. Опасное действие может спросить пароль MailBro ещё раз. Не пароль от Яндекса. Пароль от нас. Чтобы открытая вкладка в переговорке не стала вашим голосом.
Администратор компании может запретить отправку совсем. Тогда черновики остаются черновиками. Первые пользователи писали «кнопка сломалась». Не сломалась. Политика. Я лучше переживу тикет, чем письмо, которое ушло вопреки правилам фирмы.
На бесплатном тарифе черновики могут быть выключены. Это не баг статьи и не баг кнопки. Экран «Счёт и тариф» точнее любого моего поста. Если разойдутся — верьте экрану.
Картинки с чужих серверов в теле письма я прячу. Не из эстетики. По такому запросу отправитель иногда узнаёт, что вы открыли письмо. Секретарь, который палит факт чтения, — плохой секретарь.
Нейросеть хорошо делает первую версию текста. Она плохо несёт ответственность за обещание в этом тексте. Ответственность остаётся на человеке, у которого есть палец и контекст, которого нет в промпте.
Если вы встраиваете ИИ в канал, где сообщение нельзя забрать, не автоматизируйте последнее нажатие. Автоматизируйте всё до него: разобрать, поднять срок, написать черновик, спрятать рассылку. И оставьте кнопку.
Именно так устроен MailBro. Сводка и черновик — да. Самовольная отправка — нет.
Когда я делал умный поиск вакансий, я уже обжёгся на токене. Наивный промпт со всеми словарями стоил 25–40 рублей за раз. Нормальный пайплайн — около 0,1 рубля. Разница в 150 раз. Почта устроена злее. Тут не 150 вакансий раз в день. Тут входящие, и они не кончаются.
Первая наивная архитектура почтового секретаря выглядит так. Новое письмо пришло. Отдали модели. Получили приоритет, срок и черновик. Записали. Повторить для каждого письма каждого ящика. На слайде — три блока. В биллинге — дыра.
Удобно — это когда российская модель не ответила, а продукт всё равно показывает сводку. Значит, надо упасть на другую. Зарубежную. Она дешевле и чаще живая. Пользователь счастлив. Поддержка молчит.
Я это запретил. Не из героизма. Из прошлого поста про 152-ФЗ, только теперь в коде, а не в политике.
Если выбрана российская модель и она недоступна, запрос не уходит за рубеж «на время аварии». Он не выполняется. Списания нет. В интерфейсе дырка, и это честная дырка. Авария шлюза не является согласием пользователя на другой маршрут. Особенно на тот, который он явно не выбирал, когда подключал рабочий ящик.
Зарубежную модель можно включить. Она в каталоге, она дешевле, серверы у неё не здесь. Перед ней текст всё равно проходит маскирование. И это всё ещё не обезличивание, см. предыдущую серию моих граблей. Выбор виден до того, как ящик подключён, а не в письме через неделю от юриста.
Вторая «удобная» идея: хранить письма у себя, чтобы пересчитывать приоритет бесплатно, когда выйдет модель лучше. Я посмотрел на это глазами человека, который потом объясняет, где лежала переписка. Оригинал остаётся у почтового сервиса. То, что мы забрали на разбор, живёт 48 часов. Пересчитать через месяц «на новом промпте по всему архиву» я себе не разрешил. Дорого не в токенах. Дорого в том, что архив становится моим.
Третья идея: в уведомление на локскрин положить отправителя и тему, а то «неинформативно». По умолчанию там нет ни того, ни другого. «Нужно ответить, срок 17 октября». Подробности в MAX включаются отдельно, человеком. В Telegram подробностей нет вообще: ни отправителя, ни темы, ни текста. Экран блокировки — это публичное место. Я не буду выносить туда чужой договор, потому что пуш «так понятнее».
Бесплатный тариф — один ящик и потолок разборов в месяц. Фоновой проверки нет: пока вкладка открыта, почта едет, закрыл ноутбук — новые письма подождут. Это не жадность ради жадности. Фоновый обход чужих ящиков, который никто не видит, — самый дешёвый способ сжечь токены в пустоту. На платных тарифах фон есть. Человек за это платит. Экран тарифа снова точнее поста: цены я тут не высекаю, их правят без переписывания Хабра.
Разбор письма списывается со счёта отдельно от тарифа, по цене выбранной модели. Пустой счёт останавливает платный разбор. Он не останавливает Яндекс. Письма на месте. Просто секретарь замолкает, пока не пополнят. Мне этот стык нравится больше, чем «мы вам ещё немного бесплатно доразберём». Бесплатный хвост в ИИ-продукте я уже видел: им кормятся боты.
Повторная обработка того, что не менялось, не должна стоить как первое чтение. В вакансиях я делал дельту по vacancy_id и срезал 90 процентов повторного прогона. В почте принцип тот же, только единица другая: не гонять модель по письму, которое уже разобрано и не изменилось. Иначе каждое открытие сводки — это заново «Война и мир».
Маршрут модели — часть контракта с пользователем, а не деталь ретрая. Ретрай на того же провайдера можно. Ретрай на другую страну — нельзя.
Списание только после того, как вызов состоялся. Ошибка шлюза — не платная операция.
Срок жизни текста в своей базе решить до первого реального ящика. Потом «давайте подержим ещё месяц для качества» уже не решение, а расползание.
Логи: идентификатор, латентность, модель, класс ошибки. Не тело письма. Я это писал про поиск вакансий. На почте цена ошибки выше: в логе внезапно оказывается переписка.
Последнее нажатие «Отправить» не автоматизировать. Об этом отдельный текст, повторять всю церковную службу не буду.
Если коротко. ИИ в почте окупается не тогда, когда он читает всё и отвечает сам. А тогда, когда он читает мало, по явному маршруту, за понятные рубли, и замолкает, если маршрута нет.
MailBro я собирал по этим правилам, а не по желанию сделать «ещё один клиент с чатом сбоку»:
Буду рад в комментариях чужим способам не соврать ни биллингу, ни закону одновременно. У меня пока получилось только запретами. Запреты, как ни странно, держат продукт лучше, чем слоганы
Автор: DVZakusilo
Источник [6]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/37156
URLs in this post:
[1] ошибку: http://www.braintools.ru/article/4192
[2] интерес: http://www.braintools.ru/article/4220
[3] Mail.ru: http://Mail.ru
[4] Повторять: http://www.braintools.ru/article/4012
[5] https://mailbro.ru: https://mailbro.ru
[6] Источник: https://habr.com/ru/articles/1095980/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1095980
Нажмите здесь для печати.