26 февраля 2024 г.

Василий Крикунов

Российская сфера разработки ПО уже готова к масштабному внедрению ИИ, включая его генеративные «подвиды», в повседневную практику.

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

ИИ в разработке ПО

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

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

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

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

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

ИИ в коде: наш проект

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

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

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

Мы сформулировали подход к проекту и выработали методику внедрения, которая включала элементы геймификации, рейтинговую систему и поощрение пользователей, которые предлагают новые сценарии использования ИИ. В ходе проекта мы выделили четыре архетипа участников.

  1. «Пионеры» — сотрудники, которые ищут нестандартное применение инструментария, вырабатывают новые сценарии использования.
  2. «Мэтры промптинга» — находят общий язык с ИИ и умеют эффективно составлять инструкции для него.
  3. «ИИнноваторы» — способны предлагать интересные идеи для развития инструментов GenAI, конвертируемые в новую функциональность.
  4. «Беззаботные» — не выступают с собственными инициативами и ожидают подробную инструкцию с примерами и обоснованием использования. Готовы включиться в процесс использования генеративного ИИ, когда окажутся «в меньшинстве».

Для каких задач разработки лучше всего применять ИИ

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

Например, для любого из таких инструментов обязательными элементами оказались чат, возможность продолжения кода «на лету» (code suggestion), индексация имеющейся кодовой базы (она необходима для понимания моделью особенностей конкретного проекта), подгрузка внешних источников, таких как документация и др.

В процессе разработки мы выделили полтора десятка различных задач. Оказалось, что использование генеративного ИИ эффективно почти для половины из них: Text2SQL, Bash generation, Code translation, Random data generation, Regexp generation, CSS from comments, Code documenting, а также Code sketching.

Практический результат

Инструментами искусственного интеллекта можно «закрыть» только часть той работы, которую сегодня выполняют программисты. Дело в том, что как правило программист тратит в течение рабочего дня на кодинг порядка 4-5 часов. Остальное время уходит на вспомогательную работу: уточнение требований, поиск решений, консультирование коллег, организационные задачи.

Таким образом, вполне реальны оценки аналитических компаний, которые пишут о приросте производительности создания ПО с использованием GenAI в 10-15%. Наша собственная оценка — 13% — опирается на анализ самих возможностей GenAI и расчеты, связанные с реальным распределением рабочего времени всех, кто участвует в разработке софта.

Хорошо заметен прирост производительности благодаря использованию ИИ-инструментов при решении специфических задач. Например, связанных с рефакторингом уже написанных фрагментов кода. В обычной практике они превращаются в еще один трек в списке задач разработчика и требуют значительного времени. Ревизия готового кода при помощи ИИ позволяет увеличить производительности труда на 34%.

Оргвыводы

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

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

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

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

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

Источник: Василий Крикунов, эксперт в области ИИ и продвинутой аналитики компании Axenix