Автотрон берёт рутину на себя. Как мы с нуля создаём дежурного робота

Александр Деев и Григорий Ожегов рассказывают, как работает дежурный робот Автотрон, в каких случаях он зовёт на помощь человека и что будет, если робот вдруг ошибётся.

В этой статье раскроем основные моменты, связанные с созданием дежурного робота-инженера: какие задачи ему можно поручать, какими метриками мы оцениваем его работу и какие AI-эксперименты проводим, чтобы роботы взяли на себя ещё больше тикетов.

Зачем нужен робот-дежурный?

Робота мы решили создать, чтобы автоматизировать обработку рутинных тикетов. Это сокращает затраты времени и ресурсов, ведь таких однотипных задач очень много.

Сначала важно было определить, какие именно задачи можно доверить этому роботу. Мы сравнили, с какими вопросами лучше справляется человек, а с какими — робот.

Человек умеет:

  • решать комплексные задачи и незаменим, когда нужно свести воедино сразу несколько сложных факторов или разобраться в нестандартной ситуации;
  • выполнять сложный парсинг;
  • обучаться и развиваться самостоятельно — для этого не нужно загружать в него никакие данные, писать дополнительные блоки кода.

Плюсы робота:

  • не устаёт;
  • хорошо работает с рутинными и односложными операциями, где нужно действовать по определённому алгоритму;
  • прозрачен с точки зрения затрат;
  • может параллельно работать с несколькими тикетами без потери фокуса. Человек может терять эффективность, когда параллельно занимается несколькими задачами. Робот создаёт свои отдельные инстансы, каждый инстанс работает с конкретной задачей.

Метрики оценки нагрузки робота

Также необходимо было понять, как оценивать эффективность робота.

Универсальной метрики нет — нужно анализировать всё комплексно. Для этого мы выделили три метрики: количество тикетов, чистое время решения тикета и переключение контекста.

  • Количество тикетов — базовая количественная метрика: процент тикетов, которые решает робот. Мы смотрим, какую долю тикетов робот забирает у дежурного. Здесь на первый план выходят рутинные операции: условные линки, недоступное железо, простые конфигурации.
Полноэкранное изображение
  • Чистое время решения — сколько чистого времени дежурного уходит на выполнение тикета. Часто тикеты решаются в несколько итераций. На скрине видно, что в лидеры выходят тикеты, которые люди заводят через какие-то формы в свободном формате. Но есть и рутина: недоступность, линки и прочие простые вещи. Это короткие операции, но таких тикетов много, поэтому они находятся в топе.
Полноэкранное изображение
  • Переключение контекста — речь о том, когда приходится возвращаться к тикету снова и снова. Если мы получили тикет, сразу выполнили его и закрыли, метрика равна единице. Если нужно поставить тикет на паузу, потом продолжить операцию, метрика растёт. Здесь лидируют тикеты, в которых много административно-организационной работы: например, выписать связанные задания, привлечь связанные группы.
Полноэкранное изображение

Как устроен робот Автотрон

Вся разработка в Яндексе происходит полугодовыми сезонами, затем подводятся итоги, и работа продолжается с новыми вводными. Этот механизм позволяет точнее формулировать задачи и распределять ресурсы. Такой подход со стандартным кодом даёт гибкость, но доставка изменений идёт медленнее, а сил на обёртки (c ретраями и отказоустойчивостью) можно потратить много. Кроме того, нужны разработчики на фултайм.

Можно напрограммировать всё, что угодно, но хватит ли на это времени и ресурсов? Как за счёт оставшихся 20% ресурса достигнуть 80% успеха?

Мы решили пойти нестандартным путём — через лоу-код: программируем с помощью визуальных инструментов, а заказчик может на лету создавать бизнес-логику. От разработки нужна только базовая часть, высокоуровневые кубики с понятными входами и выходами, а пользователь уже сам может набросать то, что ему нужно. В этом случае мы не тратим время на коммуникации и экономим ресурсы. Конечно, что-то затейливое таким путём реализовать сложно, но для простых операций — самое то.

Так у нас появился новый виртуальный сотрудник Автотрон, который стал помогать с рутинными процессами.

Полноэкранное изображение

Как работает Автотрон?

В наших процессах есть три основных кубика:

  • Трекер — система с тикетами
  • Реактор — кран и очередь обработки хуков
  • Нирвана— исполнение графов
Полноэкранное изображение

