Разработчики многих языков программирования активно используют искусственный интеллект (ИИ) для ускорения написания кода, генерации запросов и решения рутинных задач. Однако, когда дело доходит до платформы 1С, ситуация значительно усложняется. Мы рассмотрим, почему существующие ИИ-модели часто не справляются с задачами для 1С, какие существуют попытки использования ИИ в этой сфере, и как мы можем максимально эффективно применять их в текущих условиях.
Основная причина, по которой современные большие языковые модели (LLM), такие как ChatGPT, Gemini, Mistral и Llama, демонстрируют неудовлетворительные результаты при работе с 1С, заключается в критическом недостатке обучающих данных. Большинство этих моделей обучались на огромных массивах открытого кода, доступного на платформах вроде GitHub. Однако, код для 1С редко выкладывается в открытый доступ, поскольку платформа является проприетарной, и большая часть разработок ведется внутри закрытых корпоративных систем. В результате, ИИ просто не имеет достаточной базы знаний для понимания специфики синтаксиса, структуры объектов и логики 1С.
Поэтому, когда мы пытаемся получить код или запрос для 1С от ИИ, мы часто сталкиваемся с нерабочими или некорректными результатами. Модели могут выдавать конструкции, которые лишь отдаленно напоминают язык 1С, но содержат синтаксические ошибки, неправильное обращение к объектам или совершенно неверную логику. Это подтверждается опытом многих разработчиков: код нерабочий конечно, но больше всех похож на настоящий (Сообщение 2), всякую чушь выдает далекую от реальности (Сообщение 4), Даже на 1С оно пытается писать, но фигня получается полнейшая (Сообщение 15).
Несмотря на общие трудности, мы можем выделить определенные сценарии и модели, которые были опробованы сообществом:
Эти модели доступны через веб-интерфейсы или API. Их преимущество в том, что они не требуют значительных вычислительных ресурсов со стороны пользователя. Однако, как мы уже отметили, качество генерируемого кода для 1С крайне низкое. Они могут дать общие концепции или шаблонные ответы, но для получения чего-то применимого в 1С потребуется глубокая доработка и исправление ошибок вручную.
Некоторые энтузиасты экспериментируют с запуском моделей, таких как Mixtral-8x7b-instruct-v0.1.Q5_K_M или Llama 7b, на своих компьютерах. Это позволяет получить больший контроль над процессом и теоретически дообучать модели на собственных данных (хотя в рамках данного обсуждения это не было подробно реализовано). Однако, мы сталкиваемся с серьезными аппаратными ограничениями:
Для наглядности, рассмотрим примеры, приведенные в обсуждении. Они демонстрируют как потенциал, так и текущие недостатки ИИ в 1С.
В одном из сообщений (Сообщение 27) был приведен пример кода, сгенерированного ИИ для заполнения таблицы значений в 1С. Задача заключалась в создании таблицы с 20 колонками и 10 строками, где значения ячеек рассчитывались по определенной формуле (например, в первой строке значение 2 (1+1), во второй - 3 (1+2) и так далее).
Вот фрагмент кода, который был сгенерирован ИИ:
Процедура тзНаСервере
КоличествоКолонок=20;
КоличествоСтрок=10;
ТаблицаЗначений=Новый ТаблицаЗначений;
Счетчик=1;
Пока Счетчик <= КоличествоКолонок цикл
ТаблицаЗначений.Колонки.Добавить("Колонка_"+Строка(ТаблицаЗначений.Колонки.Количество+1));
Счетчик = счетчик+1;
КонецЦикла;
Счетчик=1;
Пока Счетчик <= КоличествоСтрок цикл
НоваяСтрока=ТаблицаЗначений.Добавить;
И = 1;
Пока И <= КоличествоКолонок Цикл
НоваяСтрока.Записать(И, Счетчик+И-1);
И=И+1;
КонецЦикла;
Счетчик = счетчик+1;
КонецЦикла;
КонецПроцедуры
Анализ примера:
Несмотря на то, что структура кода выглядит достаточно правдоподобно (есть циклы, объявление переменных, создание колонок и строк), этот код не работает (Сообщение 28, 29). Причина кроется в незнании ИИ специфических методов и их синтаксиса в 1С. Например, метод НоваяСтрока.Записать(И, Счетчик+И-1); для заполнения ячеек таблицы значений не является стандартным в 1С. Для обращения к колонкам строки таблицы значений используется обращение по имени колонки или по индексу через массив, а не прямой метод Записать с такими параметрами. Это классический пример того, как ИИ, не имея достаточных данных, пытается 'додумать' или 'сгенерировать' синтаксис на основе общих представлений о программировании, что приводит к ошибкам.
Была высказана гипотеза, что ИИ может лучше справляться с генерацией запросов, чем с кодом (Сообщение 35, 47). В качестве примера был предложен такой запрос:
Выдай список всех уникальных покупателей артикула А-345 в 2024 году, из тех, кто сделал менее трех покупок любых товаров в 2023 году
Анализ примера:
Утверждалось, что 'генератор' выдаст вам сразу работающий запрос. При этом не допустит ошибок, которые часто делают в этих задачах люди (Сообщение 35). Однако, при попытке выполнить подобный запрос, возникла ошибка: {(1,9)}:Поле не найдено "КодПокупателя" ВЫБРАТЬ >КодПокупателя (Сообщение 61). Это указывает на то, что ИИ не знает структуры базы данных 1С и не может корректно определить названия полей, даже если запрос сформулирован на естественном языке. Для успешной генерации запроса ИИ требуется информация о конкретных таблицах и полях в базе данных 1С, что опять же, отсутствует в его обучающих данных.
Это подчеркивает, что для 1С ИИ не является простым решением "из коробки", которое можно использовать без глубокого понимания платформы и без проверки результатов.
Несмотря на все сложности, мы не должны полностью отказываться от использования ИИ. Важно понимать его текущие ограничения и применять его там, где он может принести хоть какую-то пользу. Вот несколько рекомендаций:
Это, пожалуй, самый важный совет. Если мы хотим получить от ИИ хоть какой-то приемлемый результат для 1С, мы должны описать синтаксис языка в контексте вместе с задачей (Сообщение 68). Это означает, что в промпт необходимо включать не только саму задачу, но и:
Пока ... Цикл ... КонецЦикла;.ТаблицаЗначений.Колонки.Добавить("ИмяКолонки");) и как к ней обращаться.Чем больше информации об 1С мы предоставим ИИ в текущем запросе (в рамках его контекстного окна, которое для Mistral составляет 32к токенов – Сообщение 19), тем выше вероятность получить что-то более осмысленное. Однако, даже в этом случае результат потребует тщательной проверки и доработки.
ИИ может быть полезен для ответов на общие вопросы, которые не требуют глубокого знания специфики 1С, но при этом могут быть актуальны для новичков. Например, как работают базовые концепции программирования, или для перефразирования текста. Если мы задаем вопросы, которые обычно задаются новичками на форумах (Сообщение 26), ИИ может дать общие ответы, но не специализированные 1С-решения.
Запросы (особенно простые) часто имеют более структурированный и предсказуемый синтаксис, чем полноценный код. Мы видим, что Работающий запрос на языке 1С получить реальнее, чем работающий код (Сообщение 47). Если мы тщательно опишем необходимые таблицы, поля и условия, ИИ может с большей вероятностью сгенерировать запрос, который будет ближе к рабочему варианту, хотя и здесь потребуется проверка и, возможно, оптимизация.
Это более продвинутый подход, который не был подробно разобран в обсуждении, но упоминается в контексте "обучить самому" (Сообщение 23). Суть заключается в дообучении существующих LLM на корпусах 1С-кода. Если появится достаточно качественных и размеченных данных по 1С, а также станут доступны инструменты для простого файн-тюнинга, это может значительно улучшить качество генерации. Пока это остается задачей для энтузиастов и исследовательских групп.
Возможно создание специализированных "копилотов" или помощников, интегрированных непосредственно в систему 1С, которые будут использовать API популярных ИИ-сервисов (например, OpenAI, Google Gemini). В этом случае пользователь может формулировать запрос на естественном языке (например, через Telegram голосом – Сообщение 53), а система 1С будет передавать его ИИ вместе с необходимым контекстом (метаданные, структура документов и т.д.), затем обрабатывать ответ и выполнять действия. Это требует значительной предварительной разработки, но может стать решением для определенных задач.
Ключевой вывод из нашего обсуждения – Мозг никакой ИИ не заменит (Сообщение 4). Искусственный интеллект, в его текущем виде, является мощным инструментом для автоматизации рутинных задач и помощником в написании кода или запросов, но он не может полностью заменить человеческий интеллект в разработке. Это особенно верно для 1С, где понимание сложных бизнес-процессов, творческое решение проблем и ответственность за конечный результат остаются прерогативой человека.
Мы должны рассматривать ИИ как попытку программистов сделать рутинную работу легче (Сообщение 20), а не как полноценный "интеллект", способный к автономной разработке. Важно развивать навыки хорошо подбирать "Промты" (Сообщение 32) и уметь интерпретировать результаты (Сообщение 33), а не слепо доверять всему, что генерирует ИИ. Помните, что генератор бреда (Сообщение 36), как его иногда называют, может выдать вам не только полезные, но и абсурдные или даже опасные советы (как в примере с клеем в пицце – Сообщение 59).
В будущем, по мере развития технологий и появления более специализированных решений, качество генерации кода и запросов для 1С будет улучшаться. Однако, для достижения этой цели потребуется значительный объем работы по сбору и разметке 1С-специфичных данных для обучения моделей, а также разработка инструментов, способных глубоко понимать контекст платформы.