Агент Github Copilot теперь выглядит более многообещающе, чем пару месяцев назад

Агент Github Copilot теперь выглядит более многообещающе, чем пару месяцев назад

10 июня 2025 г.

1. Github Copilot в VS2022

Я работаю над разработкой приложения .NET8/C#/ASP.NET8/EF8, которое в настоящее время составляет около 123 000 строк кода (SLOC), из которых 50.000 представляет собой модель EF-датабазы, в Visual Studio 2022.

У меня есть подписка наGitHub Copilot Pro +лицензия. До сих пор инструмент ИИ был хорош для задач с ограниченным количеством. Я хотел попробовать новый режим агента GitHub Copilot. Ниже приведены заметки из моей обычной работы.

2. Анекдотичный опыт работы с реальным проектом ASP.NET8

Все ниже было сделано с:

  • Visual Studio 2022, 17.14.4
  • GitHub Copilot (GHC). Лицензия Copilot Pro+
  • Агент режим, GPT-4O, GPT-4.1, Claude 3.7 Сонет

2.1 Обзор кода DLL-слоя ACCESS

  • Контекст-это слой DAL (.dll) в этот момент-~ 62.000 SLOC C# (и он будет расти), а из этого 50.000-модель EF (EF-Database-Prirst).
  • Это своего рода ограниченная задача, Clear C# Code, .net8
  • Хотел сделать обзор кода и посмотреть, что это сделает это искусственное искусство
  • (Run1-ghc (gpt-4o))Моя просьбаКомандованиек GHC (GPT-4O) был (*)
    • Я хочу, чтобы вы провели обзор кода проекта tbserverui.data.csproj. Определите возможные дефекты программного обеспечения и места для возможного улучшения кода.
  • Ответ был быстрым, и он сказал, что он «прочитал 786 файлов» проекта. Это звучит как хорошее начало.
  • Повтор был довольно мелким. Я вроде ожидал, что это немного поймет, что делает этот .dll, но это дало мне предложения, такие как «избегать магического числа/строк» ​​в коде и «метод рефакторов, потому что у него слишком много параметров». Я делаю такие вещи, как «Shrowen String до Max 30 символов», прежде чем я помесчу это в базу данных, а номер 30 в порядке, он просто запутал бы код, если бы я определил Const Thirty = 30 или аналогичный мусор. Мне это не нужно, проблемы, которые у меня есть, в 1000 раз сложнее, а ИИ дает бесполезные предложения.
  • Мои ожидания были выше. Ни один человек не может сохранить и память 786 файлов, поэтому я надеялся, что машина ИИ загрузит все это и выяснит несколько более умных советов, которые я не вижу, потому что есть так много файлов. Я на самом деле знаю места, где я сделал «грязный код», чтобы заставить вещи работать и оставить там, чтобы усовершенствовать его позже. Эта вещь GHC этого не видела.
  • (Run2-ghc (gpt-4o))Я запускаю несколько раз одинаковую команду (*) к GHC (GPT-4O), чтобы дать ему возможность улучшить ответ. Забавно, я сказал, что это снова и снова и снова (та же команда), но она больше не читала все 786 классов, только 2 из них. Я видел это раньше, что GHC не следовала даже полным инструкциям по предложению, он делает то, что хочет.
  • (Run3-ghc (gpt-4o))Мне нужно было закрыть все открытые файлы в редакторе, чтобы он перечитывал все 786 файлов. Зачем мне это делать? Я давал явные команды полного предложения (*) для просмотра всего проекта?
  • Опять же, довольно формальный ответ, несколько страниц текста, но нет реального субстанции.
  • (Run4-ghc (GPT-4.1))Я попробовал ту же команду (*) GHC (GPT-4.1).
  • Ответ похож, формальный, с предложениями, если я хочу «более глубокий обзор, я должен попросить его специально для определенного класса/файла». Есть много файлов; Зачем мне спрашивать файл по файлу?
  • (Run5-ghc (Claude 3.7 Сонет))Я попробовал ту же команду (*) GHC (Claude 3.7 Сонет).
  • На этот раз в ответ было довольно медленно. Он сказал, что читал 786 файлов. Значит ли медленно, что он что -то делает? Я наконец получил ответ.
  • Первое, что забавно. ИИ вещь читала мои собственные комментарии в коде, а не в самом коде, и говорил мне, что я звучу «небезопасно» в своих комментариях. Мне не нужно мнение по поводу моих комментариев, мне нужно мнение о моем коде. Основываясь на моих комментариях, это дает оценку моего кода. Если бы я поместил комментарий, такой как «Это отличный метод», он думал, что это здорово? Итак, цитата GHC здесь:«Комментарий« Надеюсь, этого достаточно, чтобы предотвратить инъекцию SQL », указывает на неопределенность в отношении мер безопасности. Это должно быть тщательно проверено и подтверждено. Если моя компания видит это, им нужно будет нанять младшего парня, они всегда уверены, что они освещали все возможности, независимо от того, какой код они пишут.
  • Он выбрал некоторые интерфейсы в библиотеках, которые помечены как «устаревшие», и я использую их намеренно, потому что владелец проекта хочет, чтобы я держал их все на.net8, и мне нужно было бы обновить проект на .net9, чтобы использовать последние интерфейсы. GHC здесь довольно мелкий, такие комментарии введут кого -то в заблуждение в проекте, который не может быть составлен.
  • Хорошо, это обнаружило некоторые свойства, которые он считает изменчивыми, я читаю только от них, но да, они не помечены как только для чтения, поэтому в многопоточном чтении могут быть проблемы ... Я не видел этого раньше…
  • Некоторые другие незначительные комментарии ... ничего, что я не нахожу полезным ... рефакторировать то или иное, разделить интерфейс на несколько небольших интерфейсов, все изменения косметического кода.
  • Хорошо. Достаточно обзора кода на данный момент.

