
«Чувствует, что кто -то другой кодирует»: мой сюрреалистический опыт с агентом Copilot в ASP.Net8
13 июня 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 Сонет
Задача:
- Задача состоит в том, чтобы создать аналогичное существующее на основе представления.
- Контекст - WebApp (.dll) в этот момент - ~ 66.000 SLOC, разные технологии, C#, JavaScript, JQuery, Bootstrap, HTML, CSS, ASP.NET8, MVC, Razor.
- Задача GHC состоит в том, чтобы создать новый компонент для представления на основе существующего шаблона. Это 4 файла в разных технологиях. Тем не менее, это основано на схеме, практически просто контракт и учетная запись необходимо переключаться. Это компонент, поэтому он не зависит от основного кода приложения, и он ограничен.
- Компонент использует Ajax, поэтому необходимо создать метод контроллера для компонента
2.1 Создайте новый метод AJAX вAsp.netКонтроллер MVC на основе существующего
- То есть 80 строк метода C# кода, просто ссылается на DataCcessLayer dll tbserverui.data. Это основано на шаблонах; Это не должно быть проблемой.
2.1.1 GHC (GPT-4O)
- (Run1-ghc (gpt-4o))Моя просьбаКомандованиеGHC (GPT-4O) был:
- На основании методов accountslistrontractdt_ajax в файле #accountscontroller.cs создайте аналогичный метод, когда переключаются роли контракта и учетной записи, называемые Contractslistforaccountdt_ajax. Контекст - это проект tbserverui.webapp. В реализации вам нужно будет использовать Contracts_contractsforaccountlistdt из проекта tbserverui.data.
- Он сработал 3 минуты, он добавил метод, он пытался построить, построил. Я посмотрел на это. Это хорошо. Это было основано на шаблонах, но это сделало именно то, что я бы сделал вручную. Просто поместите это в AccountController, я хочу его в ContractController.
- Итак, я попросил переместить этот метод в другой класс контроллера, и это так. Он был построен снова, чтобы убедиться, что все это строит.
- Похоже, что GHC имеет некоторые проблемы, если проект/решение VS2022 не открывается в соответствующей папке/View/Tab. Это не мог найти файл C#. Поэтому я немного помог, наблюдая за GHC-Chat-Window, который практически является журналом того, что делает, и когда он не смог найти какой-то файл, я перенес VS2022 к этому файлу/классу. Тогда это было откровенно и продолжало работать.
- Я впечатлен. Это похоже на то, что у вас есть компетентный коллега, который получает от вас инструкции, и вы можете делегировать работу ему/ей.
- И команды/инструкции, которые я дал GHC, вполне нормальны, как я бы дал какому -то коллеге, необходимо не слишком много «быстрого инженерного псевдоистского трюка». Довольно естественный язык. Хорошо, я признаю, я был скептически скептически в прошлом, но это похоже на настоящий ИИ.
- Тот факт, что GHC автоматизирует VS2022, обладает большим психологическим эффектом ... действительно, похоже, кто -то другой превзошел контроль над вашими инструментами разработчиков.
- Я использую git, и это моя линия защиты; Там я наблюдаю все изменения, внесенные в файлы проекта, и проверяю каждое из них, прежде чем принять его. Я как бы не доверяю, что ИИ, несмотря на мой проект, без четкого контроля над каждой линией, которая собирается измениться.
- Я читаю код, сгенерированный AI, но в прошлом произошло, что я пропустил некоторые небольшие изменения AI, добавленные, и это создавало проблемы позже. То, что произошло раньше, сгенерированный AI код в случае сбоя метода вернул пустой объект из конструктора по умолчанию, и я обычно возвращаю NULL в случае сбоя, поэтому он перевязал логику в методах вызов верхней части. Я просто не видел такого небольшого отклонения в коде, созданном ИИ. Вот почему я говорю, будьте осторожны, ИИ следует некоторым соглашениям о текстовом поле (от того, кто знает, какой автор), а не ваши конвенции проекта.
- В этом случае я читаю 80 строк кода, и это выглядит нормально, но я не компилятор, просто человек, может быть, где -то небольшая ошибка.
2.2 Создать новыйAsp.netПросмотр-компонент на основе шаблона (4 файла)
- Это немного сложнее. Он все еще основан на шаблонах, но включает 4 файла и несколько различных технологий.
- Тем не менее, компонент является задачей с ограниченным счетом.
- С другой стороны, многиеAsp.netРазработчики не знают и не используют компоненты просмотра.
2.2.1 GHC (GPT-4O)
- (Run2-ghc (gpt-4o))Моя просьбаКомандованиеGHC (GPT-4O) был:
- На основании AccountscountscountableSelectableViewComponent View-CompontectableViewComponent в файле #accountsForCONTRACTELECTABLEVIEWCONENT.CS создайте аналогичный компонент представления, где переключаются роли контракта и счетов, называемые ContractSforaccountSelectableViewComponent. Контекст - это проект tbserverui.webapp. AccountsForCONTRACTSELECTABLEVIEWCONENT состоит из нескольких файлов: 1) AccountsForCONTRACTSELECTABLEVEIVECONENT.CS; 2) AccountsForContractSelectableViewComponent_Model.cs; 3) accountsForCONTRACTSELECTABLEVIEWCONENT_VIEWMODEL.CS; 4) AccountsForContractSelectable_Default.cshtml. Вам нужно будет обратиться к AJAX Method Contractslistforaccountdt_ajax в сгенерированных Contractsforaccountselectable_default.cshtml.
- Это работало всего несколько минут, и это создало эту работу, но это было не очень хорошо. Он создал классы для первых 3 файлов и включил их в существующие файлы. Может быть, мне следовало сказать это для создания новых файлов? Он не создал Razor View .cshtml, что довольно сложно, 477 строк кода, большинство JavaScript. Давайте посмотрим, сможем ли мы сделать это.
- (Run3-ghc (GPT-4O))Моя просьбаКомандованиеGHC (GPT-4O) был:
- Перемещать классы ContractSforaccountselectableViewComponent_Model, ContractSforacCountselectableViewComponent_ViewModel, ContractSforaccountSelectableViewComponent в свои собственные файлы. Места файлов такие же, как и файлы модели, на которых они были сгенерированыПолем
- Это сделало это правильно, и теперь это выглядит лучше. Может быть, сложные задачи должны быть разбиты на подзадачи.
- Я создал вручную просмотреть File ContractsForCountselectable_default.cshtml, потому что похоже, что это сбивает с толку GHC.
- Этот вид бритвы с большим количеством JavaScript, так что давайте посмотрим, как это происходит
- (RUN4-GHC (GPT-4O)) Моей команды запроса GHC (GPT-4O) была (***) :
- На основании Razor View File AccountsForCtractSelectable_default.cshtml Create File ContractsForaccountselectable_default.cshtml в качестве представления для компонентов ContractsForacCountselectableViewComponent, где переключаются роли контракта и учетных записей. В File ContractsForacCountselectable_default.cshtml Создать столбцы DataTable так же, как и в contractslist.cshtml. Вам нужно будет ссылаться на вызов AJAX на ContractSlistForaccountdt_ajax в контрактах контроллера.
- Это не удалось. Некоторые ошибки. Я попробую еще раз
- (Run5-ghc (gpt-4o)) моя команда запроса в GHC (GPT-4O) была (***)
- На этот раз он создал созданный код. Давайте проверим.
- Это было совсем не хорошо. Он использовал неверный класс модели и создал некоторый беспорядок с JavaScript
- (Run6-ghc (GPT-4O)) моя команда запроса в GHC (GPT-4O) была (***)
- Замените все раздел JavaScript в ContractSforacCountselectable_default.cshtml с JavaScript из AccountsForCONTRACTELECTABLE_DEFAUT
- Результат был создан, но JavaScript не очень хороший. Это укорачивает это много.
- (Run7-ghc (gpt-4o)) моя команда запроса в GHC (GPT-4O) была (***)
- Замените все раздел JavaScript в ContractSforaccountselectable_default.cshtml с JavaScript из AccountsForContractSelectable_default.cshtml и просто примените его для использования Contracts_contractslistdt_json Object. Скопируйте также все комментарии в коде из AccountForContractSelectable_default.cshtml, просто примите его в новый файл. Копировать также разделы, которые запускаются моделью?
- Я прочитал результат, который, возможно, составляет 330 строк JavaScript, которые вызывают некоторые библиотеки. Я нашел небольшую ошибку, а не синтаксис, но она не передала какого -либо параметра. VS2022 не может проверить синтаксис на JavaScript, встроенный в бритву, но я следовал за ним вручную, и он выглядит твердо. Только работа в браузере покажет любые ошибки. Но он следовал за схемой, импровизировал некоторые вещи, хорошие импровизации. Сделал полезную базу для меня, чтобы изменить вручную. Это не последовало за моим шаблоном для кронштейнов; Это следовало правилам учебника, но хорошо. В одном месте, похоже, он искал код для правильного метода значков и нашел правильный. Он даже добавил несколько умных, основываясь на некотором флаге, включая/исключая код JS. Мне было все равно, есть ли есть метод JS «мертвого кода». Он даже очистил некоторые методы «мертвого кода», которые я изначально добавил в исходный файл, но позже заброшен. Я действительно могу понять, что GHC хочет сделать и почему. Он получил правильно, которые являются основными ключами в счетах/контракте, и которые должны быть переданы другим методам после отбора. Это довольно умно.
- Таким образом, у него была проблема с этим файлом MVC Razor с большим количеством JavaScript, и вам необходимо помощь с ним. Он сразу же сделал 3 простых файла, и это потребовало помощи с 4 <sup> th </sup> одним.
- Очень важно: я не заметил кода мусора в JavaScript или очевидный беспорядок, как я видел 2 месяца назад.
- Конечно, компонент необходимо протестировать, но, похоже, я получил солидную кодовую базу, с несколькими модификациями (~ 6 строк) сгенерированным кодом. И 7 приглашенных команд вообще.
3. Заключение
Это все еще было задачей, тщательно выбранным для GHC, в том смысле, что он основан на шаблонах и составлял компонент из основного кода. Он должен был только клонировать код и адаптировать его из объекта учетной записи к организации контракта. Но раньше GHC потерпел неудачу даже в таких «благоприятных сценариях Gen-AI». Таким образом, приведенные выше показаны 7 подсказок, которые создали ~ 500 строк кода, с небольшими вмешательствами от человеческого программиста ~ 6 строк кода и некоторыми пустыми созданием файлов. И команды находятся на практически естественном языке, не требуется «псевдо-наука», я спонтанно перестал использовать # для маркировки имен файлов, и все это сработало.
Я всегда заявлял, что быстрое инженерное проектирование - это «поражение для ИИ», и с развитием ИИ он устареет, поскольку общение естественного языка будет преобладать.
Впечатление **: Эта версия агента GitHub Copilot (GHC) намного, намного сильнее, чем GHC, я видел несколько месяцев назад **. В коде нет беспорядка, который я видел 2 месяца назад **. Я не видел ни одного галлюцинированного метода или свойства, и код можно создать, что означает синтаксис. Вы чувствуете, что присутствует кто -то другой и взял на себя управление вашими инструментами. VS2022 жив, и я ничего не делаю. Это на самом деле строит и повторяет сборки после ошибок.
Это не похоже на «парное программирование» или «программирование сверстников», как в маркетинговых историях. GHC довольно пассивный, поэтому кажется «интеллектуальным генератором кода». Но это выглядит эффективно усилие. В приведенной выше работе я в целом сделал 7 команд в GHC и получил около 500 строк полезного кода. Но вам по -прежнему нужен программист, занимающийся человеком, чтобы отфильтровать плохие попытки и настраивать код в нескольких местах.
Оригинал