Как мы запустили чат-бот за два месяца
Всем привет! Мы команда искусственного интеллекта ДОМ.РФ, занимаемся автоматизацией процессов в нашем банке с применением машинного обучения и нейронных сетей. В основном это optical character recognition (OCR), однако в августе этого года нам поставили задачу запустить чат-бот в авторизованной зоне - в мобильном приложении. Задача бота - оказывать поддержку клиентам и высвобождать ресурс операторов.
Контекст
У нас уже был работающий кнопочный чат-бот, но в неавторизованной зоне – на сайте. Делала его другая команда, и мы не имели никакого понимания, как все там устроено. Чат-бот, к сожалению, испытывал определенные трудности из-за легаси-компонент, которые приводили к проблемам сразу с несколькими метриками: автоматизацией, отказоустойчивостью и временем ответа.
Две последние метрики были улучшены за счет новой платформы, за что хотим сказать огромное спасибо нашим архитекторам и разработчикам. Мы же в данном рассказе сконцентрируемся исключительно на наполнении и бизнесовых функциях чат-бота.
Начало пути к успеху
После того, как нашей команде отдали реализовывать чат-бот в мобильном приложении, было принято решение выделить на это дело следующих людей: проджекта, ML-инженера и нашего нового CPO. И всё.
Больше ресурсов на бизнесовую часть физически у команды не было, однако начались активные поиски этих самых ресурсов на рынке труда, а если быть точным - продакта.
Из входных данных мы получили:
- Решающее дерево старого чат-бота для неавторизованной зоны;
- Доступ к голосовому боту и его модели классификации с обучающей выборкой.
Чат-бот должен охватывать все розничные продукты компании: ипотеку, карты, кредиты и все то, что доступно для клиента в мобильном приложении для физических лиц.
Фронт работ был следующий:
- Разработать решающее дерево чат-бота, чтобы клиент имел возможность получить свой ответ, нажимая на кнопки;
- Обучить NLU модель классификации, чтобы клиент имел возможность написать свой вопрос в чат и сразу получить ответ от чат-бота;
- Написать тексты, которые будут покрывать тот или иной запрос клиента по продуктам.
Путь к успеху
Наша работа, как было упомянуто выше, разделилась на три больших блока.
Решающее дерево
Задача разработки решающего дерева включает в себя две большие подзадачи:
1. Проектирование решающего дерева
2. Внесение его в платформу чат-бота
Зачем проектировать новое дерево, если есть старое?
Чтобы не повторить результат предыдущего чат-бота, наша команда применила продуктовый подход к проектированию решающего дерева. Важный аспект: в данном процессе мы рассуждали с позиции клиента и его потребностей. В этом нелегком деле нам очень пригодилась аналитика из голосового канала и старого бота, с помощью которой мы смогли хотя бы примерно понять потребности клиента. Как итог, решающее дерево было переделано практически полностью.
Процесс выглядел следующим образом: CPO (а потом продакт) полностью перерабатывал часть дерева, которая отвечает за один продукт. После чего шел к бизнесу и согласовывал дерево, объясняя, почему же оно лучше, чем старое.
Хотим сказать сразу: если вы запускаете чат-бота сразу на несколько больших продуктов, то взаимодействие с бизнесом - это то, над чем придется усердно поработать как в организации, так и при аргументации. Для этого вам понадобятся: проджект, который будет организовывать встречи и пушить всех сделать свои задачки; продакт, который терпеливо, аргументированно и одновременно доступно для людей, которые не в контексте чат-ботов, объяснит, почему нужно сделать так, а не иначе.
После согласования дерева ML-разработчик вносил его на платформу, что является монотонным и трудоемки процессом.
Обучение NLU модели классификации
С обучением модели все было гораздо проще, нежели чем с какой-либо еще другой задачей на данном пути, потому что это зависело только от нас и не требовало никакого кросс-функционального взаимодействия.
Так как пайплайн для обучения был выстроен на платформе, задача сводилась к двум подзадачам:
- Написать обучающие примеры на каждый сценарий, чтобы модель имела возможность правильно распознать вопрос пользователя;
- Поработать над параметрами модели, чтобы в конкретной ситуации она была наиболее эффективной.
Так как мы все-таки команда искусственного интеллекта, обучающие примеры мы не писали сами. Мы решили, что жечь ресурс кого-либо в загруженной ситуации неэффективно. Поэтому мы привлекли другую модель, чтобы обучить нашу.
Все знают, что ChatGPT – это очень сильный инструмент, с помощью которого можно решить практически любую задачу, если правильно написать промпт (запрос).
Делимся лайфхаком, как промпт выглядел у нас:
Привет! В данный момент я делаю бота, который будет выступать в качестве автоматической поддержки для пользователей продуктов банка. У меня уже есть сценарии, и мне необходимо написать фразы пользователей, на которые будут активироваться разные ответы. Давай я буду писать тебе ключевые слова для фраз, а ты составишь список вопросов, которые может задать пользователь на основании ключевых слов в сценарии. Вопросы должны быть не очень длинными, около 3-5 слов.
На что наш уважаемый 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 сценариев, а к концу года будет включать еще больше. Также сейчас команда активно работает над интеграционными сценариями, первый из которых скорее всего появится до нового года.