Игорь Градов
Игорь Градов
6 мин
ai

AI ассистент в медицине теряет контекст: как команда «Я Здоров» разделила память на 11 блоков

Медицинские ИИ-ассистенты теряют контекст между сеансами, и простое хранение всех данных в одном файле только усугубляет проблему: команда приложения «Я Здоров» нашла рабочую архитектуру и описала путь от первой версии до текущей.

AI ассистент в медицине теряет контекст: как команда «Я Здоров» разделила память на 11 блоков
Почему это важно

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

Команда ASAP, которая разрабатывает мобильное приложение «Я Здоров», опубликовала разбор своей архитектуры долгосрочной памяти, LTM (Long-Term Memory, механизм сохранения фактов между сеансами диалога). Приложение собирает медицинские данные пользователя в цифровой профиль: результаты анализов, дневники здоровья, оцифрованные документы. В чате пользователь сообщает ИИ-ассистенту о симптомах, препаратах, аллергиях. Часть этих сведений нужна не только в текущем разговоре, но и при следующих обращениях, и именно здесь начинаются сложности.

Почему «один большой файл» не работает?

Первая версия LTM выглядела просто: всё, что ассистент извлекал из диалогов, складывалось в единый JSON-объект (текстовый файл с набором пар «ключ и значение»). При каждом ответе этот объект целиком передавался в контекст LLM (большой языковой модели, на которой построен ассистент).

По мере накопления данных обнаружились три проблемы.

  • Контекст раздувался. Модель получала всю историю здоровья, хотя для конкретного вопроса нужна лишь часть. Лишние факты занимали токены (единицы текста, которые модель обрабатывает за один проход) и снижали точность.
  • История изменений терялась. Новое значение просто заменяло старое. Если врач сначала назначил препарат, потом пациент начал его принимать, а позже дозировку изменили, в JSON оставалось только последнее состояние. Восстановить цепочку событий было невозможно.
  • Пустое поле не отличалось от подтверждённого отсутствия. Если запись об аллергии пуста, неясно: пользователь ещё не обсуждал тему или прямо сказал «аллергий нет». Для ai ассистент медицина это критичная разница: известную аллергию нужно учитывать в рекомендациях по питанию, а «не знаю» и «не спрашивали» требуют разных следующих шагов.

Что понадобится

Если вы строите похожую систему или хотите повторить подход на своём проекте:

  • LLM с поддержкой системного промпта (системный промпт, начальная инструкция, задающая модели роль и правила) и структурированного вывода (JSON mode или function calling)
  • Серверная логика для валидации и хранения фактов (база данных с поддержкой версионирования записей)
  • Разделение на синхронный и асинхронный контуры (очередь задач или фоновый обработчик)
  • Набор правил извлечения фактов по каждому разделу памяти
  • Время на проектирование: команда ASAP прошла две итерации архитектуры

Пошаговая инструкция

  1. Разбейте память на предметные разделы. Команда «Я Здоров» выделила 11 разделов: лекарства, симптомы, диагнозы, хронические состояния, демографические данные, образ жизни, аллергии, операции, травмы, вакцинации, семейный анамнез. Каждый раздел хранится и обрабатывается отдельно.

  2. Разделите чтение и запись. Чтение (read-path) работает синхронно: когда пользователь задаёт вопрос, система определяет, какие разделы LTM нужны, достаёт из них факты и добавляет в контекст модели. Запись (write-path) работает в фоне: после завершения фрагмента диалога отдельный процесс разбирает новую информацию и обновляет память. Так извлечение фактов не замедляет ответ пользователю.

  3. Используйте LLM только для понимания смысла, а состоянием управляйте кодом. Путь записи выглядит так:

  4. LLM-классификатор определяет, какие разделы памяти затронуты в разговоре
  5. Экстрактор получает правила только для выбранного раздела и извлекает структурированное событие
  6. Программная валидация проверяет типы полей и допустимые значения
  7. Код сопоставляет событие с существующими фактами и определяет тип изменения: первое упоминание, подтверждение, изменение или отрицание
Пример промпта для классификатора (упрощённо):

Определи, какие разделы медицинской памяти затронуты
в следующем фрагменте диалога.
Допустимые разделы: allergies, medications, symptoms,
chronic_conditions, demographics, lifestyle, surgeries,
injuries, vaccinations, family_history, diagnoses.
Верни только список затронутых разделов в формате JSON.
  1. Фиксируйте подтверждённое отсутствие явно. Для аллергий, хронических заболеваний и семейного анамнеза «нет аллергий» записывается как отдельный факт со статусом «confirmed_absent». Пустое поле означает только одно: тема ещё не обсуждалась.

  2. Храните историю изменений, а не только текущее состояние. Каждое событие (назначение препарата, смена дозировки, отмена) фиксируется отдельной записью с меткой времени. Текущее состояние вычисляется из цепочки событий, а не заменяет предыдущее значение.

