Кнопка — технологичная компания, мы работаем над созданием искусственного интеллекта, чтобы улучшать бухпроцессы в компании. Год назад мы рассказали о том, как роботы захватили бухгалтерию в Кнопке. Сейчас делимся новостями: что изменилось, чему научились роботы и приносят ли они пользу. И подробнее о техмоментах: как настраиваем работу с роботами, почему роботов нужно менять и постоянно совершенствовать.
Сейчас регулярно запускается 64 робота. Нам нужны роботы не только для интеллектуальной работы, но и для повседневных задач. Например, для сбора статистики, для мониторинга информации из 1С для нашего приложения. Роботы помогают выставлять счета и даже убирают мусор за другими роботами.
Роботов нужно контролировать
Роботы несовершенны. Как и их создатели, они спотыкаются, падают и ломаются. Причины могут быть разные: неправильная конфигурация сервисов, ошибки в коде, проблемы аппаратного уровня — сбои оборудования. Важно узнать это как можно раньше, потому что на роботах завязано много бизнес-процессов компании. Мы создали мониторинг роботов, чтобы уследить за всеми.
Следим за тем, когда робот в последний раз запускался. Если знаем, что он должен запускаться раз в час, но уже 3 часа отдыхает, это повод его подстегнуть.
Бывает, робот делает вид, что работает, но на самом деле он завис. Чтобы это поймать, мы смотрим в журнал, который пишет робот о своей работе. Если записи не появляются достаточно долго, то нужно его перезапустить.
Есть роботы, у которых последствия ошибок и падения не сразу заметны. Чтобы вовремя заметить неладное, мы создали метрики, которые ориентируются на результаты работы. Так контролируем самых важных роботов.
Например, важный для нас — робот-проводник. Он следит за тем, чтобы входящие документы правильно учитывались в 1С. Робот делает один обход всех баз 1С за 3-4 часа — пол рабочего дня. Напомним, что мы обслуживаем 1300 предпринимателей. В каждый обход робот в какие-то базы не заходит. Скорее всего, только на следующий день бухгалтер заметит, что робот не заглянул в конкретную базу.
Оценить, поработал ли этот робот в конкретной базе — отдельная серьёзная задача для бухгалтера, у которого помимо проведения документов есть другие задачи по учёту и консультированию клиентов. Поэтому в реальности эту ошибку возможно заметить только через неделю, а то и пару. А вовремя непроведённые документы — неправильно рассчитанный налог.
Поэтому мы настроили робота так, чтобы он записывал, какие базы он обошёл и когда. Мы в этом случае видим, сколько и каких баз робот не обходил, и как давно. В итоге, обращаем внимание бухгалтера туда, где это необходимо, и в нужный момент.
Роботов нужно менять
В мечтах о роботизированном будущем можно надеяться, что блестящий, только сошедший с конвейера робот будет выполнять свою работу вечно, а мы сможем заниматься чем-то более интересным. В реальной жизни это не так. Время идёт и то, что вчера казалось вполне адекватной работой, сегодня уже не устраивает. Качество результата не то, работает слишком медленно или вообще делает то, что в изменившейся ситуации бессмысленно. Роботы стареют, и их нужно модернизировать.
Консолидация роботов
Некоторые роботы занимаются связанными задачами, но действия их не скоординированы, или они долго ждут друг друга. Таких роботов мы разбираем и собираем одного, который занимается всеми связанными задачами.
Роботов, которые работают над задачей вместе с человеком, мы держим всегда на посту в ожидании работы, которую они получают от человека.
Возьмём, например, процесс превращения сканов бумажных документов в документы, учтённые в 1С. Раньше этим занимались совместно несколько роботов:
• робот-раскукожка распаковывает архивы на отдельные файлы, а pdf с несколькими страницами превращает в несколько картинок;
• робот-сортировщик рассматривает картинки, категоризирует и раскладывает их по папкам;
• следом робот-распознаватель делает свою работу.
После их работы подключается бухгалтер-первичник, чтобы проверить и поправить за роботом, если нужно. После человека подключается робот, который сохраняет документы в 1С, а затем робот-проводник, который их проводит. Все эти роботы запускались по собственному расписанию раз в некоторое время и смотрели, есть ли работа. Если есть, выполняли её, а затем снова засыпали.
Роботов довольно много, поэтому из расписания каждого робота складывались временные задержки. Получилось, что от момента, когда мы увидели документ, осознали его таковым, начали с ним работать, до того, как в базе 1С появляется проведённый документ, может пройти полчаса, а то и час. Чтобы сообщить клиенту текущий налог по имеющимся документам, бухгалтер вынужден был долго ждать. А хочется отвечать клиенту в режиме онлайн.
Для нового решения мы разобрали роботов на запчасти и собрали двух новых. Первый превращает архивы и pdf-файлы в документы, которые уже можно отправлять в 1С. Дальше работу проверяет человек, если нужно — что-то правит. Второй робот сразу подхватывает документ после проверки, сохраняет и проводит его в 1С.
Теперь работа настроена в событийной модели: роботы всё время находятся в режиме ожидания и реагируют сразу, как человек закончил свою часть.
Совершенствование робота
После сокращения времени проведения документа в 1С мы столкнулись с другой проблемой. Зафиксировали случаи, когда на нашей стороне документы терялись. Приходилось запрашивать их у клиента повторно, что крайне неприятно. Как раз решаем сейчас эту задачу, в этот раз не только с помощью роботов.
Также мы переобучили нейронные сети для классификации и поворота документов на более нейронные и сетчатые. Это дало прирост точности в 1%. Ещё несколько сот страничек в неделю больше не требуют внимания человека.
Модернизация роботов из-за смены платформы
В прошлый раз мы рассказывали, почему решили перейти с Джава на Дотнет и как это было. Год назад кода на Джава было ещё много. Мы не покладая рук пилили эту золотую гирю. И только в марте смогли совсем выключить серверы, на которых работала Джава. Вместе с ней ушли в мир иной и часть роботов.
Новые роботы
Тэгун
Клиенты пишут нам по разным вопросам. Чтобы эти вопросы находили своего исполнителя, мы их категоризируем тегами. Сначала это делали люди, но мы решили облегчить им труд и написали робота. А назвали его — テ軍 (Тэгун).
Первая версия была очень простая. Работа в нашем приложении устроена в виде переписок с ветками. В одной ветке может быть несколько задач. Робот ставил тег, опираясь на то, какой тег стоял в этой переписке. Очевидно, что в новых ветках, где ещё нет тега, робот ничего не делал. В такой реализации робот обрабатывал 40% работы людей, при этом ошибался в 10% случаев.
Чтобы робот смог определять исполнителя в новых ветках, мы научили его читать. Сначала робот преобразует сообщение на человеческом языке в виде вектора — последовательности чисел. Для этого он анализирует частоты и семантику слов, содержание вложений и даже период отчётности. Потом предсказывает категорию сообщения — мы научили его использовать специальные техники: логистическую регрессию и градиентный бустинг. Последняя версия робота позволила забрать 60% работы людей. Знание — сила! Хоть ошибаться робот стал в 15% случаев, задачи всё равно стали быстрее приходить к исполнителям.
Отправка отчётов
Далеко не всегда требуется интеллект, чтобы выполнять нужную и полезную работу. Программисты и бухгалтеры знают, что до 80% времени может занимать рутина. Например, чтобы отправить отчёт СЗВ-М бухгалтер-зарплатник должен открыть базу 1С, нажать порядка десяти кнопок, в промежутках вводить данные, дождаться, когда 1С скажет «Всё ок» и закрыть базу.
Каждая такая операция занимает 5 минут. Немного. Но чтобы сделать это для всех клиентов Кнопки, которым нужен отчёт, а таких около 600, придётся потратить 6 рабочих дней непрерывного механического труда. Несколько роботов-клонов, которые делают примерно то же самое, справляются с задачей за день. Напомним, что такой отчёт нужно сдавать каждый месяц, а рабочих дней в месяце — 20. Треть рабочего времени одного бухгалтера уходила бы только на непрерывную отправку отчёта.
Синхронизация с 1С
Ещё один важный класс роботов, которые появились за последний год — синхронизаторы. В нашем приложении есть документы и банковские выписки, которые тесно связаны с данными в объектах 1С. Для нас важно, чтобы состояние приложения максимально точно соответствовало состоянию дел в 1С. Мы используем это для поиска дублей, для удобного поиска объектов и чтобы отображать клиентам корректные данные. Используя взаимодействие через базу postgreSQL, мы смогли отслеживать изменения, которые происходят в 1С и быстро отражать их в базе приложения. На текущий момент расхождение данных по времени не превышает 5 минут.
Автоматизация с базами 1С
После прошлой статьи мы получили много вопросов от коллег по технической части процесса. Поэтому сейчас будет блок особенно полезный для разработчиков.
Для автоматизации работы бухгалтера мы плотно взаимодействуем с базами в 1С. Пробуем разные варианты для этого. Чтобы объяснить подробнее, нужно погрузиться в некоторые техмоменты:
Вариант взаимодействия приложений на Windows — через COM.
Исторически — это первый способ, которым удалось наладить взаимодействие. Мы получили надёжную работу на запись в базу 1С, но встретили минусы:
• Соединения устанавливаются долго, иногда зависают или неожиданно рвутся.
• В каждую базу 1С нужно подключаться отдельно, обход всех баз может занимать часы.
Взаимодействие через базу postgreSQL с помощью транслятора.
Эту базу использует 1С Fresh. Этот подход дал нам общую картину состояния баз 1С каждого клиента. Например, есть ли дубли контрагентов или неправильно проведённые документы.
Плюсы:
• Подключение к базе происходит очень быстро.
• Можно работать сразу с целым кластером баз 1С, что увеличивает скорость обработки на порядки.
Минусы:
• Работает только на чтение из базы. Теоретически работу на запись тоже можно сделать, но для этого нужно повторить всю логику 1С — нецелесообразно.
• Разработка более трудоёмка и поддержка процесса сложнее, чем в способе COM.
Взаимодействие через OData — протокол обмена данными.
Тоже помогает взаимодействовать с 1C Fresh.
Плюсы:
• Нет проблем с зависанием или обрывами соединений
Минусы:
• Первая операция происходит заметно дольше, чем последующие, хотя соединение устанавливается быстро.
• Необходимы вложения в инфраструктуру взаимодействия для того, чтобы пользоваться стало так же удобно, как в случае с COM. Нужны дополнительные усилия по администрированию 1С, особенно при обновлении конфигурации.
Взаимодействие через веб-сервисы. Этот подход опробовали относительно недавно.
Плюсы:
• Работает быстро и без задержек.
Минусы:
• Нужна разработка внутри платформы 1С, окружение для нас нестандартное, поэтому пока не хватает компетенций и требуется дополнительная инфраструктура, чтобы полноценно внедрить CI — непрерывную интеграцию.
• Как и в случае COM и OData, задачи можно решать только внутри одной базы 1С.
А польза от роботов есть?
Отказаться от роботов мы уже не можем. Они автоматизируют значительную часть рутины. Да так, что это позволило вырасти в клиентской базе, не увеличивая штат бухгалтеров. Если мы отключим роботов, то где-то мы потеряем во времени ответа часа на 2 сразу, а где-то начнём сильно ошибаться или пропускать ошибки.
Наши бухгалтеры уже во многом ориентируются на метрики, которые показывают результат того или иного робота. Это позволяет репетировать отчётность за месяц до реальной отчётности и планировать в днях, сколько нам нужно времени, чтобы успеть сформировать отчётность и сдать её вовремя. Об этом тоже рассказали в отдельной статье. Это огромный шаг к прозрачности и надёжности процесса бухгалтерии для клиента.
Но одних роботов всё-таки мало, нужен человек. Потому что роботы ломаются, и их нужно чинить. Роботы могут ошибаться, за ними нужно проверять и обучать. Другая сложность — создание эффективного взаимодействия роботов и человека. С одной стороны, нужно создать роботов, удобных для человека, а с другой — суметь приучить людей ими пользоваться.
Благодаря роботам, мы можем делать работу быстрее, меньше ошибаться и заниматься важными вещами. Уверены, что это не предел. Кнопка продолжает развиваться. Думаем, ещё через год нам будет чем поделиться снова :)
—
Подсказал — Василий Чернойван, разработчик в Кнопке.
Рассказала всем — Марина Шиляева, маркетолог в Кнопке
Все статьи мы анонсируем в Телеграме. Ещё там найдёте новости, советы и лайфхаки для предпринимателей. Присоединяйтесь :)
Сейчас регулярно запускается 64 робота. Нам нужны роботы не только для интеллектуальной работы, но и для повседневных задач. Например, для сбора статистики, для мониторинга информации из 1С для нашего приложения. Роботы помогают выставлять счета и даже убирают мусор за другими роботами.
Роботов нужно контролировать
Роботы несовершенны. Как и их создатели, они спотыкаются, падают и ломаются. Причины могут быть разные: неправильная конфигурация сервисов, ошибки в коде, проблемы аппаратного уровня — сбои оборудования. Важно узнать это как можно раньше, потому что на роботах завязано много бизнес-процессов компании. Мы создали мониторинг роботов, чтобы уследить за всеми.
Следим за тем, когда робот в последний раз запускался. Если знаем, что он должен запускаться раз в час, но уже 3 часа отдыхает, это повод его подстегнуть.
Бывает, робот делает вид, что работает, но на самом деле он завис. Чтобы это поймать, мы смотрим в журнал, который пишет робот о своей работе. Если записи не появляются достаточно долго, то нужно его перезапустить.
Есть роботы, у которых последствия ошибок и падения не сразу заметны. Чтобы вовремя заметить неладное, мы создали метрики, которые ориентируются на результаты работы. Так контролируем самых важных роботов.
Например, важный для нас — робот-проводник. Он следит за тем, чтобы входящие документы правильно учитывались в 1С. Робот делает один обход всех баз 1С за 3-4 часа — пол рабочего дня. Напомним, что мы обслуживаем 1300 предпринимателей. В каждый обход робот в какие-то базы не заходит. Скорее всего, только на следующий день бухгалтер заметит, что робот не заглянул в конкретную базу.
Оценить, поработал ли этот робот в конкретной базе — отдельная серьёзная задача для бухгалтера, у которого помимо проведения документов есть другие задачи по учёту и консультированию клиентов. Поэтому в реальности эту ошибку возможно заметить только через неделю, а то и пару. А вовремя непроведённые документы — неправильно рассчитанный налог.
Поэтому мы настроили робота так, чтобы он записывал, какие базы он обошёл и когда. Мы в этом случае видим, сколько и каких баз робот не обходил, и как давно. В итоге, обращаем внимание бухгалтера туда, где это необходимо, и в нужный момент.
Роботов нужно менять
В мечтах о роботизированном будущем можно надеяться, что блестящий, только сошедший с конвейера робот будет выполнять свою работу вечно, а мы сможем заниматься чем-то более интересным. В реальной жизни это не так. Время идёт и то, что вчера казалось вполне адекватной работой, сегодня уже не устраивает. Качество результата не то, работает слишком медленно или вообще делает то, что в изменившейся ситуации бессмысленно. Роботы стареют, и их нужно модернизировать.
Консолидация роботов
Некоторые роботы занимаются связанными задачами, но действия их не скоординированы, или они долго ждут друг друга. Таких роботов мы разбираем и собираем одного, который занимается всеми связанными задачами.
Роботов, которые работают над задачей вместе с человеком, мы держим всегда на посту в ожидании работы, которую они получают от человека.
Возьмём, например, процесс превращения сканов бумажных документов в документы, учтённые в 1С. Раньше этим занимались совместно несколько роботов:
• робот-раскукожка распаковывает архивы на отдельные файлы, а pdf с несколькими страницами превращает в несколько картинок;
• робот-сортировщик рассматривает картинки, категоризирует и раскладывает их по папкам;
• следом робот-распознаватель делает свою работу.
После их работы подключается бухгалтер-первичник, чтобы проверить и поправить за роботом, если нужно. После человека подключается робот, который сохраняет документы в 1С, а затем робот-проводник, который их проводит. Все эти роботы запускались по собственному расписанию раз в некоторое время и смотрели, есть ли работа. Если есть, выполняли её, а затем снова засыпали.
Роботов довольно много, поэтому из расписания каждого робота складывались временные задержки. Получилось, что от момента, когда мы увидели документ, осознали его таковым, начали с ним работать, до того, как в базе 1С появляется проведённый документ, может пройти полчаса, а то и час. Чтобы сообщить клиенту текущий налог по имеющимся документам, бухгалтер вынужден был долго ждать. А хочется отвечать клиенту в режиме онлайн.
Для нового решения мы разобрали роботов на запчасти и собрали двух новых. Первый превращает архивы и pdf-файлы в документы, которые уже можно отправлять в 1С. Дальше работу проверяет человек, если нужно — что-то правит. Второй робот сразу подхватывает документ после проверки, сохраняет и проводит его в 1С.
Теперь работа настроена в событийной модели: роботы всё время находятся в режиме ожидания и реагируют сразу, как человек закончил свою часть.
Совершенствование робота
После сокращения времени проведения документа в 1С мы столкнулись с другой проблемой. Зафиксировали случаи, когда на нашей стороне документы терялись. Приходилось запрашивать их у клиента повторно, что крайне неприятно. Как раз решаем сейчас эту задачу, в этот раз не только с помощью роботов.
Также мы переобучили нейронные сети для классификации и поворота документов на более нейронные и сетчатые. Это дало прирост точности в 1%. Ещё несколько сот страничек в неделю больше не требуют внимания человека.
Модернизация роботов из-за смены платформы
В прошлый раз мы рассказывали, почему решили перейти с Джава на Дотнет и как это было. Год назад кода на Джава было ещё много. Мы не покладая рук пилили эту золотую гирю. И только в марте смогли совсем выключить серверы, на которых работала Джава. Вместе с ней ушли в мир иной и часть роботов.
Новые роботы
Тэгун
Клиенты пишут нам по разным вопросам. Чтобы эти вопросы находили своего исполнителя, мы их категоризируем тегами. Сначала это делали люди, но мы решили облегчить им труд и написали робота. А назвали его — テ軍 (Тэгун).
Первая версия была очень простая. Работа в нашем приложении устроена в виде переписок с ветками. В одной ветке может быть несколько задач. Робот ставил тег, опираясь на то, какой тег стоял в этой переписке. Очевидно, что в новых ветках, где ещё нет тега, робот ничего не делал. В такой реализации робот обрабатывал 40% работы людей, при этом ошибался в 10% случаев.
Чтобы робот смог определять исполнителя в новых ветках, мы научили его читать. Сначала робот преобразует сообщение на человеческом языке в виде вектора — последовательности чисел. Для этого он анализирует частоты и семантику слов, содержание вложений и даже период отчётности. Потом предсказывает категорию сообщения — мы научили его использовать специальные техники: логистическую регрессию и градиентный бустинг. Последняя версия робота позволила забрать 60% работы людей. Знание — сила! Хоть ошибаться робот стал в 15% случаев, задачи всё равно стали быстрее приходить к исполнителям.
Отправка отчётов
Далеко не всегда требуется интеллект, чтобы выполнять нужную и полезную работу. Программисты и бухгалтеры знают, что до 80% времени может занимать рутина. Например, чтобы отправить отчёт СЗВ-М бухгалтер-зарплатник должен открыть базу 1С, нажать порядка десяти кнопок, в промежутках вводить данные, дождаться, когда 1С скажет «Всё ок» и закрыть базу.
Каждая такая операция занимает 5 минут. Немного. Но чтобы сделать это для всех клиентов Кнопки, которым нужен отчёт, а таких около 600, придётся потратить 6 рабочих дней непрерывного механического труда. Несколько роботов-клонов, которые делают примерно то же самое, справляются с задачей за день. Напомним, что такой отчёт нужно сдавать каждый месяц, а рабочих дней в месяце — 20. Треть рабочего времени одного бухгалтера уходила бы только на непрерывную отправку отчёта.
Синхронизация с 1С
Ещё один важный класс роботов, которые появились за последний год — синхронизаторы. В нашем приложении есть документы и банковские выписки, которые тесно связаны с данными в объектах 1С. Для нас важно, чтобы состояние приложения максимально точно соответствовало состоянию дел в 1С. Мы используем это для поиска дублей, для удобного поиска объектов и чтобы отображать клиентам корректные данные. Используя взаимодействие через базу postgreSQL, мы смогли отслеживать изменения, которые происходят в 1С и быстро отражать их в базе приложения. На текущий момент расхождение данных по времени не превышает 5 минут.
Автоматизация с базами 1С
После прошлой статьи мы получили много вопросов от коллег по технической части процесса. Поэтому сейчас будет блок особенно полезный для разработчиков.
Для автоматизации работы бухгалтера мы плотно взаимодействуем с базами в 1С. Пробуем разные варианты для этого. Чтобы объяснить подробнее, нужно погрузиться в некоторые техмоменты:
Вариант взаимодействия приложений на Windows — через COM.
Исторически — это первый способ, которым удалось наладить взаимодействие. Мы получили надёжную работу на запись в базу 1С, но встретили минусы:
• Соединения устанавливаются долго, иногда зависают или неожиданно рвутся.
• В каждую базу 1С нужно подключаться отдельно, обход всех баз может занимать часы.
Взаимодействие через базу postgreSQL с помощью транслятора.
Эту базу использует 1С Fresh. Этот подход дал нам общую картину состояния баз 1С каждого клиента. Например, есть ли дубли контрагентов или неправильно проведённые документы.
Плюсы:
• Подключение к базе происходит очень быстро.
• Можно работать сразу с целым кластером баз 1С, что увеличивает скорость обработки на порядки.
Минусы:
• Работает только на чтение из базы. Теоретически работу на запись тоже можно сделать, но для этого нужно повторить всю логику 1С — нецелесообразно.
• Разработка более трудоёмка и поддержка процесса сложнее, чем в способе COM.
Взаимодействие через OData — протокол обмена данными.
Тоже помогает взаимодействовать с 1C Fresh.
Плюсы:
• Нет проблем с зависанием или обрывами соединений
Минусы:
• Первая операция происходит заметно дольше, чем последующие, хотя соединение устанавливается быстро.
• Необходимы вложения в инфраструктуру взаимодействия для того, чтобы пользоваться стало так же удобно, как в случае с COM. Нужны дополнительные усилия по администрированию 1С, особенно при обновлении конфигурации.
Взаимодействие через веб-сервисы. Этот подход опробовали относительно недавно.
Плюсы:
• Работает быстро и без задержек.
Минусы:
• Нужна разработка внутри платформы 1С, окружение для нас нестандартное, поэтому пока не хватает компетенций и требуется дополнительная инфраструктура, чтобы полноценно внедрить CI — непрерывную интеграцию.
• Как и в случае COM и OData, задачи можно решать только внутри одной базы 1С.
А польза от роботов есть?
Отказаться от роботов мы уже не можем. Они автоматизируют значительную часть рутины. Да так, что это позволило вырасти в клиентской базе, не увеличивая штат бухгалтеров. Если мы отключим роботов, то где-то мы потеряем во времени ответа часа на 2 сразу, а где-то начнём сильно ошибаться или пропускать ошибки.
Наши бухгалтеры уже во многом ориентируются на метрики, которые показывают результат того или иного робота. Это позволяет репетировать отчётность за месяц до реальной отчётности и планировать в днях, сколько нам нужно времени, чтобы успеть сформировать отчётность и сдать её вовремя. Об этом тоже рассказали в отдельной статье. Это огромный шаг к прозрачности и надёжности процесса бухгалтерии для клиента.
Но одних роботов всё-таки мало, нужен человек. Потому что роботы ломаются, и их нужно чинить. Роботы могут ошибаться, за ними нужно проверять и обучать. Другая сложность — создание эффективного взаимодействия роботов и человека. С одной стороны, нужно создать роботов, удобных для человека, а с другой — суметь приучить людей ими пользоваться.
Благодаря роботам, мы можем делать работу быстрее, меньше ошибаться и заниматься важными вещами. Уверены, что это не предел. Кнопка продолжает развиваться. Думаем, ещё через год нам будет чем поделиться снова :)
—
Подсказал — Василий Чернойван, разработчик в Кнопке.
Рассказала всем — Марина Шиляева, маркетолог в Кнопке
Все статьи мы анонсируем в Телеграме. Ещё там найдёте новости, советы и лайфхаки для предпринимателей. Присоединяйтесь :)
Остались вопросы?