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

Мы с коллегами занимаемся техподдержкой крупного банка — обслуживаем АРМ. Для этого мы используем более двух сотен документов: шаблоны и инструкции, которые хранятся в базе знаний 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 месяцев. Чем больше людей будут взаимодействовать с ботом, тем этот процесс пойдёт быстрее.

Комментарии (2)


  1. OverFitter
    08.04.2022 10:52
    +1

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


    1. LashtunEkaterina
      08.04.2022 11:14

      Спасибо за комментарий, мы добавим такую функцию в дальнейшем.