TL;DR
Исследование показало, что LLM в режиме end-to-end плохо справляются с длинными структурированными формами (анкетами, опросниками). Китайские исследователи сравнили два подхода к созданию чат-ботов для медицинского наблюдения: (1) дать LLM всю форму сразу и просить вести диалог, (2) разбить процесс на модули с программным контролем. На простых формах (10 вопросов) оба подхода сработали. Но на сложных (45-53 вопроса с логическими переходами) end-to-end начал сыпаться: пропускал вопросы, задавал повторно, нарушал логику переходов, неточно извлекал данные.
Главная проблема: При работе с длинными формами LLM теряет контроль над структурой диалога. Модель пытается одновременно генерировать вопросы, извлекать ответы, отслеживать логические переходы и помнить что уже спросила — в длинном контексте это приводит к сбоям. Точность извлечения информации падает с ростом длины формы. Частые ошибки: начинает не с первого вопроса, преждевременно завершает диалог, меняет формулировки вопросов, тратит 5-8x больше токенов.
Модульный подход разделяет задачи: один запрос группирует похожие вопросы (семантическая кластеризация), другой генерирует естественные формулировки, третий извлекает структурированные данные из ответов с помощью примеров (RAG), а программный код контролирует переходы между секциями. Это сократило число диалоговых раундов на 47%, потребление токенов — на 80-87%, и стабилизировало точность.
Схема методов
End-to-End подход (контрольная группа):
Один промпт содержит:
→ Всю форму целиком (структура, вопросы, опции, логика переходов)
→ История диалога
→ Инструкции: читай форму, задавай вопросы, извлекай ответы, управляй потоком
→ LLM делает всё сам → выдаёт JSON с результатом
На простых формах: работает
На сложных формах: сыпется (пропуски, повторы, нарушение логики)
Модульный подход (экспериментальная группа):
ШАГ 1: Структурирование формы → JSON с типами вопросов и логикой
ШАГ 2: Семантическая кластеризация → группы похожих вопросов
ШАГ 3: Генерация вопроса → естественная формулировка для группы
ШАГ 4: Извлечение намерения → структурированные данные из ответа (с few-shot)
ШАГ 5: Программный контроль → следующая группа вопросов по правилам
Каждый шаг — отдельный запрос к LLM.
Переходы между шагами контролирует код, не модель.
Почему это работает (и не работает)
Почему end-to-end сыпется:
LLM генерирует текст поочередно, а не "держит в голове" всю структуру формы. Когда промпт содержит 50+ вопросов плюс историю диалога, модель теряет фокус — какие вопросы уже задали, куда переходить по логике, в каком формате извлекать данные. Это как пытаться вести совещание, читать повестку и протоколировать одновременно — что-то обязательно упустишь.
При длинном контексте точность извлечения информации падает — модель начинает копировать полные предложения пациента вместо структурированных данных, не различает опции из формы. Потребление токенов взрывается, потому что на каждом шаге модель обрабатывает весь контекст заново.
Почему модульный подход работает:
Семантическая кластеризация объединяет связанные вопросы ("Курите ли вы?", "Сколько сигарет в день?", "Когда бросили?") в один диалоговый раунд — это зеркалит живое общение, где интервьюер не читает анкету построчно, а группирует темы. Сокращает число раундов почти вдвое.
Разделение ролей позволяет каждому запросу делать одну вещу хорошо: генерация вопросов не смешана с извлечением данных, извлечение не смешано с контролем потока. Короткие промпты → выше точность, меньше токенов.
Few-shot примеры из RAG показывают модели как извлекать структурированные данные из разговорных ответов. База знаний: "вопрос — ответ пациента — правильный JSON". Модель находит похожие диалоги и понимает паттерн.
Программный контроль потока гарантирует, что логические переходы ("если ответ X, задать вопрос Y") выполняются точно. LLM хороши в генерации, но слабы в строгом следовании правилам при длинном контексте — код компенсирует эту слабость.
Применимые принципы для работы в чате
Принцип 1: Семантическая кластеризация
Если у тебя длинная анкета или чек-лист — не заливай всё в один промпт. Попроси LLM сначала сгруппировать похожие пункты.
Пример задачи: У тебя анкета для клиента на 40 вопросов (бриф для дизайна сайта).
Промпт кластеризации:
Вот анкета для клиента [вставить анкету].
Сгруппируй вопросы по смысловым блокам. Объедини те, которые про одну тему
и можно задать вместе в разговоре. Дай названия группам.
Формат вывода:
ГРУППА 1: [Название]
- Вопрос 1
- Вопрос 2
ГРУППА 2: [Название]
...
Результат: LLM разобьёт анкету на 5-7 тематических блоков. Потом работай с каждым блоком отдельно — генерируй вопросы, собирай ответы, извлекай данные. Это эффективнее и точнее, чем пытаться управлять всей анкетой в одном промпте.
Принцип 2: Разделение задач (декомпозиция)
Для сложных структурированных задач не проси LLM делать всё за раз. Разбей на этапы: (1) генерация, (2) извлечение, (3) проверка.
Пример задачи: Собрать обратную связь от команды по 20 критериям, извлечь структурированные оценки.
Вместо: "Вот 20 критериев. Поговори с пользователем, собери ответы, выдай JSON."
Делай:
ЧАТ 1 (Генерация вопросов):
Вот критерии оценки [список]. Преобразуй в разговорные вопросы,
сгруппируй по темам.
ЧАТ 2 (Сбор ответов):
[Копируешь вопросы из Чата 1]
Задавай эти вопросы по группам. Я буду отвечать.
ЧАТ 3 (Извлечение данных):
Вот диалог [копируешь из Чата 2].
Извлеки структурированные оценки по критериям.
Формат: {критерий: оценка/комментарий}
Почему работает: Каждый чат делает одну задачу. Короткий контекст = выше точность. Ты контролируешь переходы между этапами.
Принцип 3: Few-shot для извлечения структурированных данных
Если нужно извлечь точные данные из разговорного ответа — дай примеры как это делать.
Пример задачи: Клиент описал бюджет словами, нужно извлечь число.
Промпт без примеров (слабо):
Извлеки бюджет из ответа клиента: "Ну рублей 200-300 тысяч, не больше"
Промпт с примерами (сильно):
Извлекай бюджет из ответов клиента в формат JSON.
ПРИМЕРЫ:
Ответ: "Да тысяч 100 примерно"
Результат: {"budget_min": 100000, "budget_max": 100000, "currency": "RUB"}
Ответ: "От полмиллиона до 700 где-то"
Результат: {"budget_min": 500000, "budget_max": 700000, "currency": "RUB"}
Ответ: "Ну рублей 200-300 тысяч, не больше"
Результат:
Результат: Модель видит паттерн и точно извлекает {"budget_min": 200000, "budget_max": 300000, "currency": "RUB"}.
Ограничения
⚠️ Требует нескольких чатов: Модульный подход работает через отдельные запросы. Тебе нужно копировать результаты между чатами или использовать API для автоматизации.
⚠️ Не для простых форм: Если у тебя 5-10 вопросов без логических переходов — end-to-end справится. Модульный подход оправдан при 20+ вопросах с вложенной логикой.
⚠️ Логические переходы вручную: В чате тебе придётся самому решать "если ответ X, то перейти к вопросу Y". LLM может подсказать, но контроль на тебе.
Как исследовали
Команда из Чжэцзянского университета (Китай) взяла 32 реальные медицинские формы наблюдения и отобрала три типа: простую (10 вопросов, только выбор), среднюю (45 вопросов) и сложную (53 вопроса с множественным выбором, текстовыми полями и логическими переходами).
Создали трёх виртуальных пациентов с разными стилями общения: чёткий и краткий, чёткий но многословный, расплывчатый и уходит от темы. Каждого "пациента" прогнали через диалог с чат-ботами на базе Qwen-plus, DeepSeek-chat и GPT-4.1 — по 10 раундов на каждую форму.
Контрольная группа: end-to-end подход — один промпт с полной формой, историей диалога и инструкциями. Модель самостоятельно управляет всем процессом.
Экспериментальная группа: модульный подход на базе Qwen-plus — код контролирует поток, LLM выполняет отдельные задачи (кластеризация, генерация, извлечение).
Измеряли: число диалоговых раундов, потребление токенов, точность извлечения данных, типы ошибок (пропуски вопросов, повторы, нарушения логики).
Результаты удивили масштабом проблемы: На простой форме все модели сработали хорошо. Но на средней форме начались пропуски до 29 вопросов (GPT-4.1), повторы, ошибки в логических переходах. На сложной форме — катастрофа: модели начинали не с первого вопроса, преждевременно завершали диалог, изменяли формулировки, не извлекали структурированные данные из текстовых полей. Точность извлечения упала ниже 0.7 при длинных формах.
Модульный подход стабильно держал точность выше 0.9 на всех формах, сократил раунды на 47% и токены на 80-87%. Особенно впечатляет: GPT-4.1 в end-to-end режиме не смог завершить среднюю форму за 80 раундов ни разу — модульный подход справлялся за 23 раунда в среднем.
Инсайт для практики: Длинные структурированные задачи — слепое пятно LLM в режиме end-to-end. Как только форма превышает ~20-30 элементов с логикой — модель начинает деградировать. Разделение на модули не просто оптимизация, а необходимость для надёжности.
Ресурсы
Evaluating the Challenges of LLMs in Real-world Medical Follow-up: A Comparative Study and An Optimized Framework
Код и промпты: https://github.com/LiuJnYn/LLM_follow-up
Авторы: Jinyan Liu, Zikang Chen, Qinchuan Wang, Tan Xie, Heming Zheng, Xudong Lv College of Biomedical Engineering and Instrument Science, Zhejiang University, China
