Кнопка — бэк-офис для предпринимателей. Ведём бухгалтерию, решаем юридические вопросы и забираем рутину.
Эта статья — продолжение этой: Восстание машин: Как роботы захватили бухгалтерию.
Передаю слово автору.
Сколько роботов и зачем они нам
Сейчас регулярно запускается 64 робота. Нам роботы нужны не только для интеллектуальной работы, но и для повседневного обжигания горшков. Например, для сбора статистики, для мониторинга информации из 1С для нашего приложения. Роботы помогают выставлять счета и даже убирают мусор за другими роботами.
Для автоматизации работы бухгалтера мы плотно взаимодействуем с базами в 1С. Пробуем разные варианты для этого. Расскажем подробнее.
Взаимодействие через COM. Исторически — это первый способ, которым удалось наладить взаимодействие. Мы получили надёжную работу на запись в базу 1С, но встретили минусы:
- Соединения устанавливаются долго, иногда зависают или неожиданно рвутся.
- В каждую базу 1С нужно подключаться отдельно, обход всех баз может занимать часы.
Взаимодействие через базу postgreSQL с помощью транслятора. Этот подход дал нам общую картину состояния баз 1С каждого клиента. Например, есть ли дубли контрагентов или неправильно проведённые документы.
Плюсы:
- Подключение к базе происходит очень быстро.
- Можно работать сразу с целым кластером баз 1С, что увеличивает скорость обработки на порядки.
Минусы:
- Работает только на чтение из базы. Теоретически работу на запись тоже можно сделать, но для этого нужно повторить всю логику 1С — нецелесообразно.
- Разработка более трудоёмка и поддержка процесса сложнее, чем в способе COM.
Взаимодействие через OData. Попробовали его недавно.
Плюсы:
- Нет проблем с зависанием или обрывами соединений
Минусы:
- Первая операция происходит заметно дольше, чем последующие, хотя соединение устанавливается быстро.
- Необходимы вложения в инфраструктуру взаимодействия для того, чтобы пользоваться стало так же удобно, как в случае с COM.
- Нужны дополнительные усилия по администрированию 1С, особенно при обновлении конфигурации.
Взаимодействие через веб-сервисы. Этот подход опробовали относительно недавно.
Плюсы:
- Работает быстро и без задержек.
Минусы:
- Нужна разработка внутри платформы 1С, окружение для нас нестандартное, поэтому пока не хватает компетенций и требуется дополнительная инфраструктура, чтобы полноценно внедрить CI.
- Как и в случае COM и OData задачи можно решать только внутри одной базы 1С.
Роботов нужно контролировать
Роботы несовершенны. Как и их создатели, они спотыкаются, падают и ломаются. Причины могут быть самые разные: неправильная конфигурация сервисов, ошибки в коде, проблемы аппаратного уровня — сбои оборудования. Нам важно узнать это как можно раньше. Потому что на роботах завязано много бизнес-процессов компании. Мы создали мониторинг роботов, чтобы уследить за всеми.
Следим за тем, когда робот в последний раз запускался. Если мы знаем, что он должен запускаться раз в час, но уже 3 часа отдыхает, это повод его подстегнуть.
Бывает, робот делает вид, что работает, но на самом деле он завис. Чтобы это поймать, мы смотрим в журнал, который пишет робот о своей работе. Если записи не появляются достаточно долго, то нужно его перезапустить.
Есть роботы, у которых последствия ошибок и падения не сразу заметны. Чтобы вовремя заметить неладное, мы создали метрики, которые ориентируются на результаты работы. Так мы контролируем самых важных роботов.
Например, важный для нас — робот-проводник. Он следит за тем, чтобы входящие документы правильно учитывались в 1С. Робот делает один обход всех баз 1С за 3-4 часа — пол рабочего дня. Напомним, что мы обслуживаем 1300 предпринимателей. В каждый обход робот в какие-то базы не заходит. Скорее всего только на следующий день бухгалтер заметит, что робот не заглянул в конкретную базу.
Оценить поработал этот робот в конкретной базе — отдельная серьёзная задача для бухгалтера, у которого помимо проведения документов есть другие задачи по учёту и консультированию клиентов. Поэтому в реальности эту ошибку возможно заметить только через неделю, а то и пару. А вовремя непроведённые документы — неправильно рассчитанный налог.
Поэтому мы настроили робота так, чтобы он записывал, какие базы он обошёл и когда, а мы в этом случае видим, сколько, каких баз и робот не обходил и как давно. В итоге обращаем внимание бухгалтера туда, где это необходимо и в нужный момент.
Роботов нужно менять
В мечтах о роботизированном будущем можно надеяться, что блестящий, только сошедший с конвейера робот будет выполнять свою работу вечно, а мы сможем заниматься чем-то более интересным. В реальной жизни это не так. Время идёт и то, что вчера казалось вполне адекватной работой, сегодня уже не устраивает. Качество результата не то или работает слишком медленно, или вообще делает то, что в изменившейся ситуации бессмысленно. Роботы стареют, и их нужно модернизировать.
Консолидация роботов
Некоторые роботы занимаются связанными задачам, но действия их не скоординированы или они долго ждут друг друга. Таких роботов мы разбираем и собираем одного, который занимается всеми связанными задачами.
Роботов, которые работают над задачей вместе с человеком, мы держим всегда «на посту» в ожидании работы, которую они получают от человека.
Возьмём, например, процесс превращения сканов бумажных документов в документы, учтённые в 1С. Раньше этим занимались совместно несколько роботов:
- Робот-раскукожка распаковывает архивы на отдельные файлы, а pdf с несколькими страницами превращает в несколько картинок.
- Робот-сортировщик рассматривает картинки, категоризирует и раскладывает их по папкам.
- Следом робот-распознаватель делает свою работу.
После их работы подключается бухгалтер-первичник, чтобы проверить и поправить за роботом, если нужно. После человека подключается робот, который сохраняет документы в 1С, а затем робот-проводник, который их проводит. Все эти роботы были настроены в режиме поллинга. Они запускались по собственному расписанию раз в некоторое время и смотрели, есть ли работа. Если есть, выполняли её, а затем снова засыпали.
Роботов довольно много, поэтому из расписания каждого робота складывались временные задержки. Получилось, что от момента, когда мы увидели документ, осознали его таковым, начали с ним работать до того, как в базе 1С появляется проведённый документ, может пройти полчаса, а то и час. Чтобы сообщить клиенту текущий размер налога по имеющимся документам, бухгалтер вынужден был долго ждать. Тогда как хочется отвечать клиенту в режиме онлайн.
Для нового решения, мы разобрали роботов на запчасти и собрали двух новых. Первый превращает архивы и pdf файлы в документы, которые уже можно отправлять в 1С. Дальше работу проверяет человек, если нужно — что-то правит. Второй робот сразу подхватывает документ после проверки, сохраняет и проводит его в 1С.
Теперь работа настроена в событийной модели: роботы всё время находятся в режиме ожидания и реагируют сразу, как человек закончил свою часть.
Совершенствование робота
После сокращения времени проведения документа в 1С мы столкнулись с другой проблемой. Мы зафиксировали случаи, когда на нашей стороне документы терялись. Приходилось запрашивать их у клиента повторно, что крайне неприятно. Как раз решаем сейчас эту задачу. И похоже снова разберём и соберём новых роботов.
Также мы переобучили нейронные сети для классификации и поворота документов на более нейронные и сетчатые. Это дало прирост точности в 1%. Ещё несколько сот страничек в неделю больше не требуют внимания человека.
Модернизация роботов из-за смены платформы
В прошлый раз мы рассказывали, почему решили перейти с Джава на Дотнет и как это было. Год назад кода на Джава было ещё много. Мы не покладая рук пилили эту золотую гирю. И только в марте смогли совсем выключить сервера, на которых работала Джава. Вместе с ней ушли в мир иной и часть роботов.
Новые роботы
Тэгун
Клиенты пишут нам по разным вопросам. Чтобы эти вопросы находили своего исполнителя, мы их категоризируем тегами. Сначала это делали люди, но мы решили облегчить им труд и написали робота. А назвали его — ?? (Тэгун).
Первая версия была очень простая. Работа в нашем приложении устроена в виде переписок с ветками. В одной ветке может быть несколько задач. Робот категоризировал — ставил тег, опираясь на то, какой тег стоял в этой переписке. Очевидно, что в новых ветках, где ещё нет тега, робот ничего не делал. В такой реализации робот обрабатывал 40% работы людей, при этом ошибался в 10% случаев.
Чтобы робот смог определять исполнителя в новых ветках, мы научили его читать. Для этого использовали логистическую регрессию и градиентный бустинг для предсказания, в сочетании с tf-idf и WordToVec для чтения. Последняя версия робота позволила забрать 60% работы людей. Знание — сила! Хоть ошибаться робот стал в 15% случаев, задачи всё равно стали быстрее приходить к исполнителям.
Отправка отчётов
Далеко не всегда требуется интеллект, чтобы выполнять нужную и полезную работу. Программисты и бухгалтеры знают, что до 80% времени может занимать рутина. Например, чтобы отправить отчёт СЗВ-М бухгалтер-зарплатник должен открыть базу 1С, нажать порядка десяти кнопок, в промежутках вводить данные, дождаться, когда 1С скажет «всё ок» и закрыть базу.
Каждая такая операция занимает 5 минут. Немного. Но чтобы сделать это для всех клиентов кнопки, которым нужен отчёт (таких около 600), придётся потратить 5*600/60/8 = 6 рабочих дней непрерывного механического труда. Несколько роботов-клонов, которые делают примерно то же самое, справляются с задачей за день. Напомним, что такой отчёт нужно сдавать каждый месяц, а рабочих дней в месяце — 20. Треть рабочего времени одного бухгалтера уходила бы только на непрерывную отправку отчёта.
Синхронизация с 1С
Еще один важный класс роботов, появившихся за последний год — синхронизаторы.
В нашем приложении есть документы и банковские выписки, которые тесно связаны с данным в объектах 1С. Для нас важно, чтобы состояние приложения максимально точно соответствовало состоянию дел в 1С. Мы используем это для поиска дублей, для удобного поиска объектов и чтобы отображать клиентам корректные данные. Используя взаимодействие через базу postgreSQL, мы смогли отслеживать изменения, которые происходят в 1С и быстро отражать их в базе приложения. На текущий момент расхождение данных по времени не превышает 5 минут.
Приносят ли роботы пользу
Отказаться от роботов мы уже не можем. Они автоматизируют значительную часть рутины, да так, что нам это позволило вырасти в клиентской базе, не увеличивая пропорционально штат бухгалтеров. Если мы отключим своих роботов, то где-то мы потеряем во времени ответа часа на 2 сразу, а где-то начнём сильно ошибаться или пропускать ошибки.
Наши бухгалтеры уже во многом ориентируются на метрики, которые показывают результат того или иного робота. Это позволяет нам «репетировать отчётность» за месяц до реальной отчётности. Планировать в реальных днях, сколько нам нужно времени, чтобы успеть сформировать отчётность и сдать её вовремя. Это огромный шаг к прозрачности и надёжности процесса бухгалтерии для клиента.
Одних роботов всё-таки мало, нужен человек. Потому что роботы ломаются, и их нужно чинить. Роботы могут ошибаться, за ними нужно проверять и обучать. Другая сложность — создание эффективного взаимодействия роботов и человека. С одной стороны нужно создать роботов, удобных для человека, а с другой — суметь приучить людей ими пользоваться.
Благодарим за статью Максима Ахмадинурова movemind.
Комментарии (5)
lipkij
06.06.2018 12:39Мои два робота-носильщика понесли тело главного робота к входу в святилище.
Робот-наклонятель усадил главного на мраморный трон и сообщил роботу-внутрянке, что тело готово к опорожнению.
Спустя лишь несколько секунд робот-внутрянка включил перильстатику и из дренажного отверстия потекли отходы деятельности главного.
Всё это очень замечательно и позволяет мне не нанимать дополнительных носильщиков и уборщиков.
COM-объекты были спущены в священное жерло трона одними из первых.
Maxstone
07.06.2018 15:52Это какая-то странная тенденция у бухгалтеров (или у кого?) называть автоматизацию «роботизацией». Коллеги, давайте не перемешивать терминологию до состояния когда термины перестают нести какой-то смысл и ценность.
Если у вас одна функция сортировки — это не робот. И даже не бот. Это функция, запускаемая по триггеру. Если вам нравится использовать такую терминологию — ваше право. Вы соберёте свои просмотры, но репутации от этого точно не прибавится.
NoRegrets
Почему вы скрипты, приложения или сервисы (я без понятия что у вас там), называете словом «роботы»?
fany
Мы занимаемся автоматизацией. Всё, что делают не люди, делают роботы, поэтому мы так их называем. Если нравятся «сервисы» — ок, можно даже назвать модным словом «микросервисы». По существу разницы нет.
wlbm_onizuka
Скрипт — это ПО, а робот это уже программно-аппаратный комплекс. И да, слово «робот», сейчас пожалуй значительно более модное, чем слово «сервис».