Все кейсы
Главный кейс ИБ Фундамент guardrails Docker · FastAPI

Pseudonymizer MVP — фундамент работы с внешними LLM

Одностраничное веб-приложение в Docker-контейнере для автоматического обезличивания чувствительных данных в документах: гибридная детекция, детерминистичные плейсхолдеры, сессии для обратимого восстановления и отдельный JSON API для интеграций (в т. ч. почтовых воркеров). Без такого шлюза корпоративные данные в принципе нельзя пускать в публичные модели — поэтому это фундамент guardrails, а не один из приёмов ИБ.

Роль
Архитектор и разработчик
Стадия
MVP в эксплуатации, интеграционный API доступен
Стек
Python 3.11 · FastAPI · Uvicorn · spaCy (ru/en) · SQLite · Docker Compose · slowapi
Детекция
Гибрид: regex + NER + кастомные словари
Форматы
txt · docx · pdf · md · xlsx
Интеграции
Sync API · async jobs · email-воркеры · мониторинг Prometheus

Проблема

Документы нельзя свободно передавать в LLM и в смежные системы. В корпоративных сценариях в текстах постоянно встречаются ФИО, контакты, ИНН, номера договоров и собственные таксономии (коды площадок, названия юрлиц). Ручная вычистка не масштабируется; простая замена по списку пропускает контекст и ломает согласованность плейсхолдеров внутри одного файла.

В корпоративном контексте без обезличивания пилоты с внешними LLM либо тормозятся службой ИБ, либо обходят политики «телефоном» — оба варианта плохие.

Решение — сервис псевдонимизации с предсказуемым поведением

MVP упакован в Docker: веб-интерфейс с drag-and-drop, предпросмотром и выгрузкой, плюс набор REST-эндпоинтов на FastAPI. Детекция строится как пайплайн:

  • Регулярные правила для телефонов, e-mail, ИНН, номеров договоров.
  • spaCy-модели для сущностей типа PERSON (ru/en).
  • Кастомные типы из JSON-словаря (коды площадок, бренды, артикулы) — живут в отдельной SQLite-базе с резервным копированием перед записью.
Замена детерминистична: одно и то же значение в рамках документа всегда получает один и тот же плейсхолдер (на базе стабильного хэша). Это упрощает ревью и последующее восстановление.

При опциональном API-ключе создаётся сессия с маппингом — обезличенный текст уходит в LLM, ответ возвращается, и сессия позволяет восстановить контекст по тем же плейсхолдерам. Для крупных файлов срабатывает асинхронная очередь с опросом статуса задания вместо блокирующего ответа.

UI анонимайзера: drag-and-drop, предпросмотр, статистика по типам сущностей
Скриншот 1 — UI с пайплайном детекции (regex + spaCy NER + словарные типы).

Поток обработки

  1. Загрузка. Файл в UI или API; проверка размера и лимитов; при большом объёме — постановка в очередь (HTTP 202 + job id).
  2. Детекция. Гибридный детектор с приоритетами типов; для PDF — постраничный режим на крупных файлах.
  3. Маппинг. Единый маппер значений → плейсхолдеры; статистика по типам сущностей в ответе API.
  4. Выдача. Предпросмотр, скачивание, конвертация формата; при сессии — восстановление исходника по session_id.
  5. Наблюдаемость. Prometheus-метрики, UI мониторинга, отдельные лимиты для email-интеграции.

Инженерные решения, не только «найти и заменить»

Фазы аутентификации для UI и отдельные правила для интеграционных префиксов. Внешний оператор инстанса и автоматизированные клиенты разнесены по разным контурам доступа.

Rate limiting с ключом по хэшу API-ключа или IP — slowapi на FastAPI. Отдельный пул лимитов для email-воркеров.

TTL и очистка сессий, дедлайны и семафоры на тяжёлые задачи. Документы не остаются «навсегда»; долгие задачи не блокируют пул воркеров на бесконечный срок.

Страницы настроек словаря и мониторинга с осознанным разделением: что требует ключа, что доступно оператору инстанса только из доверенной сети.

UI мониторинга: метрики Prometheus, статусы async-задач, словарь сущностей
Скриншот 2 — наблюдаемость и эксплуатация (или интерфейс управления словарём сущностей).

Сценарий «LLM поверх обезличенного текста»

Для случаев «отправить в публичную модель и вернуть результат» предусмотрен поток чата с подстановкой только плейсхолдеров и отдельная процедура восстановления. Это принципиально: нельзя смешивать сырой PII и внешние модели в одном запросе без явного шага. Архитектура заставляет оператора пройти этот шаг — он не «по умолчанию», а в коде.

Эффект — готовый контур для пилота ИБ и интеграторов

Команда получает воспроизводимый артефакт:

  • Один репозиторий и понятный compose-сценарий с TLS для локальной проверки.
  • Swagger для контрактов API.
  • Выделенный API для пакетной обработки почты — без раскрытия внутренних ключей и путей в публичном описании.
  • Метрики Prometheus и UI мониторинга.
Что демонстрирует кейс
Способность спроектировать и реализовать критически важный ИБ-инфраструктурный продукт с предсказуемым поведением, обратимыми операциями и пригодностью для интеграции в почтовый и API-поток. Это не «эссе про guardrails», а работающий контур, который проходит ревью корпоративной ИБ.

Связанные артефакты ИБ

  • HLD защищённого LLM-контура — Zero Trust, Defense in Depth, DLP-шлюз с матрицей сущностей, SIEM, ротация ключей, локализация логов в РФ.
  • Матрица guardrails — маршрутизация данных, утверждённые и запрещённые инструменты, политики псевдонимизации, HITL по доменам, метрики качества.
  • Политика защиты коммерческой тайны и приложения для согласования с корпоративной ИБ.

Все три артефакта применялись в реальных согласованиях с корпоративной ИБ и стали частью методологической базы для пилотов в крупном промышленном холдинге — см. кейс аудита.

Похожая задача?

Нужен анонимайзер под ваши регламенты?

Помогу с архитектурой детекции, политиками хранения маппингов и границами доверия между UI, API и внешними LLM. Возможны варианты под on-prem с собственным набором сущностей.