2.2 Создайте новый метод на основе существующего

  • Задача состоит в том, чтобы создать аналогичный метод на основе метода шаблона C# 200 линий C#
  • Задача для GHC состояла в том, чтобы создать метод доступа DB на основе аналогичного, просто для того, чтобы обратить вспять роли с контрактом. Оригинальный метод-~ 200 строк кода C#, но он использует EF-CORE, LINQ и некоторые классы библиотеки данных и ссылки на некоторые классы DTO. Тем не менее, это довольно просто, мне понадобится 15 минут, но я понимаю, что слой DAL в этот момент составляет ~ 62,000 SLOC (и он будет расти), и из этого 50 000-модель EF (EF-Database-первое).

2.2.1 GHC (GPT-4O)

  • (Run1-ghc (gpt-4o))Моя просьбаКомандованиеGHC (GPT-4O) был (**):
    • На основе методов accounts_accountsforContractlistdt в файле #dbwork.contracts.cs создайте аналогичный метод, когда переключаются роли контракта и учетной записи, называемые Contracts_contractsforaccountlistdt. Контекст - это проект tbserverui.data.
  • Таким образом, он работал, как на полных 4 минутах, делая что -то, автоматизированное VS2022, открытое окно исходного кода, вводило текст, затем попробовал сборку, и в отчете не показаны ошибки во второй сборке. Вы выглядела впечатляюще, что автоматизация VS2022 заставила меня впервые почувствовать, что есть кто -то еще. Посмотрим, что это сделано.
  • Это создало метод. Добавлено в правильный файл (не тот же файл, где оригиналAccounts_accountsforContractListdt (dbwork.accounts.cs)Метод, но для dbwork.contracts.cs.
  • Я изучал содержимое сгенерированного метода. Это выглядит довольно хорошо. Правда в том, что я много работаю с надлежащим именом всех классов в проекте, поэтому он мог найти DTO просто на наименовании соглашений. Но все же, он нашел правильные классы DTO. Я не машина/компилятор, но метод выглядит хорошо для меня. Я не могу увидеть все детали, если они полностью правы.
  • Одна из проблем, которую я заметил ранее с Gen-AI, заключается в том, что они производят много текста, и довольно сложно и трудолюбиво, чтобы правильно его просмотреть. Это случилось в прошлом, я принимал код Gen-AI, но я не заметил небольшую ошибку, которую я не заметил.
  • Таким образом, ключевые запросы LINQ/EF выглядели нормально. Он даже предназначен для немецких имен из базы данных, это Konto, Vertrag Table, а не счета, контракты. И первичные ключи - это konto_nr, vertrag_nr и т. Д., Он решил это, и похоже, что он делает правильную фильтрацию.
  • Он добавил некоторую обработку к результату, который является специфическим для контрактов, и не является симметричным методу учетных записей, который я его проинструктировал. Похоже, это довольно умно, похоже, что он нашел его где -то в исходном коде проекта и вставил здесь. Да, предположение правильное, оно должно быть там. Это мой код, который копируется здесь, просто даже я не могу полностью просмотреть (не помните), если все детали в порядке. Это, конечно же, не знает, что такое «пользователи EBICS», но он просто увидел свойство «NumberebicsUsers», и оно взломало его, найдено где -то в методе проекта, который вычисляет это свойство и назначила его. И предположение было хорошо.
  • Есть один логический флаг, который остался неиспользованным, но это незначительная вещь по сравнению со всеми остальными. Я установлю этот флаг.
  • Итак, выглядит как хорошая работа. Это компилируется. На этот раз нет галлюцинированных свойств/методов. Гораздо лучше, чем то, что я видел раньше для GHC.
  • Давайте посмотрим, что сделают другие LLMS.

2.2.2 GHC (GPT-4.1)

  • (Run2-ghc (GPT-4.1))Моя просьбаКомандованиек GHC (GPT-4.1) был (**) снова.
  • Это начало работать над чем -то. Затем в окне чата он загружался как 6 файлов из проекта. Затем он сказал, что будет загрузить 786 файлов проекта. Затем он ломается, с ошибкой в ​​VS2022:
    • {"Ошибка": {"Сообщение": "Подсказка токенов 64602 превышает предел 64000", "Код": "MODEL_MAX_PROMPT_TOKENS_EXEDEDED"}}
  • Это не удалось. Некоторая ошибка GHC. Давайте перезапустим VS2022 и попробуем все еще раз.
  • (Run3-ghc (GPT-4.1))Моя просьбаКомандованиек GHC (GPT-4.1) был (**) снова.
  • Это было некоторое время. Из диалогового окна в чате (который на самом деле служит окном журнала) можно увидеть, что он загружал ограниченное количество файлов. Это было застряло, он не мог найти/загрузить какой -то файл модели C#. Он пробовал несколько раз и потерпел неудачу. Затем я вручную перемещался (на самом деле, я просто проверял, был ли там файл), и он продолжался.
  • Затем он предложил план изменений и остановился. Я искал, но ничего не было сгенерировано. Поэтому я только что напечатал: «Продолжайте свой план», и он продолжил и сделал это. И он создал код и создал его, и сборка была успешной.
  • Я посмотрел в решение, и это выглядело так же, как и выше, GPT-4O. По крайней мере, ключевые части, которые я проверил, одинаковы. Все комментарии сверху применяются здесь.

2.2.3 GHC (Клод 3.7 Сонет)

  • (Run4-ghc (Claude 3.7 Сонет))Моя просьбаКомандованиеGHC (Claude 3.7 Сонет) снова был (**).
  • Выполнение не удалось через 5 минут с сообщением:
    • {"Ошибка": {"Сообщение": "Подсказка токенов 95998 превышает предел 90000", "Код": "MODEL_MAX_PROMPT_TOKENS_EXEDEDED"}}
  • Это не удалось. Давайте перезапустим VS2022 и попробуем все еще раз.
  • (Run5-ghc (Claude 3.7 Сонет))Моя просьбаКомандованиеGHC (Claude 3.7 Сонет) снова был (**).
  • Выполнение не удалось через 5 минут. Ошибка была другой:
    • [Информация о разговорах] [CopilotClient] Copilot Внутренний ответ пользователя: Confrations.abstractions.auth.copilotuserdata; [Информация о разговорах] [CopilotModels] Вариант среды COPILOT_USE_DEFAULTPROXY Найден: FALSE; [Информация о разговорах] Статус автопилота: ОК. Статус значка копирования: активный
  • Я проверил. Мое интернет -соединение выглядело нормально. На этой машине у меня есть 190 Мбит/с/19 Мбит/с.
  • Давайте перезапустим VS2022 и попробуем все еще раз.
  • (Run6-ghc (Claude 3.7 Сонет))Моя просьбаКомандованиеGHC (Claude 3.7 Сонет) снова был (**).
  • Выполнение не удалось через 10 минут. Ошибка была:
    • [PersistedCopilototsessionRepository Ошибка] Ошибка Сохранение Обновленного сеанса: messagepack.messagepackserializationexception: не удалось сериализовать microsoft.visualstudio.copilot.copilotInteraction Значение; [Информация о разговорах] [CopilotClient] Copilot Внутренний ответ пользователя: Confrations.abstractions.auth.copilotuserdata; [Информация о разговорах] [CopilotModels] Вариант среды COPILOT_USE_DEFAULTPROXY Найден: FALSE; [Информация о разговорах] Статус автопилота: ОК. Статус значка копирования: активный

3. Заключение

Это, конечно, ограниченные тесты, включающие генерацию единого метода, основанного на четкой схеме. Однако даже при таких простых задачах GHC ранее либо полностью не удалось, либо создавал код, который требовал существенной ручной коррекции.

До сих пор улучшения драматичны по сравнению с двумя месяцами назад. В то время код, сгенерированный GHC, часто не собирался сразу же и страдал от нечетных синтаксических проблем, таких как неуместные или несоответствующие кронштейны вокруг кодовых блоков. Хуже того, он часто включал галлюцинированный метод или названия свойств, которых не было в проекте. Это не выглядело как значимый рабочий процесс.

Теперь сгенерированный код имеет правильный синтаксис, сразу же компилируется, и существуют указанные свойства/методы. На этот раз это на самом деле начинает выглядеть как правильный рабочий процесс. Агент GHC автоматизирует VS2022, поэтому на психологическом уровне на самом деле похоже, что кто -то другой превзошел контроль над вашими инструментами разработчиков.

Я буду продолжать тестировать его/работать с более сложными сценариями, ноGithub Copilot AgentРежим уже кажется значительным шагом вперед в качестве.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE