TL;DR
MOSAIC — мульти-агентная система для разметки клинических диалогов врач-пациент. Четыре типа агентов работают последовательно: планировщик выбирает кодбук и распределяет задачи, обновлятель синхронизирует базы правил, аннотаторы размечают текст через RAG и few-shot примеры, верификатор проверяет консистентность и даёт обратную связь. Система достигает точности 93% на разметке эмпатии, поведенческих паттернов и признаков предвзятости.
Разделение ролей между специализированными агентами работает лучше чем one-shot промптинг на 7,9%. Верификация как отдельный шаг отлавливает пропущенные метки — система находит эмпатические реплики, которые пропустили люди-кодеры. Библиотека few-shot примеров, обновляемая через feedback loop, постепенно улучшает точность на редких категориях (предвзятость, subtle cues). Chunking длинных диалогов с сохранением контекста критичен — без 8 реплик вокруг точность падает.
Система оркеструет 4 шага в одном пайплайне: Plan Agent читает задачу и выбирает подход → Update Agent обновляет RAG-базу если кодбук изменился → Annotation Agents применяют правила к сегментам текста → Verification Agent проверяет результат и накапливает примеры для следующих запусков. Каждый агент — отдельный LLM-вызов с кастомным промптом.
Схема метода
PLAN AGENT:
Вход: транскрипт + задача пользователя
→ Определяет какой кодбук нужен (эмпатия / поведение / предвзятость)
→ Активирует нужных агентов
UPDATE AGENT:
→ Проверяет изменился ли кодбук
→ Если да: обновляет векторную базу правил
→ Если нет: пропускает
ANNOTATION AGENTS (параллельно):
Вход: сегмент диалога + контекст
→ RAG достаёт релевантные правила из кодбука
→ RAG достаёт похожие примеры из библиотеки
→ Генерирует метки по few-shot паттерну
→ Выход: размеченный сегмент
VERIFICATION AGENT:
→ Сверяет метки разных агентов
→ Флагит низкую уверенность
→ Сохраняет успешные кейсы в библиотеку примеров
→ Выход: финальная разметка + feedback
Все агенты — отдельные вызовы LLM. В оригинале требуют LangGraph + код, но принципы применимы в чатах.
Пример применения
Задача: Ты записал разговор с клиентом о переходе на новый тариф. Нужно понять: был ли диалог клиентоцентричным, какие возражения не закрыл менеджер, и есть ли признаки давления на клиента.
Промпт:
Проанализируй транскрипт звонка по трём измерениям: клиентоцентричность, работа с возражениями, давление.
ШАГ 1 - ПЛАНИРОВАНИЕ:
Прочитай транскрипт. Определи какие метрики применить:
- Клиентоцентричность: открытые вопросы, эмпатия, активное слушание
- Возражения: распознавание сигналов, ответ на причину, проверка закрытия
- Давление: навязывание темпа, игнорирование паузы, прерывания
ШАГ 2 - РАЗМЕТКА:
Для каждой реплики менеджера:
- Найди признаки паттернов выше
- Процитируй фрагмент
- Объясни почему подходит метка
ШАГ 3 - ПРОВЕРКА:
Перечитай разметку. Проверь:
- Не пропущены ли моменты где клиент сигналил дискомфорт?
- Консистентны ли метки (если реплика 5 = эмпатия, то реплика 7 с тем же паттерном тоже?)
- Где уверенность низкая — флагни отдельно
ШАГ 4 - ИТОГ:
Дай сводку по трём измерениям + список фрагментов для разбора с менеджером.
[Вставь транскрипт]
Результат: Модель пройдёт 4 шага в одном ответе: сначала определит какие паттерны искать, потом разметит транскрипт цитатами, затем проверит пропуски (часто находит subtle моменты давления которые пропускаешь при первом чтении), в конце даст структурированный отчёт. Ты увидишь не просто метки, но и reasoning почему каждая метка применена.
Почему это работает
LLM в режиме "разметь всё сразу" пропускает тонкие паттерны — особенно в середине длинного текста (attention fades) и редкие категории (bias, subtle pressure). Модель видит очевидную эмпатию, но пропускает косвенные сигналы дискомфорта. Single-pass работает для ярких кейсов, ломается на нюансах.
LLM хорошо следует структурированным инструкциям и учится на конкретных примерах. RAG достаёт правила из кодбука ("эмпатия = отражение чувств + валидация") и похожие примеры из библиотеки. Few-shot показывает "вот так выглядит эмпатия в реальном диалоге". Модель копирует паттерн.
MOSAIC разбивает сложную задачу на специализированные роли. Один агент планирует → другой размечает → третий проверяет. Верификация как отдельный шаг критична — модель перечитывает свою же разметку и отлавливает пропущенное. Библиотека примеров накапливает успешные кейсы: если модель правильно разметила давление в реплике 23, этот фрагмент идёт в few-shot для следующих запусков. Система обучается на своих успехах.
Chunking с контекстом решает проблему длинных диалогов. Если размечать по одной реплике — теряешь контекст ("Понятно" = согласие или сарказм?). Если весь диалог целиком — модель тонет в объёме. MOSAIC берёт 8 реплик вокруг целевой: 4 до, целевая, 3 после. Это окно скользит по тексту, сохраняя причинно-следственные связи.
Рычаги управления:
- Размер контекста (8 реплик → уменьши до 4 для коротких диалогов, увеличь до 12 для сложных) — влияет на понимание причинно-следственных связей
- Temperature (0.3 оптимальна в исследовании; 0.0 = стабильно но ригидно; 0.5-0.7 = ловит нюансы но может пропустить очевидное) — баланс между консистентностью и чувствительностью к subtle cues
- Few-shot примеры (2-3 из библиотеки → добавь свои контрастные кейсы если модель путает категории) — направляет поведение на редких категориях
- Верификация (добавь явный чеклист что проверять → модель отловит больше пропусков) — например "проверь реплики где клиент замолкает"
Шаблон промпта
Проанализируй {тип_текста} по {список_измерений}.
ШАГ 1 - ПЛАНИРОВАНИЕ:
Прочитай текст. Определи какие паттерны искать для каждого измерения:
{измерение_1}: {список_паттернов}
{измерение_2}: {список_паттернов}
ШАГ 2 - РАЗМЕТКА С КОНТЕКСТОМ:
Для каждого фрагмента текста:
- Возьми контекст: {N} элементов до и {M} после
- Найди признаки паттернов из Шага 1
- Процитируй фрагмент
- Объясни почему подходит метка
- Оцени уверенность (высокая/средняя/низкая)
ШАГ 3 - ПРОВЕРКА КОНСИСТЕНТНОСТИ:
Перечитай разметку:
- Пропущены ли моменты с признаками {критичный_паттерн}?
- Консистентны ли метки (похожие фрагменты = похожие метки)?
- Где уверенность низкая — флагни + объясни почему
ШАГ 4 - СТРУКТУРИРОВАННЫЙ ИТОГ:
Дай сводку:
- По каждому измерению: сколько случаев, какие паттерны доминируют
- Список фрагментов для {целевое_действие}
- Флаги низкой уверенности отдельно
[Текст для анализа]
Что подставлять:
- {тип_текста} — транскрипт звонка, переписка с клиентом, отзыв, диалог команды
- {список_измерений} — эмпатия + работа с возражениями + давление (или свои критерии)
- {измерение} и {список_паттернов} — например "Эмпатия: отражение чувств, валидация, открытые вопросы"
- {N} и {M} — размер контекстного окна (попробуй 3-4 реплики до и после)
- {критичный_паттерн} — что важно не пропустить (сигналы дискомфорта, возражения, bias)
- {целевое_действие} — разбора с менеджером, доработки скрипта, обучения команды
🚀 Быстрый старт — вставь в чат:
Вот шаблон мульти-агентного анализа. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какие паттерны искать, какой контекст нужен, что критично не пропустить — потому что ей нужно конкретизировать абстрактные плейсхолдеры. Она возьмёт 4-шаговую структуру (план → разметка → проверка → итог) и адаптирует под твой кейс.
Ограничения
⚠️ Текст без аудио: Эмпатия, тон, ирония зависят от интонации. Модель видит только слова — "понятно" может быть согласием или сарказмом. В исследовании категория "Global" (warmth, attentiveness, flow) показала худшую точность (F1 = 83%) именно из-за этого. Если тебе важны эмоциональные нюансы — верифицируй вручную или жди мультимодальных версий.
⚠️ Редкие паттерны требуют примеров: Система работает лучше когда есть few-shot примеры для каждой категории. Если ты ищешь редкий паттерн (например, микроагрессии в переписке) и таких примеров нет — модель пропустит или over-detect. Решение: дай 2-3 примера вручную в промпте.
⚠️ Chunking может разорвать контекст: Если паттерн раскрывается медленно (возражение в реплике 5, ответ менеджера в реплике 12), а окно контекста 8 реплик — связь потеряется. В длинных диалогах проверяй флаги низкой уверенности вручную.
⚠️ Неоднозначные категории: Исследование показало сложности в разделении "Attentive vs Concerned" или "Guarded vs Open" — даже люди не всегда согласны. Модель будет колебаться на пограничных кейсах. Не используй этот подход где нужна абсолютная точность в subjective categories.
Как исследовали
Исследователи собрали 76 записей диалогов врач-пациент (ревматология + гинекология), перевели в текст через Ambient Digital Scribing, вручную разметили обученными кодерами по пяти кодбукам (эмпатия, поведение пациента, методы изменения поведения, глобальное качество коммуникации, признаки предвзятости). Получилось 26 транскриптов для обучения и 50 для теста, в среднем 20 минут чистой речи и 177 реплик на транскрипт.
Архитектуру MOSAIC собрали на LangGraph — фреймворк для оркестрации мульти-агентных систем. Четыре типа агентов работают последовательно: Plan Agent выбирает какой кодбук применить, Update Agent обновляет RAG-базу если правила изменились, Annotation Agents размечают текст через retrieval релевантных правил + few-shot примеров, Verification Agent проверяет консистентность и накапливает успешные кейсы в библиотеку. RAG построен на FAISS (векторная БД), эмбеддинги MiniLM, реранкинг через MedCPT (медицинская модель). Few-shot примеры подтягиваются динамически — система учится на своих успехах.
Сравнили с тремя baseline: (1) Single-agent (один LLM с кодбуком, без агентов) → F1 = 85,9%; (2) Multi-agent без оптимизации (есть агенты но промпты фиксированные) → 85,7%; (3) Dynamic prompting (адаптивные промпты но без верификации) → 89,5%; (4) Full MOSAIC → 93,0%. Выигрыш +7,9% относительно baseline целиком за счёт верификации + динамических примеров.
Почему такая точность? Разбили по категориям: Patient Behavior (вопросы пациента, ассертивность) = F1 95,1% — легко детектить явные паттерны. Bias (микроагрессии, guardedness) = 94,8% — тут помог few-shot, без примеров модель over-detects. WISER (эмпатия врача) = 94,0%. А вот Global = 83,1% — худший результат, потому что "warmth" и "flow" зависят от интонации, которой нет в тексте. По доменам: ревматология = 96,2% (структурированные диалоги), гинекология = 86,8% (больше эмоциональных нюансов).
Удивительная находка: MOSAIC нашла эмпатические реплики, которые пропустили обученные люди-кодеры. Верификация как отдельный шаг оказалась критична — модель перечитывает свою же разметку и отлавливает пропущенное. Это не просто автоматизация, это качественно другой подход.
Sensitivity анализ по temperature: 0.0 = консистентно но ригидно (F1 90,2%), 0.3 = лучший баланс (92,8%), 0.5-0.7 = ловит нюансы но пропускает очевидное (91,9% и 91,7%). Retrieval caching ускорил систему на 25%.
Время: Человек размечает 20-минутный транскрипт за 60-90 минут (включая double-coding 10%). MOSAIC делает то же самое за 2-5 минут — включая preprocessing, retrieval, промптинг, верификацию. Масштабируется линейно, не требует калибровки между кодерами.
Адаптации и экстраполяции
🔧 Техника: Контрастные примеры → снижаем false positives
Если модель over-detects категорию (например, флагит "давление" везде где менеджер активен), добавь контрастные примеры в few-shot:
ПОЛОЖИТЕЛЬНЫЙ ПРИМЕР (это давление):
Менеджер: "Акция заканчивается сегодня, нужно решать прямо сейчас."
Метка: Давление (навязывание темпа)
ОТРИЦАТЕЛЬНЫЙ ПРИМЕР (это НЕ давление):
Менеджер: "Акция действует до конца недели. Могу зафиксировать условия, вы подумаете."
Метка: Информирование (нет давления)
В исследовании библиотека примеров накапливала и правильные matches, и ошибки — именно контрастные пары научили модель не путать активность с агрессией.
🔧 Техника: Sentence-level → прозрачность и обучение
MOSAIC по умолчанию размечает целые транскрипты. Но исследователи также протестировали посентенсную разметку (одна реплика + 8 вокруг контекста). Точность упала, но precision вырос — меньше ложных срабатываний.
Применение: если тебе нужно научить команду распознавать паттерны, разметь несколько диалогов sentence-level, покажи конкретные реплики с объяснениями. Это тренировочный формат, не production.
🔧 Техника: Verification checklist → отлавливаем специфичные пропуски
Вместо общего "проверь консистентность" дай Verification Agent конкретный чеклист:
ШАГ 3 - ПРОВЕРКА:
[] Найдены ли моменты где клиент замолкает >3 сек после реплики менеджера?
[] Если менеджер задал открытый вопрос — получен ли развёрнутый ответ?
[] Если клиент возражает — адресован ли корень возражения или только поверхность?
[] Есть ли реплики с высокой эмоциональной нагрузкой без эмпатического ответа?
В исследовании Verification Agent использовал метрики (precision/recall/F1), но для продуктивной работы в чате полезнее domain-specific чеклисты. Модель пройдёт по списку явно, не пропустит паттерн.
Ресурсы
An Agentic AI System for Multi-Framework Communication Coding
Авторы: Bohao Yang, Rui Yang, Joshua M. Biro, Haoyuan Wang, Jessica L. Handley, Brianna Richardson, Sophia Bessias, Nicoleta Economou-Zavlanos, Armando D. Bedoya, Monica Agrawal, Michael M. Zavlanos, Anand Chowdhury, Raj M. Ratwani, Kai Sun, Kathryn I. Pollak, Michael J. Pencina, Chuan Hong
Duke School of Medicine (Department of Biostatistics and Bioinformatics), Duke-NUS Medical School, MedStar Health National Center for Human Factors in Healthcare, Duke Cancer Institute
Ключевые отсылки: - LangGraph — фреймворк для мульти-агентных систем (упомянут как основа архитектуры) - FAISS — векторная база данных для RAG - MiniLM (all-MiniLM-L6-v2) — эмбеддинг модель - MedCPT — reranker для медицинского контекста - Ambient Digital Scribing (ADS) — система транскрипции Duke Health
