Benchmark · coding
EvalPlus
EvalPlus 通过为 HumanEval 和 MBPP 增补大量测试用例(形成 HumanEval+ 与 MBPP+),严格检验 LLM 生成代码的正确性;评测指标为 pass@k(通常是 pass@1)。
了解更多
- 示例
- 一个 Python 函数补全任务:给定函数签名和带若干示例的自然语言 docstring,模型写出函数体,随后在大幅扩充的测试集上运行——该测试集补上了原基准遗漏的边界情况(空输入、边界值、超大数值)。
- 评分方式
- 指标为 pass@k,几乎总是 pass@1。只有当生成的代码通过全部测试(原有的 base 测试加上新增的 plus 测试)时,该题才算解出。pass@k 是无偏估计:在 n≥k 个样本、其中 c 个正确时为 1 − C(n−c, k)/C(n, k);最终得分为整个题集中解出题目的比例。
- 验证方式
- 每个解答在沙箱中针对完整的 base+plus 测试集运行,每个测试设有超时,只有全部断言通过才被接受。额外测试输入由类型感知变异加 LLM 生成种子产生,并用经过验证的参考解过滤,因此判为 passed 即表示在每个输入上都与参考解一致。
- 为何重要
- HumanEval/MBPP 原有测试集过于单薄,会放过看似正确实则错误的代码,从而高估模型正确率;EvalPlus 将测试集扩大约 80×(HumanEval+)和约 35×(MBPP+),能捕获这些错误,通常使 pass@1 下降数个百分点,因而成为评测代码类 LLM 更可信的标准。
示例解析
任务
EvalPlus(HumanEval+)风格的代表性题目——根据函数签名和 docstring 补全函数体:
```python
from typing import List
def sum_even_at_odd_index(numbers: List[int]) -> int:
"""Return the sum of all even values located at odd indices.
>>> sum_even_at_odd_index([3, 8, 7, 4, 5])
12
>>> sum_even_at_odd_index([1, 3, 5])
0
"""
```
解答
```python
def sum_even_at_odd_index(numbers: List[int]) -> int:
return sum(n for i, n in enumerate(numbers) if i % 2 == 1 and n % 2 == 0)
```
解析
该解法用 enumerate 遍历列表,保留奇数下标(i % 2 == 1)上为偶数(n % 2 == 0)的值并求和,既符合 docstring 的两个示例,也符合空列表或全为奇数等边界情况。评分为通过/不通过:函数在完整的 base+plus 测试集上运行,只有全部测试通过该题才计分。
该 benchmark 暂无已验证的得分。