инженерные заметки
Хаос как первичная форма человеческого диалога
Почему команды считают хаотичный диалог ошибкой пользователя, а на деле хаос — норма живого разговора, и проектировать диалоговую систему нужно под него, а не «обучать» человека.
Коротко для руководителя. Когда диалоговый бот не справляется с живым разговором, команда почти всегда винит пользователя: «он спрашивает не по порядку», «перескакивает», «сам не знает, чего хочет». Это удобное объяснение и дорогая ошибка. Хаос — не сбой пользователя, а нормальная форма человеческого диалога: люди вспоминают, ассоциируют, тревожатся, передумывают, отвлекаются. Система, которая ждёт линейного разговора, проигрывает на большинстве реальных клиентов. Проектировать надо под хаос, а не пытаться переучить человека — переучить не получится.
Понаблюдайте, как люди разговаривают с живым менеджером. Они начинают с одного, вспоминают второе, возвращаются к первому, вставляют тревожный вопрос не по теме, потом передумывают. Менеджер с этим справляется и не считает разговор «неправильным». А диалоговый бот на том же входе ломается — и команда делает вывод, что сломался пользователь.
Хаос — это не ошибка пользователя. Это и есть человеческий диалог.
Гипотеза: нелинейность диалога — норма, а не отклонение
Большинство диалоговых систем спроектировано в неявном допущении: правильный разговор линеен. Пользователь формулирует запрос, отвечает на уточнения по одному, идёт от начала к концу без петель. Всё, что в это не укладывается, система трактует как шум или ошибку ввода.
Наша гипотеза противоположна: линейный диалог — это редкое исключение, а норма — хаос. И хаос здесь не ругательство, а точное описание того, как устроена человеческая речь. Человек вспоминает посреди фразы. Ассоциирует одно с другим и уходит в сторону. Тревожится и задаёт вопрос не по теме, потому что тревога важнее темы. Меняет мнение, услышав ответ. Отвлекается и возвращается через пять реплик к тому, что казалось закрытым.
Это не баги пользователя — это свойства живого диалога. Линейная схема не описывает реальность, она описывает удобный для разработчика идеал, которого почти никогда нет.
Проблема: команды лечат хаос как дефект пользователя
Когда бот спотыкается на нелинейном диалоге, типовая реакция — переложить вину на человека и попытаться загнать его в линейную форму. Каждый такой ход выглядит разумно и каждый бьёт по бизнесу.
«Опишите вопрос одной фразой». Просьба, которую живой человек выполнить не может, потому что его вопрос не существует в виде одной готовой фразы — он складывается по ходу разговора. В ответ человек либо пишет неполно и получает ответ не на то, либо уходит.
Жёсткие меню и кнопки. Попытка заменить хаотичную речь выбором из списка. Работает для совсем простых задач и разваливается, как только вопрос человека не помещается ни в один пункт. Тогда он жмёт «другое» и снова сваливается в живую речь, к которой бот не готов.
«Давайте по порядку». Бот пытается вернуть пользователя на линейный рельс: сначала ответьте на это, потом на то. Человек, у которого в голове тревога или новая мысль, этот порядок игнорирует — и разговор окончательно расходится.
Общий корень всех трёх ходов один: команда считает хаос ошибкой, которую надо исправить в пользователе. Но пользователя нельзя «обновить». Хаос останется, потому что это и есть человеческий диалог, — а каждый «вы спросили неправильно» это потерянный клиент. Это та же подмена, что в попытке держать бота на жёстком сценарии, которую мы разбирали в заметке про скрытый хардкод: дефект архитектуры выдают за дефект входных данных.
Почему обычные подходы не работают
Допустим, команда соглашается, что хаос неизбежен, но пытается справиться с ним косметически, не трогая фундамент. Эти попытки тоже не держат.
Больше распознаваемых формулировок. Расширить список фраз, которые бот понимает. Но проблема не в наборе фраз, а в структуре диалога: даже идеально распознанная реплика бесполезна, если бот не умеет удерживать несколько подвисших тем и возвращаться к ним. Понять фразу — не то же самое, что не потерять нить.
Длинная память без управления. Просто скормить модели всю историю диалога в надежде, что она разберётся. На длинном хаотичном разговоре это даёт обратный эффект: контекст распухает, важное тонет в шуме, и модель начинает терять цель — то, что мы разбираем в заметке про энтропию контекста. Память без структуры — это не помощь, а ещё один источник хаоса.
Сценарий с обработкой исключений. Заложить основной линейный путь и десяток ответвлений на «нестандартные» случаи. Но в живом диалоге нестандартное — это норма, и исключений оказывается больше, чем основного пути. Дерево из исключений становится неуправляемым и всё равно не покрывает реальность.
Корень во всех случаях один: все эти подходы остаются попыткой свести хаос к линейности — где-то на входе, где-то в памяти, где-то в дереве сценариев. Хаос не сводится. Его нужно сделать первичной моделью, а не исключением.
Инженерная модель: проектировать под хаос, а не против него
Если хаос — норма, то и архитектура должна принимать нелинейный диалог как штатный режим, а не как сбой. Это означает несколько конкретных проектных решений.
Несколько открытых тем одновременно. Система не требует закрыть один вопрос перед следующим. Она удерживает набор активных тем, помнит, какие подвисли, и спокойно возвращается к ним, когда человек к ним возвращается. Скачок с темы на тему — нормальное событие, а не выход за сценарий. Это прямое продолжение мысли из заметки про то, что интентов не существует: у человека несколько подвижных намерений, и их надо держать все.
Реакция на событие вместо следования плану. Здесь работает событийная модель: смена темы, возврат к старому, новая тревога, передуманное решение — это события, на которые агент реагирует, а не отклонения от заранее известного плана. Линейный сценарий предполагает, что путь известен; событийная архитектура этого не предполагает и потому не ломается на петлях и скачках.
Управляемая память, а не свалка. Чтобы удержать длинный хаотичный диалог, недостаточно хранить всю историю — нужно отделять активное от завершённого, держать в фокусе текущие цели и не давать контексту распухать в шум. Это инженерная работа с состоянием диалога, а не «передадим модели всё и понадеемся».
Устойчивость к шуму как метрика. Качество такой системы измеряется не тем, как она отвечает на чистый линейный запрос, а тем, теряет ли она цель после двадцати минут хаоса: смены тем, противоречий, отвлечений, возвратов. Хороший агент — тот, кто проводит человека к результату сквозь хаос, а не тот, кто требует, чтобы хаоса не было.
Эта архитектура дороже сценарного дерева и требует другой команды. Но она единственная работает на реальных людях — тех самых, которых линейный бот считает «неправильными».
Практический вывод для бизнеса
Как услышать проблему. Если ваша команда описывает пользователей словами «они спрашивают не по порядку», «перескакивают», «сами не знают, чего хотят» — это не диагноз пользователю, это диагноз вашей архитектуре. Хаос был и будет; вопрос в том, спроектирована ли система под него.
Что заказывать. Для любого диалогового продукта, который должен вести живого клиента к решению — продажа, подбор, сложная поддержка, — закладывайте архитектуру, принимающую нелинейный диалог как норму: несколько открытых тем, событийную реакцию, управляемую память. Это дороже сценарного бота на старте и дешевле в сумме, потому что не теряет клиентов на каждом нестандартном разговоре.
Чего не делать. Не стройте продукт вокруг идеи «научим пользователя задавать вопросы правильно» — не научите. Не оценивайте бота по гладкой демонстрации на линейном сценарии: на живых людях так не бывает. И не считайте «непонятные» обращения мусором — это и есть ваши настоящие клиенты, и именно на них система должна работать. Как мерить готовность к этому честно — в заметке про тестирование ИИ-агентов и в RED-driven development.
Понять, готова ли ваша система к живому диалогу, — .
Открытые вопросы
Сколько хаоса вообще способна удержать текущая архитектура, прежде чем сама потеряет нить. У любой системы есть предел: после какого-то числа открытых тем и поворотов даже хорошо спроектированный агент начинает путаться. Где этот предел и как его честно измерить — открытый вопрос, упирающийся в проблемы мультиагентных систем.
Как отличить «продуктивный хаос» от настоящего тупика. Иногда нелинейность ведёт к решению (человек думает вслух), иногда — это сигнал, что нужно вмешательство живого оператора. Где граница и как её распознать в моменте — инженерно нетривиально и пока решается скорее эвристиками, чем строгой моделью.
И где предел самого подхода: есть задачи, где хаос лучше не «принимать», а мягко структурировать, не превращая это в «говорите правильно». Баланс между «принять хаос» и «помочь человеку собрать мысль» — тонкая проектная развилка, и универсального ответа на неё пока нет.
Если ваша команда объясняет провалы бота тем, что «пользователи спрашивают неправильно», — стоит посмотреть на архитектуру, а не на пользователей. — разберём, выдержит ли ваша система живой, нелинейный разговор.