Как оценивают языковые модели, которые пишут код
HumanEval, MBPP, SWE-bench, LiveCodeBench — что стоит за цифрами в анонсах Codex, Claude и GPT. Разбираем, какие бенчмарки показывают реальные навыки модели, а какие давно протекли в обучающие данные.

Когда OpenAI, Anthropic или Google выкатывают новую модель, в анонсе почти всегда мелькает пара цифр: «87% на HumanEval», «71% на SWE-bench Verified». Эти числа определяют, кого выберут разработчики и куда пойдут миллиарды на инфраструктуру. Но за одинаковыми процентами скрываются очень разные вещи: одна модель решает олимпиадные задачки, другая — чинит баги в реальном репозитории на 200 тысяч строк. Разберём, как устроены основные бенчмарки для кодовых LLM, где они врут и что читать между строк.
Откуда взялась метрика pass@k
Классическая работа OpenAI 2021 года «Evaluating Large Language Models Trained on Code», представившая Codex, предложила метрику, которая стала стандартом. Модель генерирует k решений одной задачи, каждое прогоняется через юнит-тесты. Если хотя бы одно проходит — задача считается решённой.
Формула нужна, чтобы не завышать результат случайными удачами. Если из 200 сэмплов один прошёл тесты, при k=1 модель почти наверняка провалится. Оценка несмещённая:
def pass_at_k(n, c, k):
# n — всего сэмплов, c — прошедших тесты, k — сколько берём
if n - c < k:
return 1.0
return 1.0 - np.prod(1.0 - k / np.arange(n - c + 1, n + 1))На практике в пресс-релизах пишут pass@1 — самое честное число, когда у модели одна попытка. Именно так пользователь работает в IDE.
Основные бенчмарки: что они на самом деле проверяют
HumanEval
164 задачи на Python: сигнатура функции, докстринг, скрытые тесты. Средняя задача — 10-15 строк. Проблема известна всем: датасет вышел в 2021 году, за это время утёк в тренировочные корпуса всех крупных моделей. Считать по нему прогресс уже нельзя, это скорее санитарная проверка «модель хотя бы умеет в Python».
MBPP и MBPP+
974 задачи уровня «начинающий питонист»: развернуть строку, отсортировать список. MBPP+ добавляет усиленные тесты — оказалось, что треть решений, прошедших оригинальные тесты, ломается на дополнительных. Хороший урок: слабые тесты завышают оценку.
SWE-bench
Тот случай, когда бенчмарк ближе к реальности. 2294 задачи из настоящих issue в репозиториях вроде Django и scikit-learn. Модели дают состояние репозитория до фикса, она должна выдать патч, который проходит тесты из PR-а. SWE-bench Verified — подвыборка из 500 задач, вручную проверенных на решаемость.
LiveCodeBench
Собирает задачи с LeetCode, AtCoder и Codeforces с датой публикации. Это позволяет отсечь всё, что модель могла видеть при обучении: берёте только задачи, вышедшие после cutoff date модели. По-настоящему честный замер.
Как выглядят цифры на конец 2024 года
| Модель | HumanEval pass@1 | SWE-bench Verified | Комментарий |
|---|---|---|---|
| GPT-4o | ~90% | 33% | Универсал, слабее в агентных сценариях |
| Claude 3.5 Sonnet | ~92% | 49% | Лидер по реальным репозиториям |
| o1 | ~92% | 41% | Дорогой инференс за счёт цепочек рассуждений |
| DeepSeek-Coder V2 | ~90% | ~12% | Открытые веса, дёшев |
Обратите внимание на разрыв: на HumanEval разница между моделями — 2 процентных пункта, на SWE-bench — в четыре раза. Это и есть ответ на вопрос, какой бенчмарк ещё что-то говорит.
Если ваша модель решает 92% HumanEval и 12% SWE-bench, это не значит, что она хорошо пишет код. Это значит, что она хорошо пишет функции из десяти строк по подробной спецификации.
Где бенчмарки врут
- Контаминация. Задачи из открытых датасетов попадают в обучающие корпуса. Anthropic и OpenAI проверяют это n-граммным поиском, но фильтры дырявые: перефразированная задача пройдёт мимо.
- Слабые тесты. Оригинальный HumanEval покрывает функции в среднем на 3-5 ассертов. Модель может выучить паттерн «пройти именно эти тесты», а не решить задачу.
- Однофайловость. Реальный код живёт в проекте с зависимостями, конфигами и легаси. HumanEval и MBPP этого не проверяют вообще.
- Отсутствие итераций. Разработчик пишет код, запускает, чинит ошибки. Классические бенчмарки — one-shot, без цикла обратной связи. SWE-bench с агентами это учитывает, остальные — нет.
- Стоимость молчит. Цифра «49% на SWE-bench» не говорит, сколько токенов ушло. У o1 один прогон может стоить $2-5, у Sonnet — $0.30. При сравнимом качестве разница в стоимости в 10 раз.
Что смотреть, если выбираете модель под задачу
- Определите, что вы правда делаете. Автокомплит в IDE, генерация SQL, багфиксинг в монорепе — это три разных бенчмарка.
- Игнорируйте HumanEval. Она в топе для всех уже год, разброс — в пределах шума.
- Смотрите на LiveCodeBench с фильтром по дате после cutoff интересующей модели.
- Для агентных сценариев — только SWE-bench Verified или собственный внутренний прогон.
- Всегда считайте стоимость решённой задачи, а не пройденных процентов. Модель за $0.50 с 40% решений часто выгоднее модели за $5 с 55%.
Свой бенчмарк — обязательно
Публичные цифры дают ориентир, но решение стоит принимать по замеру на своём коде. Возьмите 50-100 реальных задач из вашей истории: багов, фич, рефакторингов. Прогоните три-четыре модели с одинаковыми промптами. Оцените вручную по трём осям: решило ли задачу, не сломало ли ничего, читаемо ли. Это две недели работы и лучший инвестмент, чем чтение любых лидербордов.
pass@k — вероятность того, что среди k независимых сэмплов модели хотя бы один пройдёт все тесты задачи. Cutoff date — дата, до которой собирались обучающие данные модели; всё, что появилось позже, модель гарантированно не видела.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: Evaluating Large Language Models Trained on Code (Chen et al., 2021), SWE-bench: Can Language Models Resolve Real-World GitHub Issues?
Частые вопросы
Почему все модели показывают 90+% на HumanEval, но пишут код с ошибками?
Что такое pass@1 и почему это самая честная метрика?
Правда ли SWE-bench показывает реальное качество?
Стоит ли смотреть на открытые модели вроде DeepSeek-Coder или Qwen2.5-Coder?
Как проверить, что модель не видела мой тестовый набор?
Сколько стоит запустить SWE-bench Verified самостоятельно?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.