Как это работает? Яндекс Трекер — это система с тикетами. Когда открывается тикет, Трекер передаёт информацию в очередь, которая может накапливать задачи и выполнять определённые действия. Реактор выступает в роли крана и очереди обработки хуков, он запускает лоу-код-графы с нашего робота. Стандартный механизм — линейный: от Трекера в Реактор. При этом Реактор сразу запускает наш граф в Нирване.

Но у веб-хуков есть одна неприятная особенность: они могут теряться — либо у Трекера что-то случилось, либо у Реактора, либо где-то между ними. Поэтому у нас есть отдельный механизм, который раз в полчаса проверяет, не пропустили ли мы какой-то тикет, и доливает то, что пропущено.

Основные блоки робота

Схема работы Автотрона проста. Робот на вход принимает одну строчку (ключ тикета) и обогащает этот ключ различными данными из Трекера. Единой точки маршрутизации того, что нужно делать дальше, нет. С этими данными мы запускаем все реакции, которые на выходе могут вернуть три состояния:

  • реакция ничего не делала (тикет ей вообще не подходит);
  • всё хорошо;
  • реакция упала (нестандартное поведение, падать она не должна).
Полноэкранное изображение

Каждый этап этого графа состоит из ряда компонентов.

Сначала мы парсим тикет: важно преобразовать строку с ключом тикета в типизированный набор параметров. На скрине они обозначены разноцветными кружками, цвет символизирует тип. Синий — это текст, красный — например, JSON.

Полноэкранное изображение

Каждое извлечение — это поход в Трекер и обработка отдельного поля тикета.

Полноэкранное изображение

Не всегда каждое поле можно обработать тривиально, путем regexp или запроса поля. Нужно навернуть полноценную логику. В этом нам помогает Starlark — прекрасный диалект Python. Его можно встроить в любую Go-систему и использовать с привычным синтаксисом. В базовой версии его вполне хватает, поэтому инженеру не приходится переключать контекст.

Полноэкранное изображение

После получения параметров запускаем реакции.

Полноэкранное изображение

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

Полноэкранное изображение

Затем реакция уведомляет об успехах, чтобы дежурный инженер мог понять, нужно ли ему погружаться в процесс, среагировал ли робот или эта схема ещё не покрыта.

Полноэкранное изображение

Этот подход дал свои плоды. За полтора месяца были написаны базовый скелет и одна реакция. Через два года у нас было уже 14 реакций: разработка к этому рук не приложила — всё полностью было сделано дежурной сменой.

Как выглядит работа Автотрона

В наших внутренних системах работа дежурного робота может отображаться по-разному: всё зависит от задачи, которую он решает.

Можно выделить три основных типа тикетов, с которыми работает Автотрон.

  • Робот консультирует. Например, человек заказал доступ через файрвол, указал в тикете параметры, но доступ не работает. Робот проходит по нескольким системам и всё проверяет.

    В примере на слайде робот говорит, что само правило, которое указывает человек, валидно. Но при этом указанные IP-адреса не мэтчатся с этим правилом. Либо человек в своём тикете что-то не так указал, либо указал не тот порт, промахнулся с группой доступа. Робот просто подсказывает, а затем дежурный инженер делает работу.

Полноэкранное изображение
  • Робот выполняет тикет от и до: получает тикет, решает его и закрывает. Это работает для простых сценариев.

    В примере на слайде речь о ситуации, когда есть проблема с балансировкой и нужно поменять параметр. Робот самостоятельно высчитывает этот параметр и выставляет его, а затем закрывает тикет.

Полноэкранное изображение
  • Многоэтапный тикет. Это тикеты, которые обычно не требуют технических знаний, а создаются для административной работы.

    Например, железка недоступна. Сценарий запускается, робот производит первичную проверку, идёт на соседнее оборудование, смотрит линки в сторону условного коммутатора, видит, что там трафика нет, и принимает решение выписать задание на инженера, который в дата-центре проверит доступность питания. Робот выписывает этот тикет, инженер делает работу и закрывает свой тикет. Робот подхватывает процесс, проверяет, доступно ли теперь оборудование, и закрывает свой тикет.

    В подобных тикетах дежурному инженеру не надо ничего делать, кроме переписки, работы с тикетом и запуска пинга.

    Вот как может выглядеть первичная проверка:

Полноэкранное изображение

Затем идёт решение в связанном тикете:

Полноэкранное изображение

В финале — контрольная проверка робота:

Полноэкранное изображение

Если робот ошибается

На случай ошибки робота предусмотрены механики, которые призывают дежурного инженера, и человек разбирается в ситуации в моменте.

