«Теперь мы проверяем код в 10 раз быстрее»

Как в «Альфа Банк Беларусь» первыми в мире создали нейросеть-ревьюера.

«Теперь мы проверяем код в 10 раз быстрее»

Материал создан при поддержке «Альфа Банк Беларусь»

С появлением первых LLM — больших языковых моделей вроде ChatGPT — всё больше разговоров о том, что ИИ отнимет работу у миллионов специалистов. Но точно не в ближайшее время: «первый ИИ-программист» Devin AI, например, успешно решает поставленную задачу только в 13% случаев. Большую часть времени настоящие программисты правят его ошибки.

В «Альфа Банк Беларусь» поступили иначе: нейросети поручили не писать код, а проверять его за разработчиком. Решение под названием ALT-man Reviewer экономит время инженеров, проверяя код в 10 раз быстрее человека.

«Теперь мы проверяем код в 10 раз быстрее»

Готовых решений не нашлось — сделали собственное

Большинство полезных решений начинаются с понятной мотивации: человек хочет улучшить то, что ему не нравится или кажется неудобным. Так было и у нас: летом 2023 года Алексей Рамашка предложил идею автоматизировать ревью кода нейросетями, поскольку оно отнимало до четверти всего рабочего времени. Это показалось нам куда более разумной инвестицией ресурсов, чем попытка создать ещё один ChatGPT или Devin AI. Тем более что ничего похожего на рынке на тот момент мы не нашли.

Взять за основу LLM тех самых OpenAI или Microsoft нельзя: из-за требований безопасности мы не можем отправлять наш код сторонним сервисам. А без этого они не смогут его проанализировать. Так что мы воспользовались моделями с открытым исходным кодом — Llama, Mistral и их производными.

На создание сервиса под названием ALT-man Reviewer ушло менее полугода — его презентовали уже на декабрьском ИT-митапе «Альфа Банка» в 2023 году.

Что такое ALT-man Reviewer

ALT-man Reviewer — комплексное решение. Внутри него:

  • линтеры — отвечают за проверку кода на соответствие принятым в компании стандартам (чистота, лаконичность, оптимизация);
  • SAST-анализаторы — проверяют код на уязвимости по части информационной безопасности;
  • LLM — собирает, обрабатывает отчёты от всех компонентов системы, отвечающих за проверку кода, и создаёт приоритизированный список задач для исправлений. Предлагает варианты, как решить возникшие проблемы, а ещё — разъясняет, к каким последствиям может привести ошибка.

Поначалу мы думали использовать только ИИ. Но увидели, что если просто «скармливать» код Llama и Mistral, качественные исправления получаются только в 13% случаев (привет, DevinAI). Вместо того чтобы бесконечно долго дообучать модель, мы решили сперва прогонять код через линтеры и SAST-анализаторы — и только потом делиться результатом с LLM.

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

В среднем ALT-man в десять раз быстрее, чем человек. Так, на проверку и заведение детализированных задач на исправление для пяти пулл-реквестов (в каждом десять файлов кода) опытный тимлид тратит 2 часа, а наше решение справляется за 10–15 минут. Качество проверки при этом очень высокое. По нашим наблюдениям, ALT-man не пропускает ошибок.

У нас даже есть показательный пример: Алексей Рамашка оставил ALT-man Reviewer вместо себя на весь рабочий день, не перепроверяя рекомендации. Никто из разработчиков не заметил разницы: список рекомендаций был не просто верным, но и выдавался в удобном для чтения виде, что не было похоже на привычные генерации от ИИ.

Сейчас продолжаем экспериментировать с ALT-man Reviewer: собираем отзывы, сравниваем усилия и временные затраты разработчика и модели. Большинство людей при вычитке кода неизбежно теряют внимание и пропускают нюансы. Модель же смотрит на код целиком и обнаруживает все недочёты.

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

Автоматизировать полностью всю проверку вряд ли получится. Да и не нужно, ведь на ревью возлагается ещё и функция информирования — для коллективного владения кодом. Инструмент должен гибко настраиваться под потребности каждой конкретной команды.

Мы тестировали ALT-man Reviewer с разработчиками мидл-плюс и сеньорами. Качество кода в команде в целом высокое, поэтому задача ALT-man Reviewer — подсветить разработчику изъяны, которые тот мог допустить, например, из-за усталости.

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

Что дальше

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

К сентябрю 2024 года такие планы:

Перераспределить баланс в ревью кода. Цель: 80% проверки кода возложить на нейросеть. 20% займут те самые нетривиальные и сложные кейсы.

Повысить Velocity — объём ценности для клиента, который команда успевает создать за спринт, — на 10%. Результата хотим достичь с помощью доработки ALT-man.

Улучшить качество кода на 20%. Увидим это через анализатор технического долга (накопленных в коде проблем) у команд, которые использовали ALT-man. Посмотрим, сократится текущий техдолг или нет.

Доработать ALT-man Reviewer для архитекторов и аналитиков. Мы применяем концепцию Everything as Code, поэтому результаты их работы тоже представлены в виде кода. Но для ArchiMate и PlantUML нет таких же готовых линтеров и статических анализаторов, как для Kotlin, Swift, TypeScript, Java, C#, Python, на которых пишут наши разработчики, тестировщики и DevOps-инженеры. Сейчас мы как раз заняты разработкой таких линтеров, анализаторов в соответствии с нашими внутренними стандартами, чтобы потом вооружить ими ALT-man'а. Уже в этом году ожидаем получить эффект от оптимизации ревью архитектурных и аналитических артефактов — представлений потоков данных, сетевых представлений, диаграмм последовательности и состояния.

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

