Архив рубрики ~Лента новостей~

1C Code Bench — бенчмарк для оценки способности LLM писать код на 1С

1C Code Bench — бенчмарк для оценки способности LLM писать код на 1С

Бенчмарк разработан в Управлении экспериментальных систем машинного обучения Sber Al. Мы учим собственные модели, активно продвигаем науку в области, ставим уникальные эксперименты, пишем статьи уровня А* и создаем собственные бенчмарки. 1C CodeBench создан командой GigaCode R&D и командой разметки УЭСМО.

NOVOSTI

В эпоху бума больших языковых моделей (LLM) возникает вопрос: насколько хорошо современные LLM пишут код на платформе 1С:Предприятие? Для объективной оценки этих возможностей мы разработали 1C Code Bench — специализированный бенчмарк, позволяющий систематически тестировать и сравнивать способности различных LLM решать типовые задачи программирования на 1С.

Кодовые бенчмарки

Кодовые бенчмарки — это наборы задач для оценки способности LLM генерировать работающий код. Принцип их работы прост: модели предлагают задачу с описанием требуемой функции, она генерирует код, который затем проверяют набором тестов. Основная метрика pass@k показывает долю задач, для которых хотя бы одно из k сгенерированных решений проходит все тесты (при k = 1 это просто доля успешных решений).

Бенчмарки делятся на два типа:

Простые бенчмарки (HumanEval, MBPP, HumanEval+) содержат изолированные алгоритмические задачи: написать одну функцию по описанию и проверить её модульными тестами.

Мультиагентные бенчмарки (SWE-Bench, SWE-Bench Verified) моделируют реальную разработку: модель получает issue из GitHub-репозитория и должна самостоятельно найти нужные файлы, понять контекст и внести корректные изменения в кодовую базу. Такие бенчмарки значительно сложнее, так как требуют от модели навыков навигации по коду, понимания архитектуры и работы с несколькими файлами одновременно.

Зачем нужен бенчмарк для 1С?

Существующие бенчмарки для оценки кодогенерации (HumanEval, MBPP, CodeForces и др.) ориентированы на популярные языки программирования: Python, JavaScript, Java и так далее. Платформа 1С:Предприятие с её встроенным языком остаётся не у дел.

При этом 1С — самая популярная платформа для автоматизации бизнеса в России и СНГ. Разработчики 1С ежедневно решают задачи, которые потенциально можно автоматизировать с помощью LLM:

  • написание запросов к базе данных;

  • обработка табличных частей документов;

  • формирование движений по регистрам;

  • работа с формами и элементами управления;

  • написание отчётов и обработок;

  • интеграция с внешними системами.

1C Code Bench призван ответить на вопросы:

  • Какие задачи уже решают LLM, а в какие придётся потратить больше времени на исправления глюков?

  • Какие модели лучше?

Структура бенчмарка и задачи

Мы взяли конфигурацию «Демонстрационное приложение», добавили в неё некоторые объекты в конфигурацию, добавили небольшое количество данных и получилась наша Демо-база.

Бенчмарк содержит 20 тестовых задач, разделённых на три уровня сложности:

  • базовый: основы языка, простые операции с данными;

  • средний: запросы, работа с документами и регистрами;

  • сложный: комплексные бизнес-сценарии.

Также задачи делятся на категории:

  • По типу контекста:

    • серверные задачи;

    • клиентские задачи;

  • По предметной области:

    • заполнение и изменение табличных частей;

    • работа со специфичными объектами 1С (ИнтернетПочтовоеСообщение, FTPСоединение и др.);

    • выборки с помощью языка запросов;

    • манипуляции с коллекциями (ТаблицаЗначений, Массив и др.);

    • работа с макетами и табличными документами;

    • операции с регистрами накопления и сведений.

Каждая задача представляет собой внешнюю обработку (.epf), содержащую:

  1. макет «Задача» — текстовое описание того, что нужно реализовать;

  2. функцию ЗапуститьРешение() — подготовку тестового окружения и вызов решения;

  3. функцию ЗадачаРешена() — автоматическую проверку корректности результата;

  4. эталонное решение — референсную реализацию, проходящую все тесты.