Также есть анализ постфактум: когда робот ошибается, создаётся тикет в отдельной очереди и мы анализируем, почему так произошло. Если речь о логической ошибке (робот что-то сломал, но написал, что всё прошло успешно), то разработчики анализируют произошедшее, чтобы внести корректировки и предотвратить ошибки в будущем.

Но даже если робот что-то снесёт, у нас всегда есть бэкап (если из-за ошибки пострадал только кусочек, мы сможем быстро всё перехватить и исправить).

Результаты: работа Автотрона в цифрах

Насколько эта история успешна? Вспомним метрики оценки эффективности робота: число тикетов, чистое время на решение тикета и переключение контекста.

Рассмотрим средние цифры по результатам в трёх ракурсах.

  • Дополнительные ресурсы

    Здесь мы анализируем число тикетов, которое в среднем закрывает дежурный, его затраты времени и переключение контекста, — и считаем те же самые параметры для робота.

Полноэкранное изображение

Получаем усреднённые значения за полгода: робот решает чуть меньше тикетов, чем трое дежурных. По чистому времени и по переключению контекста это очевидно меньше, потому что дежурный занимается более сложными задачами. Около «двух дежурных» достигается за счёт того, что инженер работает посменно, а робот — 24/7.

Дополнительные ресурсы (AVG, %):

Полноэкранное изображение
  • Усиление смены

    Если взять всё время дежурных и посчитать, сколько в среднем приходится на смену, то получим два человека на смене. Понятно, что есть часы наибольшей нагрузки, а есть праздники, выходные, когда нагрузки меньше.

Полноэкранное изображение

За счёт того, что у нас работает третий дежурный (только робот), мы получаем, что в смене он добавляет 70% по количеству тикетов, около 50% по чистому времени и по переключению контекста.

Усиление смены (AVG, %):

Полноэкранное изображение
  • Снижение нагрузки на дежурного

    В этом ракурсе смотрим, как робот снижает нагрузку на дежурного инженера. Если бы эти тикеты не выполнил робот, их пришлось бы делать человеку.

Полноэкранное изображение

Каждому дежурному пришлось бы решать на 25% больше тикетов. По чистому времени и по переключению контекста — это около 20% на человека.

Уменьшенная нагрузки на дежурного (AVG, %):

Полноэкранное изображение

Что дальше: внедряем AI

Результаты довольно успешные: мы автоматизировали множество рутинных операций. Теперь экспериментируем с использованием AI для автоматизации трёх направлений:

  • Анализ и рекомендация по предыдущим тикетам

    Все тикеты, которые проходят через дежурную смену, анализируются, структурируются, идут в базу. Когда появляется новый тикет, с ним происходит та же операция (некоторая векторизация с последующим поиском).

    Например, у нас есть тикет на вход: мы смотрим похожие тикеты и выгружаем их в LLM-ку. Дальше уже языковая модель должна нам по промпту дать рекомендацию из серии «Я видела в базе максимально похожий тикет, рекомендую выполнить в этой операции такие-то действия».

    На слайде — пример подобной операции.

Полноэкранное изображение
  • Подключение AI для консультаций

    Здесь мы работаем с тикетами, в которых человек задаёт вопрос: ему нужно просто что-то подсказать. Такие тикеты также проходят через Автотрон, формируется отчёт. Эта штука уже использует RAG: берём AI, в робота добавляем инструкции, по которым он проводит анализ. Робот смотрит инструкции, читает тикет и делает выводы.

Полноэкранное изображение
  • Подключение AI для обработки почты

    Мы экспериментируем с AI в обработке нашей почты, используя дополнительные инструменты, чтобы нейронка могла куда-то сходить, что-то там посмотреть и обогатить контекст.

    Например, нам приходит письмо оператора о том, что он будет проводить технические работы. Дежурный должен эту информацию распарсить, выделить основные поля и ввести данные в нашу систему «Инфо», где ведётся учёт и анализируется пересечение. Допустим, вводные меняются. Сначала было письмо о том, что планируются работы. Потом оператор пишет, что работы переносятся на два дня, или, может быть, мы получаем ещё одно письмо о том, что перенос отменяется.

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

    Вот как может выглядеть подобный процесс:

Полноэкранное изображение

Прототип

Робот сделан на наших внутренних инструментах, но, возможно, кому-то будет интересно его попробовать для решения своих задач. Делимся прототипом на n8n.

Автотрон берёт рутину на себя. Как мы с нуля создаём дежурного робота

Читать также

Войдите, чтобы сохранить пост