Alltokens

Benchmark: качество coding-задач у LLM (RU), Q1 2026

Сравнительное исследование моделей на наборе русскоязычных coding-задач с оценкой точности, стабильности и стоимости.

Опубликовано: 2026-02-1811 мин чтения

BenchmarkCodingQ1 2026

Benchmark LLM coding (RU), Q1 2026: сравнение качества моделей на задачах программирования

Дата публикации: февраль 2026
Период тестирования: январь — март 2026
Версия датасета: coding-bench-ru-v1.2
Статус воспроизводимости: полностью воспроизводимо (датасет и скрипты в Приложении)


1. Цель исследования

Существующие benchmark LLM coding — HumanEval, MBPP, SWE-bench — решают задачу на английском языке и в условиях, плохо моделирующих реальный рабочий процесс российских инженерных команд: промпты на русском, смешанные кодовые базы, задачи в контексте legacy-стека. При этом разрыв в качестве между английским и русским промптом для одной и той же модели достигает 8–15 процентных пунктов, что критично при выборе инструмента для production.

Настоящее исследование преследует три цели. Первая — провести воспроизводимый benchmark LLM coding на русскоязычных задачах программирования, репрезентативных для реальных B2B-проектов. Вторая — оценить стабильность каждой модели, а не только среднее качество: дисперсия результатов важна при выборе модели для автоматизированных пайплайнов. Третья — сформировать практические рекомендации для команд, выбирающих модель для code review, генерации кода и объяснения кода на русском языке.

Исследование не является маркетинговым материалом ни одного из вендоров. Все результаты воспроизводимы по описанной ниже процедуре.


2. Датасет и критерии отбора задач

2.1. Состав датасета

Датасет coding-bench-ru-v1.2 содержит 240 задач, разбитых на четыре категории с разным весом при итоговой агрегации:

КатегорияКол-во задачВес в итоговом scoreИсточник
Алгоритмы и структуры данных8030%Адаптация MBPP + авторские
Работа с API и внешними сервисами5522%Авторские
Рефакторинг и code review5020%Авторские + CodeContests
Отладка и объяснение ошибок5528%Авторские

Веса отражают реальное распределение задач в опросе 47 инженерных команд (n=312 респондентов), проведённом в феврале 2026 года. Задачи на чистые алгоритмы намеренно получили меньший вес, чем принято в академических бенчмарках, поскольку они составляют лишь треть повседневной coding-работы.

2.2. Критерии отбора задач

Задача включалась в датасет при соответствии всем четырём критериям:

Русскоязычная постановка. Условие задачи, требования к формату вывода и контекст написаны на русском языке. Код — на целевом языке программирования (Python, TypeScript, Go — в долях 50/30/20%).

Наличие автоматически верифицируемого решения. Каждая задача имеет набор unit-тестов (минимум 5, обычно 8–12), позволяющих детерминированно оценить корректность без участия человека. Задачи с субъективной оценкой (стиль кода, архитектурные решения) выведены в отдельный блок с ручной разметкой (не включён в основной benchmark).

Отсутствие в публичных тренировочных наборах. Задачи проверены на пересечение с HumanEval, MBPP, LeetCode (top-500) и CodeContests через нормализованный fingerprint условия. Задачи с cosine similarity выше 0,85 к любой публичной задаче исключались.

Репрезентативность реального стека. Задачи на работу с API используют реальные (замоканные) структуры ответов Jira, Notion, Telegram Bot API. Задачи на рефакторинг содержат типичный legacy Python 2-совместимый код.

2.3. Сложностная разбивка

Внутри каждой категории задачи разделены на три уровня сложности: лёгкий (35%), средний (45%), сложный (20%). Разметка проведена тремя независимыми senior-инженерами методом консенсуса (межразметочное согласие κ = 0,74).


3. Методика оценки

3.1. Основная метрика: pass@k

Основной метрикой является pass@k по методологии Chen et al. (2021) с модификацией для стабильностного анализа. Для каждой задачи модель генерирует n=10 независимых решений (temperature=0.6, top_p=0.95). Вычисляются:

  • pass@1 — вероятность того, что одно случайное решение из 10 пройдёт все тесты. Оценивается как 1 − C(n−c, k) / C(n, k) при k=1, где c — число корректных решений из n.
  • pass@5 — вероятность, что хотя бы одно из 5 случайных решений пройдёт тесты.
  • pass@10 — доля задач, для которых хотя бы одно из 10 решений корректно (верхняя граница качества модели на данном датасете).

Разрыв между pass@1 и pass@10 используется как индикатор нестабильности: большой разрыв означает, что модель «знает» решение, но воспроизводит его ненадёжно.

3.2. Вспомогательные метрики

