Привет, Хабр! Меня зовут Денис, и я занимаюсь интеграциями систем ЦОД и учетом оборудования клиентов. Сегодня я хочу рассказать, как мы автоматизировали выдачу пропусков в наши ЦОДы с помощью нейронных сетей. Расскажу немного о самой системе, из чего она состоит и как работает, а также о том, какую выгоду получили наши клиенты.
Для начала немного предыстории, почему для нас было важно решить эту задачку.
Дано:
3 дата-центра в общей сумме на 1000 стойко-мест
Все они практически полностью укомплектованы, работа с запросами клиентов кипит 365 дней в году.
Большое количество разных обращений, из которых примерно 30% - заявки на посещение ЦОД клиентом.
Все обращения обрабатываются дежурным инженером ЦОД в почте, и на каждый запрос уходит 10-15 минут.
Из-за того что изначально вся работа с обращениями клиентов велась в почте, а дежурные инженеры сильно нагружены, происходили случаи «Потеряшек» (прим. «Потеряшки» - это такие письма, содержащие обращение от клиента о работах в ЦОД, которые потерялись/были пропущены и т.д. из-за человеческого фактора). Например, могли теряться заявки на пропуска в ЦОД, что оставляло негативные впечатления. Клиенты ожидали у входа в здание, пока дежурный инженер найдет их заявку и закажет пропуск, который прошлая смена «просмотрела». Мы подумали, а что если автоматизировать этот процесс?
Нейронка нам в помощь
В итоге мы решились разработать нейронную сеть, которая будет делать все сама от обработки обращения до заказа самого пропуска. Тем самым мы хотели исключить человеческий фактор с нашей стороны и увеличить «полезное» время работы наших инженеров (а это, кстати, 10-15% от рабочего времени смены, около 2-2.5 часов в день).
В ходе разработки мы сталкивались с различными трудностями и проблемами, начиная от поиска подрядчика, заканчивая переобучением системы перед ее релизом. Последняя откатила старт продукта еще на несколько месяцев. Но это все оказалось мелочами.
И вот мы начинаем заново обучать систему, заново собирать письма за прошедший год с обращениями на посещение ЦОДа (2,5 – 3 тысячи писем, с которыми нам помогли наши доблестные воины из HelpDesk, воскрешая мертвых путем божественного вмешательства и темной некромантии), как перед нами встает новая задача – ВЛОЖЕНИЯ!
Клиенты начали использовать шаблонные формы в различных форматах (Word, PDF, Exel, картинки), что несомненно отразилось на работе системы, которая на данный момент умеет работать только с текстом.
Честно признаемся, что новую задачку мы еще не решили (пока стараемся довести нейросеть до уровня бога при работе с текстом), но обязуемся не останавливаться на полпути и довести дело до конца!
Хотите узнать из чего состоит система?
Поехали дальше!
Так выглядит регистрация всех обращений, ID - ссылка на форму с данными клиента, почта автора, время, статус и решение по нему (заказан пропуск или нет).
Сама система состоит из следующих компонентов:
Модуль обработки писем
Веб-интерфейс для доступа к данным
Классификатор
Сервисы извлечения данных:
NER-модель для извлечения данных заявки на пропуск
NER-модель для извлечения данных о подписи в письме
NER-модель для морфологической разметки текста
Модуль обработки писем представляет собой приложение на базе фреймворка Django. И есть некоторые особенности его работы:
Модуль обработки писем запускается по расписанию раз в минуту,
Принимает почту с корпоративного почтового сервера,
Обрабатывает содержимое письма с помощью вызова классификатора и сервисов извлечения данных
Формирует заявку на пропуск в виде JSON
Отправляет заявку на пропуск в нашу систему заказа пропусков
Веб-интерфейс для доступа к данным представляет собой Django-приложение предназначенное для:
Управления данным Представителей
Управления данными Организаций
Просмотра Заявок на пропуск
P.S. Организация - компания клиента; Представитель - представитель организации; Автор - человек/рассылка, с адреса которого поступило обращение.
Классификатор представляет собой веб-приложение, основанное на фреймворке Deeppavlov, использующее модель машинного обучения на базе нейросети для классификации писем на являющиеся заявками на пропуск, запущенное на порту локального сетевого интерфейса.
Пример запроса к Классификатору:
curl -d '{"x":["Добрый день! Закажите мне пропуск на 28 января. С уважением, Сергей"]}' -H "Content-Type: application/json" -X POST http://localhost:5002/model
Пример ответа Классификатора:
[["1"]]
где 1 означает, что письмо является заявкой на пропуск, а 0 - что не является.
NER-модели, как и классификатор, являются веб-приложениями, основанными на фреймворке Deeppavlov. С их помощью система понимает кто к нам обратился, есть ли у автора обращения полномочия на заказ пропуска, на какую дату, на кого (включая автомобиль) и куда требуется заказать пропуска.
Процесс оформления заявки
При поступлении обращения в почту, система узнает из письма все данные с помощью NER-моделей и создает объект в админке (Django). Далее система старается найти представителя по email, если же такого пользователя нет, то система берет почтовый домен и ищет организацию по нему.
После того, как мы узнали, кто к нам обращается, куда и на кого нужны пропуска - система создает страничку-форму для заполнения информации о посетителях.
Пример формы:
Затем отправляет заявку на подтверждение уполномоченным лицам из этой организации.
Из минусов можно отметить то, что для этой системы на данный момент требуется отдельная БД с данными о клиентах, т.к. наш “справочник” еще не дошел до эталонной стадии. Но к середине-концу лета мы уже планируем интеграцию нейросети, что существенно упросит ее обслуживание, т.к. сейчас все контакты и полномочия изменяются в ручном режиме.
Система справляется со своей задачей отлично и регистрирует все запросы, но пока не все еще научились с ней работать.
Выгода клиенту
Для клиента, использующего почту как основной вид связи с нашим ЦОД, польза заключается в быстром заказе пропуска без участия ДИ. т.е. на скорость процесса оформления пропуска будет влиять только ваша медь или оптоволокно).
Если хочешь к нам в ЦОД на экскурсию - можешь писать нам на портал, наша нейросеть свяжется с тобой и оформит тебе пропуск!*
*Если ты уже клиент нашего ЦОД
Germanjon
Может быть было бы проще вывести форму на скрытую страницу и собирать структурированные поля? Заодно можно было бы разруливать потенциально конфликтные ситуации сразу при подаче заявки (чтобы народ не шёл массово в одно время, чтобы народ не приходил в дни и часы регламентных работ)
dnsvrchkv Автор
Форма существует для того, чтобы клиент мог внести данные сам. В сборе информации у нас тоже нет необходимости, т.к. мы понимаем, кто может выдавать санкцию на заказ пропуска.
А по поводу ситуаций, мы стараемся их спланировать, т.к. мы не можем ограничить клиентов в возможности доступа к своему оборудованию. О проведении работ, затрагивающих клиента, мы всегда оповещаем, а при необходимости согласовываем время выполнения.