Copilot – это результат работы трех гигантов: OpenAI, Microsoft и GitHub. Эту нейросеть разрабатывали для того, чтобы поменять ваш подход к разработке.
Copilot обучен на миллиардах строк открытого исходного кода, которые предоставил GitHub. Знает много языков.
В том числе, Copilot знает 1С – за это нужно сказать большое спасибо комьюнити, которое заливает свои проекты на GitHub. За счет этого нейросеть смогла обучиться на коде 1С, и мы можем использовать ее подсказки.
Copilot можно использовать в нескольких IDE.
-
Visual Studio Code – это редактор кода, один из самых популярных на данный момент. Он работает с разными языками программирования, в том числе с 1С.
-
Vim или NeoVim – это консольные IDE. Если у вас нет графического окружения, но вам нужно исправить код, вы ставите себе эту программу, можете поставить на нее Copilot и разрабатывать свои проекты.
-
Visual Studio – это основная IDE для разработчиков .NET и C++ от Microsoft.
-
И семейство IDE от JetBrains – для Java, для Android, для Spring, и другие их отдельные продукты для разных языков программирования.
Во все эти IDE-шки встраивается Copilot, со всеми он хорошо работает.
Для 1С-разработчика лучшим выбором будет VSC – Visual Studio Code, потому что все комьюнити работает именно в этом редакторе кода. Для 1С в VS Code есть расширение с подсветкой синтаксиса и другие плагины – все, что нужно для комфортной разработки.
Как установить Copilot в VS Code
В Visual Studio Code у вас есть вкладка «Расширения». Во вкладке «Расширения» вы пишете «Copilot» – у вас появляется три расширения:
-
Первое – это GitHub Copilot. Это основное расширение, которое отправляет запросы на сервер, там обрабатывает данные, получает ответ и дает вам какие-то подсказки.
-
Второе расширение, GitHub Copilot Labs, не работает с языком 1С. Оно работает с популярными языками типа Python, Java, .Net и прочего. Это расширение, которое помогает вам исправлять выделенный код. Например, вы можете выделить код и проверить его на уязвимости. Или узнать, скомпилируется код или не скомпилируется, есть ли в нем ошибки. Или выделить код и попросить Copilot переписать его с Python на C# (или на Java).
-
И GitHub Copilot Chat – это ChatGPT в мире Copilot, последняя их разработка, которую они представили не так давно на открытое тестирование. Это такой продукт, в котором вы можете писать свои запросы, получать готовый код, применять к нему какие-то готовые методы. Дальше я покажу.
Обязательное расширение для Visual Studio Code – это Language 1С (BSL). Это именно то расширение, которое включает вам подсветку синтаксиса и проверку вашего кода – там есть статический анализатор кода.
Без этого расширения вы будете разрабатывать на языке 1С, как в текстовом редакторе – без ничего.
Первые два месяца Copilot бесплатный.
Чтобы включить Copilot, вы должны авторизоваться на сайте GitHub, зайти в личный кабинет и в разделе Billing включить, что будете пользоваться GitHub Copilot.
Вам дадут два месяца свободного доступа, далее 10 долларов в месяц.
Нельзя оплатить картами РФ. Нужно оплачивать картами Visa, MasterCard.
И для работы Copilot из Российской Федерации, к сожалению, нужен VPN.
Когда вы установили и активировали все нужные расширения, Visual Studio Code попросит вас авторизоваться через GitHub, чтобы проверить, есть ли у вас оплата для GitHub Copilot – у вас будет показано уведомление «Войдите с помощью GitHub».
Вы заходите на сайт, вбиваете там логин, пароль, GitHub отправляет ответ обратно в Visual Studio Code, и все – у вас все работает.
Как пользоваться Copilot
Допустим, у нас есть какая-то типовая конфигурация и типовая задача – загрузить данные из Excel в документы «Реализация товаров и услуг»
Мы в конфигураторе создали обработку, добавили форму, разместили на ней команду «Загрузить данные» и в модуле формы создали обработчик команды с пустым телом.
Если мы выгрузим нашу конфигурацию в файлы, откроем их в Visual Studio Code как проект и начнем что-то писать, выпадет подсказка Copilot.
Допустим, мы написали НачатьПомещениеФайлаНаСервер, и Copilot серым цветом предлагает добавить параметр «ЗагрузитьДанные». Мы можем эту подсказку принять кнопкой табуляции либо просто продолжить писать код, игнорируя то, что нам подсказывают.
Поначалу подсказка будет откровенно очень плохая, потому что нет контекста – нейросеть не знает, что вам подсказывать, никаких методов 1С, свойств или конструкторов нейросеть не знает. Она может догадываться только из того, что есть в открытом исходном коде.
Если мы написали буквально две строчки кода, никакой подсказки ждать не придется.
Что Copilot ожидает от вас для предоставления самых эффективных подсказок
Напишем передачу файла на сервер полностью. Укажем, что мы хотим передать переменные «ЗагрузитьДанныеЗавершение» и «ПараметрыДиалога». И попробуем проинициализировать переменную «ЗагрузитьДанныеЗавершение».
Начинаем писать:
ЗагрузитьДанныеЗавершение = Новый ОписаниеОпове
Copilot начинает дописывать за нас конструктор ОписаниеОповещения:
ЗагрузитьДанныеЗавершение = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
-
первым параметром он передает строку «ЗагрузитьДанныеЗавершение»;
-
вторым параметром – ЭтотОбъект.
Откуда он это взял? В большинстве случаев, когда мы пишем ОписаниеОповещения, наша переменная, которой мы присваиваем это оповещение, по названию совпадает с названием метода, который мы хотим вызвать потом коллбэком. Нейросеть это проанализировала и предложила нам, что вот вам строка, вот вам в строке «ЗагрузитьДанныеЗавершение».
А второй параметр ЭтотОбъект – это тоже абсолютно стандартная ситуация. Обычно, когда 1C-разработчик пишет оповещение, он передает именно ЭтотОбъект, чтобы в этом модуле вызвать свой метод.
В конструкторе ОписаниеОповещения есть еще больше параметров, но в основном программисты ими не пользуются, поэтому Copilot берет самые популярные выражения и пытается их подставить под контекст, который у нас есть в модуле.
Мы приняли подсказку, которая была в ОписаниеОповещения, начинаем описывать переменную «ПараметрыДиалога», проинициализировали ее. Дальше начинаем писать:
ПараметрыДиалога.Заголовок =
Copilot подсказывает, что здесь должна быть какая-то строка, например, «Загрузка файла».
Опять же, контекста очень мало. У нас есть только метод, который называется «ЗагрузитьДанные», в котором мы помещаем файл на сервер. Исходя из этого Copilot предполагает, что мы будем загружать какой-то файл. Отсюда и подсказка в заголовок.
Далее мы пишем:
ПараметрыДиалога.Фильтр =
Нейросеть анализирует код и понимает, что надо смотреть какие-то похожие конструкции. Самый часто вызываемый фильтр для ПараметраДиалога – это файлы Excel, потому что загружают в основном файлы Excel.
Обратите внимание, что она грамотно подставляет значение в Фильтр: сначала идет представление, которое будет в диалоге: «Файлы Excel», в скобках маска, а дальше – вертикальная черта и маска файлов. В этом случае она может подсказать достаточно качественно.
И дальше мы пишем:
ПараметрыДиалога.Множе
И опять же идет подсказка МножественныйВыбор = Ложь. Это в принципе стандартные несложные вещи, которые пишут все 1Сники.
Контекст важен!
В чем логика? Я не просто так заострял внимание на контексте.
В первом случае я здесь начинаю писать:
ПараметрыДиалога.Мно
Но нейросеть, повторюсь, не знает свойств и методов наших объектов. Она пытается подсказать либо из того, что есть на GitHub, либо по правилам построения русского языка. Поэтому она написала самое простое:
ПараметрыДиалога.Много = Ложь;
Единственное, что здесь можно сделать, это просто продолжить писать код – и либо будет подсказка более релевантная, либо Copilot просто не будет ничего подсказывать, чтобы мы дописали сами.
Во втором случае я удалил заголовок и так как контекста стало больше – мы описали, что будем фильтровать файлы Excel, будем выбирать всего один файл, Copilot может дать в заголовок более осмысленную строку: «Выберите файл для загрузки данных». Такая строка пользователю будет более понятна, чем просто «Выберите файл».
Далее по контексту. Все это мы писали в области ОбработчикиКомандыФормы.
В этой области в основном пишется клиентский код, с директивой &НаКлиенте. Поэтому когда после слов «КонецПроцедуры» мы опускаемся на две строки, пишем знак амперсанда, Copilot анализирует код, который есть на GitHub, и понимает, что в этой области обычно пишется клиентский код, подсказывает &НаКлиенте.
Если же мы напишем область ВспомогательныеПроцедурыИФункции и поставим знак амперсанда, Copilot выдаст подсказку &НаСервере, потому что в областях СлужебныеПроцедурыИФункции или ВспомогательныеПроцедурыИФункции на форме в основном пишется серверный код – мы в этих областях обычно пишем &НаСервере.
Установка контекста через комментарии
Я рассказал про возможности подсказок – когда Copilot пытается за вас закончить вашу строку, но это лишь малая часть того, что умеет нейросеть.
Мы можем генерировать наш код с помощью комментариев или документации к методам.
Например, мы написали метод ЗагрузитьДанныеЗавершение, передали необходимые параметры, пишем:
// Если
Запускается нейросеть, она пытается проанализировать, понимает, что это будет завершение загрузки, понимает, что мы пишем комментарий, понимает, что мы пишем «Если», значит должно быть какое-то условие.
Самое банальное условие, которое в основном пишут все программисты – это условие на то, выбран файл или нет. И она и подсказывает:
// Если пользователь не выбрал файл, то ничего не делаем
Нам это нравится, мы принимаем эту подсказку, спускаемся на одну строку вниз и получаем новую подсказку – код:
Если ОписаниеПомещенногоФайла = Неопределено Тогда
Возврат;
Обратите внимание, нейросеть никогда не заканчивает условия и циклы, не пишет КонецЕсли и КонецЦикла сразу.
Потому что возможно, что после принятия подсказки вы захотите нажать Enter и продолжить писать код на следующей строке. Чтобы вы не возвращались, не спускали КонецЕсли пониже, чтобы вам не нужно было форматировать код, она никогда не закрывает ни условия, ни циклы.
Мы приняли этот код, спустились на строку ниже, если мы не начали писать код, она предлагает просто закрыть условие, поставить:
КонецЕсли;
Если вы примете эту подсказку, форматирование сдвинет КонецЕсли влево, и все будет красиво оформлено.
Поскольку мы начали писать комментарии к коду, Copilot, как нейросеть, очень любит документировать каждый шаг. Если у вас есть какое-то тело метода, вы делаете какие-то действия, она будет пытаться задокументировать все, что есть.
Мы приняли подсказку по проверке на описание помещенного файла, спускаемся на две строки ниже, сразу получаем комментарий:
// Получаем путь к файлу
Мы можем принять эту подсказку, написать этот комментарий, и тогда следующей подсказкой будет именно сама процедура получения файла – Copilot напишет какой-то код.
Если же мы здесь хотим, допустим, сохранить наш файл предварительно в каталог временных файлов, мы можем написать свой комментарий, например:
// Сохраняем полученный файл в каталог временных файлов
Тогда мы получим другую генерацию кода.
А если мы, допустим, напишем свою процедуру ПрочитатьФайл, получим файл из временного хранилища и спустимся на две строки, Copilot снова попытается задокументировать следующую строку вне зависимости от того, что в этой процедуре мы ни одного комментария еще не написали.
Он в любом случае будет предлагать свои варианты того, как должен работать метод, а ваше дело – соглашаться или не соглашаться с этим.
По документации к методам. Мы до этого создавали процедуру, в ней внутри писали комментарии.
Сейчас мы можем просто в комментарии написать документацию для генерации самого метода:
// Процедура ПрочитатьФайл – читает файл, передает
// данные для создания документа реализации
// Параметры:
// АдресФайла – адрес файла во временном хранилище
После этого нейросеть задумывается секунд на 10-15, потому что это достаточно большой участок кода. И пытается сгенерировать нам весь метод до конца.
В данном случае Copilot для чтения Excel создает COMОбъект, хотя использовать COMОбъекты – это не так хорошо, не так красиво. Copilot, как нейросети, все равно насколько этот код хороший или качественный, это самый часто используемый метод для чтения Excel-файлов, значит это какая-то best practice. Он будет подсказывать то, что написано в GitHub.
Но Copilot всегда пытается подстроиться под ваш стиль написания. Если вы первый раз проигнорируете и напишете свою реализацию чтения файла. Первый раз напишете, второй раз напишете. На третий раз Copilot уже не будет вам подсказывать COMОбъект, он будет брать вашу реализацию, которую вы привыкли делать.
Как пользоваться чатом
Это были возможности по документации к коду. Теперь про сам чат.
Я не стал использовать COMОбъект. Пошел на Инфостарт, забил в поиск: «методы эффективной загрузки из Excel». Там есть отличная статейка по загрузке Excel через построитель запроса. Я скопировал с сайта код, вставил к себе в модуль. Но он выглядит некрасиво – нужно убрать лишние пробелы и выровнять отступы.
Мы можем выделить весь участок кода и написать в чат: «Напиши этот код красиво».
Copilot задумается, и будет исправлять наш код так, как он это видит – как это примерно описано в наших репозиториях на GitHub.
Но мне в этом методе не нравится:
-
переменная ПЗ, потому что я не люблю аббревиатуры в коде;
-
и переменная ТаблицаЗначений, потому что я не люблю названия Массив и ТаблицаЗначений.
Поэтому я могу сказать: «Напиши этот код красиво, ПЗ замени на ПостроительЗапроса, а ТаблицаЗначений на Данные».
В этом случае он исправит код, исправит форматирование и переименует мои переменные.
Как и зачем использовать Copilot в ежедневной разработке
Вот такой код у нас получился – это все генерация Copilot вместе с созданием документа реализации и заполнением табличной части. Здесь все полностью сгенерировано автоматически, кроме той части с переменными ПостроительЗапроса и Данные, которую я редактировал с помощью Copilot чата.
Этот метод ужасный, он нечитаемый, он не поддерживаемый – такой код писать нельзя. В этом случае мы можем выделить весь метод полностью и попросить Copilot разделить этот код.
Прямо так и пишем в чат: «Раздели код на несколько методов». И Copilot будет вам генерировать разные методы, которые вы можете копировать к себе.
В улучшенном варианте нейросеть видит этот код следующим образом: это какая-то основная процедура, в которой мы сначала получаем данные, потом инициализируем объект, заполняем табличную часть, и этот объект записываем.
Внутри метода ПрочитатьФайл просто идет наш ПостроительЗапроса и получение файла из временного хранилища. Нейросеть просто переместила тот код, который мы писали, в функцию. А эту функцию вызвала из основного метода.
Далее она разделила две функции: СоздатьДокументРеализации и ЗаполнитьТабличнуюЧасть – чуть позже скажу, почему.
Все создатели нейросетей – неважно, это будет ChatGPT, это будет Copilot, это будет еще какая-то нейросеть – они все говорят одну и ту же фразу:
Мы создаем нейросети для того, чтобы вы могли задавать ей какие-то вопросы на своем родном языке.
Copilot не исключение. Вам не нужно знать досконально английский язык, вам не нужны какие-то навыки для подачи запроса в чат или написания комментариев.
Вы можете просто писать так, как вы это видите, так, как вы думаете, что должно быть. Copilot уже интерпретирует и попытается дать вам самую релевантную выборку по коду.
Мы рассматривали варианты создания обработки и всегда работали в контексте этой обработки: нам нужно было создать какой-то определенный объект, прочитать какой-то определенный Excel.
Но мы можем просить Copilot создавать какие-то абстрактные методы, которые могут понадобиться везде.
Например, можем задать вопрос в чат Copilot: «Напиши метод для удаления дублей из массива».
Получаем вот такой код:
-
создаем новый массив для уникальных значений;
-
перебираем исходный массив – проверяем уникальность каждого значения;
-
выбираем только значения без дублей;
-
возвращаем обратно.
Или просим: «Напиши метод для фильтрации таблицы значений».
Обратите внимание, что Copilot сгенерировал документацию, где описал, какие параметры передаются, какое возвращаемое значение.
Да, в параметрах нет типизации по стандартам, когда мы должны написать через тире для первого параметра тип ТаблицаЗначений, а для второго – Структура. Это все нам нужно будет дописывать самим.
В любом случае код очень похож на тот, который можно скопировать и вставить к себе в базу.
Но при этом, если вы сейчас активируете GitHub Copilot, начнете им пользоваться в VS Code и скажете: «Напиши мне метод для фильтрации ТЗ», скорее всего, вы получите код на Python или на JavaScript. Потому что Copilot сходу не понимает, что вы от него хотите.
Вы должны написать: «Напиши мне метод для фильтрации ТЗ на языке 1С». В этом случае, скорее всего, вы получите примерно такой код:
ТаблицаЗначений.Фильтровать(Отбор)
Опять же, Copilot не знает, какие методы и свойства есть у наших объектов, поэтому вы должны будете давать ему очень-очень четкий запрос.
-
Когда вы получили непонятный код, вы пишете: «Нет, я хочу метод для фильтрации таблицы значений на языке 1С через запрос».
-
Вы понимаете, что вам выдается код, там у параметра вместо амперсанда стоит знак процента. Вы пишете: «Мне нужен метод для фильтрации ТЗ на языке 1С через запрос, вместо знака процента используй амперсанд».
-
Вы понимаете, что у вас в строке 287:
Запрос.Текст = “ВЫБРАТЬ ИЗ &ТаблицаЗначений ГДЕ Истина»
но не передан параметр таблицы значений. Вы пишете: «Напиши метод для фильтрации таблицы значений на языке 1С через запрос, и, пожалуйста, передай таблицу значений в этот запрос».
Когда я такие вещи объясняю своим коллегам или другим людям, с которыми я общаюсь, они говорят: «Я напишу этот код быстрее, чем нейросеть».
Я с этим спорить не буду. Действительно, написать код быстрее, чем кто-либо, можно.
Мы вообще очень любим писать код. И когда какой-нибудь человек, который работает во франчайзи или на почасовке, говорит: «Я закрываю 200 часов», ему говорят: «Я не верю, что ты столько часов пишешь код». В том-то и дело, что программист не всегда должен писать код, программист должен думать. И Copilot старается изменить наши привычки, поменять подход к разработке.
-
Мне не нужно сидеть и набивать этот код руками. Я не хочу думать, как именно мне сделать цикл из Отбора, чтобы у меня все элементы отбора правильно расставились. Я просто хочу, чтобы у меня был метод, который отбирает таблицу значений по отбору.
-
Мне все равно, как он будет реализован. Мне просто нужен этот метод. Я потрачу 3 минуты, напишу разные промпты, получу тот результат, который мне нужен, скопирую его к себе в базу и буду работать дальше.
-
Моя задача как программиста – думать о связи методов, о связи объектов между собой, о том, чтобы мой код был легко поддерживаемый, чтобы сам бизнес-процесс был более гибкий.
-
Моя работа – не в том, чтобы я сел и написал 300 строк кода. Моя работа – в том, чтобы я автоматизировал бизнес-процесс и чтобы в последующем мы не стреляли себе в голову, когда будем его изменять.
Вы можете в Copilot Chat писать не только «напиши мне код», «сгенерируй код», «исправь код». Вы можете давать какие-то отдельные запросы на работу с кодом, допустим, попросить: «Объясни этот код».
Выделяете код в области редактирования и пишете в чат «объясни код», он пытается вам объяснить, что там делается.
Когда у вас есть какой-то большой запутанный метод, вы можете выделить его и написать: «объясни кратко суть, что здесь происходит». Copilot постарается объяснить.
Таким же методом я пишу документацию к своему коду. Если я написал какие-то функции – какие-то нагенерил здесь, какие-то написал руками – закинул все в Visual Studio Code, выделил весь код, сказал «дай мне документацию», он мне над каждым методом напишет:
-
какие параметры я передал;
-
для функции напишет возвращаемое значение;
-
бывает, он пишет примеры использования кода – как его нужно вызвать, если он зависит от каких-то других методов и так далее.
Такая штука должна упрощать вам жизнь. Она не должна по вашему запросу написать всю Enterprise-машину, но в каких-то местах она будет вам помогать, чтобы снять с вас часть обязанностей. Для этого и нужна нейросеть.
Альтернативы
Copilot платный, но у него есть альтернативы, в том числе бесплатные.
Есть еще другие нейросети, которые мы можем использовать, и не только в Visual Studio Code.
Во-первых, сейчас расплодилось очень много нейросетей, которые просто служат прослойкой между ChatGPT 3.5 и вами.
Если вы напишете в любом поисковике запрос «нейросеть для написания кода», вам вывалится просто тонна всяких разных нейросетей с непонятными названиями. Эти нейросети просто дают вам чат, точно такой же, как у ChatGPT, и обещают написать код по запросу.
Работает это примерно так же, как ChatGPT – если вы будете запрашивать 1С-ный код, что-то вы получите. Но не факт, что это будет что-то хорошее.
Кстати, многие из этих нейросетей еще и платные.
Tabnine – это одна из самых старых нейросетей, которая есть на рынке, и самая дорогая – ее стоимость от 12 долларов.
Но она умеет работать с Eclipse – те, кто работает в EDT, могут попробовать себе ее поставить, могут попробовать, как она работает.
Tabnine тоже обучалась на GitHub, и у нее нет заявленной поддержки 1С – так же, как и у Copilot.
Используйте на свой страх и риск. Понравится, не понравится, зря или не зря потратите деньги – это уже вам решать.
Следующее – это Amazon CodeWhisper.
Нейросеть бесплатная для домашнего использования. Нет заявленной поддержки 1С, но обучалась на коде, который написан на серверах Amazon – вряд ли 1С там, в принципе, возможна.
Но если вы пишете на каких-то еще языках программирования – Python, Java, C#, JS, неважно – можете поставить, она будет для вас абсолютно бесплатна. Просто установите, попробуйте что-нибудь написать, попробуйте что-нибудь сгенерить.
И Codeium – абсолютно бесплатная нейросеть для частного использования.
Наверное, самая большая – большое количество поддерживаемых IDE-шек, в том числе Eclipse.
И там заявлена поддержка более 70 языков, которые есть на GitHub. Возможно, в них входит 1С, но они не расписывают все 70 языков, они просто говорят: у нас поддержка такого количества языков.
Тоже нужно скачивать, нужно проверять. Если вам вдруг понравится, зайдет, то как альтернативу можете использовать ее.
По доступности в России без VPN – не подскажу, потому что я пользуюсь только одной нейросетью.
Вопросы и ответы
Вы сказали, если переписать процедуру несколько раз, сделать ее более оптимальной, то Copilot переучится. Он переучится целиком для организации?
Только под конкретного пользователя. Она старается даже копировать ваш стиль написания кода.
Я работаю с нейросетью полгода. Я ее установил в феврале, оплатил. После этого я начал ее активно использовать в работе, в написании скриптов на OneScript и в работе в 1С.
И со временем я увидел, что она запоминает, как я пишу код. Она запоминает, как я его декомпозирую, как оформляю, как пишу комментарии – при подсказках все это сохраняется. Лично под меня, не под компанию.
Я это веду к тому, что в компании есть эксперт, архитектор. Он сидит, переучивает Copilot для того, чтобы джуны могли быстрее учиться. Потому что очевидно, что Copilot сейчас не сможет заменить разработчика. И если ты сам нехорошо разбираешься, она тебе качественный код не напишет. А можно ли надрессировать ее одному пользователю, чтобы потом другие могли это использовать?
Только вы передадите свой аккаунт кому-то.
Есть аккаунты для организации. GitHub мало что пока пишет про Copilot. Нет такой документации, прям обширной, чтобы точно сказать. Но, возможно, на аккаунте организации будет возможность обучения сразу всей организации.
А нет у него инструкции «напиши код, как Иванов»?
Возможно, в будущем будет. Сейчас нет.
Есть в документации Microsoft какое-нибудь предупреждение о том, что Copilot все-таки забирает твой код и куда-то его отправляет на дообучение?
Официально нет. Потому что вы работаете с нейросетью на своих проектах. И официально Copilot не говорит, что он берет ваш код и куда-то отправляет. Но хитрые люди на Хабре, которые умеют немного в реверс инжиниринг, говорят, что да, ваш код забирается, на вашем коде Copilot дрессируется. Не знаю, лично под человека это делается или полностью под нейросеть, но такое есть.
У нас в 1С большинство запросов имеет огромное количество временных таблиц значений. Copilot такое понимает?
Не пробовал сложные запросы ему скармливать, не пробовал сложные запросы на нем писать.
Простые запросы либо запросы, которые нужно генерировать на лету – как это было с фильтрацией – он пишет очень хорошо.
Но для того, чтобы построить сложный запрос, нужно знать контекст. А Copilot контекста не знает. Он не знает вашу базу данных.
Мне, наоборот, интересно, сможет он написать документацию на основании такого сложного запроса с временными таблицами?
Скорее всего, напишет. У нас все запросы написаны на русском языке. Copilot умеет разбирать русский язык. Он умеет примерно написать, что там происходит.
Единственное, что он не скажет вам, эффективный этот запрос или нет. Но что запрос выполняет, скорее всего, он напишет.
Знает ли Copilot какие-то методы оптимизации? Допустим, если ему дать запрос в цикле и сказать оптимизировать этот код, что он сделает?
Если вы скажете: «вытащи запрос из цикла», он вытащит. Но его сначала нужно научить, потому что он подстраивается под вас. Потом, впоследствии, вы будете все время сокращать свой промпт, который вы будете отправлять к Copilot. Но изначально, чтобы добиться того, что вы хотите, вы будете писать простыни.
А есть ли у Copilot возможность интегрироваться с каким-нибудь языковым сервером?
Программа еще слишком молодая. Насколько я знаю, и Copilot Chat, и сам Copilot пока находятся на стадии открытого тестирования, они еще не сказали, что выпустили релиз, и уже все работает.
Вы говорите, что Copilot подстраивается под разработчика и поначалу ему для обучения нужны подсказки. Сколько времени прошло до того момента, когда он стал давать уже какие-то полезные, осознанные подсказки?
Показывать крутые результаты, которые можно заскринить, поделиться с друзьями, удивиться – ничего себе, как он умеет – он стал где-то через полтора месяца активной работы. Это был вечерний кодинг на OneScript для open source, не для профессиональной разработки. Но он уже начал выдавать мне какие-то результаты, которые меня начали удивлять.
Из этих полутора месяцев две недели вы будете просто обучаться им пользоваться. Потому что вы тоже должны научиться им пользоваться, не только он вами.
Есть ли какие-то варианты завести Copilot в конфигураторе?
У Copilot пока нет API, возможно, в будущем появится. Вы не можете сейчас взять, написать какую-нибудь программу, в которую прокинете Copilot до любой вашей программы, куда вы хотите. Пока такого нет.
Можете оценить время, затраченное для того, чтобы Copilot через полтора месяца тебя удивил? Два часа в день, час в день, полчаса в день,
Два-три часа в день, три-четыре дня в неделю. Получается двенадцать часов в неделю. Двенадцать часов умножаем на шесть недель, получается семьдесят часов. Всего лишь сто часов затратите, и все, Copilot ваш.
Вы говорите, Copilot не может работать с объектной моделью. А если, допустим, в теории, скормить ему на основании метаданных полностью структуру базы данных и потом весь код, который описан во всех модулях – дать ему на обработку, а потом попытаться его спросить?
Как вы ему скормите? У вас не хватит HTTP-запроса, чтобы отправить все это дело на сервер.
А если порциями?
Вы можете пытаться, но если просто будете ему скармливать комментарии и не просить ничего взамен, он не будет их получать. Вы должны задать вопрос или команду: «мне нужно написать такой-то метод», «мне нужно исправить этот код».
Мы не можем ему дать прочитать что-то, кроме кода. Если вы просто скажете: «Прочитай мне эту структуру», он скажет: «Извините, я работаю только с языками программирования». Читать какие-то структуры, не имеющие отношения к языкам программирования, он не будет.
А если показать ему набор каких-то модулей и сказать: «Найди ошибки в этом модуле» или «Переделай метод в этом модуле». Как-то можно дообучить?
При разработке на 1С мы очень сильно привязаны к контексту. А всякие умные люди, которые пишут умные книги типа «Чистой архитектуры», говорят о том, что ваш бизнес-процесс должен быть оторван от ваших данных. Он должен быть полностью абстрактным.
И Copilot, как и любую нейросеть, следует воспринимать с той же самой стороны. Вы пишете абсолютно абстрактный код для абсолютно абстрактного бизнес-процесса. А потом вы руками добавляете туда данные.
Не надо думать о том, что вы сейчас скормите структуру базы данных или структуру метаданных, и после этого Copilot сразу начнет вам создавать объекты по запросу. Такого, скорее всего, не будет вообще. Скорее всего, он продолжит генерировать вам абстрактный код. Но вам же от этого будет лучше.
Но у вас в докладе были примеры не абстрактного кода – тот же пример с Excel и так далее.
Это просто обычный пример на уровне:
Документ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(“Рога и копыта”);
Если мы берем что-то сложнее, маловероятно, что что-то хорошее получится. И надо понимать, что этот код, который я здесь скринил – это еще и результат моей полугодовой работы с Copilot. Это он не сам пишет, это он меня пародирует.
Есть ли способ передать кому-то базу знаний с вашими наработками? Может быть, кэш из Visual Studio Code скопировать?
Возможно, поможет передача логина пароля от GitHub. Но я не буду утверждать точно. Я не пробовал передавать никому свою обученную учетку. На это не каждый готов.
Они даже не говорят, что забирают наш код к себе на сервера для анализа, чтобы выдать нам какую-то подсказку. И они не говорят, что в кэше VS Code есть какой-то волшебный файлик, в котором лежит то, чему Copilot у вас обучился. Возможно, он лежит у них на серверах. Надо тестить.
Возможно, надо просто подождать пару лет, и на Хабре или на Инфостарте будут появляться статьи о том, как мы сейчас круто внедрили Copilot и как мы всем раздали обученную модель.
Я могу сказать, что подписался на бета-тестирование Copilot, и порой он обновлялся и сбрасывал все навыки, которые умел. Например, я просил: «Напиши мне такой-то код», а он мне его писал на 1С, но в стиле C#. Видимо, при переустановке он что-то чистил у себя и после этого забывал о том, как со мной надо работать.
А если в режиме чата ему контекст скормить, он его воспримет или нет?
Я в докладе показывал работу с фильтрацией таблицы значений, где давал ему инструкции: «Это сделай вот так, а это вот так». Если у меня есть объект с какими-то свойствами, и я хочу, чтобы эти свойства заполнились такими-то значениями, тогда он сделает что-то похожее.
Получается, что так же можно и из метаданных какие-то структуры спарсить.
Слишком большие объемы текста он не примет. Там ограничение на количество символов. И в запросе, и в ответе тоже. Он может вам написать полмодуля и сказать: «Извините, я здесь на полуслове останавливаюсь, потому что я не могу передать больше текста одним разом».
Но дальше он продолжает же, правильно?
Если мы говорим про чат, то он просто там обрубит текст, либо вы будете ждать минуту, пока он там подгрузит еще.
А если мы говорим про область редактирования кода, то да, с каждым переходом на следующую строку он будет добавлять еще.
А нет информации, какой размер контекста в чате у него?
Я хотел замерить, но не пришлось как-то. Примерно на страницу кода.
А временные лаги какие-то есть?
Если пишешь код – секунд пять, пока он выдает автодополнение либо строку кода.
Если мы говорим про чат, от 15 секунд до 40 секунд. 40 секунд – это прям огромный объемный метод.
А если скормить ему описание из синтакс-помощника и сказать: «Используй для написания алгоритма эту функцию», будет ли он корректно ее использовать? Может ли он выдавать ответы не на основе тех данных, которым он обучился на гитхабе?
Скорее всего, нет. Но если это есть на гитхабе, вы можете просто сказать, используй эту функцию, и он будет ее использовать.
Если вы передадите ему подсказку по этому методу из синтакс-помощника – маловероятно. Вам будет реально проще написать свой код несколько раз, а потом уже пользоваться Copilot, чтобы он подсказывал вам в этом стиле.
*************
Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT 2023.
Приглашаем на конференции Инфостарта 2025 годаINFOSTART TEAMLEAD EVENT
Не только для разработчиков, но и для руководителей отделов разработки, тимлидов и ИТ-директоров. INFOSTART A&PM EVENT (Анализ & Управление проектами)
Практическая конференция для аналитиков и руководителей проектов 1С. |