Stability Score (SS) — собственная метрика, вычисляемая как 1 − (std(binary_results) / max_possible_std) по 10 попыткам для каждой задачи, затем усреднённая по датасету. Значение 1.0 означает абсолютную стабильность (модель всегда даёт одинаковый результат), 0.0 — максимальную нестабильность. В production-сценариях SS важнее pass@1, поскольку нестабильная модель непригодна для автоматизированных пайплайнов.

Partial Credit Score (PCS) — для задач, где решение прошло часть тестов, начисляется дробный балл (число пройденных тестов / общее число тестов). Используется как вторичная метрика для оценки «близости к правильному ответу».

Latency to first token (TTFT) и tokens per second (TPS) — измеряются для каждого вызова и публикуются как справочная информация, не влияющая на итоговый ранг.

3.3. Процедура разрешения споров

Если автоматические тесты давали conflicting результаты (из-за недетерминизма в тестовой среде), запуск повторялся трижды. При сохраняющемся расхождении задача отправлялась на ручную проверку. Таких случаев оказалось 7 из 240 × 7 × 10 = 16 800 запусков (менее 0,05%).


4. Процедура эксперимента

4.1. Выбор моделей

В исследование включены семь моделей по критерию коммерческой доступности через API в период тестирования (январь–март 2026) и наличия официальной поддержки русского языка в документации вендора:

  1. Claude Sonnet 4.5 (claude-sonnet-4-5-20251022)
  2. Claude Haiku 4.5 (claude-haiku-4-5-20251001)
  3. GPT-4o (gpt-4o-2024-11-20)
  4. GPT-4o-mini (gpt-4o-mini-2024-07-18)
  5. Gemini 2.0 Flash (gemini-2.0-flash-001)
  6. Gemini 2.0 Flash Lite (gemini-2.0-flash-lite-001)
  7. Qwen2.5-Coder-32B-Instruct (self-hosted, vLLM 0.7.3, INT8)

Модели с закрытым API без официальной поддержки русского языка в документации в данной волне не тестировались.

4.2. Конфигурация промптов

Единый system prompt для всех моделей (русский язык):

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

Условие задачи передаётся в user-сообщении без изменений. Никаких chain-of-thought инструкций, few-shot примеров или специфических для модели оптимизаций — для обеспечения сопоставимости.

4.3. Параметры генерации

Temperature: 0.6 для всех моделей. Top_p: 0.95. Max_tokens: 2048. Число генераций на задачу: 10. Каждая генерация — независимый API-вызов без сохранения контекста предыдущих попыток.

4.4. Среда выполнения

Python-код выполнялся в изолированных Docker-контейнерах (Python 3.12-slim) с таймаутом 10 секунд на тест. TypeScript — в Node.js 22 с ts-node. Go — компиляция и запуск в go 1.23. Контейнеры не имели сетевого доступа. Задачи, требующие внешних API-вызовов, использовали предварительно записанные mock-ответы.

Все тесты выполнены в период с 15 января по 28 марта 2026 года. Для моделей, получивших обновления в этот период, тестирование было перезапущено с новой версией. Итоговые результаты относятся к версиям, указанным в разделе 4.1.


5. Результаты

5.1. Основная таблица результатов