Распространить инструмент. Это самый длительный и амбициозный план. После пилотного внедрения планируем обкатывать решение в нашей группе компаний. Затем — коммерциализировать и как SaaS, и как on-premises-продукт.

А ядро системы с заложенными концепциями планируем выложить в открытый доступ. Открытый код помогает развивать индустрию, и для нас это важно — приносить пользу сообществу open-source-разработчиков, чьими инструментами мы и сами ежедневно пользуемся.

«ALT-man Reviewer — не единственный наш инструмент на основе GenAI: сейчас также разрабатываем решения для генерации тестовой документации и автотестов, чтобы сделать работу белорусского «Альфа Банка» ещё эффективнее. Дальше продолжим работу над инструментами непосредственной генерации кода: для разработки, проектирования и DevOps-задач. Наша глобальная цель на ближайшие два года — повысить эффективность процессов разработки более чем на 30%. Верим, что у нас это получится».

Андрей Хлызов

Директор по информационным технологиям

Реклама, ЗАО «Альфа-Банк» (Республика Беларусь), 0+

2626
55 комментариев

Поначалу мы думали использовать только ИИ. Но увидели, что если просто «скармливать» код Llama и Mistral, качественные исправления получаются только в 13% случаев (привет, DevinAI). Вместо того чтобы бесконечно долго дообучать модель, мы решили сперва прогонять код через линтеры и SAST-анализаторы — и только потом делиться результатом с LLM.

Как обычно в общем. Взяли LLM, на реальной задаче она оказалась бесполезна. Поэтому взяли старые проверенные решения, и пропускаем их отчёты через LLM. Теперь вместо скучного линтера получился ИИ помощник, модно-молодежно. Ждём историю успеха о том как языковая модель зажевала какой-то важный выхлоп из линтера и её пришлось убрать, и вернуться к скучным не-ИИ отчётам.

В среднем ALT-man в десять раз быстрее, чем человек. Так, на проверку и заведение детализированных задач на исправление для пяти пулл-реквестов (в каждом десять файлов кода) опытный тимлид тратит 2 часа, а наше решение справляется за 10–15 минут.

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

22

Здравствуйте. Хорошие замечания, сейчас постараюсь ответить развернуто

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

Логика системы построена так, что никто и ничего не "зажует". Все ошибки и дефекты не остаются незамеченными. К тому же ни один линтер не проверит корректность реализации принятых архитектурных подходов.

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

Проверка корректности реализации бизнес-логики не всегда является частью код-ревью. Для этого существует такая штука как E2E автотесты. Но не суть. В любом случае, проверку реализации бизнес-логики мы не игнорируем. Основная техническая сложность, которую мы практически решили - это репрезентация того, что у нас содержит СПТ (логика, макеты, api) в формат, который будет удобен для дальнейшего процессинга LLM-кой. Как только мы интегрируемся с нашими системами хранения СПТ, модуль анализа реализации логики будет включен в состав нашего ревьювера.

4

"Алексей Рамашка оставил ALT-man Reviewer вместо себя на весь рабочий день, не перепроверяя рекомендации. Никто из разработчиков не заметил разницы" - Похоже у кого-то скоро будет новая работа :)

20

скоро будет новая работа- вместо того чтобы проверять код работающий на компанию, он будет проверять код, который проверяет код работающий на компанию

6

Конечно! И Алексей, и остальные лиды очень рады заниматься "новой" интересной работой вместо рутинного просмотра и комментирования типовых пулл-реквестов ))

3

Так вот почему Альфа-Банк превращается из самого удобного банка в жалкое подобие сбера начала нулевых.

Внимание, анекдот:

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

Как выяснилось позже, за день до пуша, друг продавал на авито шнягу и покупатель решил перевести бабки другу на Альфу. На его же номер, по СБП. Бабки ушли со счёта покупателя и... пропали.

Дальше опущу звонки в саппорт и посещение офисов банков и перейду к прекрасному. По какой-то причине бабки, отправленные на номер моего друга захотели упасть на мой счёт. Но внутри Альфы сработали какие-то алгоритмы и бабки отправились обратно в банк отправителя. И отправитель их получил через несколько рабочих дней.

Что сделал Альфа-Банк? Да ничего! Промычал что-то в ответ, что "мы разбираемся" и бла-бла-бла. Теперь когда получаю бабки на Альфу по СБП сперва ссусь, что они не дойдут. А потом понимаю, что они скорее всего попытаются упасть на счёт к моему другу. А значит, я их верну так или иначе. И жить становится чуть легче))

Проверяйте дальше код через нейросеть. Она отлично справляется. Например на моих проектах постоянно падает в рекурсию, находит то, чего нет или просил выпилить то, чего нет)

6

Константин, спасибо, конечно, за анекдот, но он немного не про тот Альфа Банк )) В статье речь об Альфа Банке Беларусь, что несколько раз указано по тексту (даже ссылка на сайт приведена). Это не значит, конечно, что у нас нет ошибок в работе и в софте, но всё же мы действительно уделяем большое внимание качеству и инженерной культуре – и с точки зрения автоматизации тестирования, и с точки зрения Quality Gates в целом. ALT-man Reviewer – лишь ещё один шаг на этом пути.

4