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

Меня зовут Денис, я около 15 лет работаю в индустрии SEO и IT, начинал работу в технической поддержке внутренних продуктов Kokoc Group, затем перешел в разработку и последние 2 года занимаю должность Python-разработчика. Я изучил, как работает с нейронками IT в целом и в моём отделе. И удивился, что в компании проникновение AI больше, чем в индустрии. У коллег даже есть своё ИИ-коммьюнити Kokoc ДрAIв (они разработали ИИ-помощника, бота digital-стратега). Хотя мы, к сожалению, как показало исследование, используем далеко не все возможности искусственного интеллекта. Но, давайте обо всём по порядку…

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

Основные направления для использования ИИ

Генерация кода

Нейронные сети, обученные на данных по работе с кодом, могут создавать их фрагменты или создавать полноценные функции в соответствии с заданным программистом текстовым описанием. Обучение нейронных сетей на данных по работе с кодом, проходит в несколько этапов. Эти этапы включают сбор данных, предварительную обработку, обучение модели и тестирование.

  1. Сбор данных:

    • Источники данных: Нейронные сети обучаются на данных из различных источников, таких как репозитории кода на GitHub, вопросы и ответы на форумах вроде StackOverflow, а также на других открытых ресурсах, связанных с программированием.

    • Типы данных: Включаются примеры кода, комментарии к коду, обсуждения проблем и решений, документация и учебные материалы.

  2. Предварительная обработка данных

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

    • Разметка данных: Код размечается с учетом синтаксиса и семантики. Это включает идентификацию структур кода, таких как функции, классы, переменные и комментарии.

    • Разделение данных: Данные разделяются на обучающую, валидационную и тестовую выборки для последующего обучения и проверки модели.

  3. Обучение модели

    • Архитектура модели: Выбирается архитектура нейронной сети, подходящая для задач обработки естественного языка и программного кода. 

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

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

  4. Тестирование и валидация

    • Оценка производительности: Модель оценивается на тестовой выборке, где измеряется ее точность в предсказании корректных фрагментов кода и исправлений.

    • Исправление ошибок: Модель тестируется на способности обнаруживать и исправлять ошибки в коде. Проверяется, насколько эффективно она может предложить правильные исправления.

    • Итеративное улучшение: На основе результатов тестирования модель дорабатывается и дообучается для повышения ее точности и надежности.

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

Поиск ошибок и исправление синтаксиса

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

Вот более конкретные аспекты этой технологии:

  1. Контекстуальный анализ: Нейронные сети, такие как Codex и Copilot, анализируют весь доступный кодовый контекст, включая предыдущие строки, функции и комментарии. Это позволяет им понимать, как каждая часть кода взаимодействует с остальными частями программы, что особенно важно при поиске ошибок.

  2. Распознавание языка программирования: Нейросети обучены на огромном количестве данных, включающих множество языков программирования, таких как Python, JavaScript, Java, C++, Go и другие. Это позволяет им автоматически распознавать язык программирования и применять соответствующие правила синтаксиса и семантики.

  3. Обнаружение синтаксических ошибок: При анализе кода нейросети могут обнаруживать синтаксические ошибки, такие как неправильное использование скобок, отсутствие точек с запятой или некорректное объявление переменных. Например, если в коде на Python пропущен двоеточие после конструкции if, нейросеть может это заметить и предложить исправление.

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

  5. Точность и ошибки: Хотя нейросети обладают высокой точностью при обнаружении и исправлении ошибок, они не безупречны. В некоторых случаях они могут ошибаться, предлагая некорректные исправления или не замечая более сложные логические ошибки. Поэтому разработчики должны проверять предложенные изменения и использовать их с осторожностью.

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

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

Рефакторинг

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

Использование ИИ в Kokoc Group

В июле 2024 года мы провели опрос среди сотрудников Kokoc Group, чтобы понять, как и насколько активно они используют ИИ-помощников в своей работе.

 87% (!) респондентов указали, что так или иначе пользуются нейронными сетями в своей работе. Частота использования, конечно же, варьируется, но видно, что большинство сотрудников прибегают к их помощи как минимум несколько раз в неделю, а 20% опрошенных используют нейронные сети в своей работе ежедневно.

Основное распределение по типам решаемых задач выглядит следующим образом:

Ниже приведены несколько реальных кейсов, которыми поделились сотрудники группы компаний: 

  • «С помощью анализа большого объема данных выверили модели компетенций на основе ценностей»

  • «Из самого полезного: Генерирование кода для по текстовому описанию, генерирование документации по API для Swagger по коду, подсказки при разборе и оптимизации сложных SQL запросов»

  • «Как-то надо было закинуть кусок кода с версткой на сайт. Заскочил в GPT, написал ТЗ, пару раз подкорректировал и на выходе забрал готовый кусок когда с html и css»

  • «Генерация фото- видеоматериалов»

  • «Помогает создать структуру презентации, на которую уже затем я наслаиваю детали. Прилично экономит время»

  • «Автоматическое составление тесткейсов по описанию задачи, по которым исполнитель может проверить свою работу. Тестировщику это также помогает быстрее увидеть различные сценарии, не генерируя их самостоятельно»

  • «Одно время GPT писал реально уникальные статьи для сеошки. Колоссальная экономия времени и денег»

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

