📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

DevCon.5 9. 1С:Напарник. Как ИИ помогает в 1С-разработке

Сообщество 1С-разработчиков17:20

Transcription

Всем привет. Меня зовут Дмитрий Степанин. Я работаю в группе искусственного интеллекта компании 1С на проекте "Напарник". Хочу рассказать о том, как этот проект помогает разработчику 1С.

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

Это комплексная система для помощи разработчику в написании кода. В ней используется система искусственного интеллекта, нейросети в ней, а также, в связи с тем, что 1С — это не просто файл с кодом, это сложное комплексное решение, это конфигурация, используются средства для сбора, анализа, индексации, подбора глобального контекста. Именно поэтому мы сделали ставку на один из IDE с её довольно продвинутыми инструментами анализа, семантического, синтаксического анализа, сниппетов кода.

Поэтому на данный момент клиент реализован в виде плагина для 1С IDE. Он пока не поддерживает конфигуратор среды разработки. И для того, чтобы разработчику начать пользоваться "Напарником", необходимо установить этот самый плагин для 1С.

Чтобы это сделать, нужно перейти по QR-коду, по ссылке на сайт code.1c.ru. Там есть раздел "Как подключить". Важно обратить внимание на то, что должна быть актуальная версия 1С:EDT 2023. И довольно часто мы сталкивались с тем, что и Java не соответствовала той версии, которая рекомендуется на релиз 1С. То есть Java обязательно нужно обновить. Так как система серверная, то необходимо добавить в исключения брандмауэра домен code.1c.ru. Другие домены для работы системы не используются.

Также мы рекомендуем использовать для установки плагина репозиторий. Мы сталкивались с тем, что у многих, ну, у некоторых пользователей есть проблемы с блокировкой JAR-файлов. Для них мы добавили возможность скачать плагин вручную и вручную его установить. Однако в таком случае вы теряете возможность автообновления системы. И к такому способу стоит прибегать только если нет другого, если нет других возможностей.

Для работы системы необходимо добавить, сформировать и добавить в настройках плагина ключи доступа. Раздел "Ключи доступа" появляется, если вы зайдёте в свою учётную запись. Там вы сможете, когда на сайте, вы сможете добавить себе новый ключ, а ключи не обязательно создавать под каждый проект. Достаточно одного ключа на человека.

Если всё пошло, если всё вы сделали правильно, то в нижнем правом углу появляется зелёненькая лампочка и надпись "1С:Напарник". Если же в процессе возникли какие-то проблемы, обратитесь в раздел "Поддержка". Там есть скрипт по устранению неполадок. И написано, что делать, если ничего не помогло, как собрать необходимую информацию, какие логи нам нужны для анализа вашей ситуации.

Тоже представляет собой напарник на практике. Ну, основной флагманский инструмент — это генерация кода непосредственно в IDE. Код, а "Напарник" предлагает вам его продолжение. В идеальном случае пишет код за вас. Однако в этом режиме "Напарник" не правит тот код, который был написан ранее. То есть, если вы хотите что-то отрефакторить, изменить, модернизировать, как-то проставить комментарии, то для таких задач существует второй режим, режим чата, который вызывается через контекстное меню, предоставляя там наиболее распространённые сценарии работы.

Также у нас в планах другие режимы. Мы рассчитываем добавить "Напарник" в работу с Git, в средства проверки и анализа конфигурации, в какие-то визоры, связанные с созданием метаданных, метаданных, форм и прочее. Но сейчас два основных режима — это режим чата и режим продолжения кода.

В режиме продолжения кода, если всё, ну, в идеальном случае наоборот пишет код за вас. Вот на данном слайде мы видим ситуацию, когда, в принципе, информации достаточно, что нужно делать понятно, и "Напарнику" никакие дополнительные инструкции с вашей стороны не нужны. Он просто пишет для проверки инквизитов в данной процедуре, ну, данной функции.

Если же всё не так очевидно, то у вас есть такой мощный инструмент, как инструкция в виде комментария. То есть вы можете просто думать вслух, указывая "Напарнику", направляя его в нужное русло. При этом важно учесть, что комментарии, они не все формулировки одинаково полезны. Во-первых, не имеет смысла здесь писать инструкции какие-то. "Напиши мне процедуру такую-то" и "Напиши функцию такую-то". Нет, ну это не диалоговый режим. Здесь достаточно написать описание. Ну, и описание это должно быть максимально близко к тому, что "Напарник" видел в этих конфигурациях. То есть это описательное описание, возможно с примерами, как в данном случае.

А комментарий может содержать значительно больше. Ну, он может содержать, во-первых, постановку задачи, а во-вторых, описание данных, с которыми предполагается работа. Это может быть как какие-то, какая-то структура, пришедшая, например, из какого-то веб-запроса, как в данном случае, да? То есть эта структура не представлена нигде в контексте, однако её можно передать в комментарии, и "Напарник" будет с ней работать. А также в комментарии можно указать структуру некоторых там регистров, если они в расширении, если мы их пока по каким-то причинам не подтягиваем из глобального контекста. То есть комментарий — сильный, мощный инструмент, который можно использовать для решения контекста "Напарника", добавления ему необходимой информации.

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

