Как стать автором
Обновить

Нейросети для программистов: уже что-то умеют или еще пока совсем джуны?

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 6.3K

Я Григорий Тумаков, CTO в Моризо Диджитал. Эта статья — про то, как мы в компании решили протестировать нейросети для рабочих задач.

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

Disclaimer: это не полноценный обзор, а скорее эксперимент. Не судите строго 🙂

Мой личный опыт

Начал пользоваться ChatGPT через бесплатных ботов в Telegram. Сначала просто интересно было, а потом появилась реальная задача.

Была необходимость написать на Java функцию, которая будет фильтровать список email адресов по белому списку доменов. Задача не сложная, но из-за того, что на Java я никогда не писал, было непонятно, как подступиться.

Код, который сгенерировала нейронка, помог, но частично. Пришлось его дорабатывать.

ChatGPT-бот сгенерировал всё правильно, даже Java-программист одобрил код. Но в проекте он не заработал, так как использовал какую-то библиотеку, которой не было. В итоге тот же Java-программист помог переписать код без использования библиотек, который потом частично приняли в библиотеку провайдеров для Keycloak.

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

Кислянский Александр, frontend-разработчик, Vue.JS

Пользовался ChatGPT, Midjourney, GigaChat от Сбера, Шедеврум от Яндекса для генерации изображений по текстовому описанию.

Первое знакомство с нейронной сетью у меня произошло задолго до появления ChatGPT и прочих. У Гугла и есть игра Quick, Draw!, которая появилась еще в 2017 году. По задумке это классический "Крокодил", где нужно нарисовать изображение загаданного слова, а нейросети нужно угадать, что было загадано. И если в первые месяцы и даже годы приходилось рисовать шедевры искусства, чтобы ИИ угадал, то со временем нейросеть достаточно быстро училась и угадывала.

Оцените, как угадывает сейчас:

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

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

Для этих целей в браузере есть метод setInterval. Этот метод плюс помощь JavaScript, и можно написать требуемый таймер. Но проблема заключалась в том, что необходимо было выполнить эту задачу вне браузера, внутри отдельного приложения, где за время отвечал свой компонент <Timer>.

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

Обычный режим GPT — для создания текстов, а "GPT-программист" — для кода. Качество ответа нейронной сети, как и при общении с человеком, зависит от максимально точно сформулированного вопроса. Еще одним плюсом чата является то, что сохраняется контекст диалога, то есть можно продолжать задавать уточняющие вопросы, не повторяя предыдущую часть. Так я написал таймер, он в реальном проекте успешно начал свою работу.

Код успешно используется в приложении. И да, GPT-программист сэкономил часы поисков и тестирования.

Midjournry и Шедеврум использую  иногда на выходных для развлечения, генерирую картинки. ChatGPT — по мере возникновения вопросов, на которые поисковик не дает однозначного ответа или требуется получить ответ в несколько этапов в зависимости от предыдущего ответа (что отлично реализуется в формате чата).

Фролов Артём, backend-разработчик, java

Пользовался разными нейронками.

Claude 2 — отличный бесплатный вариант GPT 3.5-4, но часто галлюцинирует, пишет фейковую информацию, особенно когда просишь писать код. Зато когда просишь написать что-то творческое или креативное, то он очень хорош. Еще у него есть встроенная функция читать PDF-файлы и контекстное окно очень большое, что у ChatGPT 3.5 нет, а у ChatGPT 4 появилось не так давно. Я использовал Claude 2, чтобы генерировать анекдоты или текста песен.

Perplexity — бесплатный сервис, это как Google 2.0. Сервис сходит в интернет и соберет информацию, выдаст ссылки. Много не пользовался, но знаю, что люди использовали его, чтобы выбрать, куда отправиться в путешествие. Полезная штука, когда надо собрать любую поверхностную информацию.

Phind — бесплатный, это ChatGPT 3.5 или ChatGPT 4 по платной подписке, которую оптимизировали для разработчиков. Она умеет уточнять детали задачи, чтобы лучше ответить, а также хорошо отвечает на технические вопросы. Это отличная бесплатная альтернатива ChatGPT 3.5 для кодеров. Я использовал в работе, когда работал с тяжелыми математическими формулами преобразования звуковых файлов до нужной громкости и расшифровки аудио пакетов. Справился Phind отлично и даже лучше, чем ChatGPT 4. Для Phind тяжелее написать неправильный промпт, он с большим шансом тебя поймет, а с ChatGPT приходится более правильно мысли формулировать.

Machinet — начал пользоваться недавно, очень мощная штука, конкурент Github Copilot от небольшой команды в мире Java. Это та же ChatGPT 3.5-4, специально оптимизированная под Java, может и тесты для Java писать. Очень хорошо ориентируется в коде и может читать файлы в проекте по запросу и учитывать их при ответе, чего очень не хватает в таких помощниках генераторах кода. 

Например, пишешь: "Напиши такой-то класс, а также учитывай этот конфиг-файл (application.properties)" — и он будет учитывать. Еще можно писать информацию в "Memory", которая также будет учитываться при создании ответа.

