Самовосстанавливающийся код — будущее разработки программного обеспечения

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

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

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

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

Когда код дает сбой, он часто выдает сообщение об ошибке. Если ваше программное обеспечение на уровне, это сообщение об ошибке точно скажет, что было не так, и укажет вам направление исправления. Предыдущие программы с самовосстанавливающимся кодом — это умные средства автоматизации, которые уменьшают количество ошибок, допускают изящные откаты и управляют предупреждениями. Возможно, вы захотите добавить немного места на диске или удалить некоторые файлы, когда получите предупреждение о том, что загрузка составляет 90%. Или, эй, вы пытались выключить его, а затем снова включить?

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

Больше кода требует большего контроля качества

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

«Одна из вещей, которые я часто слышу от разработчиков программного обеспечения, это то, что они говорят: «Ну, я имею в виду, что теперь любой может сгенерировать некоторый код с помощью некоторых из этих инструментов, но нас беспокоит, возможно, качество того, что генерируются», — говорит Форрест Бразил, глава отдела средств массовой информации для разработчиков в Google Cloud. Скорость и объем, с которым эти системы могут выводить код, могут показаться ошеломляющими. «Я имею в виду, подумайте о рассмотрении запроса на вытягивание из 7000 строк, который написал кто-то из вашей команды. Это очень, очень сложно сделать и получить содержательную обратную связь. Легче не становится, когда ИИ генерирует такое огромное количество кода. Таким образом, мы быстро входим в мир, где нам придется придумывать передовые методы разработки программного обеспечения, чтобы убедиться, что мы эффективно используем GenAI».

«Люди уже давно говорят о техническом долге, и теперь у нас есть совершенно новая кредитная карта, которая позволит нам накапливать технический долг способами, которые мы никогда не могли делать раньше», — сказал Армандо Солар-Лезама, профессор Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института в интервью Wall Street Journal. «Я думаю, что существует риск накопления большого количества очень некачественного кода, написанного машиной», — сказал он, добавив, что компаниям придется переосмыслить методологии того, как они могут работать в тандеме с возможностями новых инструментов, чтобы избежать этого.

Пейдж Бэйли, менеджер по программному обеспечению, отвечающий за генеративные модели в Google, работает в недавно объединенном подразделении, объединившем DeepMind и Google Brain. что вы действительно должны внимательно осмотреть».

Тем не менее Бейли считает, что часть работы по проверке кода на точность, безопасность и скорость в конечном итоге также возложится на ИИ. «Со временем я ожидаю, что большие языковые модели начнут как бы рекурсивно применяться к выходным данным кода. Таким образом, Google Brain уже провел исследование, показывающее, что вы можете рекурсивно применять LLM так, что если есть сгенерированный код, вы говорите: «Эй, убедитесь, что нет никаких ошибок. Убедитесь, что он производительный, убедитесь, что он быстрый, а затем дайте мне этот код», и тогда это то, что, наконец, отображается пользователю. Так что, надеюсь, со временем ситуация улучшится».

Что люди строят и с чем экспериментируют?

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

«Во многих случаях, когда вы проходите процесс проверки кода, ваш рецензент может сказать: «Пожалуйста, исправьте это или отредактируйте это для удобочитаемости», — говорит Маркос Граппеджиа, менеджер по программированию Google Duet. Он думает об агенте ИИ, который может реагировать на это, как о своего рода продвинутом линтере для проверки комментариев. «Это то, что мы считали многообещающим с точки зрения сокращения времени на исправление». Предложенное исправление не заменяет человека, «но помогает, дает, так сказать, отправную точку для размышлений».

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

«Мы внесли несколько улучшений в механизм цикла повторных попыток, чтобы вы не попали в странный сценарий, но это его основная механика», — объясняет Кэлвин Хонес, создавший плагин. Чтобы агент был более точным, он добавил документацию о своем коде в векторную базу данных, созданную им с помощью Pinecone. Это позволяет ему узнавать то, к чему базовая модель может не иметь доступа, и регулярно обновлять ее по мере необходимости.

Сейчас его работа происходит в конвейере CI/CD, но он мечтает о мире, где такие агенты могут помочь исправить ошибки, возникающие в коде, который уже существует. «Что очень интересно, так это то, что когда у вас действительно работает рабочий код и выдает ошибку, может ли он исправить себя на лету?» — спрашивает Хёнс. «Итак, у вас есть свой кластер Kubernetes. Если одна часть обнаруживает сбой, она запускает исцеляющее движение».

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

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

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

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

Codium работает над инструментами, позволяющими тестировать базовую логику, что Фридман рассматривает как более узкое определение качества функционального кода. Он считает, что при таком подходе автоматизированное улучшение кода теперь возможно и вскоре станет практически повсеместным. «Если вы можете проверить логику кода, то, вероятно, вы также можете помочь с автоматизацией запросов на включение и проверкой того, что они выполняются в соответствии с передовыми практиками».

Итамар, внесший свой вклад в AutoGPT и беседовавший с его создателем, видит будущее, в котором люди управляют ИИ, и наоборот. «Машина просмотрит весь ваш репозиторий и расскажет вам обо всех лучших практиках, которые она увидит. Затем несколько технических руководителей могут пройтись по этому поводу и сказать: «Боже мой, именно так мы и хотели это сделать». Это наша лучшая практика для тестирования, это наша лучшая практика для вызова API, это то, как мы любим создавать очереди. Вот как нам нравится делать кэширование и все такое. Это можно будет настроить. Как будто правила на самом деле будут представлять собой смесь предложений ИИ и человеческого определения. Это удивительная вещь».

Эксперименты с GenAI?

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

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

Как насчет вас?

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

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

Похожие публикации

Тут ничего нет

Нет комментариев