llm 域评测的是云厂商作为产品售卖的托管大模型。HumanEval
(openai/openai_humaneval,MIT)是第一个通过运行模型写的代码来评分的套件:
每题让 SUT 补全一个函数签名 + docstring,再把补全与该题自带的
check(candidate) 单元测试一起执行。经典指标 pass@1 = 测试通过的题目比例。
这是客观评分,不是主观 judging:候选要么通过单元测试,要么不通过
(deterministic)。
三条路径
params.limit 限制题目数量。执行前会剥离模型补全外层的单个 ```python … ```
代码围栏(真实 endpoint 常无视”不要围栏”的提示),因此”带围栏但正确”的答案不会被误判。
对端点的重试沿用与 MMLU 相同的可选 params.retry 策略:
默认关闭,max_attempts / backoff_base_s(默认 0.2)/ backoff_max_s
(默认 5.0)限定其行为,只有 429/5xx/超时/连接错误会重试(其他 4xx 不会——重试
一个格式有误的请求只会拖延一个真实的客户端 bug),且开启后会改变本次运行的
数据集 digest 与数据集版本标签,因此重试过的运行永远不能与干净运行比较。
params.retry 不是 target.retries——后者 key 名相同,但只约束控制面。重试针对的
是生成调用;下文的沙箱执行从不重试。
沙箱与安全
执行复用第一方core.sandbox helper:每个候选在全新子进程中运行,带
剥离机密的环境(模型代码无法从 os.environ 读到运营方的 *_API_KEY)、
墙钟 timeout、新会话(超时时杀掉整个进程组)以及 POSIX rlimit 上限
(CPU、地址空间、文件大小、fd 数量,经 preexec_fn 施加),工作目录用完即弃。
llm-endpoint 路径额外要求显式 params.allow_code_execution: true 才会执行,
并在发送 Bearer key 前对 endpoint URL 做 SSRF 校验(仅 http(s)、禁止云 metadata/
link-local 主机)。正如 core.sandbox 所声明,这是纵深防御,不是容器——它
限制失控的 CPU/内存/输出,而非文件系统或网络访问。
离线参考路径只执行数据集经审阅的标准答案代码;执行模型生成的补全
(llm-endpoint)属于不可信操作,应由你在自己的隔离环境中决定。
度量
official-humaneval-evaluator 发出 human-eval.* 度量:
均为
official=True(provenance 标记——由套件的公认 evaluator 发出,不是审计
断言)。当运行未记录用量时(如参考/fixture 路径),token/延迟维度会省略。
human-eval.avg_latency_ms 不是 LLM 延迟。 与 mmlu.avg_latency_ms /
gsm8k.avg_latency_ms(生成调用自身的耗时)不同,这一项是每道题的生成代码在
沙箱中执行的平均墙钟耗时——另一个循环,完全不含任何端点时间。因此重试无论如何
都不会改变它,把它与其他套件的 avg_latency_ms 相比,比较的是两个毫不相干的量。
生成调用的重试代价另行报告:开启 params.retry 后会出现
human-eval.retry_count / human-eval.retry_overhead_ms(official=False)。
有意的范围(切片 1)
- 一个小的真实 HumanEval 样本(openai/openai_humaneval,MIT)以 fixture 形式 内置,固定到数据集 main-commit,使 mock / 参考路径无需网络。完整 164 题的抓取 是未来增项——如今它被明确标注为样本,而非完整榜单运行。
- 贪心单样本
pass@1;pass@k采样是未来增项。 - 本套件是其他”按执行评分”的基准(SciCode、USACO)所依赖的代码执行基座。
