Agent Mode в GutHub Copilot – что там нового
Относительно недавно в GitHub Copilot для Visual Studio Code завезли "агентный" режим в дополнение к классическому режиму редактирования.
Теперь agent mode доступен простым смертным (а не только в версии Insiders). Но что же изменилось?? Он ведь как будто бы как генерировал код в ответ на наши "а можешь добавить два интерфейса и кнопку в синий перекрасить", так и продолжает генерировать... Давайте разбираться, что же всё-таки революционного предлагает agent mode.
Итеративные изменения
Было: в edit режиме мы в ответ на запрос "создай api-хэндлер для получения данных о пользователе" получали несколько изменённых файлов. На этом всё.
Стало: в agent-режиме кроме того, что меняются файлы, копилот-агент добавляет дополнительные итерации – проверяет корректность кода, например, смотрит, везде ли мы переименовали переменную, правильно ли у нас выглядят импорты; если его что-то смущает, он исправляет код, пока ему не покажется правильным. То есть грубо говоря, агент накидывает дополнительные итерации на свой собственный аутпут.
Исполнение команд в терминале
Было: сам по себе edit-mode тоже мог генерировать команду для терминала (чтоб запустить тесты введите pytest tests/), но мы должны были вручную копировать эти команды и вставлять в терминал. Если тест выплёвывал ошибку, опять же, приходилось вручную копировать лог ошибки и вставлять его в диалоговое окошко, или же использовать специальные директивы, которые "захватывали" аутпут терминала.
Стало: в ответах агента рядом с генерируемым кодом для терминала появилась приятная необременительная кнопочка "выполнить", при нажатии на которую открывается отдельный терминал, в котором исполняется нужная команда. При этом агенту не нужно говорить "так, а теперь глянь-ка в трэйс ошибки и исправь", он уже подключён к этому терминалу и в той же сессии может проанализировать ошибку и пойти исправлять файлы – без нашей указки!
Планирование
Тут уже идут более абстрактные преимущества. В релизах пишут, что агент может "планировать комплексные задачи". На практике это значит, что агент должен быть лучше приспособлен под более общо-сформулированные абстрактные запросы.
Если в edit-мод мы привыкли писать довольно конкретные запросы типа "На бэке изменились интерфейсы, теперь он ждёт в запросе с фронта ещё три поля, которые мы должны посчитать на фронте таким способом: ..."
То в agent-мод можно вкидывать просьбы наподобие "а сделай-ка мне ещё одну страничку и там пусть будет игра в бинго, сгенерированная под профиль пользователя".
Дело в том, что агентный режим натренирован разбивать большие задачи на мелкие шаги, и эти шаги он как раз и выполняет итеративно. Можно сказать, что вызов агента – это то же самое, что последовательный вызов edit-мод с "порционными" запросами.
Когда что использовать?
- Edit Mode: Для быстрых и изолированных изменений, когда требуется точечное вмешательство.
- Agent Mode: Для более сложных и многосоставных задач, требующих координации изменений в нескольких частях проекта.
На практике, никто, конечно, не запретит вам использовать agent мод для изменения имени переменной) А edit мод – для того, чтоб построить красивое веб-приложение с нуля. Но всё-таки лучше помнить про сильные стороны каждого режима, чтобы не упираться в ограничения инструмента там, где можно было бы получить больше пользы с меньшими усилиями.
Что до личного опыта...
То задачи правда можно ставить более абстрактные и проблем с ними стало меньше. Но тем не менее и агент, как и edit мод, периодически упирается в какую-то проблему, долго и упорно долбится в закрытую дверь, меняя файлики по кругу – добавили строчку, убрали строчку, добавили... Смотреть на это всё так же больно, и всё так же приходиться идти в гугл / гпт и тд, чтоб решить ошибку самому. AGI всё ещё не с нами... По крайней мере не в гитхаб копилоте.