Журнал · Rit.work

LLM читает, код решает: как не принять неизвестное за норму

Разделение извлечения данных и расчёта риска помогает клинической системе не считать пропуски нормой и задавать только вопросы, способные изменить решение.

Rit.work
Студия разработки
30 сентября 2026 г.3 мин чтения

Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.

Клинический калькулятор можно научить отличать отсутствие признака от отсутствия записи и спрашивать только то, что способно изменить категорию риска. В работе независимого исследователя Nicolás Vera Zúñiga такая схема сохранила точность полного опроса и сократила число вопросов почти вдвое; результат предварительный, поскольку препринт не рецензирован и числа в нём получил сам автор. Для продуктовой команды вывод архитектурный: LLM стоит оставить чтение текста, а решение о достаточности данных передать детерминированному коду.

Как код понимает, что данных уже достаточно

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

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

Затем программа вычисляет все категории, которые ещё возможны при разных значениях неизвестных параметров. Если любой допустимый вариант ведёт к одной категории, данных уже достаточно. Если категория может измениться, система спрашивает только о параметре, который способен её изменить, после ответа пересчитывает границы и снова проверяет достаточность данных.

Такое разделение устраняет две разные ошибки. Система не спрашивает о пропуске, который уже ни на что не влияет, но и не подменяет неизвестное нормальным значением. Если решающий факт получить нельзя, она не выдаёт определённую категорию и может выбрать предусмотренный правилами вариант с более высоким риском.

Неизвестное значение оказалось опаснее лишнего вопроса

Основную схему проверяли на 1 200 синтетических случаях для шести клинических калькуляторов, включая HEART, CURB-65, qSOFA, PERC, Wells и Cockcroft-Gault. Claude Haiku 4.5 извлекала факты, а ответы врача имитировала отдельная программа.

Расчёт по границам сохранил точность полного опроса, но задавал в среднем 0,92 вопроса на случай вместо 1,78. Полный опрос почти в половине случаев запрашивал сведения, которые уже не могли изменить категорию; код с границами таких вопросов не задавал.

Подход «пропуск равен норме» недооценил риск у 8,5% пациентов. Это ключевой результат работы: система может редко беспокоить врача и показывать приемлемую общую точность, но достигать этого за счёт преждевременных решений в сторону меньшего риска.

Claude Opus 5.5 в роли сквозного агента при идеальных ответах работала не хуже модульной схемы. Однако агент иногда задавал нерелевантные вопросы, а при ошибочных и неполных ответах врача чаще фиксировал категорию до того, как имеющиеся факты позволяли это сделать. Детерминированный слой преждевременных решений не принимал.

Проверка охватывала синтетические записи, их усложнённые версии и несколько сотен реальных отчётов из MedCalc-Bench. Лишь примерно половина реальных записей содержала достаточно сведений для однозначной категории. При этом синтетические тексты создавала модель семейства Claude, врач был имитирован, а интерактивный опрос на реальных отчётах не проверяли — поэтому абсолютную точность переносить в клиническую эксплуатацию нельзя.

Архитектура меняет границу ответственности LLM

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

Практическая схема требует хранить «неизвестно» как самостоятельное значение во всех промежуточных структурах. К каждому извлечённому факту стоит привязать фрагмент исходного текста, а преобразование единиц, допустимые диапазоны и пороги реализовать отдельно от модели. Тогда спорное решение можно воспроизвести без повторного запроса к LLM.

Для извлечения не обязательно использовать крупнейшую доступную модель. В эксперименте локальная Qwen3.5-9B справилась на уровне эталонного обработчика: она могла пропустить явно указанное отрицание, но чаще помечала параметр неизвестным, а не выдумывала нормальное значение. Это превращало ошибку извлечения в дополнительный вопрос, а не в скрытое занижение риска.

Вывод не распространяется автоматически на диагностику без явных правил. Метод работает там, где можно перечислить допустимые значения, вычислить диапазон результатов и формально установить, влияет ли неизвестный параметр на решение. Для таких продуктов разделение LLM и кода даёт не столько прирост точности, сколько контролируемое поведение: система показывает, чего не знает, и не позволяет языковой модели самой решить, достаточно ли данных.

Источники

Пауза в чтении

Похоже на вашу задачу?

Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.

Rit.work

Студия разработки

Собираем мобильные приложения и помогаем командам получать от AI реальную пользу. Основатель и команда, работаем удалённо — с клиентами в России и за рубежом.

← Ко всем материалам
Понравилось? Обсудим вашу задачу