Также я уже упоминал, что 1С довольно объёмно по, а, ну, конфигурация — это достаточно большой объём информации. И если мы в каждой процедуре, функции, которую вы пишете, будем передавать всю конфигурацию, то, во-первых, не хватит никаких вычислительных ресурсов. Это будет очень долго, очень затратно. А во-вторых, даже если сделать какую-то огромную сеть, которая работает с неограниченным контекстом, всё равно самой сети будет очень тяжело понять, что актуально в данный момент именно здесь и сейчас. Поэтому мы используем традиционно для такого рода решений подход. У нас есть, а, отдельное решение, отдельная нейросеть, которая подбирает контекст. Выбираю, если вы находитесь в процедуре "При получении сообщения", она ищет в базе конфигурации, ищет те, а, процедуры и функции, которые могут быть полезны при написании этой процедуры.

И данный слайд иллюстрирует ситуацию, когда процедура в контексте конфигурации, называемая "Обработать содержание", а, пользователь хочет вызвать её в процедуре "При получении сообщения". И, ну, и результат не соответствует ожидания. "Напарник" предлагает какую-то другую процедуру, которая в данном контексте не представлена. Мм, этот случай похож на тот, который был описан ранее. То есть, возможно, она считает, что подобную процедуру стоило бы описать, но важно не это. Важно, что две процедуры "При получении сообщения" и процедуры "Обработка содержания" они семантически не связаны друг с другом. То есть и не видят их в одном контексте. Видит того, как "Обработать содержание" может быть полезно при получении сообщения. Однако, если немного поработать с неймингом, если написать, что, а, не просто "Обработка содержания", а "Обработка содержания сообщений", то неожиданно, или наоборот, ожидаемо "Напарник" подтягивает процедуру в контекст и уже отсказывает её, не только её вызов, но и передаёт ей правильный параметр.

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

Также используйте нейминг, подходящий по смыслу, то есть связывайте процедуры, которые логически связаны, чтобы в них было какое-то и семантическое сходство, если это возможно. Если процедура полностью универсальна, то можно указать там в комментарии, что эта процедура работает в таком-то контексте. И не воспринимайте вызов процедур, которые ещё не реализованы в данном контексте, обязательно как ошибку. Возможно, эту процедуру стоит реализовать.

Перейдём, наверное, к контекстному инструменту, к режиму чата. Там тоже есть свои тонкости. А начну с документирующего комментария. А его основная особенность, отличие от других режимов заключается в том, что для вызова документирующего комментария не нужно выделять текущую процедуру. Достаточно находиться где-то в её, а, ну, внутри этой процедуры. Это, с одной стороны, не очевидно, но мы пришли к выводу, что так гораздо удобнее, чем выделять процедуру, которая может занимать там пару экранов или выделять только какой-то там заголовок. То есть вам достаточно просто находиться где-то в рамках самой процедуры. Сам механизм документирующего комментария вполне понятен. Это востребованная функция, которая достаточно рутинна, и сам Бог велел её приложить на плечи "Напарника".

Второй режим, второй сценарий работы — это код. Вот как раз он работает с выделением кода. Тут для него обязательно нужно выделить то, что вы собираетесь изменить. И далее вы используете свободную текстовую инструкцию для. Важно понимать, что, ну, здесь вообще проявляются сильные стороны IDE, такие как работа с языками, знания многих языков, работа с текстом, то есть формулировки, имена переменных. Но, в принципе, в данном режиме можно использовать и работу с кодом. То есть попросить переписать через там цикл, через заполнение структуры, через добавить и прочие актуальные вещи. Добавить комментарии, изменить разметку. В общем, этот режим самый такой, самый востребованный на текущий момент. При этом важно учитывать, что всё-таки чат не совсем предназначен для генерации кода, и лучше использовать для таких задач прямое предложение кода.

Вот здесь есть пример, когда задача по написанию регулярного выражения в чате, она не совсем отражает ожидаемое поведение. При этом в продолжении кода, ну, желательно, конечно, использовать не объект, а платформенное средство. С этим мы будем отдельно также работать. Но тем не менее здесь процедура более-менее соответствует тому, что пользователь хотел видеть.

Есть ещё два режима. Есть "Объяснение кода" и режим "Код". "Объяснение кода" мы обязательно будем развивать, потому что это интересное направление, но оно явно требует проработки. То есть, ну, например, актуально было бы выделить вызов какой-то процедуры и её краткое описание без необходимости переходить к определению или, а, описание кода практически в таком же виде было бы удобно при формировании автоматических коммитов в Git. Но на текущий момент основное применение — это, а, вот интересный кейс, так как чат работает на двух языках, наши коллеги из язычного сегмента разработки используют описание кода для русских процедур на английском. Это довольно удобно и прикладную ценность.

Также функция ревью много обсуждалась, есть много предложений, как её можно улучшить. На текущий момент ревью — это в основном используется нейросетевая информация, полученная на приёме. И она не всегда, ну, то есть это общее представление нейросети о том, как должен выглядеть код. Это не всегда соответствует прямо стандартам и лучшим практикам 1С. Мы будем обязательно добавлять туда взаимодействие с базой стандартов, с механизмами проверки конфигурации IDE, с инструментами внешними, такими как SonarQube. Сейчас это просто некие рекомендации, которым вы можете рассмотреть, ну, как советы. То есть это не строго по канонам 1С.

Наверное, на этом я закончил. Присоединяйтесь к тестовой эксплуатации. Переходите на сайт code.1c.ru. Пишите свои предложения на dev.1c.ru. Спасибо.