Обратная сторона Луны: как мы создали чат-бота с «человеческим лицом»

df17190f30d3295edb46d2f6ecaad89f.png

Меня зовут Александр Терехов, я работаю инженером группы классификации и диагностики (КиД) в самарском филиале «Инфосистемы Джет». Несколько лет назад я помогал девушке с дипломной работой, и мы создали чат-бота с психологическим уклоном — он тестировал типы личности и темпераменты. Тогда я настолько проникся этим опытом, что, когда начал создавать чат-бота для нужд технической поддержки, решил добавить в него немного психологии. Так появилась Луна — чат-бот, который помогает в работе инженерам «Инфосистемы Джет» и реагирует на эмоции.

Мы с коллегами занимаемся техподдержкой крупного банка — обслуживаем АРМ. Для этого мы используем более двух сотен документов: шаблоны и инструкции, которые хранятся в базе знаний Confluence. Но мне всегда хотелось «человеческого присутствия» в поиске ответов на свои вопросы. Поэтому я и двое моих коллег решили создать чат-бота, который хранил бы в себе советы и подсказки и, если человек столкнулся с типовой проблемой, мог бы ему оперативно помочь. А ещё по задумке этот бот должен был отвечать в человеческой манере.

Стандартное приветствие Луны.Стандартное приветствие Луны.

Как появилась Луна

Чат-бот я назвал Луной, и это не случайно. Многочисленные исследования показали, что пользователи больше доверяют персонализированным помощникам. Более того, предпочтение отдаётся женским именам — вот почему нас окружают Siri, Алиса, Cartana и Aleksa.

Имя Луна я выбрал из-за его редкости, а ещё это акроним — Легко Управляемый Нейронный Алгоритм.

Луна — это около 4 тысяч строчек кода, созданных с нуля, на Python с использованием библиотеки Telebot и еще двух дюжин стандартных дополнений, таких как configure, random, datetime, types, keyboa, msubprocess, sys, threading, asyncio, sqlite3 и chedule. Софт интегрирован с базой данных SQLite, где хранятся все данные о пользователях, их рейтинг, блокировки и т. д.

Чтобы чат-бот мог помогать инженерам и быстро выдавать нужные им документы, мы с коллегами скопировали инструкции из большой базы знаний на Confluence, частично переработали их и адаптировали к интерфейсу Телеграма.

Несколько коллег предложили, чтобы чат-бот мог общаться на японском. Английский для технических специалистов — слишком скучно. Поэтому мы добавили в память нашей виртуальной помощнице массив поддержки японского языка. Если ввести в строку бота こんにちは («добрый день» по-японски), то Луна тоже поприветствует вас на японском :)

Конечно, она не предоставляет полноценные инструкции на японском, но выдаст несколько пасхалок, если вы начнете ей писать на нем.

«Диалог» на японском.«Диалог» на японском.

Не бездушная машина

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

Стандартные чат-боты выдают сообщения моментально, и даже пугает, когда они выстреливают десятком ответов за раз. Луна делает паузы в сообщениях, и скорость их отправки зависит от размера: чем оно длиннее, тем больше пауза. Также она показывает, что набирает сообщение, и пользователь видит это. Такие решения не несут смысловой нагрузки, но общение происходит более комфортно. Кто-то подумает, что это существенно увеличивает время ответа, но, по нашим замерам, такая имитация человеческой манеры общения отнимает не более 7 минут в день. Это ничтожно мало, зато создаётся впечатление, что тебе отвечает реальный человек.

Ещё Луна может поддержать лёгкую беседу. Она ответит на приветствие и прощание, на вопросы «Как дела?» и «Чем занимаешься?» и т. д. Построенная на нейронном алгоритме, она анализирует каждое слово в запросе. Более того, она обучаема, и у каждого слова есть переменные, которые определяют степень важности и вес. Анализируя предложения, бот настраивает вес каждого слова, занося его в свою базу. Если слово упоминается многократно, Луна определяет его тип по степени важности и вежливости. Бот учится в процессе общения, поэтому чем чаще ему пишут, тем быстрее идет процесс понимания и настройки весов.

Индекс счастья

Что же приближает Луну к человеку? Это «индекс счастья», который схож с принципом «зеркалирования» у людей. То есть «как ты ко мне, так и я к тебе». «Индекс счастья» можно представить как число от 1 до 100, которое в процентном отношении показывает, насколько чат-бот вами «доволен».