ChatGPT 4 — классика. У нее есть возможность загрузить фотки, и она будет считывать информацию с них и читать текст. ChatGPT 4 все еще галлюцинирует и говорит несуществующие или плохие варианты, но если ты понимаешь, что она пишет, то проблем не будет. Также сейчас она "ленится" и не сразу может дать тебе полный ответ с примерами кода, так что правильные промпты помогают.

Воскобойников Сергей, backend-разработчик, PHP

Я экспериментировал с несколькими нейросетями: ChatGPT, Copilot и AI Assistant от Jetbrains.

ChatGPT, например, часто использовал для поиска информации и генерации кусков кода, а Copilot для предоставления вариантов рефакторинга существующего кода. 

AI Assistant использовал, так как был в ide и имел доступ к файлу напрямую, но в сравнении с ChatGPT он оказался менее точным и требовал дополнительных коррекций.

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

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

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

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

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

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

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

Реальная задача

Источник: https://github.com/playa-ru/keycloak-russian-providers/pull/22/files

Решено было дать еще один шанс и протестировать работу нейросети на реальной задаче. 

Задача: сделать микросайт для перевода минифицированного json-а в читаемый вид, используя нейронки, не написав ни строчки кода человеком.

Подзадачи:

  • сделать минифицированный JSON файл

  • сделать сайт

Делаем JSON.

Использовал IDE Cursor https://cursor.sh/ 

  1. JSON для проверки работы сервиса

Первые разы нейронка генерировала json файлы с большой вложенностью, но с бесполезными данными типа text1, text2, textN

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

Сгенерируй пример JSON файла с вложенностью. Не используй перенос строк и форматирование. JSON файл должен занимать 10 киллобайт
Сгенерируй пример JSON файла с вложенностью. Не используй перенос строк и форматирование. JSON файл должен занимать 10 киллобайт

Генерирую более приближенный к жизни JSON:

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

Нейронка генерирует контент исходя из типа открытого файла, например, в файле example.json сгенерирует json, а в example.xml генерирует xml.

Сгенерируй список из 5 самых крупных стран, у каждой страны должен быть указана столица, площадь в квадратных километрах и отдельным параметром список временных зон в массиве. Не используй перенос строк и форматированиеКод для генерации сервиса
Сгенерируй список из 5 самых крупных стран, у каждой страны должен быть указана столица, площадь в квадратных километрах и отдельным параметром список временных зон в массиве. Не используй перенос строк и форматированиеКод для генерации сервиса

Первый запрос:

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

У страницы не должен быть вертикальный скролл
У страницы не должен быть вертикальный скролл

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

Добавь кнопочки сворачивания и разворачивания массивов и объектов в итоговом JSON коде в теге code
Добавь кнопочки сворачивания и разворачивания массивов и объектов в итоговом JSON коде в теге code

Не работает.

После исследования кода в DevTools понял, что он ищет в тегах с классах .hljs-attr и .hljs-brace открывающуюся фигурную и квадратную скобку, но на самом деле они находятся в тегах с классом .hljs-punctuation

Поменяй css классы для поиска элементов на .hljs-punctuation
Поменяй css классы для поиска элементов на .hljs-punctuation

Объясняю, как джуну после онлайн-курсов.

Замени поиск фигурной и квадратной скобки в элементах на сравнение строки с el.innerText без nextSlbling
Замени поиск фигурной и квадратной скобки в элементах на сравнение строки с el.innerText без nextSlbling

Наконец, появились кнопки сворачивания массивов и объектов.

Но сворачиваются только фигурные скобки

То, чего мы добиваемся (пример рабочего инструмента, которым периодически пользуюсь сам)

http://json.parser.online.fr

Еще попытка добиться своего:

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

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

В итоге у нас получилось сделать одностраничный микропроект для форматирования json строки с возможностью скрывать поле ввода.

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

Мы потратили 49 из 50 бесплатных запросов gpt4.

Ответы от gpt3.5-turbo мне не нравились.

Создали отдельный файл index2.html для генерации кода с помощью нейронки cursor-fast, после аналогичного запроса она сгенерировала код, который сделала ChatGPT 4, видимо, она где-то сохранила запрос и ответ от нейросети, чтобы не тратить своё процессорное время на генерацию.

Пробовали оригинальный ChatGPT 3.5, он написал аналогичный код, но еще и с комментариями

ChatGPT 3.5
ChatGPT 3.5

Заключение

Этот комикс про редакторов и копирайтеров. Но для программистов тоже подойдет. Источник
Этот комикс про редакторов и копирайтеров. Но для программистов тоже подойдет. Источник

Еще с 90-х годов прошлого века появляются новости, что вот-вот еще чуть-чуть — и программисты (дизайнеры, инженеры и прочие) вымрут как класс. Но остается открытым вопрос: на чем нейросети будут обучаться, если программисты перестанут писать код? 🙂

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

Чтобы получить нужный результат, придется потратить время на составление подробного ТЗ, которое может написать только разработчик. Потому что он знает в подробностях, как должна будет работать готовая система — а не проще ли тогда сразу написать код самому? Вопрос интересный.

А что вы пробовали для облегчения работы программистов?

Теги:
Хабы:
+6
Комментарии 7
Комментарии Комментарии 7

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн