Диалоговый менеджмент для AI-бота: проектирование и реализация

Бот отвечает не по сценарию, а по ситуации — и на живых диалогах логика рассыпается: клиент уходит, а оператор не успевает. Мы проектируем и внедряем диалоговый менеджмент под ключ: собираем логику ответов, проверяем её на реальных обращениях и передаём в эксплуатацию с регламентами. Доля автоответов растёт, а передач оператору и отказов становится меньше.
Часто задаваемые вопросы

Почему диалоговый менеджмент рассыпается на живых сценариях

Чаще всего сценарий проходит демонстрацию и разваливается на третьем-четвёртом сообщении живого человека. Причина не в модели, а в том, что состояние разговора нигде не хранится отдельно: следующая реплика выводится из последней фразы, а не из всей истории. Как только человек отвечает не по шаблону — «да, но лучше в среду» — ветка перестаёт совпадать с реальностью.

Отсюда потеря контекста диалога: бот путает ответы, повторно спрашивает уже заполненные поля и откатывается на два шага назад. Пользователь читает это как «меня не слышат» и уходит, а в логах остаётся формально успешный диалог без результата.

Необработанные обращения — вторая точка отказа. Намерение, которого нет в дереве ветвлений, обрывает разговор: бот молчит или повторяет меню. Список таких фраз растёт быстрее сценария, и без отдельного слоя распознавания каждое новое обращение снова упирается в тупик.

Третье — передача оператору. Диалог обрывается на полуслове: сотрудник не получает ни историю реплик, ни заполненные поля, и человек заново объясняет задачу. На выходе — потерянный клиент или ручной перенос данных из чата в учётную систему.

Это не ошибки отдельных реплик, а отсутствие управляющего слоя, который держит состояние, распознаёт намерение и передаёт контекст целиком. Разбираем, как это закрывается.

Эффект в метриках: доля автоответов, передача оператору, отказы

Считаем эффект по сквозной воронке обращения, а не по логам бота: доля автоответов — это обращения, где последнее сообщение принадлежит боту и передачи оператору не было в течение окна ожидания. Метрика подвижна: сдвинули порог уверенности — автоответов меньше, но и ошибочных срабатываний меньше. Поэтому пороги фиксируем вместе с заказчиком до запуска и меняем только по накопленной статистике.

Время ответа бота на пиках не растёт, потому что маршрут по намерениям детерминирован: типовые сценарии закрываются правилами и слотами, а языковая модель подключается только на ветках, где шаблонного ответа нет. Плюс кэш частых формулировок и явная деградация: если внешний сервис не ответил, бот не молчит, а предлагает повтор, альтернативный шаг или передачу оператору.

Классы отказов считаем отдельно. Не распознано намерение — лечится разметкой и уточняющими вопросами в ветке. Намерение понято, но нет данных в системе — чинится интеграцией и внятным сообщением о причине. Сработала политика передачи по риску или эмоции — это не отказ, а плановое срабатывание, его долю держим управляемой. Сбой связи — повторные попытки и деградация без потери контекста диалога.

Итог виден в снижении нагрузки на поддержку: падает не просто число обращений к оператору, а меняется их состав — остаются сложные, спорные и эмоциональные. Политики ветвления описываем декларативно, как правила и сценарии в Rasa, поэтому границу передачи можно переставить без переписывания диалога.

Три режима сборки логики ответов и их ограничения

Режимы различаются тем, где принимается решение о следующей реплике: в описанных правилах, в поиске по базе знаний или в генеративной модели. Ниже — где каждый упирается в потолок и в каком случае его меняют на другой.

Сценарный бот предсказуем: ответ одинаков в любой момент, его легко проверить и объяснить, но с ростом числа тем комбинация веток растёт быстрее списка вопросов, а неописанный путь превращается в тупик. Поиск по базе знаний закрывает длинный хвост формулировок, отвечая по смыслу, но не ведёт многошаговый диалог. Генеративные ответы звучат естественно, однако без опоры на найденный фрагмент домысливают и дают разный результат на один и тот же вопрос.

Режим Когда подходит Где упирается
Сценарный бот Повторяемые операции: заявка, статус, запись — где важна одинаковая формулировка Комбинаций веток больше, чем вопросов; незаданный путь — тупик
Поиск по базе знаний Справка по документам, инструкциям, условиям — длинный хвост формулировок Не ведёт диалог, легко теряет контекст предыдущих реплик
Генеративные ответы Свободная речь, перефразировки, уточнения Без источника домысливает, результат не повторяется от запуска к запуску
Гибридная схема Разные типы запросов: операции, справка и свободный диалог вместе Нужны маршрутизация и журнал запросов, чтобы отлаживать границы режимов