Изначально чат-бот вежлив и лоялен ко всем новым пользователям, что составляет примерно 70% «индекса счастья». Как и в реальной жизни — при знакомстве с новым человеком мы обычно вежливы и тактичны, а дальше тональность общения зависит в том числе и от собеседника.

При каждом запросе инструкции этот индекс немного уменьшается. Представьте, что вас постоянно дергает коллега, задавая миллион вопросов и отвлекая от работы. Так и Луна, если ее заваливать однотипными просьбами, рано или поздно «взвоет». Однако, если мы общаемся с ней вежливо, а не по-потребительски — «Привет, Луна! Спасибо за помощь!» и пр. — «индекс счастья» возрастает. Причём индекс повышается на более высокие значения, чем понижается. Это значит, что одного «спасибо» хватит на 5–6 инструкций.

Пример кода, когда индекс уменьшается.Пример кода, когда индекс уменьшается.Пример кода, когда индекс увеличивается.Пример кода, когда индекс увеличивается.

При этом доброе обращение с чат-ботом возвращается «добром» и инженеру. Допустим, сотруднику понадобилась помощь с установкой принтера. Если его «индекс счастья» составляет около 50%, то Луна отправит ему инструкцию в виде файла и добавит сдержанно: «Вот тебе инструкция, прочитай, там всё написано». Если «индекс» высокий, то Луна не только поделится инструкцией, но и подскажет, что, к примеру, в пунктах 2 и 3 очень важно поставить третью галочку, поскольку без этого принтер не заработает. При очень низком индексе «разговор» будет коротким и сухим: ссылка на Confluence, а дальше разбирайся как-нибудь сам.

Однажды Луна по моей вине превратилась в мизантропа. Когда я только вводил «индексы счастья», ошибся в коде: перепутал переменные и поставил строку index[1] = 0. Луна с радостью распределила это правило на всех инженеров — и на следующий день она «ненавидела» весь мой отдел. А поскольку чем ниже индекс, тем хуже стиль её общения, то… В общем, хорошо, что Луна не обучена нецензурной лексике. И на просьбу сгенерировать пароль она отвечала в стиле: «Занята, найди себе другой рандомайзер», «А что, Confluence открыть мы уже не можем»?

Плохое настроение бывает не только у людей :)

У Луны «плохое настроение».У Луны «плохое настроение».

Планы на будущее

В тестировании Луны участвовало 25 сотрудников техподдержки, и сейчас 50 человек активно пользуются чат-ботом. Коллеги довольны, а если есть какие-то предложения по функционалу — я вношу изменения в её алгоритм.

Сейчас в чат-боте содержатся около 40 самых востребованных инструкций. Основная польза бота — в скорости ответа. Если я буду сам искать необходимый документ в Confluence, это займёт около минуты. А Луна выдаст ответ всего за 10 секунд.

Как это сделано? В Луне существуют отдельные массивы и списки (аналоги SEO-ядра), где содержатся синонимы слов и фразы, которые быстрее выводят пользователя на новую инструкцию. То есть можно не писать боту точное название инструкции, а лишь описать проблему своими словами.

Пример описания проблемы.Пример описания проблемы.

Пока чат-бот — всё еще сырой продукт. В нем реализовано около 40% задуманного функционала. Поэтому впереди ещё большой объём работы. В блоке личности я хочу сделать обязательным общение со стороны бота. Ежедневно Луна будет обновлять свои отдельные переменные (триггеры), и утром, если пользователь попросит ее отправить инструкцию, она сначала поздоровается с ним и попросит того же от человека. Также есть идея, чтобы бот был более лояльным к самым частым своим собеседникам. Например, если сотрудник в течение дня активно общался с Луной, то она пожелает ему хорошего вечера. Таким образом, чат-бот ненавязчиво будет подталкивать человека к диалогу.

Стоит упомянуть, что Луна — не попытка замахнуться на серьёзный ИИ, это лишь симуляция настроения и чувств для более комфортной работы. Луне, как нейронной сети, нужен опыт. В общении с 50 сотрудниками её «обучение» займёт около 15 месяцев. Чем больше людей будут взаимодействовать с ботом, тем этот процесс пойдёт быстрее.

Если вы хотите протестировать Луну — @Luna_jetbot.

© Habrahabr.ru