Benchmark · coding
HumanEval+
HumanEval+ 是 OpenAI 的 HumanEval 代码生成基准的严格扩展版本:它保留原始的 164 道手工编写的 Python 编程题,但(通过 EvalPlus 框架)增加了约 80x 的测试用例,并使用 pass@k 指标(通常是 pass@1)评分。
了解更多
- 示例
- 每道题给出一个 Python 函数签名加一段自然语言 docstring(通常带有 doctest 示例),描述期望的行为(例如「按原顺序返回列表中严格大于某阈值的元素」),模型必须生成实现该功能的函数体。
- 评分方式
- 指标是 pass@k:对每道题采样 n >= k 个补全,其中 c 个通过全部测试,再用无偏估计量 pass@k = 1 - C(n-c, k) / C(n, k) 在 164 道题上取平均(最常报告 pass@1)。只有当补全通过整套增强测试时才计为正确,因此 HumanEval+ 的分数低于原始 HumanEval。
- 验证方式
- 每个补全都在隔离沙箱中针对扩展后的测试套件运行,并受时间和内存限制;只有当所有测试用例都通过时才被接受——包括原始测试以及 EvalPlus 生成的输入。没有部分得分:只要有一个测试失败或超时,整个样本即判为失败。
- 为何重要
- HumanEval 原始测试稀疏,使得细微错误的解也能蒙混过关并抬高上报的通过率;HumanEval+ 密度约提高 80x 的测试揭露了这些假阳性并重排了模型榜单,使其成为代码生成模型标准而更严格的正确性检验。
示例解析
任务
一道具代表性的 HumanEval+ 风格题目——带 docstring 和 doctest 的类型化 Python 签名,模型须补全函数体:
```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压缩推理轨迹以减少令牌使用量同时保持准确性 |