DLP для LLM без потери смысла: как сессионный маппинг сохраняет связь сущностей
Компании, которые дают сотрудникам доступ к языковым моделям, сталкиваются с неприятной развилкой: если убрать из запроса все имена и телефоны, модель теряет смысл вопроса, а если оставить, персональные данные утекают за пределы защищённого контура.

DLP для LLM (предотвращение утечек данных при работе с языковыми моделями) пока не стал стандартом, и большинство команд либо блокируют запросы целиком, либо заменяют имена случайными метками, после чего поиск по корпоративным документам перестаёт работать. Архитектура с сессионным маппингом решает обе проблемы одновременно.
Андрей Непряхин, технический директор компании AGIMA, описал внутреннюю архитектуру DLP-контура, через который сотрудники компании работают с внешними языковыми моделями и ИИ-агентами. Ключевая идея: вместо «наивной» замены фамилий на случайные маркеры вроде NAME_1 система использует обратимую псевдонимизацию с привязкой к сессии. Таблица соответствий хранится внутри защищённого периметра, а модель получает только типизированный псевдоним, например [PERSON_1], и не может восстановить настоящее имя.
Почему простая замена имени на маркер ломает поиск?
У схемы «заменить Петрова на NAME_1» два конкретных дефекта. Первый: номер присваивается по позиции внутри одного сообщения. В следующем запросе тот же человек получает другой маркер, и модель не понимает, что речь об одном сотруднике.
Второй: модель не различает тип сущности. Телефон, фамилия, название организации и логин превращаются в одинаковые куски текста. Модель может продолжить фразу, но теряет способность сопоставлять сущность с результатами поиска.
Именно поэтому DLP для LLM требует разделения двух задач:
- Скрыть значение. Внешней модели не нужно видеть «Андрей Петров».
- Сохранить идентичность сущности. Внутри запроса и связанных результатов
[PERSON_1]должен указывать на один и тот же объект.
По аналогии Непряхина, это работает как внешний ключ в базе данных: он не раскрывает всю запись, но позволяет соединить таблицы. Разница в том, что этот ключ нельзя отдавать модели как способ восстановить настоящее имя.
Как устроен контур AGIMA: шлюз, маппинг, регидрация
Внутренний контур AGIMA работает как шлюз (gateway) перед языковой моделью. Запрос проходит четыре этапа: авторизация, проверка DLP, деперсонализация, отправка провайдеру. На обратном пути ответ проходит контролируемую регидрацию (восстановление реальных имён для авторизованного пользователя).
Сессионный маппинг (session-mapping), таблица соответствий между псевдонимом и реальной сущностью, это серверное состояние, а не часть промпта. В продакшене у AGIMA эта таблица:
- живёт два часа,
- ограничена 500 токенами (токен здесь означает единицу текста, которую обрабатывает модель),
- работает в режиме «только вставка»: повторный токен не перезаписывает значение,
- не смешивается с маппингом другой сессии.
Если нужно расследование инцидента, маппинг хранится в зашифрованном виде. Доступ к раскрытию отделён специальным правом pii_reveal и логируется.
Пошаговая инструкция
Ниже порядок действий для команды, которая строит DLP-контур для корпоративной LLM. Шаги основаны на архитектуре AGIMA.
-
Поставьте шлюз перед внешней моделью. Все запросы сотрудников проходят через единую точку. Идентичность пользователя передаётся служебным заголовком, а не текстом промпта.
-
Подключите детектор сущностей. Детектор находит в тексте запроса спан (фрагмент текста) и его тип:
Петрова→PERSON. -
Добавьте нормализатор. Он приводит найденное к лемме (базовой форме слова) с учётом морфологии:
Петрова(родительный падеж) →Петров. -
Настройте справочник сущностей. В справочнике AGIMA хранятся записи трёх типов:
employee,legal_entity,other. Варианты написания (Петров,Петрова,Petrov,apetrov) привязаны к одному внутреннемуentity_id. Справочник пополняется через API или интерфейс администратора. -
Реализуйте entity resolver (сопоставитель сущностей). Он связывает все варианты написания с одним
entity_idиз справочника. -
Добавьте policy engine (движок политик). Он проверяет, разрешено ли использовать сущность в конкретном источнике и действии. Поиск задач сотрудника может быть разрешён, а вывод его телефона запрещён.
-
Отправляйте в промпт только типизированный псевдоним. В текст запроса к модели уходит
[PERSON_1], а не исходная строка и не внутреннийentity_id. -
Настройте регидрацию на обратном пути. Шлюз восстанавливает реальные имена только для тех токенов, которые присутствуют в маппинге текущего запроса. Если кто-то вручную напечатает
[PERSON_1], шлюз не должен «угадывать» значение.
Что понадобится
- Шлюз (gateway) с поддержкой авторизации и DLP-проверок перед отправкой запросов к внешней модели
- Детектор именованных сущностей (NER) с поддержкой русского языка и морфологии
- Справочник сотрудников и юрлиц с нормализованными записями
- Хранилище для сессионного маппинга с шифрованием и TTL (временем жизни записи)
- Около 2 часов на прототип пайплайна для одного тенанта (по данным AGIMA, это масштаб дев-тенанта на несколько сотен сотрудников)
Запрос сотрудника: «Найди последние задачи Петрова по проекту X и сравни их с обсуждением на встречах»
Что происходит внутри контура:
1. Детектор находит Петрова → тип PERSON
2. Нормализатор приводит к лемме Петров
3. Entity resolver связывает Петров / Петрова / Petrov / apetrov с единым entity_id
4. Policy engine проверяет: сотруднику разрешён поиск задач этого коллеги
5. В промпт к модели уходит: «Найди последние задачи [PERSON_1] по проекту X и сравни их с обсуждением на встречах»
Что получает модель: типизированный псевдоним [PERSON_1], стабильный в пределах сессии. Индекс и фильтры работают по entity_id, модель ищет по [PERSON_1] и получает релевантные результаты, потому что в проиндексированных документах тот же entity_id уже связан с тем же псевдонимом.
Что получает сотрудник: ответ с восстановленными реальными именами после регидрации на шлюзе.
Справочник как белый список. Справочник сотрудников отвечает на вопрос «какой объект имеется в виду», а не «можно ли показать его данные». Если смешать идентификацию и авторизацию, одиночная фамилия без имени при неоднозначности может пройти проверку и утечь.
Маппинг внутри промпта. Если таблица соответствий попадёт в текст запроса к модели, вся архитектура DLP для LLM теряет смысл: модель (или атакующий через prompt injection, то есть внедрение команд в промпт) получает ключ к расшифровке.
Случайный шифртекст вместо читаемого псевдонима. Криптографические свойства не спасают, если ключ лежит рядом с промптом. А модель хуже справляется с нечитаемыми строками в рассуждениях и при генерации структурированных ответов (JSON).
Одинаковые правила для сотрудника и клиента. Это разные виды сущностей. Для клиентского юрлица политика обычно строже, чем для коллеги из соседнего отдела.
Что делать с этим прямо сейчас, по ролям
Авторам и копирайтерам на Дзене. Если вы работаете с ChatGPT, YandexGPT или GigaChat и вставляете в промпты реальные имена клиентов или коллег, эти данные уходят на серверы провайдера. Минимальная гигиена: замените имена вручную на условные метки (Клиент_1, Партнёр_А) и будьте последовательны в пределах одного диалога. Это ручной аналог того, что AGIMA автоматизировала.
Маркетологам и руководителям. Прежде чем подключать команду к внешней языковой модели, проверьте, есть ли шлюз между сотрудниками и API провайдера. Без шлюза каждый запрос с именем клиента, это потенциальная утечка. Архитектура AGIMA показывает, что проблема решаема без отказа от модели.
Предпринимателям в РФ и СНГ. Из доступных в России инструментов для обнаружения персональных данных в тексте можно посмотреть на Microsoft Presidio (опенсорс, работает локально). Непряхин упоминает его как референс по разделению операций: замена, маскирование, шифрование и обратная расшифровка. Сессионное хранение состояния и безопасность маппинга остаются задачей вашей команды.
Подход AGIMA ценен не столько кодом, сколько формулировкой задачи. Большинство обсуждений DLP для LLM сводятся к «давайте всё замаскируем», после чего модель становится бесполезной для реальных рабочих запросов. Сессионный маппинг с entity resolution, это попытка сохранить полезность, не жертвуя приватностью.
Честная оговорка: это не анонимизация. Андрей Непряхин сам подчёркивает, что речь об обратимой деперсонализации, а таблица соответствий сама требует защиты. Если к маппингу получит доступ посторонний, все псевдонимы раскрываются. Архитектура не заменяет юридическую экспертизу по 152-ФЗ (закон о персональных данных). Но как инженерный паттерн для корпоративного контура, это один из самых внятных примеров, которые я встречал в русскоязычном пространстве.
Самый практичный вывод из архитектуры AGIMA укладывается в одно правило: маппинг между реальным именем и псевдонимом никогда не должен оказаться в тексте промпта, он живёт на сервере, шифруется, умирает через два часа и раскрывается только тому, у кого есть на это отдельное право.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Нейросеть на C#: пошаговая сборка, квантизация и запуск на слабом железе
Собранная нейросеть на C# запускается даже на слабом железе, если понимать, почему нельзя просто снизить точность весов и где проходит граница между…

Экс-руководство OpenAI уходит в инфраструктуру: Nscale собирает $3,5 млрд на IPO
Почему это важно Британский стартап Nscale, который строит дата-центры для ИИ и готовится к IPO осенью 2025 года, усиливает совет директоров людьми,…
Devin AI первым встроил GPT-6 Astra: код теперь проверяет рассуждающая модель
Devin AI интегрировал модель GPT-6 Astra от OpenAI для автоматической проверки кода. Это первое публичное применение новой модели в продукте для разработчиков,…
Комментарии