С точки зрения LLM задача сводится к написанию одной функции. На входе — промпт с условием задачи и (если требуется) контекстом конфигурации. На выходе LLM должна сгенерировать функцию с требуемым именем и решением задачи.

Примеры задач

Заполнение табличной части остатками

Условие задачи:

Создай функцию ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект), которая заполняет табличную часть документа «Заказ» «Товары» остатками из регистра «ТоварныеЗапасы» для склада и даты, заданных в документе. Отбирать только товары с видом = Товар.

Эталонное решение:

    Функция ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект)              Запрос = Новый Запрос();              Запрос.Текст =              «ВЫБРАТЬ              |    Т.Товар КАК Товар,              |    Т.КоличествоОстаток КАК Количество              |ИЗ              |    РегистрНакопления.ТоварныеЗапасы.Остатки(&Дата, Склад = &Склад) КАК Т              |ГДЕ              |    Т.Товар.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Товар)»;                        Запрос.УстановитьПараметр(«Дата»,  ДокументОбъект.Дата);              Запрос.УстановитьПараметр(«Склад», ДокументОбъект.Склад);                        Выборка = Запрос.Выполнить().Выбрать();              Пока Выборка.Следующий() Цикл                  СтрокаТЧ = ДокументОбъект.Товары.Добавить();                  ЗаполнитьЗначенияСвойств(СтрокаТЧ, Выборка);              КонецЦикла;          КонецФункции   

Замена номенклатуры в документах

Условие задачи:

Создай функцию ЗаменитьНоменклатуру(ТоварИсточник, ТоварЗамены, ДатаС, ДатаПо), которая находит все документы «Заказ» за указанный период и заменяет в них один товар на другой. Вернуть количество изменённых документов.

Эталонное решение:

Функция ЗаменитьНоменклатуру(ТоварИсточник, ТоварЗамены, ДатаС, ДатаПо) Экспорт              КоличествоИзмененных = 0;                        Запрос = Новый Запрос;              Запрос.Текст =                  «ВЫБРАТЬ                  |    Заказ.Ссылка КАК Ссылка                  |ИЗ                  |    Документ.Заказ КАК Заказ                  |ГДЕ                  |    Заказ.Дата >= &ДатаС                  |    И Заказ.Дата <= &ДатаПо                  |    И НЕ Заказ.ПометкаУдаления»;                        Запрос.УстановитьПараметр(«ДатаС», ДатаС);              Запрос.УстановитьПараметр(«ДатаПо», ДатаПо);                        Выборка = Запрос.Выполнить().Выбрать();                        Пока Выборка.Следующий() Цикл                  ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();                  БылаЗамена = Ложь;                  БылПроведен = ДокументОбъект.Проведен;                            Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл                      Если СтрокаТовары.Товар = ТоварИсточник Тогда                          СтрокаТовары.Товар = ТоварЗамены;                          БылаЗамена = Истина;                      КонецЕсли;                  КонецЦикла;                            Если БылаЗамена Тогда                      Если БылПроведен Тогда                          ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);                      Иначе                          ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);                      КонецЕсли;                      КоличествоИзмененных = КоличествоИзмененных + 1;                  КонецЕсли;              КонецЦикла;                        Возврат КоличествоИзмененных;          КонецФункции 

Расчёт комиссии менеджеров

Условие задачи: 

Создай функцию РасчетКомиссииМенеджера(ТаблицаКомиссий, Процент, ДатаС, ДатаПо), которая находит документы «Заказ» в заданном интервале и вычисляет комиссию менеджера исходя из сумм в табличной части Товары
1) Смотрим только проведенные заказы
2) Сумма заказа — это сумма всех строк по реквизиту Сумма
3) Комиссия менеджера — сумма всех заказов менеджера (реквизит Автор) в периоде, умноженная на Процент.
Функция должна заполнить таблицу ТаблицаКомиссий, где должно быть три колонки: Менеджер (из реквизита Автор), СуммаЗаказов, Комиссия. Менеджер в таблице должен быть уникальным, один менеджер — одна строка.

