Copilot инструмент автогенерации кода, который наделал много шуму и которым пользуются программисты по всему миру. Я тоже включился в этот хайп, поигрался, попробовал переключить свой флоу работы на него и обломался. Минусы в итоге перевесили плюсы. Сейчас про это расскажу. Ниже описание взаимодействия с автокомплитом copilot. К чату вопросов нет, хорошая и полезная штука, но в статье не про него.
Сетап
За это время я использовал copilot в основном с двумя языками: php (laravel) и typescript (react). В качестве редактора nvim (сборка LazyVim на скрине). Писал и фронт и бек и тесты.
Что понравилось
Конечно Copilot выглядит как чудо. Чем более повторяющийся код, тем больше и лучше он догадывается до того, что надо сделать. Местами он показывает простые решения, до которых сам сходу не додумываешься. В целом же, на простом коде, он дает болванку, которую писать самому не очень хочется, а тут тебе все выложили. Такой код тоже требует правки, но это все равно удобно.
Почему я остановился
Но чем дальше, тем больше появлялось ситуаций, когда я понимал, что copilot мне скорее помешал чем помог.
Уменьшение продуктивности
Обычная автоматизация, которую дает редактор, вырабатывает моторную память. Не нужно сильно думать, когда автокомплит что-то подсказывает. Вставка кода происходит на автомате причем речь не только про выбор нужной реализации функции, но и дальнейший код, который понятно куда и как надо писать. Если вставляется функция, то мы оказываемся внутри ее вызова, где дописываются аргументы если они есть.
С копайлотом это перестает работать. Каждый раз когда он что-то подсказывает, нужно внимательно смотреть, что он там предлагает и даже после вставки кода проходит некоторое время на осознание того, кто я, где я и что с этим теперь делать.
Иногда я ожидаю и хотел бы простую подсказку, чтобы завершить строку текста или функцию, а вместо этого мне выдается какая-то портянка не в тему. В итоге я чаще стал зависать над комплитом и раздражаться от того, что простые действия стали сложнее.
Импорты
Отдельная тема это импорты. Копайлот вставляет куски кода без реальной связи с окружением. Если там есть какие-то символы типа классов или внешних функций, то естественно никаких автоматических импортов не произойдет. Это сбивает, потому что каждый раз непонятно, что уже импортировано, а что нет.
Ошибки
Копайлот постоянно вводит в заблуждение. Начинаешь набирать неверную команду, вызывать неверное свойство или метод, копайлот обязательно что-то подскажет из-за чего случаются осечки. Обычный автокомплит защищает от этого, потому что если его нет, ты знаешь, что сделал ошибку. В некоторых случаях его автокомплит вообще синтаксически не коректен. У меня такое было в PHP, когда вставляешь вроде что надо, а потом только замечаешь, что он в конце не поставил точку с запятой или забыл закрывающую кавычку у строки.
Итого
В коротких командах копайлот больше мешает. Обычный автокомплит + моторная память быстрее и просто приятнее, потому что не надо думать. В больших кусках кода он бывает полезен, но когда проект уже состоялся, то многое делается копипастой и так, как например в интеграционных тестах на круды. Плюс рядом есть chatgpt у которого можно спросить и покрутить какую-то тему.
Больше о разработке я пишу в своем телеграм канале https://t.me/orgprog
Комментарии (112)
saroff
24.07.2024 12:29+27На самом деле почти все описанные недостатки фиксятся если использовать AI помощника рядом с обычным автокомплитом, а не вместо. Назначить на отдельный хоткей. Довольно часто он может неплохо подсказать, особенно если как писали, код повторяющийся. А в стальное время можно работать как будто его нет.
delphinpro
24.07.2024 12:29+1А если нет таких опций. Вот например использую Codeium в phpstorm. Настроек клавиш нет. Что развернется по табу - неизвестно, родной автокомплит или подсказка ассистента.. Пришлось отрубить AI в редакторе и оставить только чат.
hooy
24.07.2024 12:29+25Ну так не используйте такой редактор, в котором в 2024 нет гибкой настройки хоткеев на любой чих
Kergan88
24.07.2024 12:29+4>А если нет таких опций
Что кстати само по себе показательно. Уже не один год прошел с начала хайпа, но нет _ни одного_ нормально сделанного нейросетевого автокомплита!
А это не проблема редактора, это проблема самих автокомплит-плагинов. Которых нормально сделанных просто не существует в природе. На уровне настройки редактора тут решить ни чего нельзя.
davidaganov
24.07.2024 12:29+3так Codeium в вскоде вполне себе удобен, использую его уже около года или больше. по умолчанию он прелагает свои подсказки, но по хоткею вызываю автокомплит стандартный и расширение убирает свой вариант
EGSP
24.07.2024 12:29+3А еще удобно точечно и последовательно принимать автокомплит от кодиума хоткеем "ctrl+стрелочки"
rombell
24.07.2024 12:29исключительно бесит, когда нужно позиционироваться на пару слов правее, а вместо этого вставляются рандомные куски кода. Если успеют. Если я нажимаю быстрее - не вставляются. Если чуть задумался - откатывать и вычищать
Kergan88
24.07.2024 12:29Запилить хоткей это прогресс конечно)
Нормальный нейросетевой автокомплит должен уметь хотя бы адекватно комплитить внутрь не фейля со скобочками и учитывать контекст language servera
utrumo
24.07.2024 12:29+1Несколько месяцев пользуюсь Сodeium в LazyVim и что-то и с ним не удобно и без него как-то грустно - иногда он удачные правки предлагает.
Ранее пробовал только играться с порядком вывода подсказок в меню автокомплита, но получалось довольно криво.
Сегодня с утра подкрутил свой конфиг - при включении редактора Codeium выключается, чтобы не мешал, а по хоткею его можно включить обратно:
https://github.com/utrumo/myConf/blob/master/nvim/lua/plugins/codeium.lua
Спасибо за идею!
Zaro4k0
24.07.2024 12:29+4Зашла только ради того, чтобы посмотреть, сказал ли кто-нибудь что-нибудь про заголовок.
Abstraction
24.07.2024 12:29+4Встречный опыт: Qt Creator/C++, VS Code/TypeScript+HTML
Работает как продвинутый автокомплит, и в хорошем и в плохом смысле. В хорошем - предлагает поля структур, рутинные аксессоры / циклы / проверки, иногда он разумно предлагает блок в несколько десятков строк "по аналогии" (убрать который вообще в порядке следования DRY архитектурно очень нетривиально). В плохом - когда правишь файл с неидеальным чужим кодом, успешно подтаскивает из него неидеальные привычки его автора.
Иногда я ожидаю и хотел бы простую подсказку, чтобы завершить строку текста или функцию, а вместо этого мне выдается какая-то портянка не в тему.
В Qt Creator работает вместе с обычным автокомплитом, так что проблем с непредсказуемым вводом имён полей/методов я не наблюдал.
Копайлот вставляет куски кода без реальной связи с окружением. Если там есть какие-то символы типа классов или внешних функций, то естественно никаких автоматических импортов не произойдет.
Поскольку их не происходит и без Copilot, я не рассматриваю это как минус (а то что разводить много зависимостей неудобно - даже как маленький плюс).
В некоторых случаях его автокомплит вообще синтаксически не корректен.
Это бывает, но требует мелких правок (в частности, при каких-то условиях он начинает ставить лишнюю закрывающую скобку в конец блока - то ли его пространства имён озадачивают, то ли что). Или же изредка он предлагает бред, но тогда его вставлять не надо вообще.
Anton888
24.07.2024 12:29+16У меня такой же опыт с ChatGPT-4o, который пытаюсь приспособить для анализа массивов отзывов и генерации соответствующих отчетов. В начале кажется, что работает круто и отлично все классифицирует, выявляет часто повторяемые проблемы, умеет отличать негатив от позитива и т.д.
Но когда углубляешься, то руками приходится столько доделывать, переделывать и проверять, что толку от ИИ практически нет.
А особенно мне понравилось, что на команду "дай примеры более подробных отзывов" по такой-то теме, он начал генерировать отзывы сам. Причем заметил это только благодаря "гладкости" текста.
morijndael
24.07.2024 12:29+17на команду "дай примеры более подробных отзывов" по такой-то теме, он начал генерировать отзывы сам.
Ну так вы сами его попросили........
ilnuribat
24.07.2024 12:29здесь подразумевается примеры из входного массива, а не из общей базы гпт
Просто тема обработки отзывов тоже передо мной стояла, понимаю боль
nidalee
24.07.2024 12:29+6здесь подразумевается примеры из входного массива, а не из общей базы гпт
Это вами подразумевается. А в запросе "дай примеры более подробных отзывов" нет требования брать эти примеры из массива, а не генерировать. Основная сложность использования ChatGPT и иже с ними - правильно формулировать то, что действительно хочешь получить, и ничего не подразумевать.
И да, лично мне часто приходится в контексте требовать у ChatGPT выдумывать, а не обрабатывать ранее сказанное.
Cerberuser
24.07.2024 12:29Основная сложность использования ChatGPT и иже с ними - правильно формулировать то, что действительно хочешь получить, и ничего не подразумевать.
Собственно, в этом её большое преимущество перед людьми - люди даже в этом случае умудряются всё услышанное полностью перевирать.
Wesha
24.07.2024 12:29люди даже в этом случае умудряются всё услышанное полностью перевирать.
...и в этом сопилоты семимильными шагами приближаются к человеку!
Moog_Prodigy
24.07.2024 12:29+4Сопилот не понравился, а вот локальная ллама в этом плане будет получше. Ну есть ошибка в программе. Говорю ей - переписать заново. И зависимости она обычно прописывает вначале, то есть использование библиотек возлагается на ИИ. Иногда конечно оно выдумывает библиотеки, да и вызовы выдумывает. Если модулей в программе много, то обычно работает просто "Напиши вот это и это на питоне, используя qt", если идти по функциям, а не прям вот всю программу. То есть майн с инитом у нас в начале - заставляем ИИ поработать архитектором и правим, а затем уже мелкие моторные навыки - Напиши функцию, чтобы принимала на входе строку в формате () и на выходе эта функция возвращает число букв в строке. Это я утрированно, не думайте что я про Len не знаю)
Но с ней хоть там можно общаться и кидаться в нее еррорами. Тупо в авторежиме. Если уж зашло далеко, вот тут и можно вникнуть, что же тут не так. Большие программы оно написать не в состоянии, но если раскидать на кучу подзадач, то все таки оно пишет куда быстрее, чем я печатаю. Тут тонкая грань, модели, среды выполнения, системный промт. Но в целом оно лучше сопилота.
powerman
24.07.2024 12:29+2А подскажите детальнее про тонкую грань плз: на каком языке пишете, какая локальная модель, какая среда выполнения и какой промпт?
Я вот экспериментирую с этими:
$ docker exec -it ollama ollama ls NAME ID SIZE MODIFIED codellama:13b-instruct 9f438cb9cd58 7.4 GB 4 weeks ago deepseek-coder-v2:latest 8577f96d693e 8.9 GB 4 weeks ago codestral:latest fcc0019dcee9 12 GB 4 weeks ago llama3:latest 365c0bd3c000 4.7 GB 4 weeks ago
и надо сказать, что когда в видуху влазит максимум около 6.5GB а остальная часть модели оказывается в обычной памяти, то
codestral
уже заметно тормозит.iTs
24.07.2024 12:29Какая модель в результате даёт наиболее приемлемый результат, хотя бы и с задержкой? А то я было начал устанавливать -все игры-, но может кто-то уже успел пощупать.
sergeyklyopov7
24.07.2024 12:29+1Я посмотрел как у других копилот работает и подумал - ну нахрен. Интеллекта там нет, предлагает переставить местами проверки условий в цепочке If else if ибо один из блоков короче другого и ему пофиг что одно условие это просто сравнение инта с интом, а второе условие - вызов какой-то функции весьма даже не лёгкой по процессору.
vignatovic
24.07.2024 12:29+20В своей статье про доверие и LLM я пишу, что для доверия нужна еще и предсказуемость. Ваша статья это хорошо иллюстрирует. У редактора с автозаполнением есть предсказуемость, а у Copilot -а предсказуемости нет, а значит и нет доверия.
vkni
24.07.2024 12:29+4Предсказуемость - это общее неявное требование для программных систем. Но про неё очень часто забывают, причём даже гранды построения UI - в той же OSX, например, система по-умолчанию сортирует виртуальные рабочие столы, убивая предсказуемость.
funca
24.07.2024 12:29+6Copilot это не столько про доверие, сколько про автоматизацию понятной вам рутины, где результат вы сами можете критически оценить. Работа с ним больше напоминает работу со стажёрами, нежели с оракулом.
vkni
24.07.2024 12:29+21> Работа с ним больше напоминает работу со стажёрами, нежели с оракулом.
В программистской деятельности, как правило, помощь стажёра носит отрицательный вклад в производительность. Именно из-за проблемы доверия, из-за которой приходится полностью проверять результат, а также из-за необходимости передачи расширенного контекста.
Andrey_Solomatin
24.07.2024 12:29+1то естественно никаких автоматических импортов не произойдет. Это
сбивает, потому что каждый раз непонятно, что уже импортировано, а что нет.Pycharm c Python хорошо подсвечивает такие моменты и через хоткей предлагает добавить импорты.
Andrey_Solomatin
24.07.2024 12:29Плюс рядом есть chatgpt
У сопилота тоже есть свой чат. Не пробовали его?
toxicmt Автор
24.07.2024 12:29Пробовал, но мне как-то проще оказалось работать через chatgpt. Не отрицаю что конкретно в этом случае текстовый интерфейс вима не помогает.
Andrey_Solomatin
24.07.2024 12:29У меня плюсы на минусы складываются в ноль. На работе есть копилот на домашних проектах нет. Ни там ни там не страдаю. Вот только чатом так и не начал пользоваться, его поддержку в IDE завезли с опозданием.
podguzovvasily
24.07.2024 12:29Как им в России пользоваться?
Ilyasyakubov
24.07.2024 12:29+1Через VPN
xxxDef
24.07.2024 12:29Платить за него как?
Ilyasyakubov
24.07.2024 12:29+1Рублями. Есть миллион вариантов.
iskateli
24.07.2024 12:29Каждый раз когда он что-то подсказывает, нужно внимательно смотреть, что он там предлагает и даже после вставки кода проходит некоторое время на осознание того, кто я, где я и что с этим теперь делать.
Ну как бы чем сложнее подсказка тем внимательнее надо смотреть и да, конечно при этом нужно время на осознание
Выше уже предложили разделить обычные простые подсказки компилятора и подсказки copilot
funca
24.07.2024 12:29+1Есть ещё режим, когда желаемый результат описываешь в комментарии, а он под ним пишет код. Так Copilot получает больше контекста и результат становится точнее. Комментарии можно потом не убирать, оставляя их для потомков и него же самого.
morijndael
24.07.2024 12:29+6...и пока опишешь LLM весь нужный контекст, оказывается что проще взять и руками сделать
KReal
24.07.2024 12:29А я не перестал. Плагин в JetBrains Rider (C#) большую часть времени молчит, но иногда предлагает (не вставляет сам внаглую) варианты. Порой удивительно в тему, буквально то, что я и сам думал написать. Иногда (реже) - какую-то фигню, которую я игнорирую. В общем, пользы больше, чем вреда.
Warrangie
24.07.2024 12:29Автокомплит больше мешает, чем помогает. Однако, если лень писать какой-то кусок кода, он очень помогает. Разумеется, при вызове вручную.
toxicmt Автор
24.07.2024 12:29Вот да, скорее это явный запрос на написание какого-то кода, причем чаще это скорее определение функции, тест или что-то такое, а не строчка кода.
MaximArbuzov
24.07.2024 12:29+2В качестве редактора nvim (сборка LazyVim на скрине)
"Скрин" - это скриншот?
Vladimirsencov
24.07.2024 12:29+3А все таки подобные инструменты здорово жизнь упрощают. Например сегодня написал инструкцию с помощью ChatGpt. Просто накидал тезисов и заставил сгенерить Markdown файл. После немного поправил. На все ушло часа полтора. Сам бы писал пару дней. Так как дофига времени потратил бы на оформление.
cb_ein
24.07.2024 12:29Тоже был подобный опыт. В качестве автокомплита LLM чаще мешает и раздражает, чем помогает, но когда понадобилось написать объемную документацию для end-user - ИИ помощник оказался весьма кстати.
Wesha
24.07.2024 12:29+1когда понадобилось написать объемную документацию для end-user
поздравляю, Вы изобрели переводчик с машинного на человеческий!
Bobovor
24.07.2024 12:29+5Вас скоро заменят
@
Суетливый бот фейлит при вызове функции и пишет комменты рода here we add value a to value b
Sayonaranigga
24.07.2024 12:29+1Я так понял, что основной негатив автора связан с пыхой. Я вот использую копю в контексте go, и с его тулзами авто форматирования и автоимпортов без всяких "ии" - копя-чан офигительно помогает писать очередной сервис по перекладыванию жысонов. Типа, пара строк для контекста, два-три таба -- и строя готова. Потом ctrl+s, нужные и порты подтянуты go-fmt, и дело сделано
tommyangelo27
24.07.2024 12:29+3Я вот тоже php-шник и постоянно использую Copilot в работе. Не понимаю претензий автора. Да, помощник иногда бредит, но ведь не обязательно принимать предлагаемые им варианты.
Блин, писать всякие тривиальные проверки и early return'ы просто по нажатию Tab - это супер удобно. А подобный код, как ни крути, составляет минимум процентов 30.
maxzh83
24.07.2024 12:29+15Это все очень похоже на автопилот в автомобилях, который при том, что вы вроде ничего не делаете, требует чтобы вы держали руки на руле. И в случае опасности были готовы среагировать и нести ответственность. Когда это осознаёшь, то понимаешь, что так сидеть зачастую эмоционально сложнее нежели управлять самому
Tim7456
24.07.2024 12:29+1Програмирование с КоПилотом - это как парное програмирование, а помошник "креативный" и тупой, но хорошо умеет в copy-paste. И весь плохой код он активно копирует и вставляет.
printf
24.07.2024 12:29Вот да, мне в сопилоте не хватает какой-то опции вроде «не пиши много кода, пиши мало».
Подсказка в одну строку — часто хорошая. Подсказка целой функции или тела цикла — кто в лес, кто по дрова. Из-за этого у меня самый используемый хоткей это «принять из подсказки следующее слово».
MountainGoat
24.07.2024 12:29Я не тестировал Copilot, я тестировал любительские поделки на эту тему. Поэтому одно из двух:
ЛИБО
* Автор текста нихрена не понял или врёт.
ЛИБО
* Copilot намного хуже большинства любительских поделок на эту тему.Потому что по статистике я сразу принимаю 85% предложенных комплитов от модели.
positroid
24.07.2024 12:29+2Жаль copilot (или плагин), по крайней мере на обычных тарифах, не показывает статистику. Было бы удобной фичей - вы сэкономили столько то времени, столько то строк (символов?) кода, выбираете версию копилота в X% случаев
printf
24.07.2024 12:29+2Либо автор текста пишет более сложные / необычные / непонятные модели вещи.
В одних проектах оно правда неплохо понимает, в других всё мимо. Целиком зависит от предметной области и типичности задачи.
rezedent12
24.07.2024 12:29Пишу на GO, использую chatGPT для генерации разных функций. Он скорее показывает общий подход - "как это делается", а потом всё равно переписывать приходится. Меня раздражает то что он часто использует анонимные функции и множество return на одну функцию. Кроме того, пишет сложные выражения в условных операторах. Моему стилю это совершенно не соответствует. Знаю что можно поправить давая ему правильное задание, и указав хотелки в настройках. Но всё равно, он генерирует код не соответствующий моим представлениям о правильном структурировании.
positroid
24.07.2024 12:29Используйте специализированный промпт разработчика, чтобы chatGPT писал весь код, а не только шаги. Свой стиль можете также 1 раз кратко описать и подавать в виде контекста - уверен, все это подхватится. В том числе этот промпт можно указать в настройках chatGPT, чтобы не копипастить в каждый новый чат.
P.S. ссылки на телеграм не приветствуются, тем более не мой, но промпт, который я использую выкладывали на vc, гуглится по "I have no fingers and the placeholders trauma." (авторство промпта все же укажу - Денис Ширяев).
JM777
24.07.2024 12:29+3Что за заголовок? Можно просто написать без этого "ивотпочему"?? Надоел этот тупой штамп.
haqreu
24.07.2024 12:29+1Ха, зря я ругался на этот же штамп. Надо было сначала комменты почитать :)
Прямо сейчас открыл, например, РБК (просто для иллюстрации). "Эксперты назвали вид напитка, рынок которого будет расти ближайшие 10 лет", "Назван российский город, обогнавший Москву по ценам на аренду жилья". И всё в таком духе :(
Nulliusinverba
24.07.2024 12:29Всегда хочется спросить - кем назван, какие эксперты назвали, вы о чём вообще?
Knightt
24.07.2024 12:29+1использую Copilot с GO. (у нас микросервисы, все по примерно одной архитектуре)
мне прям нравится! но да, надо проверять что он пишет! вот прям надо, надо, надо!
res, err := someFunc()
потом жмешь tab и там дописывается обработчик ошибки - красотанужно какой-нить датамапер написать - написал функцию
toGRPCUser(
нажа tab - у тебя 15 полей заполненызапрос из базы данных.. я часто просто называние функции пишу, появляется 30-40 строк кода (правок минимум). Иногда достаточно написать название UserRepository - 5-6 раз нажать tab - у тебя написан тупейший CRUD
пишешь
switch
он поймет какой тип данных, тут же найдет все константы этого типа и распишет все caseparmatosser
24.07.2024 12:29ну, это давно известно, что бывают прогеры которые годами крудошлёпят. главный вопрос - зачем вы это делаете?
Andrey_Solomatin
24.07.2024 12:29+2запрос из базы данных.. я часто просто называние функции пишу,
появляется 30-40 строк кода (правок минимум). Иногда достаточно написать
название UserRepository - 5-6 раз нажать tab - у тебя написан тупейший
CRUDВ спринг Бут для джавы, просто делаешь пустой метод в интерфейсе и даже таб нажимать не надо.
DarthVictor
24.07.2024 12:29+2А как-то автоматически строить такие
toGRPCUser
библиотекой нельзя? Ну напишет, это Copilot один раз, но читать-то это потом придётся десять раз и людям...Andrey_Solomatin
24.07.2024 12:29Можно. https://github.com/google/python-proto-converter
Ptotobuf сам по себе убирает много кода, так как генерит сервер и клиент. Мне подход описания того что ты хочешь, вместо кода очень нравится.
iroln
24.07.2024 12:29Обычно было как на этой картинке, поэтому через месяц перестал этим пользоваться. Ещё пробовал Codeium в виде плагина для Idea, невозможно пользоваться из-за того, что весь тот бред, что он генерирует, вставляется по кнопке tab. Особенно выбешивает, когда пишешь на Python. Хочешь вставить отступ, а вставляется экран какого-то мусора.
Revertis
Это на каком языке? И почему даже в заголовке?
Negat1v9
Статью видимо тоже copilot написал.
Revertis
А местами так и кажется.
exTvr
Или не кажется.
toxicmt Автор
Было бы прикольно если бы это копайлот за меня такой текст написал да :D Ошибку поправи!
melodictsk
И тут такая же ошибка :)
toxicmt Автор
Разв?
nochkin
Всё нормально. У них просто неправильная русска языка.
YMA
Эт прждврмнна оптмзци. Есл скртит лшн бквы, мжн сэкнмт до 30% мст! Прктчск без ущрб читблнсти ;)
exTvr
Птчк, я прнс!
zetroot
Т бнк?
nochkin
.
Metotron0
Пмн ткй бнк в рклм Лпнк
Metotron0
-- Слчйн дбл
Vugluskr1
Потому и перестал. Копилот умнее