Benchmark · coding
HumanEval+
HumanEval+ est une version rigoureuse et étendue du benchmark de génération de code HumanEval d'OpenAI : il conserve les 164 problèmes de programmation Python écrits à la main d'origine mais ajoute environ 80x plus de cas de test (via le framework EvalPlus), et il est noté avec la métrique pass@k (généralement pass@1).
En savoir plus
- Exemple
- Chaque item fournit une signature de fonction Python plus un docstring en langage naturel — souvent avec un exemple de doctest — décrivant le comportement voulu (par exemple, « renvoyer les éléments de la liste strictement supérieurs à un seuil, dans l'ordre »), et le modèle doit générer le corps de fonction qui l'implémente.
- Notation
- La métrique est pass@k : pour chaque problème, n >= k complétions sont échantillonnées, c passent tous les tests, et l'estimateur non biaisé pass@k = 1 - C(n-c, k) / C(n, k) est moyenné sur les 164 problèmes (pass@1 est le plus rapporté). Une complétion ne compte que si elle passe l'ensemble de tests augmenté au complet, si bien que les scores sur HumanEval+ sont plus bas que sur HumanEval brut.
- Vérification
- Chaque complétion est exécutée dans un sandbox isolé contre la suite de tests étendue sous des limites de temps et de mémoire, et n'est acceptée que si tous les cas de test passent — les tests d'origine plus les entrées générées par EvalPlus. Il n'y a pas de crédit partiel : un seul test en échec ou en dépassement de temps fait échouer tout l'échantillon.
- Pourquoi c'est important
- Les tests d'origine de HumanEval sont clairsemés, laissant passer des solutions subtilement incorrectes et gonflant les taux de réussite rapportés ; les tests ~80x plus denses de HumanEval+ exposent ces faux positifs et rebattent les classements des modèles, en faisant une vérification de correction standard et plus exigeante pour les modèles de génération de code.
Exemple résolu
Tâche
Un item représentatif de style HumanEval+ — une signature Python typée avec un docstring et un doctest, où le modèle doit compléter le corps de la fonction :
```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]
"""
```
Solution
```python
from typing import List
def above_threshold(numbers: List[float], threshold: float) -> List[float]:
return [n for n in numbers if n > threshold]
```
Explication
La compréhension de liste conserve exactement les éléments strictement supérieurs au seuil et préserve l'ordre d'entrée, satisfaisant la spécification et le doctest ([5.5, 8.0]). La notation l'exécute contre toute la suite HumanEval+ — de nombreux cas limites auto-générés comme les listes vides, les négatifs et les valeurs toutes égales — et n'attribue 1 que si tous les tests passent.
| Date | Modèle | Score | Source |
|---|---|---|---|
| 2026-07-13 | Qwen3.5-4B | 13.0% | Flint compresse les traces de raisonnement pour réduire l'utilisation de tokens tout en maintenant la précision |