Эталонное решение: 

    Функция РасчетКомиссииМенеджера(ТаблицаКомиссий, Процент, ДатаС, ДатаПо) Экспорт              Запрос = Новый Запрос;              Запрос.Текст =              «ВЫБРАТЬ              |    Заказ.Автор КАК Менеджер,              |    СУММА(ЗаказТовары.Сумма) КАК СуммаЗаказов              |ИЗ              |    Документ.Заказ КАК Заказ              |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Заказ.Товары КАК ЗаказТовары              |        ПО Заказ.Ссылка = ЗаказТовары.Ссылка              |ГДЕ              |    Заказ.Проведен = ИСТИНА              |    И Заказ.Дата >= &ДатаС              |    И Заказ.Дата <= &ДатаПо              |СГРУППИРОВАТЬ ПО              |    Заказ.Автор»;                        Запрос.УстановитьПараметр(«ДатаС», ДатаС);              Запрос.УстановитьПараметр(«ДатаПо», ДатаПо);                        Выборка = Запрос.Выполнить().Выбрать();                        Пока Выборка.Следующий() Цикл                  НоваяСтрока = ТаблицаКомиссий.Добавить();                  НоваяСтрока.Менеджер = Выборка.Менеджер;                  НоваяСтрока.СуммаЗаказов = Выборка.СуммаЗаказов;                  НоваяСтрока.Комиссия = Выборка.СуммаЗаказов * Процент / 100;              КонецЦикла;                        Возврат ТаблицаКомиссий;          КонецФункции   

Методология оценки

Мы измеряем такие метрики:

  • Compile Rate: доля задач, в которых код компилируется и выполняется платформой;

  • Success Rate: доля задач, в которых решение прошло тесты.

Процесс тестирования:

  1. Генерация решения: LLM получает описание задачи и контекст конфигурации, генерирует код.

  2. Подстановка кода: сгенерированный код подставляется в обработку вместо эталонного решения.

  3. Компиляция: платформа 1С пытается скомпилировать обработку.

  4. Выполнение: при успешной компиляции запускается функция ЗапуститьРешение().

  5. Проверка: функция ЗадачаРешена() верифицирует результат.

Весь процесс полностью автоматизирован: скрипт на Python выполняет все этапы — подстановку кода, выполнение и др. Скрипт генерации поддерживает LLM-провайдерыAnthropic (Claude) и OpenRouter (доступ к множеству моделей).

Весь код бенчмарка и инструкции по запуску доступны в репозитории.

Текущие метрики моделей:

Модель

Compile Rate

Success Rate

Claude Sonnet 4.5

85%

70%

Gemini 3 Pro

80%

70%

GPT-5 (high reasoning)

40%

30%

Сильные стороны современных LLM:

  • хорошо понимают базовый синтаксис языка 1С;

  • делают простые запросы к данным (не более трёх JOIN-ов);

  • работают с коллекциями (массивами, структурами, ТаблицаЗначений) — знают все методы и свойства.

Типичные ошибки:

  • неправильно используют виртуальные таблицы регистров (путают, где какие параметры ставить);

  • ошибаются в синтаксисе языка запросов (GPT-5 забывает ставить | для разделения строк запроса);

  • используют неверные имена методов и свойств объектов метаданных;

  • путаются между серверным и клиентским контекстом.

Как вы можете помочь в развитии бенчмарка

Мы приглашаем разработчиков 1С к участию в расширении набора задач бенчмарка.

Процесс добавления:

  1. Скачайте шаблон обработки из репозитория.

  2. Создайте задачу по инструкции.

  3. Проверьте решение локально.

  4. Отправьте через форму или создайте Pull Request.

Требования к задачам:

  • задача должна быть решаемой, но не тривиальной (10–100 строк кода);

  • результат должен быть однозначно проверяемым;

  • задача должна отражать реальные сценарии разработки на 1С;

  • обработка не должна изменять данные демо-базы (или откатывать изменения).

Итоги

