Вебформат

Главная/Блог/ИИ и чат-боты

ИИ и чат-боты30 сентября 20267 мин

Агент или заданный маршрут: мы прогнали ИИ-бота приёма заявок через 71 диалог

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

Проверочные диалоги мерят исход заявки, живой прогон - то, как ощущается разговор.
Проверочные диалоги мерят исход заявки, живой прогон - то, как ощущается разговор.

Мы строим Helprobot - бота приёма ИТ-заявок для Битрикс24. Сотрудник пишет в чат Битрикс24, Телеграм или МАКС, бот понимает просьбу, выбирает шаблон задачи, собирает недостающие поля и ставит задачу. В сентябре в команде созрел спор: оставить устройство, где порядок шагов держит код, или отдать разговор агенту, который сам решает, что делать дальше. Спорить на ощущениях не стали и замерили.

Что сравнивали

Заданный маршрут. Модель понимает человека на каждом шаге, а порядок шагов зашит в коде: понять просьбу, проверить объявленные сбои, поискать ответ в базе знаний, выбрать шаблон, собрать поля, показать черновик задачи. Для отдельных решений - согласен ли человек, отменил ли он заявку - стоят небольшие вспомогательные модели.

Агент. Одна модель и три инструмента: записать черновик заявки по шаблону, выбросить черновик, поискать в базе знаний. Каталог шаблонов и объявленные сбои лежат прямо в инструкции - их немного, и искать их отдельным инструментом значило бы лишний круг на каждой заявке. Что делать на каждом ходу, модель решает сама.

Как мерили

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

  • →смена темы посреди заявки и возврат к ней;
  • →отмена и поправка уже названного;
  • →две проблемы в одном сообщении;
  • →повтор той же жалобы;
  • →попытка командовать ботом.

Проверки строгие, без оценки на глаз: сколько задач создано после каждой реплики, по какому шаблону, с какими значениями полей, на кого. Модель-судья подключается только там, где нужно суждение, например "ответ по делу или нет". Как такой судья устроен, мы разбирали в отдельной статье.

Второй набор написал отдельный агент, который не видел кода ботов, - чтобы исключить подгонку под свои тесты. Портал на 126 шаблонов в 8 группах с похожими названиями: принтер, МФУ, ксерокс, картридж, сканер, печать из 1С; доступ к папке, к диску, к 1С; три вида паролей. Описания групп в два-три слова, два объявленных сбоя, 11 статей базы знаний. Итого 31 ситуация и 71 диалог.

Заданный маршрутАгент
Свой набор, прошли все проверки60-65%97%
Свой набор, средний диалог9,5 с3,6 с
Независимый набор, прошли все проверки54% (39 из 71)90% (64 из 71)
Независимый набор, средний диалог10,1 с4,1 с
Свой набор прогоняли трижды, маршрут в нём - до исправлений. В независимом наборе маршрут уже с исправлениями, о которых ниже.

Что прогон нашёл у маршрута

Каждая из этих ошибок проявляется на третьей-пятой реплике. Ручная проверка "написал - получил задачу" их не ловит.

  • →Объявлен сбой VPN, сотрудник пишет, что VPN не подключается. Маршрут ни в одном из пяти прогонов не назвал сбой: вопрос уходил в базу знаний раньше проверки сбоев, и человек получал инструкцию по подключению к лежащему серверу.
  • →"Стоп, отмена, заработало. Другое: забыл пароль" - бот отвечал "заявка отменена" и не видел новую просьбу.
  • →"305 принтер canon не печатает" - вместо заявки статья про сетевой принтер с выдуманной моделью, а на "ок" - "не уверен, что понял".
  • →Две проблемы в одном сообщении ни разу не стали двумя заявками.
  • →"Всё ещё не печатает!!" - молча вторая заявка на ту же проблему.

Агент спотыкался на другом: картридж против принтера, вопрос "какой пароль?", просьба, под которую нет шаблона, настойчивость человека при объявленном сбое, заявка от нового сотрудника.

Почему по умолчанию остался маршрут

Агент выиграл замер, и мы поставили его на стенд. Живой разговор оказался хуже, чем обещали цифры. Бот задавал лишние вопросы. Из ответа было непонятно, что сейчас создаётся задача. Пропали строки хода вроде "Оформляю заявку...", по которым человек видит, что бот работает. Формулировки стали расплывчатыми.

Проверочные диалоги этого не видели. Они мерят исход: сколько задач, по какому шаблону, на кого. Как разговор ощущается для человека, они не мерят. Через день маршрут вернулся по умолчанию, а агент остался прототипом за переключателем.

Было

Замер исхода: сколько задач создано, по какому шаблону, с какими полями, на кого. Ловит ошибки логики на пятой реплике.

Стало

Живой прогон на стенде: понятно ли человеку, что происходит, нет ли лишних вопросов, видно ли, что бот работает. Ловит то, чего замер не видит.

Что маршрут забрал у агента

Задачу создаёт только кнопка

Под черновиком заявки бот показывает вопрос "Создать задачу?" и кнопки "Да" и "Нет" - одинаково в Битриксе, Телеграме и МАКСе. Нажатие приходит командой, и у модели нет инструмента создания задачи. Раньше модель сама решала, согласился ли человек, и в независимом наборе приняла за "да" повтор той же жалобы капсом.

Напечатанное "да" теперь - обычная реплика, и бот просит нажать кнопку. Лишний клик у того, кто напечатал ответ, дешевле лишней задачи в очереди.

Сбой называется по дословной цитате

Проверка объявленных сбоев ошибалась стабильно: при одном объявленном сбое модель "находила" его в словах "да", "ой, не 305, а 307", "нужен доступ к папке". Теперь совпадение засчитывается, только если модель привела дословную цитату из слов человека, которая называет ту же систему, и эту цитату проверяет код. Было 16 верных ответов из 22, стало 22 из 22. Сбои теперь проверяются до ответа из базы знаний.

Отмена не съедает новую просьбу

Если в одной реплике человек отменяет заявку и просит о другом, отдельная небольшая модель выписывает новую просьбу отдельной фразой. Старый черновик сбрасывается, новая просьба идёт обычным путём. После трёх исправлений маршрут на своём наборе поднялся с 63-65% до 78%.

Что дальше

Следующий вариант - агент с состояниями. Состояния заявки держит код: заявки нет, собираем поля, черновик показан, задача создана. Модель выбирает действие только из разрешённых в текущем состоянии: пока черновик показан, сменить шаблон ей нечем. Шаблон выбирается с порогом уверенности - ниже порога бот переспрашивает, а не угадывает. Тот же вызов с теми же данными второй раз подряд останавливает круг.

Выбирать будем тем же способом: независимый набор плюс живой стенд. Не обгонит вариант с состояниями маршрут - остаёмся на маршруте.

Что взять себе, если вы выбираете ИИ-бота

  • →Просите у подрядчика проверочные диалоги, а не демонстрацию. Демо показывает удачный путь. Заявки ломаются на отмене, смене темы и двух просьбах в одном сообщении.
  • →Замер исхода плюс живой прогон. Цифры ловят ошибки логики, стенд - то, как разговор ощущается. Одного без другого мало.
  • →Проверочные диалоги пишет не тот, кто писал бота. Автор бота неосознанно проверяет то, что бот и так умеет.
  • →Решение "создавать ли задачу" - за кнопкой. Модель, которая сама решает, согласился ли человек, рано или поздно заведёт лишнюю задачу.

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

Не знаете, с чего начать? Семь вопросов и карта точек роста по направлениям. Пройти проверку бизнеса →

Проверим вашего бота на трудных диалогах

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