KT.Teamcopy as .md

LLM-шлюз для медкарт без передачи врачебной тайны

Открытый разбор того, как LLM & Security Gateway применяют в здравоохранении: между клиникой и моделью встаёт прокси, который обфусцирует имена, диагнозы и ид

AIWebMobileData

Какую задачу решает шлюз в клинике

Медицинская организация хочет ускорить рутину: собрать выписной эпикриз из истории болезни, переформулировать назначения «человеческим» языком, ответить на вопрос пациента «что означает мой анализ». Самые сильные для этого модели — внешние облачные LLM. Но текст истории болезни — это врачебная тайна: ФИО, дата рождения, номер полиса и медкарты, адрес, диагноз по МКБ. Отправить это в чужой облачный сервис напрямую нельзя: данные осядут в логах провайдера, кэше инференса, а при инциденте у вендора попадут в «зону поражения».

LLM & Security Gateway решает это структурно: между приложением клиники и моделью встаёт прокси-шлюз. Он перехватывает каждый запрос, обфусцирует идентификаторы и диагнозы до отправки, прогоняет через модель уже обезличенный текст, а в ответе восстанавливает исходные значения — прежде чем врач его увидит. Провайдер модели обрабатывает `[PERSON_1]` и `[MRN_7]`, а не «Иванова Мария Петровна, медкарта 4412».

Как это устроено технически

Открытая референс-связка — Microsoft Presidio (детекция и анонимизация PII, лицензия MIT) плюс прокси-шлюз LiteLLM, который вызывает Presidio как guardrail. Поток состоит из трёх стадий (LiteLLM docs):

1. Analyze. Presidio Analyzer находит в тексте сущности (`PERSON`, `LOCATION`, `DATE`, `PHONE_NUMBER`, медицинские идентификаторы) через NER, регулярные выражения и контрольные суммы, присваивая каждому совпадению оценку уверенности.

2. Anonymize. Найденные сущности заменяются на плейсхолдеры (`<PERSON>`, `<MRN>`) либо на токены вида `[PERSON_A3F2]`. В модель уходит только обезличенный вариант.

3. Restore. При включённом `output_parse_pii: true` шлюз хранит карту «токен → исходное значение» в течение жизни запроса и подставляет реальные данные обратно в ответ модели (Aptible).

Поведение настраивается декларативно: для разных типов данных задаётся действие `MASK` (замаскировать), `BLOCK` (отклонить запрос целиком) и порог уверенности `presidio_score_thresholds`. Это даёт инженерную отчуждаемость: логика приложения не знает про обфускацию, один и тот же шлюз переиспользуется всеми сервисами клиники, а сменить модель-провайдера можно без переписывания кода. Это и есть подход «бизнес-логика рядом, ядро инструмента не трогаем».

Что важно про язык и точность

Для русскоязычных медкарт ключевая настройка — `presidio_language`: детекторы и NER-модель должны работать на нужном языке, иначе recall на русских ФИО и адресах падает. Presidio расширяется кастомными распознавателями — под номер полиса ОМС, СНИЛС, формат медкарты конкретной МИС можно дописать regex-рекогнайзеры поверх готового ядра. Для клинического текста open-source-сообщество рекомендует усиливать общий NER специализированными медицинскими моделями (spaCy + clinical NER, либо managed-сервисы), потому что универсальный NER хуже ловит диагнозы и медицинские термины (Aptible).

Честные ограничения

Это не «волшебная анонимизация», и в открытых источниках это сказано прямо. У NLP-детекции есть доля ложноотрицательных срабатываний: на бенчмарках recall 90–99%, но на конкретном корпусе клиники часть идентификаторов проскользнёт. По стандарту HIPAA Safe Harbor нужно удалить все 18 категорий идентификаторов, и даже один пропущенный дисквалифицирует данные как «обезличенные»; в России аналогичную роль играет 152-ФЗ и режим врачебной тайны. Поэтому обратимая токенизация юридически — это кодирование, а не деперсонализация: данные остаются персональными, договор с провайдером и контур защиты по-прежнему нужны (Accountable).

Сама карта «токен → значение» становится чувствительным активом: тот, у кого есть и обезличенный лог, и карта, восстановит исходные данные. Открытое руководство предписывает шифровать карту и держать короткий TTL — минуты, а не часы, с явным удалением после восстановления (Aptible). Есть и клинический риск: если модель вернёт токен в форме, которую карта не распознаёт, врач увидит `[PERSON_A3F2]` там, где должно быть имя. Поэтому шлюз ставят не вместо защищённого контура, а как дополнительный слой: он резко сокращает «зону поражения» — в инференс, кэш и логи вендора уходит токен, а не врачебная тайна.

Результат для бизнес-процесса

Процесс «врач — выписка/ответ пациенту» меняется так: вместо ручного составления эпикриза врач получает черновик за секунды, а пациент — понятное объяснение анализа, при этом исходный текст с диагнозом и идентификаторами физически не покидает контур клиники. Регуляторный риск сжимается с «передали врачебную тайну стороннему облаку» до «передали обезличенный текст плюс храним обратимую карту под шифрованием минуты». Измеримый эффект: время подготовки выписки сокращается с десятков минут до секунд черновика на правку, а число сущностей, ушедших провайдеру в открытом виде, стремится к нулю при настроенном пороге и медицинских рекогнайзерах. Перед прод-запуском обязателен замер recall детектора на реальном корпусе клиники — это и есть граница, отделяющая «ускорили рутину» от «допустили утечку».

Линейная схема потока данных слева направо. Слева блок «МИС клиники / приложение» отправляет запрос с текстом медкарты (ФИО, диагноз МКБ, № медкарты). Стрелка ведёт в центральный блок «LLM & Security Gateway», внутри которого три последовательных под-блока: (1) Analyze — Presidio находит сущности; (2) Anonymize — замена на токены [PERSON_1], [MRN_7], <DIAGNOSIS>; рядом сбоку — зашифрованное хранилище «карта токен→значение, TTL минуты». От шлюза вверх отходит стрелка «обезличенный текст» к облачному блоку «Внешняя LLM (провайдер)», который возвращает ответ с токенами обратно в шлюз. (3) Restore — шлюз подставляет исходные значения из карты. Стрелка вправо возвращает в клинику готовую выписку / ответ пациенту с реальными данными. Пунктирная граница вокруг клиники и шлюза подписана «контур врачебной тайны»; облачный провайдер — вне этой границы, подпись «видит только токены».

Какой бизнес-процесс улучшает

Шлюз превращает процесс «врач готовит выписку и отвечает пациенту» в секундный черновик, при этом врачебная тайна не покидает контур клиники: провайдеру модели уходят токены, а не диагнозы и идентификаторы. Условие запуска в прод — замер recall детектора на реальном корпусе клиники, шифрование карты токенов с TTL в минуты и сохранение защищённого контура: обратимая токенизация юридически остаётся работой с персональными данными, а не их обезличиванием.

Контакты

Обсудить сотрудничество

Оставьте актуальные контакты и опишите задачу. Мы вернемся с уточняющими вопросами и предложением по следующему шагу.