Бенчмарк · coding
HumanEval+
HumanEval+ — это строгая расширенная версия бенчмарка генерации кода HumanEval от OpenAI: он сохраняет исходные 164 написанные вручную задачи на Python, но добавляет примерно в 80x больше тест-кейсов (через фреймворк EvalPlus) и оценивается метрикой pass@k (обычно pass@1).
Подробнее
- Пример
- Каждый пункт даёт сигнатуру функции на Python плюс докстринг на естественном языке — часто с примером-doctest — описывающий нужное поведение (например, «вернуть элементы списка, строго большие порога, в исходном порядке»), а модель должна сгенерировать тело функции, которое это реализует.
- Метрика
- Метрика — pass@k: для каждой задачи семплируется n >= k завершений, c из них проходят все тесты, и несмещённая оценка pass@k = 1 - C(n-c, k) / C(n, k) усредняется по 164 задачам (чаще всего сообщают pass@1). Завершение засчитывается, только если оно проходит весь расширенный набор тестов, поэтому баллы на HumanEval+ ниже, чем на обычном HumanEval.
- Приёмка
- Каждое завершение выполняется в изолированной песочнице на расширенном наборе тестов с ограничениями по времени и памяти и принимается, только если проходят все тест-кейсы — исходные тесты плюс сгенерированные EvalPlus входные данные. Частичного зачёта нет: один провалившийся или зависший по времени тест проваливает весь образец.
- Почему важно
- Исходные тесты HumanEval разрежены, из-за чего слегка некорректные решения проскакивают и завышают заявленные показатели прохождения; в ~80x более плотные тесты HumanEval+ вскрывают эти ложные срабатывания и перетасовывают рейтинги моделей, делая его стандартной, более жёсткой проверкой корректности для моделей генерации кода.
Разбор примера
Задача
Показательный пункт в стиле HumanEval+ — типизированная сигнатура на Python с докстрингом и doctest, где модель должна дописать тело функции:
```python
from typing import List
def above_threshold(numbers: List[float], threshold: float) -> List[float]:
"""Return the numbers from the input list that are strictly
greater than the given threshold, preserving their original order.
>>> above_threshold([1.0, 5.5, 2.3, 8.0], 3.0)
[5.5, 8.0]
"""
```
Решение
```python
from typing import List
def above_threshold(numbers: List[float], threshold: float) -> List[float]:
return [n for n in numbers if n > threshold]
```
Разбор
Списковое включение оставляет ровно те элементы, что строго больше порога, и сохраняет порядок входа, удовлетворяя спецификации и doctest ([5.5, 8.0]). Оценка прогоняет это на полном наборе HumanEval+ — множество автогенерируемых крайних случаев, таких как пустые списки, отрицательные и полностью равные значения, — и ставит 1, только если проходят все тесты.
| Дата | Модель | Результат | Источник |
|---|---|---|---|
| 2026-07-13 | Qwen3.5-4B | 13.0% | Flint сжимает цепочки рассуждений для снижения расхода токенов при сохранении точности |
| 2026-06-25 | iLLaDA-Instruct | 16.5pts | iLLaDA: 8-миллиардная языковая модель с маскированной диффузией и полностью двунаправленным вниманием |