Transcription
Без нашего участия. Агент сам выгружает метаданные, пишет код, сам грузит изменения обратно в конфигурацию и сам себя проверяет своим написанным тестом. Мы возвращаемся только, когда всё готово. Кому надоело горбатиться в конфигураторе и хочется за минимальное время получить результат, смотрите внимательно.
Привет, жёлтый мир. Сегодня разберёмся, как правильно нагнуть разработку на 1С и заставить Нейросеть писать код без нашего участия, как завещали великие капиталисты. То, что я покажу - это простейший механизм, так сказать, зачатки конвейера. Но эти зачатки позволяют, главное за 10 минут настроить железного болвана так, чтобы он закрыл задачу от и до.
Суть простая. Мы один раз настраиваем среду, скармливаем агенту техзадания и уходим пить чай. Мы будем использовать инструменты, которые дают приемлемый результат здесь и сейчас, не требуя от нас ручного труда.
Почему просто переписываться с нейросетью - это чушь собачья? Вы тратите больше времени на объяснение нейросети, чем на сам кодинг. Сегодня Клод выдаёт тебе рабочий кусок, а завтра начинает галлюцинировать и придумывать методы, которые в 1С никогда не было. Второй момент - экономика. Тут ведь как токены - это тебе не фантики от конфет, а это живые деньги. В наших широтах под серым небом лишних ресурсов не бывает. Если ваш агент начнёт 10 раз переспрашивать одно и то же, пускай пузыри, вас бюджет на подписку испарится быстрее, чем надежда на солнечный день в ноябре.
Чтобы не платить бессмысленную сырость в кошельке, мы внедрим систему контроля, превратим бестолковый искусственный интеллект в автономного исполнителя, который знает своё место и не тянет из кармана лишнего.
Инструмент номер один - специфический навык или, как говорят за кордоном, скил обучение агента работе с платформой 1С напрямую. Обычно как бывает? Вы просите искусственный интеллект написать код, потом идёте в конфигуратор, вручную создаёте объект, копируете текст и занимаетесь бесконечной выгрузкой, загрузкой конфигурации через файлы. А это и есть та самая рутина, на которую мы в наших широтах время тратить не будем.
Я использовал готовый репозиторий другого автора на Гитхабе, через который агент сам будет управлять конфигуратором. В основе там обычные батфайлы. В них прописаны жёсткие команды для нашей жёлтой коробки. Это набор инструкций, который объясняет нейротиагенту, как общаться с 1С командную строку без всяких визуальных интерфейсов. Мы ценим прямоту, поэтому будем говорить с базой напрямую.
Как это работает на программном уровне? Агент получает доступ к исполняемому файлу Ex не напрямую, а через батфайл и начинает отдавать ему приказы в пакетном режиме. 1S. Часть первая. Агент сам без лишних вопросов выгружает всю вашу конфигурацию в папку проекта в виде обычных XML-файлов. Теперь вся изнанка метаданных у него перед глазами, и вам не нужно самому нажимать выгрузку. Дальше агент, как обычно, пишет нужный код. Дальше он его сам проверяет и потом очередным шагом он загружает эти изменения обратно в конфигуратор через пакетный режим с помощью того же самого скила. Вот и всё. Вы в это время можете смотреть в окно на мокрый асфальт или пить крепкий чай. Агент сам открыл капот, сам перебрал движок и сам его завёл обратно.
Важный момент для параноиков. Все эти манипуляции происходят строго у вас на машине. В файле настроек, который надёжно спрятан в недрах проекта, прописаны пути к базе, логины и пароли. Агент берёт их оттуда как ключ от сейфа и использует для подключения. На заморские сервера эта информация не уходит.
В итоге мы получаем полную автономность. Выдали задание, например, сделай документ приход с пятью реквизитами. Агент молча выгрузил XML, прописал структуру, загрузил обратно, обновил базу, доложил. Сделано. Ни одного лишнего клика, ни одной минуты, потраченной на рутину. Только холодный расчёт и пакетная автоматизация.
Но написать код - это полдела, его надо проверить. И тут мы подходим к самому интересному. Агент не просто пишет код, он пишет тест для этого кода. Как это выглядит? Когда агент загрузил правки в базу, он не бежит к вам за похвалой и проверкой, он создаёт тестовую обработку или пишет проверочный модуль, запускает его и смотрит результаты. Если тест выдаёт ошибку, агент это видит. Он сам анализирует, где накосячил, исправляет код и запускает цикл разработки заново. Выгрузка, правка, загрузка, тест. Итак, до победного конца вы получаете результат только тогда, когда железяка сама убедилась, что всё работает. А это и есть работа на результат с минимальными трудозатратами.
Итак, мы начнём с того, что подготовим структуру каталогов. У меня рабочая база находится в подкаталоге каркас 01. Там же находится мой файл 1CD, то есть стандартная база файловая 1S. Я создал такой же подкаталог рядом, но добавил к нему слово прош, то есть там будет каталог для работы с нейросетями. Каталог этот изначально пустой, но я сразу создал в нём две папки. Первая папка - это docs, чтобы там хранилась документация, чтобы нейросеть тратила меньше токенов, потому что она сама может создать этот подкаталог. Ну, я ей немножко облегчу жизнь и создал его самостоятельно. Дальше у меня есть ещё подкаталог src, в котором будут храниться разобранные файлы 1S. То есть, когда мой агент или я самостоятельно захотим выгрузить нашу конфигурацию, вот эту 1CD, файлы XML и BSL, этот каталог будет для этого использован. Ну, в нём добавлено ещё два подкаталога, чтобы потом различать конфигурацию и внешнюю обработку, если нам понадобится работать с внешними обработками.
Далее нам понадобится скачать с Гитхаба специальный скилл, который умеет работать с БАД-файлами для пакетной работы с конфигуратором. Пакетная работа с конфигуратора поддерживается штатными средствами 1S, но нужно давать определённые команды с определёнными ключами. И чтобы это всё агент не думал, не тратил лишние токены, мы ему дадим вот этот готовый скилл, который написан вот этим автором, который у вас сейчас на экране. Ссылку на этот репозиторий также вы найдёте у меня. И этот автор написал уже готовый скилл. В нём уже есть батфайлы, в которых прописаны ключи запуска конфигуратора с правильными параметрами. Этот файл вам нужно скачать и разархивировать себе в папку, которая называется Carcas Proch. После того, как вы его развернёте в свой подкаталог, нужно будет создать подкаталог под названием точка cursor. В нём создать подкаталог под названием Skills и уже туда разместить те файлы, которые вы скачали из этого репозитория. Как устанавливать этот скилл, также написано в файлах Redmi, которые вы можете найти также в этом репозитории и установить самостоятельно. Если не получится, задавайте вопросы. Либо также вы можете пообщаться со своей нейросетью, и она вам подскажет, как установить именно этот скилл.
Также там есть образец вот исходных настроек, которые имеют название 1S-deathbase.bat. Там хранятся настройки к вашей базе данных и к исполняемому файлу 1S. Его нужно разместить отдельно, не в служебной папке, а вот здесь в корне вашего проекта. То есть у меня здесь подкаталог называется Carcas 01 Proche. Это каталог для нейросетей, как мы уже знаем. И в нём есть подкаталог cursor, docs, src. И сюда же нужно положить этот файл 1s-defasbat. И в этом файле внести исправление согласно инструкции. Всего лишь нужно в этом файле прописать путь к вашей базе и путь к исполняемому файлу экзешнику 1S. Всё очень просто, буквально устанавливается за одну минуту. Потом вы можете образец этих подкаталогов уже сохранить себе как отдельный некий шаблон с пустыми каталогами. Когда у вас появляется новая задача, новый проект, вы просто копируете из вашего шаблона, добавляете новое название, например, вместо каркас 01 пишите своё, и у вас буквально за 10 секунд готовая развёрнутая среда разработки.
Теперь переходим к следующему фундаменту. Это спецификация. Многие граждане думают: "Так, я сейчас напишу нейросети что-то типа: "Сделай мне отчётик по продажам", и оно само взлетит". Не взлетит, граждане. На выходе вы получаете, в лучшем случае неработающий кусок кода, а в худшем - полную базу ошибок. Почему? А потому что нейросеть, она как очень старательный, но абсолютно бестолковый стажёр. Если ему не дать чётких рамок, он начнёт фантазировать креативом там, где это делать категорически нельзя. Чтобы этого не случилось, используем файл спецификации. Это, если хотите, конституция нашего проекта. Это не просто ТЗ, это свод правил, свод законов, по которым агент обязан жить и работать.
В спецификации мы максимально подробно прописываем три критически важных момента. Первое - это технический контекст. Какая версия платформы 1С? Будем использовать БСП или нет? Какой режим совместимости? Агент должен чётко понимать среду обитания, чтобы не предлагать вам функции из будущего или, наоборот, из глубокого прошлого. Стандарты кодирования. Здесь мы бьём по рукам за плохой стиль. Прописываем, как называть переменные, как оформлять заголовки процедур и как структурировать запросы. Это нужно для того, чтобы код выглядел так, будто его описал крепкий профессионал, а не нейросеть в 3:00 ночи.
Почему это важно для экономики? Спецификация - это ваш главный ограничитель галлюцинаций. Когда у агента есть жёсткая спецификация, он перестаёт гадать. Он не тратит ваши токены на пустые размышления. "А что имел в виду автор?" Он берёт и делает строго по инструкции. Если провести аналогию, это как устав в армии. Если в уставе написано "копать от забора и до обеда", агент не будет предлагать построить на этом месте фонтан. Это экономит вам уйму времени на проверку и исправление ошибок. Меньше итераций, меньше затрат. Сделали один раз, сделали правильно, пошли дальше.
И, наконец, ещё один важный момент для тех, кто не хочет по 10 раз объяснять одно и то же. Это так называемый memory bank или, по-нашему, банк памяти. Тут ведь какое дело-то. Вот у любой, даже самой навороченной нейросети, память короткая. Она как золотая рыбка в аквариуме. Пока вы общаетесь в рамках трёх-четырёх сообщений, всё отлично. Но как только задача становится серьёзной, а переписка длинной, агент начинает плыть. Он забывает, от чего всё начиналось, какие объекты мы уже создали, какие ошибки исправляли полчаса назад. Контекстное окно переполняется, и нейросеть начинает либо нести ахинею, либо требовать от вас напоминать суть дела. А каждое напоминание - это ваши деньги, потраченные на лишние токены.
Чтобы этого не было, мы внедряем внешнюю память. Это не просто какой-то текстовый файлик, это целая структура из нескольких документов в формате Markdown, которые лежат прямо у вас в папке проекта. Как это работает на практике? Имеется файл контекста проекта. Здесь записано то, что мы вообще строим, какая версия 1S, основные метаданные задействованы. Это фундамент, который агент может перечитывать, чтобы не предлагать вам методы из седьмой версии платформы. Также имеется файл текущего прогресса. Это, по сути, бортовой журнал. Агент закончил создание реквизита. Он тут же обязан зайти в этот файл и сделать пометку. Реквизит такой-то создан, проверен, загружен. Файл активных решений ещё можно использовать. Здесь фиксируются все развилки. Почему мы решили использовать этот метод, а не другой? Почему тест упал и как мы его починили? Самое главное, вам не нужно заполнять это вручную. В спецификации мы жёстко прописываем правила агенту. После каждого успешного шага ты обязан обновить Emory Bank. Это превращает нейросеть из забывчивого студента в дисциплинированного следователя, у которого всё занесено в протокол. Если сессия прервётся или у вас завтра выключат свет, или вы просто решите продолжить работу через недельку, вам не нужно ничего вспоминать. Агент прочитает банк памяти и мгновенно поймёт, на какой строчке кода он остановился и какой тест надо запустить следующий. Без банка памяти никакой автономности не получится. А с ним вы сэкономите время, нервы и, что самое приятное, не платите за лишние токены. Это профессиональный подход к делу.
Подведём итог. Настройка этого конвейера, скилов, тестов, спецификации и банка памяти занимает от силы 10 минут. В следующий раз вы просто копируете готовые шаблоны и файлы в новый проект за 1 минуту. В результате мы имеем задачу, выполненную в понятные сроки. Проверенный код, который работает в базе. И самое главное, ваш личный вклад времени в тупое кодирование при этом стремится к нулю. Мы не занимаемся вылизыванием кода ради самого процесса. Мы пишем ТЗ, решаем задачи бизнеса и бережём свой самый ценный ресурс - время.
Все полезные ссылки на репозиторий со скилами и архив с материалами из видео я выложил на своём канале. Ссылка находится прямо под роликом в описании. Также я подготовил специальный промпт, который, по сути, является таким небольшим техническим заданием, в котором прописана вся пошаговая инструкция для работы этого агента. Я специально её заранее всю подготовил, также с помощью нейросети, для того чтобы агент мне в процессе работы не задавал никаких лишних вопросов. Здесь прямо пошаговый алгоритм: шаг 1, 2, 3, 4, 5, 6, 7. Я здесь написал, чтобы он использовал агент Skills библиотеку 1S BCH. Написал, что там уже есть пути. После нажатия каждого шага записывать кратко, что было сделано в файл, который называется result.md. Это и будет наш так называемый упрощённый вариант введения Memory Bank. На самом деле Memory Bank настраивается более правильно через скилы. Но в данном случае я решил пойти по более простому варианту, чтобы не делать новый скилл. Я прямо здесь в первоначальной инструкции прописал ему что-то типа упрощённого ведения memory bank, потому что задача у меня небольшая и этого должно хватить. Но если вы хотите использовать Memory Bank более серьёзно, то вам надо изучить эту тему более глубоко. Но в это видео мы затрагивать расширенные возможности Memory Банка не будем.
Также я здесь применил сохранение спецификации в отдельный файл. Я дал задание агенту самостоятельно составить спецификацию на основании вот этого ТЗ, на основании вот этого единственного файлика, на основании этого промта, чтобы он самостоятельно изучил задачу и какие шаги нужно предпринять и при необходимости, возможно, задал бы уточняющие вопросы. Я надеялся, что не будет никаких вопросов, и их действительно не было. Он должен был составить спецификацию и записать её в files spec.md. Он это действительно сделал, как мы убедимся в последующем. То есть всего, используя один вот такой большой промпт, вот это вот целиком написанное ТЗ, я в нём же описал свою полностью задачу, которую мне нужно сделать. Также я дал команду использовать Memory Bank и также дал ему команду использовать спецификации.
А теперь переходим к практике. Открываем курсор и запускаем агента. Я покажу, как этот механизм работает вживую. Смотрим на экран. Итак, я даю курсору большой промпт, в котором у меня уже прописаны все алгоритмы действий. Я предварительно пообщался уже с нейросетью, и мы с ней подготовили алгоритм пошаговый, как я считаю, должен действовать агент курсора. И я прямо чётко ему говорю, что ты автономный эксперт-разработчик. И далее я прямо рассказываю по шагам, что он должен сделать без моей помощи и в какие файлы вывести результаты. Итак, я нажимаю запустить. Агент начинает работать и планировать шаги. Он понял, что нужно подключить навык 1SB. Этот промт вы также сможете скачать на моём канале бесплатно. И в том числе вы сможете скачать все материалы в одном архиве на моём канале. Также бесплатно и посмотреть исходное состояние конфигураций. Также вы сможете получить этот промт и все результаты в формате MD, которые будут получены сегодня в результате работы этого агента.
В первый раз он может запросить доступ к различным директориям и запросить доступ на запуск наших навыков, наших батников. И если мы укажем, что разрешать всегда, то больше он нас не будет об этом спрашивать никогда. Как мы с вами видим, все шаги агент определил правильно, и он собирается приступать дальше, даже не запрашивая моего разрешения на выполнение этих шагов. Все шаги определены чётко, и он начинает работать по ним. Он записывает всю эту информацию в Spec MD. Это такой мини-аналог спецификации. Ээ, я специально её подготовил для того, чтобы, если я в будущем захочу перезапустить этого агента, как-то, может быть, скорректировать его поведение, чтобы мне не пришлось заново его обучать, чтобы не пришлось вносить изменения в мой исходный промт, я уже в следующий раз, так сказать, подстилаю себе соломку, чтобы можно было просто подпихнуть ему вот этот новый файл Spec MD, который он сам себе сейчас и составит. Но в нашем случае понадобится перезапускать агента или нет, мы с вами увидим.
Как мы видим, агент самостоятельно приступил к первому шагу, и он начал выгружать конфигурацию базы в XML-файлы. Здесь мы видим, что агент приступил к изучению выгруженной информации. Здесь он долго-долго обдумывает то, что он получил. Иногда даже видно, что он обращается в интернет, чтобы понять, что делать с этой информацией и как ему подступиться к этой задаче. И здесь он напоминает такого молодого юного Джуна, который не знает, как точно делает задачу, и пытается где-то спросить у коллег, где-то нарыть эту информацию о том, как добиться результата в интернете, на каких-то форумах. И я здесь видел парочку запросов в интернет в тех местах, где у агента не получалось разобраться с информацией.
Также хочу отметить, что в этом рассуждении агент немного пошёл не тем путём в плане построения табличного документа для нашей печатной формы. Он решил, что данные хранятся в неком бинарнике, который ему недоступен, и он не может его получить. Ну, здесь он ошибся. Тем не менее, он далее нашёл выход из этой ситуации. Он решил это делать программным способом. То есть он каждую ячейку табличного документа сформировал программным способом. В общем-то, он тоже пошёл по пути Джуна, такого ответственного Джуна, которому дали задачу, и он, если не смог одним путём добиться решения, он добился его вроде как правильным путём, ну, может быть, немного избыточным путём, потому что на самом деле макеты он также мог записать с помощью XML-файлов, но какой-то информации ему здесь не хватило. И хочу отметить, что исходно, скорее всего, эту модель обучали на каких-то старых конфигурациях 1С. Возможно, на обычных формах больше всего информации. И, конечно, обычная формали выгрузить в XML-файлы. И поэтому этот агент пошёл вот по пути создания программного макета. Что ж, раз он решил так сделать, не будем ему мешать, потому что наша задача сегодня посмотреть, справится ли наш агент полностью автономно с поставленной задачей согласно расширенной спецификации, расширенному заданию.
[музыка] >> [музыка] >> здесь Здесь мы видим, что агент дошёл до стадии написания кода и начал активно пытаться писать код модулей, там где должны размещаться как раз все процедуры формирования нашего макета. Также он должен прописать код на кнопке, который будет вызывать нашу функцию по формированию макета. И также он должен будет сформировать далее обработку, которая проверит результаты печати. Также мы видим, что он записал Memory Bank в результат выполнения задачи, то есть текущее своё состояние. Также и мы видим, что спецификация была обновлена.
Мы видим, что агент перешёл к шагу номер шесть, загружает изменённые файлы в базу. Здесь он использует частичную загрузку, загружает только изменённые данные. То есть он хорошо разобрался в наших навыках, которые мы ему дали, и загружает не всю конфигурацию, а нашит несколько файлов, которые он сам изменил. Это очень полезно, особенно на больших базах данных. И если мы будем каждый раз загружать, выгружать нашу конфигурацию файлы, то это займёт очень много времени и неэффективно потратит токены.
Здесь мы видим, что агент ошибочно предположил, что нужно создать отдельную внешнюю обработку, которая будет запускать наш автотест. Это неправильно, потому что в навыках есть возможность запустить обработку. Но этот агент не понял и решил создать обработку Runner EPF внешнюю и через неё попытаться запускать. Давайте посмотрим, получится ли у него это. И, кстати, название обработки интересное. Возможно, агент обучался изначально эта модель, которая к агента относится, она, возможно, изначально обучалась на каких-то движках 1С-курсовых, которые обеспечивают тестирование конфигураций. Здесь он пошёл немного не той дорогой, но мы ему не будем мешать. Пусть работает дальше. Скорее всего, он придёт к выводу, что он идёт не той дорогой, и попробует найти другой способ.
Здесь мы видим, что агент заметил, что сборка его внешней обработки занимает больше времени, чем предполагалось, и он немного какое-то время ждёт и дальше понимает, что какая-то ошибка пойдёт тогда другим путём. Он понял, что у него не удалось собрать внешнюю обработку. А, скорее всего, здесь связано с тем, что эту модель обучали на писании кода, а в 1С ещё важно собирать обработки внешние и внутренние с помощью файлов XML. А информации по сбору формы у этой модели, скорее всего, недостаточно. Если вы попробуете собирать свои формы с помощью курсора, с помощью того же, например, модели код там 4.5, 46, он всё-таки до конца либо не справляется, либо плохо справляется с формированием обработок вот с нуля. Поэтому в нашей конфигурации и как раз и сделал ему обработку образец, который так и назвал example, и указал ему в промте, что есть вот такой example и возьми структуру XML-файлов оттуда. И именно поэтому он как раз и справился изначально с формированием нашей обработки Автотест. Но вот когда речь пошла о внешней обработки, там структура XML-файлов немного другая. Здесь он затрудняется с выполнением этой задачи.
Здесь мы видим, что агент решил пойти другим путём и запускать обработку для тестирования нашей печатной формы. С помощью такого хитрого хода он взял модуль приложения и туда поместил при начале работы системы вызов нашей обработки, чтобы она открыла форму и оттуда запустился наш тест. Решение, конечно, это спорное. Здесь мы видим, что загрузка из файлов в конфигурацию успешно удалась. Агент отчитался, что все задания выполнены, и теперь он пытается запустить 1С предприятие, чтобы запустить тесты и посмотреть результаты своей работы. То есть он сам будет проверять результаты своей работы. При старте должна автоматически открыться а обработка автотест. Агент обнаружен, что файл test.html HTML создан, и он начал верифицировать его содержимое, чтобы убедиться, что алгоритмы он выполнил верные, что печатная форма та, которая нам нужна. Агент убедился, что в этом HTML-файле есть необходимые колонки, есть необходимые данные. И далее он убирает из модуля приложения автозапуск обработки, потому что это был как костыль, как заглушка для того, чтобы можно было запустить автотест. Очень правильно поступает. Он возвращает мне конфигурацию в исходное состояние, чтобы отчитаться о выполненной работе, чтобы конфигурация работала корректно.
Агент завершил всю работу, все проверки и записывает финальный результат в result.md файл, чтобы сформировать таким образом отчёт, который у нас сохранится в виде файла. Итак, мы видим, что разработка завершена, агент отчитался о выполненной работе. Давайте запустим конфигуратор и проверим, что у нас тут получилось. Откроем модуль приложения. Здесь пусто, всё хорошо. Откроем обработку автотест. Мы видим, что в модуле действительно созданы необходимые процедуры. Дальше в приходной накладной у нас нет формы, но зато у нас есть команда и в команде созданы необходимые процедуры. И также в модуле менеджера создана тоже необходимая функция. Давайте запустим и проверим, что у нас получилось, какая печатная форма формируется в итоге. Вот запустилось 1С предприятие. Открываем приходную накладную, нажимаем печать. Вот печатная форма формируется то, что нужно.
Ну что, граждане, как видите, всё взлетело, без шума, без пыли и, что самое характерное, без нашего прямого участия. Агент сам залез под капот, сам перебрал шестерёнки в XML и сам выкатил нам работающий результат. Пока мы тут с вами вели философские беседы, железный болван сделал всю грязную работу.
Какие из этого можно сделать выводы? Первое, технологии сегодня позволяют перестать быть рапсилой при конфигураторе. Если задача типовая, если она понятная и структурирована, нет никакого смысла тратить на неё драгоценные часы своей жизни. Второе. Весь этот конвейер, который мы сегодня настроили, это не волшебная палка, а это инструмент. Он требует правильной настройки. Без спецификации агент превратится в самодура, а без банка памяти - в склеротика, а без скилов - в теоретика, который много говорит, но ничего не может сделать в базе. Но если потратить 10 минут на подготовку, на выходе получается чистая магия автоматизации. Третье. Мир 1С меняется и меняется стремительно. Можно, конечно, сидеть и ворчать, что раньше было лучше и нейронки всё сломают, а можно взять этот инструмент в руки и стать в 5, в 10 раз эффективнее. Выбор, как говорится, за вами.
Для тех, кто готов ехать, напоминаю, все ссылки я выложил на своём канале. Если видео было полезным, не забудьте проявить гражданскую позицию. Нажмите лайк, подпишитесь на канал и черканите в комментариях, что вы об этом всём думаете. На сегодня всё. Берегите своё время, не кормите корпорации лишними токенами и делайте дела правильно. До новых встреч. С вами был Алексей Лапицкий.
Это для меня, это для меня, это для меня. 1s - это сила моя. Понедельник 9:00 утра, кофе в руке. [музыка] Апдейт накатился и я налегке. База обновилась чётко, как по нотам. Дикетов нет, закончена работа. Это для меня, это для меня. Чистый кот. Это для меня. Это [музыка] для меня. Это для меня. 1С - это сила моя малолет.