Рабочая конфигурация в большинстве проектов — гибридная: запрос проходит маршрутизацию и уходит в свой режим, критичные операции остаются на сценарии. Так справка не ломает учётную логику, а генерация отвечает только там, где под ней есть проверенный источник.

Этапы внедрения: от аудита сценариев до передачи в эксплуатацию

Диалоговый менеджмент плохо поддаётся «донастройке» на живом боте: правила переходов разъезжаются, а узкое место становится видно только на потоке. Поэтому работаем этапами, и каждый заканчивается артефактом, который можно проверить до следующего шага.

Порядок работ

  1. Аудит сценариев и текущих обращений — выгружаем историю диалогов, считаем долю обрывов на каждом шаге и темы, которые чаще всего уходят оператору. На выходе — карта проблемных переходов.
  2. Разметка намерений — собираем корпус реальных фраз, помечаем интенты, слоты, отказы, вопросы вне сценария и опечатки. Согласованная разметка становится эталоном для проверки.
  3. Проектирование схемы диалога — граф состояний, обязательные уточнения, правила переспроса, эскалация на оператора и запасные ветки. Схему фиксируем до настройки.
  4. Настройка и сборка — правила переходов, формулировки реплик, пороги уверенности, ограничение длины диалога. Всё, что меняется без переписывания кода, выносим в конфигурацию.
  5. Тестирование бота — прогон эталонной разметки, диалоги «вслепую» силами инженеров, проверка отказов и тупиковых веток. Ошибки ловим до боевого запуска.
  6. Проверка на боевом трафике — запуск на часть обращений при параллельной работе оператора. Смотрим долю диалогов, закрытых без человека, и число переспросов.
  7. Ввод в эксплуатацию и передача — схема диалога, регламент правки сценариев, панели мониторинга и обучение вашей команды. Дальше изменения вносите сами.

Комплект поставки: конфигурации, схемы диалогов и регламенты

Работающая модель — не единственное, что остаётся у заказчика. Диалоговый менеджмент живёт дольше первой версии бота: меняются темы обращений, добавляются услуги, уточняются правила эскалации. Поэтому комплект поставки мы собираем так, чтобы ветки диалога правились без разбора чужого кода и без обращения к нам за каждой формулировкой.

  • Схема диалога как граф состояний: ветки, переходы, точки возврата, поведение на нераспознанную реплику — по ней видно, куда встраивать новый сценарий.
  • Набор намерений и сущностей с примерами реплик — он же служит регрессионным набором: после правок прогоняем и видим, не деградировали ли соседние ветки.
  • Политики передачи оператору: условия эскалации — сколько непониманий подряд, ключевые слова, темы вне компетенции — состав передаваемого контекста и правила возврата в бота.
  • Настройки журналирования: сработавшее намерение, уверенность распознавания, факт эскалации, идентификатор сессии; форма выгрузки для разбора.
  • Документация по боту: карта интеграций, поведение при недоступности внешних систем, точки отказа и действия при каждом из них.
  • Регламент правок: кто меняет ветки, какие проверки обязательны перед выкладкой, как откатывается версия и ведётся история изменений.
  • Инструкция для операторов и чек-лист приёмки — чтобы эксплуатация не держалась на одном человеке.

Кейс: меньше передач оператору и стабильные ответы на пиках

Что было

Бот собирался под один сценарий и разбирал реплику по ключевым словам и регуляркам — на перефразировку «а если я хочу вернуть» он отвечал не той веткой. Контекст жил внутри одного шага: слоты, названные в начале разговора, к третьей реплике терялись, и бот заново спрашивал номер заказа. Итог — 41% диалогов заканчивались передачей человеку, ожидание оператора в пик доходило до семи минут, а поток обращений в поддержку рос быстрее, чем число диалогов.

Что изменили

Ядро диалогового менеджмента собрали на Rasa и перевели на явную модель: интенты с порогом уверенности, слоты с обязательностью и источником заполнения, состояния сценария, хранящиеся отдельно от текста реплики. Ветвление описано декларативно, поэтому новая тема добавляется настройкой, а не патчем кода. Правило эскалации стало частью сценария: три нераспознанные реплики подряд, прямой запрос на человека или критичный интент — и диалог уходит с историей и заполненными слотами, оператор не переспрашивает заново.

Что стало

Доля самостоятельных ответов выросла до 79%, ожидание в пик сократилось до 40 секунд, число передач оператору уменьшилось вдвое при выросшем трафике. Каждый шаг пишется в лог вместе с интентом и уверенностью, а набор реальных обращений стал регрессионным тестом: перед выкаткой видно, какие сценарии просели и где порог уверенности срабатывает слишком поздно.

Чем диалоговый менеджмент отличается от сценария бота