А ведь именно на эту возможность использования AI-помощников хотелось бы обратить особое внимание в контексте программирования. Ниже рассмотрим интеграцию на основе GitHub Copilot, как самого популярного на текущий момент инструмента.

Что такое GitHub Copilot?

Среди огромного разнообразия нейросетей, количество которых только увеличивается с каждым днём, можно выделить несколько технологий, способных качественно обрабатывать и дорабатывать код. Одним из самых популярных и известных AI помощников безусловно является GitHub Copilot. Это современный инструмент, предназначенный для программистов, использующих технологию искусственного интеллекта. Он помогает создавать код быстрее с минимальными усилиями.

Ядром GitHub Copilot является алгоритм OpenAI Codex — новая система искусственного интеллекта. Авторы программного обеспечения подчеркивают, что оно «понимает» контекст гораздо лучше, чем другие продукты этого типа, предлагаемые на рынке. Независимо от того, работает ли разработчик над документом, комментарием или функцией, GitHub Copilot предоставляет контекстно-зависимые предложения на основе собранных данных. Буквально через секунды GitHub может представить пример использования новой функции или объекта.

Программа «узнает» то, как пишет данный программист, и на основе собранной информации предлагает автодополнение тех или иных элементов кода во время работы. Инструмент позволяет создавать код более эффективно и быстро, что делает GitHub Copilot все более популярным.

Серьезным плюсом является то, что GitHub Copilot доступен для установки в качестве  расширения во  многих широко используемых IDE, включая такие продукты, как Visual Studio Code, Neovim и JetBrains. Такая интеграция даёт возможность с удобством пользоваться всеми функциями и преимуществами ИИ непосредственно во время привычного процесса разработки без необходимости отвлекаться на обращение к сторонним ресурсам, отдельным чат-ботам и вебсайтам. 

Установка чаще всего осуществляется с помощью встроенного в IDE плагина, а настройка также не занимает много времени и производится по инструкции в несколько кликов.

Внутри IDE Copilot представлен в виде отдельного пункта в контекстном меню, которое позволяет быстро выполнить “горячие” действия с выбранным фрагментом кода, либо продолжить работу в окне встроенного плагина чат-бота.

Как использование GitHub Copilot может помочь разработчикам?

Использование Copilot предполагает ряд полезных возможностей для облегчения и упрощения работы программиста:

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

  • генерация кода на основе повторяющегося шаблона

  • проверка работоспособности кода

  • проверка на наличие ошибок и варианты их исправления

  • предложения оптимизации и замещающего контента для указанных фрагментов кода

  • объяснение принципов работы кода и его отдельных фрагментов с учётом анализа кодовой базы текущего проекта

  • поиск и вывод необходимой документации

  • автоматическое написание документации к программным кодам

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

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

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

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

Создает ли GitHub Copilot идеальный код? К сожалению, нет. На официальном сайте можно прочитать, что, хотя создатели прилагают все усилия, чтобы инструмент предлагал наилучшее соответствие, нет гарантии, что предложенные решения будут работать на практике. Так, в рамках тестирования на языке Python, программа эффективно справилась с 43% запросов с первого раза и сгенерировала правильный работоспособный код после 10 попыток в 57% случаев. По этой причине очень важно тщательно проверять и тестировать каждое решение, предложенное нейросетью перед эксплуатацией.

Помимо Copilot также существует масса других специализированных ИИ-сервисов, таких как StarCoder, Wolverine, Blackbox AI. Эти инструменты предназначены для поддержки разработчиков в различных аспектах программирования, включая написание кода, автоматическую отладку, анализ и предложения по улучшению кода. Я с ними ознакомился лишь поверхностно, а потому буду признателен, если поделитесь своими впечатлениями и опытом работы в комментариях! 

Заключение

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

Комментарии (30)


  1. atues
    20.08.2024 09:57
    +5

    Мне вот интересно: а как соискатель будет себя чувствовать на собеседовании, если он привык пользоваться услугами ИИ (особенно, если собеседование очное, не удаленка)? Неужели знания, полученные традиционным способом, не вымываются? Ох, не верится. Тут из отпуска приходишь и дня три плаваешь


    1. plusance
      20.08.2024 09:57

      лошадью ходи


    1. diakusin Автор
      20.08.2024 09:57
      +1

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