Как это работает на практике

Пользователь пишет в чат: «У меня аллергия на арахис». LLM-классификатор относит реплику к разделу allergies. Экстрактор извлекает структуру: аллерген «арахис», тип «пищевая», статус «активна». Код проверяет валидность, не находит существующей записи об арахисе и создаёт новый факт. При следующем обращении, когда пользователь спрашивает про диету, read-path подтягивает только раздел аллергий (а не все 11 разделов) и передаёт его в контекст модели. Ассистент учитывает арахис в ответе.

Частые ошибки
  • Передавать всю память в контекст при каждом запросе. Это расходует токены и размывает точность ответа. Отбирайте только нужные разделы.
  • Доверять LLM управление идентификаторами и временными метками. Модель хорошо понимает смысл, но технические поля (ID записи, тип изменения, дата) надёжнее генерировать программно. Галлюцинация (когда модель уверенно выдумывает то, чего не было) в идентификаторе приведёт к потере или дублированию факта.
  • Не различать «данных нет» и «пользователь подтвердил отсутствие». Это ошибка с медицинскими последствиями: ассистент будет переспрашивать о том, что уже выяснено, или, хуже, пропустит важную информацию.
  • Обновлять память после каждой реплики. Лучше анализировать связный фрагмент диалога целиком: так экстрактор видит контекст и реже ошибается.

Что делать с этим прямо сейчас, по ролям

Разработчику медицинского ИИ-ассистента: архитектура «разделённая память плюс два контура» решает три конкретных боли. Начните с малого: выделите хотя бы аллергии и лекарства в отдельные разделы, добавьте статус «confirmed_absent» и разнесите чтение с записью.

Автору Дзена, пишущему про здоровье и технологии: разбор «Я Здоров» даёт конкретный кейс для контента. Читателям интересно не абстрактное «ИИ в медицине», а именно такие детали: почему ассистент иногда забывает, что вы говорили неделю назад, и как это чинят.

Предпринимателю в РФ: приложение «Я Здоров» и команда ASAP работают на российском рынке. Описанная архитектура не привязана к конкретному провайдеру LLM и может использовать доступные в России модели, включая YandexGPT или GigaChat (по моим наблюдениям, оба поддерживают работу с системным промптом и структурированным выводом, хотя детали реализации отличаются).

Мнение редакции dzen.guru

Подход команды ASAP ценен не столько кодом, сколько мышлением: они чётко разделили, что делает LLM (понимает смысл), а что делает программная логика (управляет состоянием). Это правило применимо далеко за пределами медицины. Если вы строите любого ИИ-агента (программу, которая сама выполняет цепочку действий) с памятью между сеансами, запомните: модели нельзя доверять роль базы данных. Она инструмент извлечения смысла, а хранение, версионирование и валидация остаются за классическим кодом. Честная оговорка: команда описала архитектуру, но не привела метрик точности извлечения фактов и не раскрыла, какую именно LLM использует. Без этих данных оценить надёжность системы в клинических сценариях невозможно.

Узнайте, как ИИ меняет работу авторов

Подпишитесь на dzen.guru и получайте разборы практических кейсов с нейросетями каждую неделю

Подписаться

Главный урок из этого кейса укладывается в одну фразу: LLM понимает смысл, а состоянием памяти управляет код. Кто усвоит это разделение, сэкономит месяцы переделок, независимо от того, строите вы медицинского ассистента или чат-бота для интернет-магазина.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

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

Комментарии

Читайте также

Together Link подключает Claude Code AI к открытым моделям: экономия до 80% на токенах
ai

Together Link подключает Claude Code AI к открытым моделям: экономия до 80% на токенах

Компания Together AI выпустила Together Link, бесплатную утилиту командной строки с открытой лицензией MIT, которая позволяет подключать шесть популярных…

5 мин
Selectel протестировал AI-ускорители Zhenwu 810E: 1 536 ГБ памяти, но полная зависимость от Alibaba
ai

Selectel протестировал AI-ускорители Zhenwu 810E: 1 536 ГБ памяти, но полная зависимость от Alibaba

Alibaba выпустила собственный AI-ускоритель Zhenwu 810E, и команда Selectel первой в России протестировала его для облачной инфраструктуры, столкнувшись с…

6 мин
AI Studio от Сбера показала 5 рабочих сценариев: чем она закрывает задачи Google AI Studio в РФ
ai

AI Studio от Сбера показала 5 рабочих сценариев: чем она закрывает задачи Google AI Studio в РФ

Google AI Studio здесь ни при чём: речь о российской платформе AI Studio от Сбера, и именно её сценарии стоит разобрать, потому что для команд в РФ это рабочий…

5 мин