Когда я выложил ИИ-агента для 1С, первый содержательный отзыв от коллеги-программиста был не про запросы и не про цену. Он спросил одно: куда уходят фамилии клиентов. Вопрос правильный, а хорошего ответа у меня на тот момент не было. Ниже разбор того, что на самом деле улетает из базы 1С в языковую модель, кто за это отвечает по 152-ФЗ и что мы в итоге поменяли в продукте.
Сразу оговорюсь: я разработчик, а не юрист. Ссылки на закон ниже даны для ориентира; договор и уведомления для своей компании стоит показать юристу.
Что уходит в модель на самом деле
Распространённый страх звучит так: «вы выгрузите нашу базу в ChatGPT». Базу целиком не выгружает ни один вменяемый агент, это и дорого, и бессмысленно. Уходят две вещи: текст вопроса и результаты конкретных запросов, которые агент выполнил, чтобы ответить.
Проблема во второй части. Возьмём безобидный вопрос руководителя отдела продаж: «продажи по менеджерам за январь». Агент строит запрос к регистру выручки, группирует по менеджеру и получает таблицу. В таблице выручка, прибыль и десять фамилий с именами и отчествами. Эти строки и отправляются в модель, чтобы она написала ответ. Ни пользователь, ни программист в этот момент не думают о персональных данных: спросили про деньги, а улетели ФИО сотрудников.
С вопросами про долги клиентов, ЭДО и контрагентов история та же, только там уже ИП с ФИО в наименовании, телефоны и email контактных лиц.
Кто здесь оператор
Оператор персональных данных из базы 1С это компания, которой база принадлежит. Сервис, через который данные проходят к модели, обрабатывает их по её поручению: так это устроено в части 3 статьи 6 152-ФЗ. В поручении должны быть перечислены действия с данными, цели обработки, обязанность хранить конфиденциальность и меры защиты по статье 19.
На практике это значит простую вещь: если вы ставите в базу любой внешний ИИ-сервис, в его пользовательском соглашении должно быть такое поручение. Если его нет, вы передаёте данные третьему лицу без основания, и отвечать за это будете вы, а не разработчик сервиса.
Трансграничная передача
Большинство сильных моделей работает на серверах за пределами России. Передача им персональных данных считается трансграничной (статья 12 152-ФЗ). С 1 марта 2023 года оператор обязан уведомить Роскомнадзор до начала такой передачи. Если страна не входит в перечень государств с адекватной защитой (приказ РКН № 128), Роскомнадзор рассматривает уведомление до 10 рабочих дней и может передачу ограничить.
Подозреваю, что большая часть компаний, где сотрудники уже копируют выгрузки из 1С в чат-боты, такого уведомления не подавала.
Почему это стало дороже
С 30 мая 2025 года действуют штрафы из 420-ФЗ. За утечку обычных персональных данных юрлицо платит от 3 до 15 млн рублей в зависимости от числа субъектов: от 1 000 до 9 999 человек это от 3 до 5 млн, свыше 100 000 уже от 10 до 15 млн. За повторную утечку предусмотрен оборотный штраф от 1 до 3% выручки, но не меньше 25 и не больше 500 млн рублей. За то, что не сообщили в РКН об утечке вовремя, ещё от 1 до 3 млн.
Отправка данных в модель сама по себе не утечка. Но если у поставщика модели что-то случится с логами, разбираться будут с оператором, то есть с вами.
Что мы сделали: маскировка на стороне 1С
Решение оказалось проще, чем я ожидал. Персональные данные заменяются метками ещё в 1С, до того как запрос уходит на сервер. Модель работает с метками, а 1С подставляет настоящие значения обратно в готовый ответ.
| Где | Что там лежит |
|---|---|
| В базе 1С | Смирнова Ольга Петровна, 3 649 900 S81; |
| Уходит на сервер и в модель | [ФИО-1], 3 649 900 S81; |
| Видит пользователь | Лидер месяца: Смирнова Ольга Петровна |
Сейчас маскируются ФИО (по окончаниям отчеств и в форме «Фамилия И.О.»), телефоны, email, ИНН физлиц из 12 цифр и СНИЛС. Словарь «метка → значение» хранится в регистре расширения, в истории того же диалога, поэтому [ФИО-1] остаётся одним и тем же человеком на протяжении всего разговора. На сервер этот словарь не уходит.
Ядро замены выглядит так:
Функция ЗамаскироватьСтроку(Текст, Словарь)
Если СтрДлина(Текст) < 6 Или СтрНачинаетсяС(Текст, "data:") Тогда
Возврат Текст; // короткие строки и картинки (base64) не трогаем
КонецЕсли;
Найденные = Новый Соответствие; // значение U94; вид
НайтиEmail(Текст, Найденные);
НайтиНомера(Текст, Найденные);
НайтиФИО(Текст, Найденные);
Если Найденные.Количество() = 0 Тогда
Возврат Текст;
КонецЕсли;
// Длинные значения заменяем первыми, чтобы ФИО не разрезалось по частям
Список = Новый СписокЗначений;
Для Каждого Элемент Из Найденные Цикл
Список.Добавить(Элемент.Ключ, Формат(1000 - СтрДлина(Элемент.Ключ), "ЧЦ=4; ЧВН="));
КонецЦикла;
Список.СортироватьПоПредставлению();
Результат = Текст;
Для Каждого ЭлементСписка Из Список Цикл
Значение = ЭлементСписка.Значение;
Метка = МеткаПД(Значение, Найденные.Получить(Значение), Словарь);
Результат = СтрЗаменить(Результат, Значение, Метка);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция проходит рекурсивно по всему, что уходит на сервер: по сообщениям диалога, контексту сеанса и результатам запросов. Обратная функция так же рекурсивно разворачивает ответ модели и аргументы, с которыми модель вызывает инструменты. Второе важно: если модель решит отфильтровать продажи по [ФИО-1], 1С подставит в запрос настоящую фамилию, и запрос сработает.
Отдельно пришлось объяснить самой модели, что такое метки. В системную инструкцию добавлено правило: писать метку ровно как есть, не склонять, не сокращать и не пытаться угадать, кто за ней стоит. Без такого правила модель вполне может написать «у [ФИО-1]а», и подстановка сломается.
По скорости разницы я не заметил. Встроенные регулярные выражения есть только в свежих версиях платформы, а расширение должно работать с 8.3.18, поэтому поиск сделан посимвольным разбором строки; объёмы там небольшие, обычно десятки строк результата.
Чего маскировка не ловит
Здесь важно не обмануть ни себя, ни клиента. Поиск работает по формальным признакам, поэтому мимо него проходят:
- адреса, включая адрес регистрации ИП в реквизитах;
- фамилии в косвенных падежах и без отчества: «отгрузка для Смирновой»;
- свободный текст в комментариях документов, где менеджер написал «звонить Сергею после обеда»;
- нестандартную запись телефона, например с добавочным номером словами.
Поэтому из пользовательского соглашения мы ничего не убрали. Поручение на обработку и пункт о трансграничной передаче остались, к ним добавился пункт о маскировке с прямым перечнем того, что она может пропустить. Если написать «модель не видит персональных данных», а потом в логе найдётся адрес из реквизитов контрагента, при споре это сработает против вас.
Что проверить, если вы ставите в 1С любой ИИ
Неважно, свой это агент, чужое расширение или сотрудник, который копирует выгрузку в чат-бот. Вопросы одни и те же:
- Что именно уходит наружу: весь отчёт, результат запроса или только вопрос? Попросите показать пример реального запроса к модели.
- Есть ли в соглашении поручение на обработку по части 3 статьи 6 и указана ли страна, где работает модель.
- Подано ли уведомление о трансграничной передаче, если модель за рубежом. Подаёт его оператор, то есть ваша компания.
- Хранит ли сервис содержимое запросов и как долго. У нас это не больше 30 дней и только для разбора ошибок.
- Что маскируется до отправки и, главное, что нет.
Следующий шаг у нас понятный: склонения фамилий и адреса. Для тех, кому принципиально, чтобы данные вообще не покидали страну, рассматриваем вариант с моделью на российских серверах. Если вы уже решали эту задачу у себя, особенно с поиском фамилий в падежах, расскажите в комментариях, как.