Веб-платформа коллективной экспертной оценки AI-генерированного кода 1С:Предприятие (BSL) по методике SMOP
Часть исследовательского инструментария GenLab-1C, разработанного в рамках научно-исследовательской работы
Веб-платформа — слой коллективной экспертной оценки поверх вычислительного ядра genlab-1c-core. Если ядро даёт пакетную генерацию и одиночную TUI-разметку, то GenLab-1C Web переводит оценку в многопользовательский режим: эксперты независимо размечают AI-сгенерированный код по критериям S·M·O·P (Syntax · Meaning · Optimization · Platform) через браузер, а результаты сводятся в общую статистику по моделям и задачам.
Создана в рамках научно-исследовательской работы — подробнее в разделе «Научный контекст».
Платформа разработана как часть инструментария научно-исследовательской работы:
«Экспериментальная оценка эффективности искусственного интеллекта в генерации кода для доменно-специфичных платформ (на примере 1С:Предприятие 8)»
| Автор | Андреев Данила Сергеевич |
| Научный руководитель | Гальцова Юлия Михайловна |
| Текст работы | 4dand/1c-ai-codegen-research-paper |
Проблема исследования. Стандартные бенчмарки генерации кода (HumanEval, MBPP) непригодны для доменно-специфичных языков, завязанных на метаданные конфигурации, — таких как BSL платформы 1С:Предприятие 8. Работа предлагает методику и инструментарий для воспроизводимой оценки LLM именно в этом контексте.
Что измеряется:
- Модели: Claude Opus 4.5, GPT-5.2 Codex, Gemini 3 Flash (через единый шлюз OpenRouter).
- Категории задач: A — алгоритмические (без контекста метаданных); B — платформенные, требующие контекста конфигурации (УТ 11), который доставляется через Model Context Protocol (MCP).
- Методика SMOP — четыре равновзвешенных критерия с интегральной метрикой
Q = (S + M + O + P) / 4по дискретной шкале0 / 2 / 4 / 6 / 8 / 10:
| Критерий | Что оценивает |
|---|---|
| S — Syntax | Компилируемость кода в среде 1С:Предприятие |
| M — Meaning | Соответствие требованиям задачи |
| O — Optimization | Соблюдение стандартов и производительность |
| P — Platform | Корректность работы с объектами метаданных |
Роль этой платформы в исследовании. Ядро (genlab-1c-core) обеспечивает генерацию и одиночную экспертную разметку в TUI. GenLab-1C Web расширяет это до коллективной оценки несколькими экспертами через веб-интерфейс — что повышает надёжность разметки и позволяет считать согласованность оценок между экспертами.
- 🎮 Песочница (Playground) — свободная генерация кода 1С из произвольного промпта: выбор модели, температуры и системного промпта, просмотр результата.
- 🧪 Эксперименты — запуск по преднастроенным категориям задач A (алгоритмические) и B (платформенные), а также кастомные эксперименты со своими заданиями и параметрами; отслеживание прогресса в реальном времени.
- 👥 Управление экспертами — создание учётных записей экспертов, роли
admin/expert, деактивация (доступно администратору). - ✅ Экспертиза кода (SMOP) — независимая многопользовательская разметка: каждый эксперт оценивает прогоны по критериям S·M·O·P (0–10, авто-расчёт
Q); оценки изолированы между экспертами — один не видит и не перезаписывает оценки другого. - 🔍 Просмотр кода и метаданных — подсветка BSL-кода и вкладка с объектами метаданных конфигурации (контекст через MCP).
- 📊 Статистика и отчёты — агрегаты по моделям, задачам и экспертам, графики (matplotlib), экспорт в JSON / HTML / LaTeX.
- ⚙️ Настройки — промпты по категориям (A / B / кастомные), параметры агента, подключение MCP-сервера метаданных.
- 💳 Баланс OpenRouter и 📖 встроенная документация по методике SMOP.
- 🔐 Аутентификация — JWT, ролевая модель, начальный администратор из переменных окружения; данные оценок и пользователей — в PostgreSQL.
# 1. Клонируем ВМЕСТЕ с ядром — флаг --recurse-submodules обязателен
git clone --recurse-submodules https://github.com/4dand/genlab-1c-web.git
cd genlab-1c-web
# 2. Один .env в корне проекта
cp .env.example .env
# впишите SECRET_KEY (обязательно) и OPENROUTER_API_KEY (для генерации)
# 3. Запуск всего стека
docker compose up --buildПриложение: http://localhost (nginx отдаёт SPA и проксирует /api/ на backend)
- Логин по умолчанию:
admin/admin(меняется черезADMIN_USERNAME/ADMIN_PASSWORD) - Поднимаются три контейнера:
db(PostgreSQL) +backend(FastAPI с впечённым ядром) +frontend(nginx) - Миграции и начальный администратор создаются автоматически при первом старте
⚠️ Важно про submodule. Обычныйgit cloneне скачивает ядро — папкаcore/останется пустой и сборка упадёт. Если уже склонировали без флага, доберите ядро:git submodule update --init --recursiveDocker сам сабмодули не тянет — это делает только git.
Требования: Python 3.11+, Node.js 20+, PostgreSQL 16+.
git clone --recurse-submodules https://github.com/4dand/genlab-1c-web.git
cd genlab-1c-web
# Python-зависимости
pip install -r requirements.txt
# Frontend-зависимости
cd frontend && npm install && cd ..
# Конфигурация
cp .env.example .env # как минимум задайте SECRET_KEYЗапуск:
python run.py # только API на http://localhost:8000
python run.py --dev # API + Vite dev-сервер с hot-reload на http://localhost:3000- Swagger UI (интерактивная API-документация): http://localhost:8000/docs
- Health-check: http://localhost:8000/api/v1/health
В dev-режиме фронт работает на :3000 и проксирует /api на backend (:8000) — см. frontend/vite.config.ts.
Ядро не запускается отдельным сервисом. Оно подключено как git submodule — это вендоринг исходников: при клонировании код ядра приезжает в папку core/, а при сборке Docker COPY core/ core/ кладёт его внутрь backend-образа. Backend импортирует ядро (import src.*) в том же процессе — без сетевых вызовов к «контейнеру ядра».
genlab-1c-core (отдельный репо) ← библиотека: evaluator, clients, config
│ git submodule (пин на commit, только исходники)
▼
genlab-1c-web (этот репо) ← + FastAPI backend + React frontend
│ docker compose up --build
▼
[ db: PostgreSQL ] · [ backend: FastAPI + ядро внутри ] · [ frontend: nginx + SPA ]
То есть деплоится одна вещь — веб (ядро внутри). Отдельно «накатывать» или поднимать ядро не нужно.
Все настройки — в одном файле .env в корне проекта (run.py и docker compose читают именно его).
| Переменная | Описание | По умолчанию |
|---|---|---|
SECRET_KEY |
Обязательно. Секрет для подписи JWT. Сгенерировать: python -c "import secrets; print(secrets.token_urlsafe(64))" |
— |
OPENROUTER_API_KEY |
Ключ OpenRouter — нужен для генерации кода. Без него платформа запускается, но /generate и запуск экспериментов работать не будут |
— |
DATABASE_URL |
Строка подключения к PostgreSQL | postgresql+asyncpg://genlab:genlab@localhost:5432/genlab |
ADMIN_USERNAME / ADMIN_PASSWORD |
Учётка начального администратора (создаётся при первом старте) | admin / admin |
CORS_ORIGINS |
Разрешённые origin'ы (через запятую) | http://localhost:3000,http://127.0.0.1:3000 |
ACCESS_TOKEN_EXPIRE_HOURS |
Время жизни JWT, часы | 24 |
🔸 Про
core/.env. У ядра есть свой.env.example— он нужен только при автономном запуске ядра (его собственный CLI/Docker). В составе веб-платформыcore/.envне читается: ключOPENROUTER_API_KEYядро берёт из окружения процесса, которое наполняет корневой.env. Для веба достаточно одного.envв корне.🔒 Оба
.envв.gitignore— в репозиторий не попадают. Коммитятся только*.env.example.
genlab-1c-web/
├── core/ # git submodule → genlab-1c-core
│ ├── src/ # ядро: evaluator, clients, config, schemas
│ ├── configs/ # YAML: модели, задачи, SMOP-критерии, настройки
│ └── raw_results/ # результаты генерации (JSON) — наполняется при работе
├── backend/ # FastAPI REST API
│ ├── main.py # точка входа + lifespan (миграции, сидинг админа)
│ ├── routers/ # auth, config, experiments, evaluations, generate, reports
│ ├── database/ # SQLAlchemy ORM (PostgreSQL: users, evaluations)
│ ├── auth/ # JWT-аутентификация
│ └── migrations/ # Alembic
├── frontend/ # React 18 + Vite + TypeScript + Tailwind
│ └── src/
│ ├── pages/ # Песочница, Эксперименты, Экспертиза, Статистика, Эксперты, Настройки, Login
│ ├── components/ # layout, chat, code viewer, score panel
│ ├── store/ # Zustand (appStore, evaluationStore, authStore)
│ └── api/ # типизированный API-клиент
├── run.py # запуск uvicorn (+ опциональный Vite в --dev)
├── docker-compose.yml # db + backend + frontend
└── Dockerfile # backend-образ (FastAPI + впечённое ядро)
Полная интерактивная документация — Swagger UI на /docs (в локальном режиме: http://localhost:8000/docs).
| Метод | Путь | Описание |
|---|---|---|
POST |
/api/v1/auth/login |
Логин → JWT-токен |
GET |
/api/v1/auth/me |
Текущий пользователь |
POST |
/api/v1/auth/users |
Создать эксперта (только админ) |
GET |
/api/v1/models |
Список моделей |
GET |
/api/v1/tasks |
Список задач |
GET |
/api/v1/smop-criteria |
Критерии SMOP |
GET |
/api/v1/experiments |
Список экспериментов |
POST |
/api/v1/experiments/run |
Запустить эксперимент (админ) |
GET |
/api/v1/evaluations/{id} |
Оценки эксперимента |
POST |
/api/v1/evaluations/batch |
Сохранить SMOP-оценки |
POST |
/api/v1/generate |
Генерация кода (Песочница) |
GET |
/api/v1/statistics/{id} |
Статистика по эксперименту |
| Репозиторий | Описание |
|---|---|
| genlab-1c-core | Вычислительное ядро: генерация, оценка, статистика |
| 1c-ai-codegen-research-paper | Текст научно-исследовательской работы |
Распространяется под лицензией PolyForm Noncommercial 1.0.0 — только для некоммерческого использования: научные исследования, образование, личное изучение. Любое коммерческое использование запрещено.
Разработано в рамках научно-исследовательской работы. Автор: Андреев Данила Сергеевич · Научный руководитель: Гальцова Юлия Михайловна.
При использовании в академических целях — ссылайтесь на текст научно-исследовательской работы.
