← Ко всем кейсам
Внутреннее исследование (research tool) 02 апреля 2026 г.

Анонимайзер медицинских кейсов: от LLM к детерминированному коду

−60 % времени на ручную обезличивку

Внутреннее исследовательское решение для безопасной передачи медицинских историй в LLM. Поворот «модель → код» дал точность и предсказуемость.

Обложка кейса «Анонимайзер медицинских кейсов: от LLM к детерминированному коду»

TL;DR

Контекст

Это внутренний инструмент, а не клиентский кейс. Делал, чтобы безопасно отдавать медицинские истории врачу-консультанту через LLM-ассистента: нужно убрать ФИО, даты рождения, адреса, номера документов, не теряя клинического смысла. На вход — свободный текст истории болезни, на выход — обезличенный текст и таблица замен.

Проблема

Первый прототип «LLM анонимизирует целиком в одном вызове» выглядел красиво, но:

Для медицинского контекста это — стоп-фактор.

Подход

Поворот: модель там, где она нужна, код — там, где можно без неё.

  1. Распознавание сущностей детерминированно. NER-модель (spaCy + русский медицинский словарь) находит имена, даты, диагнозы, номера. Это воспроизводимый шаг.
  2. Правила и таблица замен в коде. Каждой сущности — стабильный плейсхолдер (ИМЯ_1, ДАТА_2), таблица замен сохраняется отдельно, можно откатить.
  3. LLM — только на «сложные» куски. Когда нужно перефразировать редкие диагнозы или мед-аббревиатуры. Узкий промпт, проверка на длину/совпадение терминов.
  4. Валидатор. Финальный проход: ищет в обезличенном тексте остатки ФИО/дат/номеров по словарям и регулярным выражениям. Если что-то нашлось — текст не уходит.

Результат

Что бы сделал иначе

Сразу бы построил валидатор первым, а не последним. Когда был только «LLM делает всё», именно отсутствие проверки на выходе и маскировало ошибки. Валидатор-сначала вынудил бы быстрее уйти в детерминированный путь.

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

Напишите в Telegram Александру Яковцеву — обсудим за 10 минут.

Telegram