TL;DR
DSM5AgentFlow — исследовательская система из трёх LLM-агентов: терапевт задаёт вопросы опросника DSM-5, клиент с заданным профилем расстройства отвечает, диагност анализирует разговор и выдаёт диагноз с пошаговым обоснованием. Каждый агент работает в отдельном промпте с чёткой ролью. Система генерирует синтетические терапевтические беседы и объясняет диагноз через цитаты из разговора.
Проблема: обычные диагностические опросники дают только итоговый балл — непонятно почему именно такой диагноз. Клиент не видит логику, терапевту сложно объяснить коллегам. LLM в один промпт часто не справляются с проведением структурированного интервью — теряют контекст, пропускают вопросы, не отслеживают что уже обсудили.
Решение: разделение на три роли с явным tracking'ом состояния. Терапевт ведёт список заданных вопросов. Клиент держит профиль расстройства и отвечает согласно симптомам. Диагност получает весь разговор + релевантные отрывки из DSM-5 (через RAG) и строит цепочку: симптом из разговора → критерий DSM-5 → диагноз. Каждый шаг подкреплён цитатой.
Схема метода
Система работает через три отдельных промпта (три API-вызова):
ШАГ 1 (Терапевт):
- Загрузить список вопросов DSM-5
- Для каждого вопроса:
→ Переформулировать в естественный язык
→ Задать клиенту
→ Отметить как заданный
- Продолжать пока все 23 вопроса не заданы
ШАГ 2 (Клиент):
- Получить профиль расстройства (тревога/депрессия/ПТСР/etc)
- На каждый вопрос терапевта:
→ Ответить согласно симптомам из профиля
→ Говорить от первого лица
→ НЕ называть диагноз явно
ШАГ 3 (Диагност):
- Получить полный разговор
- Найти релевантные отрывки DSM-5 (RAG)
- Для каждого симптома:
→ Найти цитату из разговора
→ Сопоставить с критерием DSM-5
→ Пометить тегами <sym>, <quote>, <med>
- Выдать: диагноз + обоснование + рекомендации
Важно: Это не один промпт, а workflow из трёх отдельных вызовов LLM.
Extractable principles для применения в чатах
Хотя полная система требует кода (multi-agent + RAG), принципы можно применить в обычном чате:
1. Структурированный диалог через явное разделение ролей
Вместо "ответь на мой вопрос", создаём роли: интервьюер → респондент → аналитик. В одном промпте можно имитировать multi-agent через явные инструкции по очерёдности.
Пример применения:
Задача: Собрать обратную связь от команды о новом процессе онбординга сотрудников, чтобы понять проблемные места
Промпт:
Ты — система из трёх ролей для сбора структурированной обратной связи.
ПРОФИЛЬ РЕСПОНДЕНТА:
- Роль: менеджер среднего звена в IT-компании
- Опыт: провёл онбординг 5 новых сотрудников за последние 3 месяца
- Боль: процесс занимает слишком много времени, новички теряются в документации
ВОПРОСЫ ДЛЯ ИНТЕРВЬЮ:
1. Как долго в среднем длится онбординг одного сотрудника?
2. Какие этапы вызывают больше всего вопросов у новичков?
3. Какие инструменты/документы используются?
4. Где процесс тормозит или требует повторных объяснений?
5. Что бы ты изменил в первую очередь?
ЗАДАЧА:
1. ИНТЕРВЬЮЕР: задай вопросы по списку, переформулируя естественно
2. РЕСПОНДЕНТ: отвечай согласно профилю, от первого лица
3. АНАЛИТИК: после всех ответов выдай:
- Главные проблемы (цитата из ответа → проблема)
- Рекомендации по улучшению
- Приоритет внедрения
Покажи полный диалог + анализ.
Результат:
Модель проведёт симулированное интервью: задаст 5 вопросов, ответит согласно профилю менеджера, затем выдаст анализ с цитатами. Например: "«новички теряются в 20+ документах Confluence» → проблема: информационная перегрузка → рекомендация: создать единый чек-лист с 5 ключевыми ссылками".
2. Explicit tracking через нумерацию и состояние
Явно инструктируй модель отслеживать какие вопросы уже заданы, какие темы обсуждены.
Шаблон:
У тебя есть список из {N} вопросов.
ПРАВИЛО:
- Задавай вопросы по порядку
- После каждого ответа пиши "✓ Вопрос {номер} завершён"
- Переходи к следующему только когда предыдущий полностью раскрыт
- В конце выведи: "Обсуждены вопросы: 1, 2, 3... {N}"
Начинай с вопроса 1.
3. Пошаговое обоснование с цитатами
Вместо "дай ответ", запрашивай цепочку рассуждений с явными ссылками на исходные данные.
Шаблон:
Проанализируй разговор и выдай диагноз проблемы в формате:
ШАГ 1: Симптом
- Цитата: "..."
- Что это значит: [твоя интерпретация]
ШАГ 2: Связь с критерием
- Критерий: [какое правило/паттерн нарушен]
- Почему подходит: [объяснение]
ШАГ 3: Диагноз
- Вывод: [что не так]
- Рекомендация: [что делать]
Используй теги для структуры:
<цитата>"..."цитата>
<проблема>названиепроблема>
<рекомендация>действиерекомендация>
Почему это работает
Слабость LLM: в одном промпте модель легко теряет фокус при многошаговых задачах. Если попросить "проведи интервью из 20 вопросов и дай анализ", она может пропустить вопросы, забыть детали из начала разговора, смешать роли.
Сильная сторона LLM: модель отлично следует явным структурам и конкретным ролям. Если прописать "ты — интервьюер, вот список вопросов, отмечай галочкой каждый заданный", она выполнит дисциплинированно.
Как метод использует это:
- Разделение ролей убирает когнитивную нагрузку — каждая роль делает одно: задаёт вопросы / отвечает / анализирует
- Tracking состояния через нумерацию и галочки даёт модели внешнюю память — она видит что уже сделано
- Цитаты и теги превращают "угадай диагноз" в "найди соответствие между A и B" — это паттерн-матчинг, а не генерация из воздуха
Рычаги управления:
- Количество ролей — можно добавить четвёртую роль "критик аналитика" для проверки выводов
- Детализация профиля — чем точнее описан респондент (возраст, опыт, стиль речи), тем реалистичнее ответы
- Формат tracking'а — вместо галочек можно использовать JSON
{"завершено": [1,2,3], "осталось": [4,5]} - Теги для анализа — добавь
<приоритет>высокий/средний/низкийприоритет>для сортировки проблем
Адаптация для одного чата
🔧 Техника: Multi-agent в одном промпте через явную очерёдность
Вместо отдельных API-вызовов, опиши workflow внутри одного промпта:
Симулируй диалог терапевт-клиент по опроснику тревожности.
КЛИЕНТ (профиль):
- Генерализованное тревожное расстройство
- Симптомы: постоянное беспокойство, нарушения сна, мышечное напряжение
- Не знает что с ним, обеспокоен состоянием
ТЕРАПЕВТ (задача):
- Задать 5 ключевых вопросов из опросника GAD-7
- Перефразировать каждый вопрос естественно
- После каждого ответа: пометить "✓ Вопрос {N} завершён"
ДИАГНОСТ (задача после всех 5 вопросов):
- Извлечь симптомы из ответов
- Сопоставить с критериями GAD
- Выдать:
Симптом: <цитата>"..."цитата>
Критерий: [какой критерий GAD]
Вывод: <диагноз>названиедиагноз>
Начни с первого вопроса терапевта.
Эффект: модель проведёт весь цикл в одном ответе — диалог + анализ. Ты получишь прозрачную цепочку: вопрос → ответ → симптом → критерий → диагноз.
Оригинал из исследования
Контекст: Исследователи использовали три отдельных промпта для Therapist, Client и Diagnostician агентов. Вот упрощённая версия промпта для Diagnostician:
Based on the questionnaire responses, provide a comprehensive mental health assessment.
Questionnaire responses: {responses}
Clinical observations: {observations}
DIAGNOSTIC CONSIDERATIONS:
Consider multiple possible diagnoses; avoid assumptions; mark as provisional if needed.
Return assessment with exactly four parts:
1. Compassionate summary paragraph
2. Diagnosis: heading followed directly by the impression
3. Reasoning: heading followed by rationale
4. Recommended Next Steps/Treatment Options: heading followed by numbered recommendations
Wrap medical terms in <med> tags, symptoms in <sym> tags, and patient quotes in <quote> tags.
Do not include meta-commentary.
Полный оригинал всех трёх промптов — см. Table 5 в Appendix A.2 статьи.
Ограничения
⚠️ Требует кода для полной реализации: RAG-поиск по DSM-5 нужен для точной диагностики — в чате без внешнего инструмента можно опираться только на знания модели о критериях.
⚠️ Синтетические данные, не реальные пациенты: система тестировалась на симулированных профилях. Реальные терапевтические беседы сложнее — клиенты не всегда говорят прямо, уклоняются от вопросов, дают противоречивые ответы. Модель в роли клиента слишком "послушная".
⚠️ Один вызов = одна итерация: система не адаптируется в реальном времени. Если терапевт пропустил важный вопрос, система не вернётся к нему автоматически.
⚠️ Evaluation bias: качество диалогов оценивалось другой LLM (не людьми). Модель может быть снисходительна к ошибкам, которые заметил бы терапевт.
Как исследовали
Команда сгенерировала 8000 синтетических бесед — по 2000 на каждую из четырёх моделей (Llama-4, Mistral-Saba, Qwen-QWQ, GPT-4.1-Nano). Для каждой беседы создавали профиль клиента с конкретным расстройством (10 категорий: тревога, депрессия, ПТСР, шизофрения и др.), добавляли демографию и коморбидности. Затем запускали workflow: терапевт задаёт 23 вопроса DSM-5 → клиент отвечает согласно профилю → диагност выдаёт диагноз.
Что измеряли:
- Качество диалога — coherence через BERTScore (насколько логично следуют реплики), читаемость через Flesch-Kincaid
- Точность диагностики — сравнивали предсказанное расстройство с ground truth профилем (precision, recall, F1)
- Explainability — подсчитывали теги
<sym>,<quote>,<med>в обосновании диагноста, проверяли ссылки на критерии DSM-5
Результаты удивили:
- Qwen-QWQ (reasoning-модель) показала лучшую диагностическую точность (70% accuracy, 77% F1), но худшее качество диалога (3.64-4.23 из 5 по рубрикам)
- Llama-4 и Mistral-Saba наоборот — лучший диалог (4.26-4.41 из 5), но слабее в диагностике (52-57% accuracy)
- GPT-4.1-Nano провалился на диалоге (1.89-2.54 из 5) — модель слишком формальна, не держит эмпатичный тон
Инсайт для практики: модели для reasoning (QwQ) лучше для анализа, модели для conversation (Llama, Mistral) — для живого диалога. В реальной системе стоит комбинировать: Llama ведёт беседу, QwQ делает diagnosis.
Что ещё выяснили: все модели путают Adjustment Disorder с Depression (оба дают грусть + усталость), Bipolar с Depression (если не поймать маниакальные эпизоды). Это проблема не только LLM — опросник DSM-5 уровня 1 действительно не различает эти расстройства без дополнительного контекста.
Confusion matrices показали: модели отлично справляются с Anxiety, Panic, PTSD, OCD (F1 > 85%), но проваливаются на Adjustment (F1 < 40% у трёх моделей из четырёх).
Ресурсы
Trustworthy AI Psychotherapy: Multi-Agent LLM Workflow for Counseling and Explainable Mental Disorder Diagnosis
CIKM '25
https://github.com/mithatco/mental_health_multiagent
Авторы: Mithat Can Ozgun, Jiahuan Pei (Vrije Universiteit Amsterdam), Koen Hindriks (Vrije Universiteit Amsterdam), Lucia Donatelli (Vrije Universiteit Amsterdam), Qingzhi Liu (Wageningen University), Junxiao Wang (Guangzhou University)
