Как мы запустили чат-бот за два месяца
Всем привет! Мы команда искусственного интеллекта ДОМ.РФ, занимаемся автоматизацией процессов в нашем банке с применением машинного обучения и нейронных сетей. В основном это optical character recognition (OCR), однако в августе этого года нам поставили задачу запустить чат-бот в авторизованной зоне - в мобильном приложении. Задача бота - оказывать поддержку клиентам и высвобождать ресурс операторов.
Контекст
У нас уже был работающий кнопочный чат-бот, но в неавторизованной зоне – на сайте. Делала его другая команда, и мы не имели никакого понимания, как все там устроено. Чат-бот, к сожалению, испытывал определенные трудности из-за легаси-компонент, которые приводили к проблемам сразу с несколькими метриками: автоматизацией, отказоустойчивостью и временем ответа.
Две последние метрики были улучшены за счет новой платформы, за что хотим сказать огромное спасибо нашим архитекторам и разработчикам. Мы же в данном рассказе сконцентрируемся исключительно на наполнении и бизнесовых функциях чат-бота.
Начало пути к успеху
После того, как нашей команде отдали реализовывать чат-бот в мобильном приложении, было принято решение выделить на это дело следующих людей: проджекта, ML-инженера и нашего нового CPO. И всё.
Больше ресурсов на бизнесовую часть физически у команды не было, однако начались активные поиски этих самых ресурсов на рынке труда, а если быть точным - продакта.
Из входных данных мы получили:
- Решающее дерево старого чат-бота для неавторизованной зоны;
- Доступ к голосовому боту и его модели классификации с обучающей выборкой.
Чат-бот должен охватывать все розничные продукты компании: ипотеку, карты, кредиты и все то, что доступно для клиента в мобильном приложении для физических лиц.
Фронт работ был следующий:
- Разработать решающее дерево чат-бота, чтобы клиент имел возможность получить свой ответ, нажимая на кнопки;
- Обучить NLU модель классификации, чтобы клиент имел возможность написать свой вопрос в чат и сразу получить ответ от чат-бота;
- Написать тексты, которые будут покрывать тот или иной запрос клиента по продуктам.
Путь к успеху
Наша работа, как было упомянуто выше, разделилась на три больших блока.
Решающее дерево
Задача разработки решающего дерева включает в себя две большие подзадачи:
1. Проектирование решающего дерева
2. Внесение его в платформу чат-бота
Чтобы не повторить результат предыдущего чат-бота, наша команда применила продуктовый подход к проектированию решающего дерева. Важный аспект: в данном процессе мы рассуждали с позиции клиента и его потребностей. В этом нелегком деле нам очень пригодилась аналитика из голосового канала и старого бота, с помощью которой мы смогли хотя бы примерно понять потребности клиента. Как итог, решающее дерево было переделано практически полностью.
Процесс выглядел следующим образом: CPO (а потом продакт) полностью перерабатывал часть дерева, которая отвечает за один продукт. После чего шел к бизнесу и согласовывал дерево, объясняя, почему же оно лучше, чем старое.
Хотим сказать сразу: если вы запускаете чат-бота сразу на несколько больших продуктов, то взаимодействие с бизнесом - это то, над чем придется усердно поработать как в организации, так и при аргументации. Для этого вам понадобятся: проджект, который будет организовывать встречи и пушить всех сделать свои задачки; продакт, который терпеливо, аргументированно и одновременно доступно для людей, которые не в контексте чат-ботов, объяснит, почему нужно сделать так, а не иначе.
После согласования дерева ML-разработчик вносил его на платформу, что является монотонным и трудоемки процессом.
Обучение NLU модели классификации
С обучением модели все было гораздо проще, нежели чем с какой-либо еще другой задачей на данном пути, потому что это зависело только от нас и не требовало никакого кросс-функционального взаимодействия.
Так как пайплайн для обучения был выстроен на платформе, задача сводилась к двум подзадачам:
- Написать обучающие примеры на каждый сценарий, чтобы модель имела возможность правильно распознать вопрос пользователя;
- Поработать над параметрами модели, чтобы в конкретной ситуации она была наиболее эффективной.
Так как мы все-таки команда искусственного интеллекта, обучающие примеры мы не писали сами. Мы решили, что жечь ресурс кого-либо в загруженной ситуации неэффективно. Поэтому мы привлекли другую модель, чтобы обучить нашу.
Все знают, что ChatGPT – это очень сильный инструмент, с помощью которого можно решить практически любую задачу, если правильно написать промпт (запрос).
Делимся лайфхаком, как промпт выглядел у нас:
На что наш уважаемый ChatGPT ответил следующее:
После этого мы писали название сценария, и ChatGPT нам отвечал.
Генерация фраз помощью ChatGPT
После этого можно как уточнить свой запрос, так и попросить сгенерировать еще фраз. Но изначальный промпт обеспечит вам фундамент и удобное взаимодействие для дальнейших улучшений. Мы, например, дополнительно просили нашего друга генерировать очень маленькие фразы, так как в чате пользователь зачастую пишет немного слов.
Правильное написание промптов – целая наука, у которой даже есть название – prompt engineering. Информации по тому, как правильно составить промпт, очень много, но если вы хотите, чтобы в ближайшем будущем мы также рассказали про эту тему и поделились своими лайфхаками – обязательно напишите комментарий.
Мы тоже не сразу пришли к промпту, который будет устраивать нас в конкретной ситуации. Сначала мы попросили других коллег из нашей команды сгенерировать фразы на пяти языках, а затем перевести их, но затем от данной идеи мы отказались, так как не всегда перевод был корректным и некоторые фразы получались уж слишком длинными для текстового канала.
Что же касается модели, ее параметрами и гиперпараметрами занимался наш ML-инженер. Пока модель еще сырая, но мы уже активно ведем работы по улучшению как обучающей выборки, так и самой архитектуры.
Тексты
Мы подошли к вишенке на торте – текстам. Мы решили, что при каждом нажатии на кнопку необходимо выводить текст, это потенциально позволит клиенту увидеть искомую информацию как можно раньше. Так как мы изначально по собственному рабочему опыту продакта и CPO знали, что зачастую клиент в попытке найти информацию совершает максимум три перехода между кнопками, и если они ни к чему не привели, он либо уходит, либо вызывает оператора. Сейчас уже мы наблюдаем данное поведение в режиме реального времени. Так что ловите еще один лайфхак – чем менее глубокое у вас дерево, тем лучше.
Тексты, а если быть точным – их смысловое наполнение, также необходимо было согласовывать с бизнесом. Так как мы находимся не в контексте конкретно продукта, то, например, условия по дебетовой карте мы просто не могли писать сами.
Процесс был построен следующим образом:
- бизнес присылал тексты на их усмотрение с наполнением, которое было необходимо исходя из структуры дерева;
- мы (если быть точным, то наша бедная CPO, которая стала редактором на пару недель), исправляла тексты в соответствии с параллельно разработанным Tone of Voice.
Стейкхолдеров у нас было очень много, а коллег из бизнеса было еще больше - у каждого свой формат написания, и тексты до исправления выглядели бы так, словно мы находимся в разных продуктах, а не внутри единого чат-бота.
Ресурса редактора у нас не было, поэтому CPO направила все свои усилия на релиз чат-бота. Выражаем за это безмерное уважение и даем еще один лайфхак:
Тут не обошлось без еще одного применения нейронки. Сформулировав Tone of Voice (ToV) специально для чат-ботов и получив тексты от бизнеса, мы пошли в YandexGPT и попросили модель переписать нам тексты в соответствии с нашим ToV. Иначе переписать 250+ текстов мы бы просто физически не успели.
Еще лайфхак: напишите модели правила, по которым вы хотите отредактировать тексты (включая постановку знаков препинания, эмодзи), предоставьте ей тексты, и она неплохо с этим справится. Проверено.
Таким образом, мы прогнали тексты, немного подправили результат, загрузили на платформу в структуру уже внесенного дерева, и все было готово к запуску.
Успех
В результате ровно за два месяца мы:
- построили решающее дерево чат-бота, которое состоит из 279 сценариев и охватывает шесть подразделений розничного бизнеса банка, а также общие справочные материалы;
- обучили модель классификации и предоставили возможность клиенту написать свой вопрос в свободной форме;
- переписали тексты под разработанный нами же ToV для чат-ботов, чтобы чат-бот и тексты выглядели единым законченным продуктом.
Ингредиенты успеха:
- Технический проджект, который способен решить любой вопрос с работой платформы, на которой строился чат-бот, и вовремя запушить всех коллег из бизнеса;
- ML-инженер, который обучит модель и будет терпеливо вносить все сценарии;
- Продакт, который спроектирует все ветки решающего дерева с учетом поведения клиента;
- CPO, который всегда поможет советом и делом, а также сделает любую работу, на которую просто не остается никакого ресурса, но которую нужно сделать (брать CPO на роль "давайте я сделаю, иначе мы не успеем" – не лайфхак, а то, как делать не нужно, но все же);
- Большое желание сделать что-то крутое и вовремя.
За месяц после релиза мы уже успели расширить наше решающее дерево. Теперь оно включает около 300 сценариев, а к концу года будет включать еще больше. Также сейчас команда активно работает над интеграционными сценариями, первый из которых скорее всего появится до нового года.
Каких показателей удалось достичь? На сколько процентов снизилась нагрузка на операторов?