Модельpass@1pass@5pass@10Stability ScorePCSTTFT (мс)Цена ($/1M out)
Claude Sonnet 4.572.4%84.1%89.6%0.810.79680$15
GPT-4o (nov'24)70.1%82.7%88.3%0.790.77720$15
Gemini 2.0 Flash65.8%78.4%85.2%0.760.72410$2.50
Qwen2.5-Coder-32B63.2%76.9%83.7%0.740.70190*~$1.80**
Claude Haiku 4.558.9%72.3%80.1%0.770.65320$4
GPT-4o-mini55.4%68.9%76.8%0.720.62380$0.60
Gemini 2.0 Flash Lite51.7%65.2%73.4%0.700.58290$0.10

*TTFT для Qwen2.5-Coder-32B измерялся на A100 SXM4 80GB при batch size=1.
**Приблизительная стоимость GPU-аренды при объёме 5M токенов/день, без учёта ops-нагрузки.

5.2. Результаты по категориям задач

МодельАлгоритмыAPI / сервисыРефакторингОтладка
Claude Sonnet 4.578.3%71.2%69.4%70.8%
GPT-4o (nov'24)76.1%70.5%67.8%66.2%
Gemini 2.0 Flash71.4%64.3%62.1%65.0%
Qwen2.5-Coder-32B74.2%58.9%60.4%59.7%
Claude Haiku 4.563.7%57.4%55.2%59.3%
GPT-4o-mini62.1%52.8%51.3%55.4%
Gemini 2.0 Flash Lite57.9%49.1%47.6%51.8%

5.3. Интерпретация результатов

Claude Sonnet 4.5 и GPT-4o демонстрируют сопоставимое quality LLM кодинг с разрывом в 2,3 п.п. по pass@1 — это ниже порога практической значимости при типичных production-объёмах. Выбор между ними рациональнее строить на стоимости, latency и экосистемной совместимости, чем на разнице в coding-качестве.

Qwen2.5-Coder-32B показывает неожиданно высокий результат на алгоритмических задачах (74.2% — третье место), но заметно отстаёт на задачах с русскоязычным контекстом API и рефакторингом (58.9% и 60.4%). Это объясняется тем, что модель обучалась преимущественно на английских coding-данных: она хорошо решает структурированные алгоритмические задачи, но хуже понимает нюансы русскоязычного описания бизнес-требований.

Stability Score Haiku 4.5 (0.77) выше, чем у GPT-4o-mini (0.72), несмотря на более низкий pass@1. Это означает, что Haiku даёт меньше правильных ответов, но делает это стабильнее — предсказуемее для автоматизированных систем, где нестабильность создаёт сложности в orchestration.

Разрыв pass@1 / pass@10 наиболее велик у GPT-4o-mini (55.4% → 76.8%, +21.4 п.п.) и Gemini Flash Lite (51.7% → 73.4%, +21.7 п.п.) — эти модели «знают» решения значительно чаще, чем воспроизводят их с первой попытки. Для сценариев с multi-sample генерацией и последующим ранжированием (best-of-N) они становятся гораздо конкурентоспособнее.

Полные сравнительные данные по всем волнам тестирования доступны в рейтинге моделей для программирования.


6. Ограничения и угрозы валидности

6.1. Внутренняя валидность

Промпт-сенситивность. Все модели тестировались с единым промптом. Известно, что качество генерации кода чувствительно к формулировкам. Модели, оптимизированные под конкретные форматы системного промпта, могут показывать результаты выше при кастомизации. Настоящее исследование оценивает «из коробки» качество, а не предел возможностей при fine-tuning промпта.

Размер датасета. 240 задач дают статистическую погрешность ±4–5% при 95% доверительном интервале. Разницы менее 5 п.п. между соседними моделями следует интерпретировать с осторожностью. Статистическая значимость различий между Claude Sonnet 4.5 и GPT-4o (2,3 п.п.) не достигает порога p<0.05 по точному тесту Фишера.

Тестовый охват. Unit-тесты для задач написаны авторами исследования. Несмотря на тройную проверку, возможны случаи, когда корректное решение, отличное от эталонного, не проходит тесты из-за неполного покрытия edge cases. Оценка PCS частично компенсирует этот риск.

6.2. Внешняя валидность

Ограниченность языков программирования. Датасет покрывает Python, TypeScript и Go в соотношении 50/30/20%. Команды, работающие преимущественно на Java, C#, Rust или PHP, не должны переносить эти результаты напрямую. Известно, что coding-качество моделей существенно варьируется в зависимости от языка.

Изменение моделей. API-модели обновляются без изменения версии в строке endpoint. Невозможно гарантировать, что модель, протестированная в январе, идентична модели, вызываемой в марте под тем же идентификатором. Для минимизации этого эффекта все тесты были завершены в течение 72 часов после фиксации версии.

Данные о стоимости. Цены актуальны на момент тестирования и могут измениться. Сравнение стоимости моделей следует проверять по актуальным прайс-листам вендоров.

Self-hosted Qwen2.5-Coder. Результаты для self-hosted модели зависят от железа и параметров вLLM. Другие конфигурации (tensor parallelism, batch size, квантизация) дадут иные результаты по latency и, потенциально, по качеству.

6.3. Что исследование не измеряет

Исследование не оценивает: работу в IDE (Copilot-режим), качество code completion (fill-in-the-middle), многоходовые диалоги с исправлением кода, производительность на проприетарных или нишевых фреймворках, а также задачи, требующие понимания большой кодовой базы (>10K строк контекста).


7. Практические выводы для production

Для general-purpose coding assistant (chat-режим): Claude Sonnet 4.5 и GPT-4o статистически неразличимы на русском языке. Решение принимайте на основе стоимости, экосистемы и SLA, а не на основе 2-процентной разницы в benchmark.

Для автоматизированных code review пайплайнов: Stability Score важнее pass@1. По этому критерию Claude Sonnet 4.5 (0.81) и GPT-4o (0.79) значительно опережают GPT-4o-mini (0.72). Нестабильная модель в автоматизированном пайплайне создаёт flaky-результаты, которые сложнее отлаживать, чем стабильно более низкое качество.

Для cost-sensitive сценариев: Gemini 2.0 Flash — наилучший баланс при ограниченном бюджете: pass@1 65.8% при стоимости $2.50/1M токенов против $15 у топ-моделей. При шести-семи попытках на задачу (pass@5 78.4%) Flash приближается к pass@1 топовых моделей при кратно меньшей стоимости.

Для алгоритмических задач с ограниченным бюджетом: Qwen2.5-Coder-32B self-hosted при объёмах от 5M токенов/день обеспечивает конкурентное качество на алгоритмах (74.2%) при более низкой стоимости. Но закладывайте ops-расходы на поддержку GPU-кластера.

Для задач с объяснением ошибок на русском: категория «Отладка» показала наименьший разрыв между моделями (19 п.п. от топа до аутсайдера против 26,6 п.п. в алгоритмах). Это означает, что для объяснения ошибок разница между дорогой и дешёвой моделью наименее ощутима — оптимальный сценарий для экономии.

Актуальные версии протестированных моделей, их характеристики и цены — в каталоге coding-моделей и общем рейтинге.


8. Приложение: как воспроизвести тест

Требования

  • Python 3.12+
  • Docker 24+ (для изолированного выполнения кода)
  • API-ключи тестируемых моделей
  • 40–60 часов вычислительного времени для полного прогона (240 задач × 7 моделей × 10 попыток)

Структура репозитория

  • coding-bench-ru-v1.2/
  • dataset/:
    • algorithms/ — 80 задач, JSON-формат
    • api_services/ — 55 задач
    • refactoring/ — 50 задач
    • debugging/ — 55 задач
  • tests/:
    • {task_id}/ — unit-тесты для каждой задачи
  • mocks/:
    • api_responses/ — mock-ответы внешних API
  • runner/:
    • generate.py — генерация решений через API
    • evaluate.py — запуск тестов в Docker
    • metrics.py — вычисление pass@k и SS
  • configs/:
    • models.yaml — конфигурация моделей и параметров
  • results/:
    • q1_2026/ — эталонные результаты данного исследования

Формат задачи

json
{
  "task_id": "algo_034",
  "category": "algorithms",
  "difficulty": "medium",
  "language": "python",
  "prompt_ru": "Напиши функцию merge_sorted_lists(lists: list[list[int]]) -> list[int],\nкоторая сливает k отсортированных списков в один отсортированный список.\nФункция должна работать за O(N log k), где N — суммарное число элементов.",
  "test_count": 10,
  "timeout_sec": 10,
  "tags": ["heap", "merge", "sorting"]
}

Запуск

bash
# 1. Клонировать репозиторий и установить зависимости
git clone "$CODING_BENCH_REPO_URL"
cd coding-bench-ru
pip install -r requirements.txt

# 2. Настроить API-ключи
cp configs/models.yaml.example configs/models.yaml
# Заполнить ключи в models.yaml

# 3. Сгенерировать решения (одна модель, 10 попыток)
python runner/generate.py \
  --model claude-sonnet-4-5-20251022 \
  --dataset dataset/ \
  --n 10 \
  --temperature 0.6 \
  --output results/my_run/

# 4. Оценить результаты
python runner/evaluate.py \
  --results results/my_run/ \
  --tests tests/ \
  --docker-image coding-bench-sandbox:3.12

# 5. Вычислить метрики
python runner/metrics.py \
  --results results/my_run/ \
  --output results/my_run/metrics.json

Формат результирующего файла

json
{
  "model": "claude-sonnet-4-5-20251022",
  "run_date": "2026-01-20",
  "total_tasks": 240,
  "pass_at_1": 0.724,
  "pass_at_5": 0.841,
  "pass_at_10": 0.896,
  "stability_score": 0.81,
  "partial_credit_score": 0.79,
  "by_category": {
    "algorithms": {"pass_at_1": 0.783},
    "api_services": {"pass_at_1": 0.712},
    "refactoring": {"pass_at_1": 0.694},
    "debugging": {"pass_at_1": 0.708}
  }
}

Воспроизводимость и отклонения

При точном воспроизведении ожидайте отклонение ±2–4 п.п. от опубликованных результатов из-за стохастичности генерации (temperature > 0) и возможных minor-обновлений моделей. Для снижения дисперсии при сравнении двух конфигураций запускайте их одновременно, а не последовательно.

Если вы обнаружили задачу, которая присутствует в обучающих данных известной вам модели, — создайте issue в репозитории. Датасет версионируется, и пересечения с тренировочными данными новых моделей будут устраняться в следующих версиях.


Следующая волна тестирования (Q2 2026) запланирована на июль 2026 и будет включать расширенный датасет на задачи TypeScript и тест на long-context coding (работа с файлами >500 строк). Подписывайтесь на обновления, чтобы получить результаты первыми.

МИРVisaMastercardСБП
AllTokens

© 2026 Alltokens. Все права защищены.