Сценарий — это дерево переходов: состояние бота равно номеру шага, а реплика пользователя лишь выбирает следующую ветку. Пока человек идёт по ожидаемому пути, всё предсказуемо. Но если он меняет тему, задаёт встречный вопрос или возвращается на два шага назад, дерево ломается — бот повторяет меню или уводит в тупик.

Диалоговый менеджмент вместо номера шага держит модель состояния разговора. В ней отдельно живут распознанные намерения, заполненные поля, стек незакрытых тем и признак, что пользователя не поняли. Реплика не переключает бота на ветку, а обновляет эту модель — поэтому смена темы и возврат к отложенному вопросу внутри одной сессии не требуют новых веток в схеме.

Управление контекстом — это набор правил, а не память модели. Мы задаём, сколько реплик хранить, какие значения считать подтверждёнными, когда задать уточнение и когда молча принять ответ. Отдельная политика отвечает за эскалацию: явная просьба позвать человека, два непонимания подряд, негатив или выход за пределы темы — диалог уходит оператору вместе с историей и уже собранными данными.

Сценарий при этом не выбрасывается. Ветки, где ошибка недопустима — оплата, идентификация, подтверждение заявки — остаются жёстко детерминированными, а диалоговый слой работает вокруг них. Такой гибрид даёт свободу в разговоре, не теряя контроля на критичных шагах, в любом канале — от виджета на сайте до Telegram.

Технические сомнения: контекст, доступы, откат изменений

Глубина контекста — параметр конфигурации, а не свойство модели. Мы держим последние реплики целиком, а более ранние сворачиваем в сводку, которая обновляется после каждого блока ходов: бот помнит суть обращения и договорённости, но не тащит в каждый запрос всю переписку — время ответа остаётся предсказуемым.

Доступы выдаём точечно: сценарий получает только те операции внутренних систем, которые ему действительно нужны, с ограничением по статусу обращения и роли оператора, всё остальное запрашивает человек. Обновления выкладываем ревизиями, поэтому вчерашняя рабочая версия остаётся под рукой.

Насколько глубоко бот помнит диалог?

Окно контекста настраивается: сколько последних реплик передаётся дословно и после какого порога история сворачивается в сводку. Сводка хранится отдельно от журнала переписки, поэтому долгий разговор не раздувает запрос и не роняет скорость ответа. Если клиент возвращается через неделю, поднимаем его карточку по идентификатору, а не всю прошлую переписку.

Как бот получает доступ к внутренним системам?

Через отдельный сервисный слой с ограниченным набором операций: прочитать статус заявки, добавить комментарий, создать обращение. Учётные данные лежат в хранилище секретов и боту недоступны, а каждый вызов фиксируется в журнале с идентификатором диалога. Доступ отзывается в любой момент, без остановки бота.

Что делать, если новая версия сценария сработает хуже?

Сценарии версионируются как код: каждая ревизия — отдельный артефакт, инструкции модели меняются независимо от логики. Выпускаем сначала на малую долю трафика и сверяем метрики с предыдущей версией. Если доля диалогов, где понадобился оператор, растёт — переключаемся на прошлую ревизию, это занимает минуты и не требует пересборки.

Как обрабатываются персональные данные?

В журналах маскируем номера, адреса и реквизиты, сырые записи живут ограниченный срок и затем удаляются. Для доработки сценариев используем обезличенные выборки. Если по требованиям заказчика данные не должны покидать его контур — разворачиваем обработку внутри, доступ к журналам выдаём по ролям.

Обсудим задачу и вернёмся с оценкой и планом работ

Чтобы разбор задачи занял один проход, а не серию уточняющих писем, полезно сразу прислать вводные — в том виде, в каком они уже есть. Идеально оформленные документы не нужны, хватит рабочих материалов.

  • Сценарии: что бот закрывает сам, а где обязан передать диалог оператору.
  • Реальные обращения: 30–50 диалогов из текущего канала поддержки в исходном виде — по ним видны живые формулировки, а не придуманные.
  • Системы-источники: CRM, база знаний, система расчётов, запись — что доступно программно, а что придётся отдавать выгрузкой.
  • Правила эскалации: в какой момент и к кому уходит диалог, что оператор видит в карточке.
  • Каналы и ограничения: мессенджеры, чат на сайте, голос; требования к скорости ответа и достоверности данных.
  • Критерии успеха: доля диалогов, закрытых без человека, число уточняющих вопросов на диалог, доля ошибок в ответах.

Из этого собираем оценку проекта и план работ: этапы, состав работ по каждому, зависимости от вашей стороны и точки, где показываем промежуточный результат. Диалоговый менеджмент проектируем до написания кода — схема переходов и правила ветвления согласуются заранее, поэтому дорогие переделки на поздних этапах не возникают.

Опишите задачу — вернёмся с оценкой и планом работ.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142