1C Code Bench — первый открытый бенчмарк для оценки способностей LLM генерировать код на 1С. Проект позволяет:

  • объективно сравнивать различные модели;

  • отслеживать прогресс ИИ-ассистентов для 1С;

  • выявлять области, требующие улучшения в обучении моделей.

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

Приходите к нам работать!

Ссылки

  • Сайт проекта

  • Репозиторий github

  • Репозиторий gitverse

  • ТГ проекта

  • Мой канал об LLM и 1С

Источник: habr.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Новости робототехники Телеуправляемый андроид Unitree G1 прооперировал свиней. Им лапароскопически удалили желчный пузырь Новости робототехники Weave Robotics запускает Айзека, своего первого представителя робота-гуманоида Новости робототехники Страх перед человекоподобными роботами подтолкнул рабочих к забастовке на автомобильном заводе Hyundai. Новости робототехники Основатель Максимо рассказывает, как робототехника строит строительство солнечной энергетики. Архив рубрики ~Обо всем~ Астрономы нашли кандидата в самый далекий галактический бар. Он существовал спустя почти 1,2 миллиарда лет после Большого Взрыва Новости робототехники По заключению Национального совета по безопасности на транспорте (NTSB), водитель Tesla, который объяснил аварию тем, что автопилот нажал на педаль газа на 100%. Новости робототехники Mondo Robotics представляет собой Beni, вездеходного робота с электрической розеткой и искусственным интеллектом для потребителей. Архив рубрики ~Обо всем~ «Парачастицы» могут стать представителями третьего царства квантовых частиц Архив рубрики ~Коротко из Telegram~ Нейросеть обучили подсчету и оценке качества семян Архив рубрики ~Коротко из Telegram~ «Комендантский час» на соцсети для подростков 16-17 лет хотят ввести… Архив рубрики ~Коротко из Telegram~ В Южной Корее создадут бесплатного ИИ-бота для всех граждан. Архив рубрики ~Коротко из Telegram~ В США 73% технических вакансий требуют навыков работы с ИИ,… Архив рубрики ~Обо всем~ Компания SpaceX внезапно прервала второй запуск Starship V3 после запуска двигателя. Архив рубрики ~Коротко из Telegram~ Samsung хочет обучать ИИ на данных здоровья Новости робототехники Телеуправляемый андроид Unitree G1 прооперировал свиней. Им лапароскопически удалили желчный пузырь Новости робототехники Weave Robotics запускает Айзека, своего первого представителя робота-гуманоида Новости робототехники Страх перед человекоподобными роботами подтолкнул рабочих к забастовке на автомобильном заводе Hyundai. Новости робототехники Основатель Максимо рассказывает, как робототехника строит строительство солнечной энергетики. Архив рубрики ~Обо всем~ Астрономы нашли кандидата в самый далекий галактический бар. Он существовал спустя почти 1,2 миллиарда лет после Большого Взрыва Новости робототехники По заключению Национального совета по безопасности на транспорте (NTSB), водитель Tesla, который объяснил аварию тем, что автопилот нажал на педаль газа на 100%. Новости робототехники Mondo Robotics представляет собой Beni, вездеходного робота с электрической розеткой и искусственным интеллектом для потребителей. Архив рубрики ~Обо всем~ «Парачастицы» могут стать представителями третьего царства квантовых частиц Архив рубрики ~Коротко из Telegram~ Нейросеть обучили подсчету и оценке качества семян Архив рубрики ~Коротко из Telegram~ «Комендантский час» на соцсети для подростков 16-17 лет хотят ввести… Архив рубрики ~Коротко из Telegram~ В Южной Корее создадут бесплатного ИИ-бота для всех граждан. Архив рубрики ~Коротко из Telegram~ В США 73% технических вакансий требуют навыков работы с ИИ,… Архив рубрики ~Обо всем~ Компания SpaceX внезапно прервала второй запуск Starship V3 после запуска двигателя. Архив рубрики ~Коротко из Telegram~ Samsung хочет обучать ИИ на данных здоровья

Оставить комментарий