Как ИИ помогает программисту — и почему это случается не всегда

c52d9983d61144338dc5498c36ee1d37

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

О чем вообще речь?

В любом результате работы ИИ заложен риск ошибки, который называют «галлюцинацией». Как человек во время галлюцинации не может отличить реальность от искаженной картинки, так и ИИ часто не может оценить результат своей работы.

Более того, ИИ может «додумывать». К примеру, в своём ответе нейронка способа ссылаться на несуществующее научное исследование, которое при этом выглядит как настоящее: со всеми исходными данными, фамилиями, правилами оформления. С кодом — аналогично. ИИ может писать неисполняемый код, и даже не понимать, что происходит.

Тогда как использовать ИИ в разработке?

Если вы думаете, что нейронка напишет за вас код, вы ошибаетесь (но, возможно, вы уже пробовали и так это знаете). Пока все ИИ-помощники программиста — это скорее полу-джуны, которые могут «подносить патроны» (например, помогать с синтаксисом).

Нейронки в разработке нужно использовать иначе.

Спланировать инфраструктуру. Многим разработчикам трудно браться за инфраструктуру, особенно если есть проблемы с уровнем абстракции. В таком случае ИИ (например, Autogen от Microsoft) помогут обеспечить проект тулзами для коллаборации и решения единой задачи.

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

По моему опыту, Chat GPT точно «знает» PHP, Python, Java, Kotlin, Swift, C#, но при этом может выдавать что-то близкое к работоспособному коду от COBOL, Fortran, Forth, LISP, ALGOL. Для шутки можно погонять его даже по Assembler.

А вот — забавные примеры абсурдного кода, который писал Chat GPT.


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


Упрощать. Например, использовать DeepCoder для рутинных задач. В отличие от други «копилотов», DeepCoder не пытается писать код сам, а старается разбить задачу на множество небольших подзадач, каждую из которых он старается решить кусочком уже существующего кода. Получается неплохо, но, конечно, костыль на костыле.

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

А что не стоит делать?

Предлагать написать код. Скорее всего, вы получите «вермишельный» код с ошибками, который не скомпилируется. По моему опыту, даже небольшой плагин к WordPress или несложный с помощью ИИ написать не получится.

Чтобы писать код с помощью ИИ, нужно уметь писать его самостоятельно — и почти всегда в таком случае самому всё сделать будет и быстрее, и проще

К примеру, Hugging Face заявляют о себе как о проекте, который может превращать естественный язык в примеры кода. Но в таком случае для получения работающего кода требуется грамотное формулирование задачи на «человеческом» языке с глубоким пониманием работы алгоритмов и типов данных.

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


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

Как помочь нейронке?

Самое главное, что вы можете сделать — это написать максимально подробный промт. Опирайтесь на шкалу промтов Корнелловского университета.

Семантика ввода. Задавайте правила, которые ИИ запоминает и учитывает при ответе. Это позволяет упростить синтаксис и сэкономить время. Пример запроса: «Запомни этот токен, и когда я попрошу подставить его вместо переменной TOK, вставь его из памяти». 

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

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

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

Взаимодействие. К этой категории могут относиться задачи, когда нужно сгенерировать бесконечное вариантов по определённому правилу. Чтобы не вставлять шаблон каждый раз, можно сказать модели: «Генерируй мне ответы без остановки по заданному правилу».

Управление контекстом. Пригодится, когда нужно исключить из ответа некоторые источники. Например, вы можете попросить опираться в ответе только на данные официальных сайтов или индексируемых источников. Так отсекается ненужный контекст — и модель выдаёт результат с учётом данных, которые важны для пользователя.

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

Кстати, а какие еще проблемы могут быть?

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

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

А что дальше, будет лучше?

Безусловно. Я думаю, что нашу отрасль ждёт очень большие ИИ-изменения. Сейчас нейросеть не может писать хороший код, но она точно научится. А еще раньше:

  • ИИ сможет дебажить несложный код.

  • Нейронки научатся бутстрапить продукты целиком: от UX/UI до тестирования и маркетинга на уровне «коридорки».

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

© Habrahabr.ru