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