Комментарии 23
Сейчас проверяю насколько полезно советоваться с llama3.1_8b-instruct-fp16 в части vbs и pl/sql.
Она пишет код, который почти никогда нельзя сразу выполнить, содержит много ошибок.
Но дает направление, в котором стоит подумать, пересмотреть подход, попробовать сделать иначе.
Неплохо поясняет чужой код, как он работает.
Как генератор идей, и комментатор - пойдет.
А специализированные модели не пробовали? Например Qwen 2.5 Coder 7B?
Еще нет, спасибо, посмотрю.
Пока проверил это:
sqlcoder_15b-q8_0 - что-то страшное генерит на просьбу написать SQL запрос удаления дублей строк в таблицах Oracle. Мешанина из пиона и склеиваемых фрагментов строк SQL.
gemma2_9b-instruct-fp16 - примерно на одном уровне с llama3.1_8b
command-r_35b - задержка во времени ответа, на моих вопросах не соответствует ожидаемому улучшению качества ответа.
Вообще, при работе на RTX 4090 через koboldcpp_rocm (Vulkan) если модель поместилась целиком в память карты, то вот это 35b,15b,9b,8b - указывает на среднее время генерации ответа в секундах.
Так зачем ждать дольше, если лучше не становится :)
а зачем вы на CUDA запускаете ROCM ?
Вы правы, я заметил эту ошибку давно, но редактировать комментарий уже не мог.
В тот момент я только начал эксперименты с разными картами и режимами их запуска, и еще не определился с тем, какой вариант работает более стабильно.
Потом подобрал параметры командной строки, стабилизирующие работу koboldcpp
(--nommap --usemlock --foreground --quiet ).
Абсолютно ожидаемо. Восторг от кода, который пишут за тебя, будет только на низкой базе: т.е. у джунов или вообще непричастных. Всякий сеньор знает, что важен не код сам по себе, а контекст, для которого он создается. Вытаскивать контекст из своей головы и перекладывать в другую - вот где сложность. Когда вместо работы день за днем объясняешь Чятику контекст и пытаешься выдавить решение, то там не то что выгоришь, а вообще из окна пойдешь погулять.
Как водится, кто спонсирует, тот и результаты заказывает :) Видимо надо время, пока улягутся волны хайпа вокруг модных инструментов и станет возможным оценивать их полезность объективно. Судя по настойчивости Microsoft и пр. вложивших деньги в продвижение ИИ -- пользоваться этим придется в будущем всем программистам, как сейчас мы используем IDE. Тут всё зависит от степени использования, насколько это глубоко попытаются засунуть в те же IDE :) Конечная цель корпораций тут тоже очевидна, "ИИ-программист" обойдется явно дешевле человека. Поэтому в покое нас не оставят :)
Для себя нашел полезным генерацию всякого повторяющегося и простого, пачку типовых хендлеров или тесты. Меньше самому копипастить приходится, ИИ генерит кучу текста за тебя. Либо наоборот прошу реализовать какой-нибудь известный алгоритм, который самому кодить влом. В целом же, когда надо решать задачу оптимально и хочется получать вменяемый код ИИ пока чаще сливаются, даже на популярных языках (использую Go и C). А уж если что менее мейнстримное, как Emacs Lisp или совсем новое, вроде Hare -- то код на выходе практически всегда негоден к потреблению, проще самому разобраться. Могу предположить, что нейросети как технология не позволят полностью заменить людей в разработке ПО, это будет возможным только со strong AI, а до него пока неясно когда дойдут.
Читал другие цифры и могу сказать про себя:
Пишу на TypeScript/Python, о которых AI знает много
AI экономит время
AI не напишет хороший код за меня (по крайней мере пока)
Примеры, где мне помогает auto-complete:
Boilerplate код: стандартные обертки функции, повторяющиеся много раз внутри модуля: обработка и логирование ошибок, проверка контракта функции
Комментарии к функциям (после пары слов часто дает разумное продолжение строки)
Конвертация объектов в код: я запихиваю в редактор JSON-объект и прошу AI превратить это в описание класса
Примеры, где мне помогает chat:
Создание Unit-тестов: базовые сценарии, покрывающие 60-70% всех ветвлений модуля
Названия функций, которые я не помню «с ходу», но знаю, что она есть и что она делает
Узнать, какие есть популярные библиотеки для решения нетипичной задачи (редко)
AI ошибается, так что бездумно использовать его не получается. Но пользы для меня ощутимо больше, чем вреда
Конвертация объектов в код: я запихиваю в редактор JSON-объект и прошу AI превратить это в описание класса
Это уже давным-давно работает и без всякого ИИ.
Auto complete кстати тоже. Но тут конечно всегда есть куда расти. В отличии от предыдущего пункта.
Boilerplate код: стандартные обертки функции, повторяющиеся много раз внутри модуля: обработка и логирование ошибок, проверка контракта функции
Если вы бойлерплейт пишите не только в момент создания нового проекта, то явно делаете что-то не так. Вероятно, у вас сквозная функциональность просачивается в прикладную логику. Для программиста такие неудобства должны быть сигналом о проблемах и поводом подумать о рефакторинге, а ИИ только потворствует в плохих практиках.
Есть языки и подходы в которых появление boilerplate неизбежно.
Например когда в java нужно добавить класс с данными, то к полям потребуются getter, setter, конструктор который их заполнит, equals/hashcode и не каждая ide умеет их генерировать. (Хотя вроде сейчас и в java добавили аналог data class из kotlin, но это просто пример).
Или у вас строгая архитектура требующая чтобы данные по слоям были разделены (из сети получаем объект 1, в бизнес логику передаём 1*, а в ui 1** и мапперы между ними, которые гоняют одинаковые поля друг в друга).
Ну ваш пример только подтверждает комментарий выше. Что касается джавы, то всю рутину там уже давно побороли самым обычным алгоритмическим подходом без ИИ. Где-то кодогенерация, где-то рефлексия, где-то фреймворки. Где-то Котлин, не без этого. Конкретно геттеры-сеттеры это lombok, мапперы - mapstruct (хоть я его и не люблю), SQL-бойлерплейт - Spring Data.
Если человек утверждает, что ИИ помогает ему бороться с бойлеплейтом именно в джаве, то я тоже предположу, что человек делает что-то не так. У него или какой-то мега-ультра-специфичный кейс или он просто плохо знает инструменты и экосистему. В других энтерпрайзных языках, я думаю, похожая обстановка.
Плохому танцору - и тестикулы помеха.
Оба полярных мнения - и хайповое, что нейросеть за вас проект напишет, и негативная - что это бесполезная ерунда или того более как в статье - еще и вредная - далеки от реальности. Точнее, в первом случае - нет пруфов или же утверждения делают люди, которые под проектом понимают небольшой скрипт, а во втором случае - чаще всего у пользователя ИИ руки не из того места или же он вообще даже "не читал, но осуждает".
Я - немолодой специалист, работаю в ИТ больше 22 лет и видал еще дискеты и DOS в качестве рабочей ОС - в общем сложно меня заподозрить в стильно-модно-молодежности. ИИ-асситенты использую где-то уже как полтора года - и перепробовал много разных. Вначале они действительно не впечатляли от слова совсем, из всей функциональности было только автодополнение, подсказки были посредственные и годились в подавляющем большинстве только в тривиальных случаях.
Примерно с год назад я впервые подключил в VS Code плагин sorcery - и вот от него уже стала появляться ощутимая польза. Этот ассистент заточен на рефакторинг и зачастую реально давал дельные советы. Помогало это и в плане ревью, и в том, что код можно было набросать быстро не особо заботясь о его архитектурной правильности/эффективности/красивости - главное, чтобы работал правильно, а затем быстро с помощью этого ассистента причесать. Речь, разумеется, идет о коде классов, функций, а не целых модулей или того более - проектов. Но и такое ограниченное применение дает прибавку к скорости. Этот асситент, кстати, мог не только метод отрефакторить, но и, если он был слишком велик - разделить на методы, причем с соблюдением SRP и правильно связать всё между собой. Ошибки, разумеется, встречались, но где-то в пределах не более чем в 25%. Так же не всегда и предлагаемый рефакторинг мне нравился, хоть и был без ошибок - иногда было ненужное усложнение кода и/или слишком уж буквальное следование "лучшим практикам" в местах, где этого и не требовалось - задача тривиальная, а ассистент решает её по всем канонам, так что бойлерплейта становилось в разы больше, чем бизнес-функционала - в общем "из пушки по воробьям" что называется. Но - повторюсь - пользу уже часто можно было извлечь.
ChatGPT - в то время версии 3 - тоже находил мной весьма ограниченное применение в программировании - в задачах, где мне нужен был код по описанию, реализуемый в нескольких связанных классах/функциях. По моему опыту успех таких запросов составлял 50/50, ну то есть ии мог равно подкинуть и годный рабочий вариант, и мог и что-то кривое, а то и полностью нерабочее. Но, в случаях, когда нужны идеи и/или работаешь с чем-то незнакомым - и это вполне помогает, так как дает направление - куда можно порыть. Здесь по поводу той версии ГПТ должна быть та самая картинка с Тиньковым про "сомнительно, но окэй" : )
Дальше, где-то с полгода назад я стал пользоваться еще одним ассистентом - и вот он уже бустит очень ощутимо: и в плане автодополнения, и написания кусков кода по запросу, и при рефакторинге, и для написания тестов, и для генерации гипотез. Слабости тут следующие: в качестве контекста адекватно использует объемы в размере модуля, подсовывание большего контекста работает посредственно, хотя и помогает улучшить результаты генерации. Довольно посредственная генерация решений по описаниям в чате - по-крайней мере сильно уступает ChatGPT версии 4o и Claude Sonnet 3.5, в которых решения процентов в 80 - практически готовые к применению.
Надо так же отметить, что с нейросетями надо уметь работать - ставить перед ними задачи четко, грамотно формировать контекст, корректировать - и счастье будет. Иначе - ровно то же, что и с программистом-человеком: "Какое ТЗ - такой и результат".
Ни одна известная мне система не может написать код целого более-менее среднего размера проекта разом - чем больше взаимодействующих объектов, тем сложнее их генерить. Это, в общем-то, аналогично и для человека. Есть информация, что на такое способна новейшая модель о1, но у меня возможности проверить это еще не представлялось.
Даже и куски нагенеренного кода надо отсматривать и тестировать - в них могут быть упущены важные условия, а то и содержаться ошибки. Но если вы генерите код степ-бай-степ, а не разом просите вам выдать проект на-гора, то и проблемы с проверкой нет - вникнуть и оценить легко. Галлюционировать сети в применении к разработке ПО, кстати, стали значительно реже со времен моих первых опытов.
По итогу, можно сказать, что в умелых руках этот инструмент и работает уже хорошо, и сам инструмент - ии-ассистенты - постепенно развивается и становится и богаче по возможностям, и качественнее. За себя могу сказать, что уже сейчас работа с ии-ассистентами по сравнению с работой в голой IDE сравнима с разницей работы в голой IDE и набором кода в Блокноте. Ну и - да, если использовать ту же IDE исключительно как Блокнот, не разобравшись как и что настроить и иcпользовать - и IDE будет только мешать любителю старины глубокой : )
Ну и чудес - тоже не бывает. Без собственного программистского опыта и с ИИ-ассистентом можно наворотить такого же говнокода, что и без него, и даже больше - ибо быстрее же! : ) Но и это не ново под луной - фуллстаковерфлоу программистов и без ИИ было достаточно.
Я не профессиональный программист, и если что-то и пишу, то для себя. Тут была задача зацепить домофон, подключённый к астериску, к умному дому, чтобы можно было открывать дверь командой из умного дома и давать инструкцию астериску N раз открыть дверь автоматически.
ЧатГПТ дал несколько скриптов, которые должны были решить мою задачу. Ни один из этих скриптов не заработал, но дал мне, относительно далёкому от истории настройки виртуальной АТС, правильное направление, куда мне двигаться. В итоге за день я "скрестил ужа с ежом". Сделал бы я это без ИИ? Конечно сделал бы. Но заняло бы это у меня несколько больше времени.
Но не думаю, что такая помощь будет полезна профессионалу. Такие базовые вещи он и так знает, и скорее он будет обучать нейросеть, а не она его.
Опытному программисту как раз таки часто проще понять где проблема в нагенерированном ИИ коде и точечно исправить, вместо того, чтобы писать всё заново самому. Это и позволяет избавиться от рутины. Более того, опытный программист и задачу по идее должен ставить гораздо точнее - ну если он действительно опытен, в том числе с описанием и того КАКИМИ КЛЮЧЕВЫМИ СПОСОБАМИ должно реализовываться решение - это, разумеется, направляет ИИ в генерации, и код получается, соответственно, гораздо более адекватный, а часто и вовсе не требующий исправлений.
То, что "программисты больше не нужны" - это, конечно, пока бред, потому что как раз таки адекватно ставить задачи ИИ, понимать архитектуру будущего решения, ревьюить код и исправлять его кому-то нужно, человек без программистского опыта сделать это может весьма ограниченно - ваш пример тому иллюстрация. И это при том, что у вас задача была несколько скриптов написать - а в больших проектах проблемы умножаются в разы, и пока ИИ самостоятельно в архитектуру может только очень ограниченно, не хватает ему охвата - он хорошо работает только в локальных областях кода.
а во втором они переходили на использование ассистента CitHub Copilot
Оказывается просто инструмента не достаточно, надо еще научится с ним работать. Никогда не было и вот опять.
Особенно шедеврально:
написанные с помощью ИИ участки кода сложно анализировать на предмет выявления ошибок, поэтому программисту иногда проще самому переписать нужный фрагмент
Это было исследование среди джунов? В рамках указанных и четко сформулированных задач тот же ЧатГПТ пишет отлично читаемый код (а если попросить - еще и с комментариями под каждую строку), сказать что его "сложно анализировать" это признаться в своей профнепригодности. Либо были специфические задачи изначально вне области знаний разработчиков, и тут естественно "с наскока" эти задачи не решаются - читаются доки, изучаются примеры и выстраивается архитектура. А тут бот собрал все за минуту - естественно полученный проект банально надо сначала понять.
Из недавних проектов, написанных с помощью ChatGPT:
Криптовалютный бот в телеграмм:
Функциональность: симуляция торгов на исторических данных, копитрейдинг в реальном времени, реализована покупка подписок на копитрейдинг через Юмани/Юкасса, можно посмотреть статистику сделок, выбрать модель (десятки моделей по моим стратегиям, можно свои добавлять), купить подписку на копитрейдинг.
Стек: C++, python, telegram API, async, pandas, API криптобирж (finance, bybit), разные либы DS.
Время на разработку: ~2 месяца. Без ИИ делал бы дольше.
Анализатор эмоций по голосу или аудиофайлам (уникальный в своем роде).
Функциональность: анализ 48 видов эмоций на 12 языках. Сохранение сессий. Полностью интегрированое приложение в плей-маркет (пройдены все виды тестирований), переведено на 174 языка. Реализована система подписок через Google Billing API.
Стек: kotlin, jetpack compose, асинхронное программирование, Hume ai, туннелирование VPN через VDS, распознание речи, работа с микрофоном.
Время на разработку: 3 месяца. Без ИИ делал бы дольше.
Это просто примеры сложных комплексных проектов, которые написаны с помощью ИИ (95% кода генерил ИИ под моим руководством, десятки чатов).
На самом деле за это время создано куда больше проектов. При этом я постоянно слышу что ИИ не проходит для больших проектов, что он генерит джуновский код с кучей ошибок и т.д. Всё ИИ генерит на высоком уровне, если правильно с ним "общаться". Просто мало кто это пока умеет, это новый навык. Но то, что мало кто умеет - не значит, что ИИ - плохой инструмент. Плохому танцору...)
А зачем нужно, чтобы ИИ писал код? Почему сразу не генерить исполняемый файл? Или объектники, из которых собирать приложение? Ну, если на самом деле всё так хорошо? Иначе ИИ превращается просто в аналог продвинутой поисковой системы...
Может этот показатель (от Github) зависит от "уровня" разработчика? Junior, middle, senior и др.
Исследование: ИИ не повышает продуктивность программистов, но добавляет ошибок