human-eval

GitHub
3.2k 441 简单 1 次阅读 昨天MIT语言模型其他
AI 解读 由 AI 自动生成,仅供参考

HumanEval 是一套专为评估大语言模型代码生成能力而设计的开源测试框架,源自 OpenAI 关于代码训练模型评估的著名论文。它核心解决了一个关键问题:如何客观、量化地判断 AI 写的代码是否真正“能跑通”且逻辑正确,而不仅仅是看起来像代码。

这套工具提供了一个包含 164 个手工编写编程问题的数据集,每个问题都配有完善的单元测试。用户只需让模型针对这些问题生成代码补全,HumanEval 即可在安全沙箱中自动执行这些代码并运行测试,最终输出 pass@k 等指标(如 pass@1、pass@10),直观反映模型在不同采样次数下的成功率。其独特的技术亮点在于严谨的功能性正确性验证机制,以及对执行安全的高度重视,默认禁用危险执行操作以提醒用户构建隔离环境。

HumanEval 非常适合 AI 研究人员、大模型开发者以及需要基准测试来对比不同代码模型性能的技术团队使用。对于希望深入理解或复现代码大模型评估流程的从业者来说,它是目前业界公认的标准工具之一,能帮助开发者从“写得像”迈向“写得对”的实质性评估阶段。

使用场景

某 AI 初创团队正在研发一款专用于生成 Python 算法代码的大模型,急需在发布前量化评估其代码生成的功能正确性。

没有 human-eval 时

  • 缺乏统一标尺:团队只能自行拼凑少量测试题,评估标准不一,无法与业界顶尖模型(如 Codex)进行公平对比。
  • 人工验证低效:依靠工程师肉眼阅读生成的代码或手动运行脚本,面对数千个生成样本时耗时极长且容易出错。
  • 指标维度单一:仅能统计“代码是否跑通”,难以科学计算 pass@k(如 pass@10, pass@100)等反映模型采样多样性的关键指标。
  • 执行风险不可控:直接在本地运行模型生成的未知代码,缺乏沙箱隔离机制,极易导致宿主机环境被恶意代码破坏。

使用 human-eval 后

  • 对标行业标准:直接复用包含 164 道手写难题的 HumanEval 数据集,确保评估结果具有权威性和可复现性,便于横向竞品分析。
  • 自动化批量评测:通过 evaluate_functional_correctness 命令一键运行数万条测试用例,分钟级输出详细的通过率报告,效率提升百倍。
  • 多维深度洞察:自动计算并输出 pass@1、pass@10 等多粒度指标,精准定位模型在不同采样策略下的真实性能边界。
  • 安全沙箱执行:内置受控的代码执行机制(需配置沙箱),在保障系统安全的前提下自动判断代码是“通过”、“超时”还是“失败”。

human-eval 将原本模糊主观的代码能力评估,转化为了一套安全、高效且国际通用的量化基准体系。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明(已知问题中提到若系统内存不足可能导致评估失败,建议释放内存后重试)

依赖
notes该工具用于运行模型生成的不可信代码,强烈建议在健壮的安全沙箱环境中运行。默认情况下执行代码的功能被注释掉,用户需手动启用并阅读相关安全免责声明。评估过程本身内存占用很低,但若系统 RAM 耗尽可能会导致正确程序运行失败。
python3.7+
未说明
human-eval hero image

快速开始

HumanEval:人工编写的评估集

这是用于评估论文《评估基于代码训练的大语言模型》中描述的 HumanEval 问题求解数据集的评估工具。

安装

请确保使用 Python 3.7 或更高版本:

$ conda create -n codex python=3.7
$ conda activate codex

克隆并安装此仓库:

$ git clone https://github.com/openai/human-eval
$ pip install -e human-eval

使用说明

本程序旨在运行不受信任的模型生成代码。强烈建议用户仅在强大的安全沙箱环境中执行此类操作。execution.py 中的 执行调用 已被故意注释掉,以确保用户在可能不安全的情况下运行代码之前阅读此免责声明。更多信息和操作指南请参阅 execution.py 中的注释。

按照上述说明启用执行功能后,生成样本并将其保存为以下 JSON Lines (jsonl) 格式,其中每个样本都格式化为一行,如下所示:

{"task_id": "对应的 HumanEval 任务 ID", "completion": "仅完成部分,不含提示"}

我们在 data 目录下提供了 example_problem.jsonlexample_solutions.jsonl,以展示格式并帮助调试。

以下是一个几乎可用的示例代码(只需提供 generate_one_completion 函数即可运行),它会将生成的完成内容保存到 samples.jsonl 文件中。

from human_eval.data import write_jsonl, read_problems

problems = read_problems()

num_samples_per_task = 200
samples = [
    dict(task_id=task_id, completion=generate_one_completion(problems[task_id]["prompt"]))
    for task_id in problems
    for _ in range(num_samples_per_task)
]
write_jsonl("samples.jsonl", samples)

要评估这些样本,请运行:

$ evaluate_functional_correctness samples.jsonl
读取样本...
32800it [00:01, 23787.50it/s]
运行测试套件...
100%|...| 32800/32800 [16:11<00:00, 33.76it/s]
将结果写入 samples.jsonl_results.jsonl...
100%|...| 32800/32800 [00:00<00:00, 42876.84it/s]
{'pass@1': ..., 'pass@10': ..., 'pass@100': ...}

该脚本会在以 <input_path>_results.jsonl 结尾的新文件中提供更细粒度的信息。每行现在包含完成是否“通过”以及执行结果,执行结果可能是“通过”、“超时”或“失败”。

作为快速验证,示例样本应得到 0.5 的 pass@1 值。

$ evaluate_functional_correctness data/example_samples.jsonl --problem_file=data/example_problem.jsonl
读取样本...
6it [00:00, 3397.11it/s]
运行示例套件...
100%|...| 6/6 [00:03<00:00,  1.96it/s]
将结果写入 data/example_samples.jsonl_results.jsonl...
100%|...| 6/6 [00:00<00:00, 6148.50it/s]
{'pass@1': 0.4999999999999999}

由于当样本数量少于 k 时,无法无偏估计 pass@k,因此脚本不会对这些情况计算 pass@k。若要使用其他 k 值进行评估,可传递 --k=<逗号分隔的值> 参数。有关其他选项,请参阅:

$ evaluate_functional_correctness --help

不过,我们仍建议您使用默认值。

已知问题

尽管评估过程占用内存极少,但在系统内存不足时,您可能会看到以下错误信息。由于这可能导致一些正确的程序失败,我们建议您释放一些内存后再重试。

malloc: can't allocate region

引用

请使用以下 BibTeX 条目进行引用:

@article{chen2021codex,
  title={Evaluating Large Language Models Trained on Code},
  author={Mark Chen and Jerry Tworek and Heewoo Jun and Qiming Yuan and Henrique Ponde de Oliveira Pinto and Jared Kaplan and Harri Edwards and Yuri Burda and Nicholas Joseph and Greg Brockman and Alex Ray and Raul Puri and Gretchen Krueger and Michael Petrov and Heidy Khlaaf and Girish Sastry and Pamela Mishkin and Brooke Chan and Scott Gray and Nick Ryder and Mikhail Pavlov and Alethea Power and Lukasz Kaiser and Mohammad Bavarian and Clemens Winter and Philippe Tillet and Felipe Petroski Such and Dave Cummings and Matthias Plappert and Fotios Chantzis and Elizabeth Barnes and Ariel Herbert-Voss and William Hebgen Guss and Alex Nichol and Alex Paino and Nikolas Tezak and Jie Tang and Igor Babuschkin and Suchir Balaji and Shantanu Jain and William Saunders and Christopher Hesse and Andrew N. Carr and Jan Leike and Josh Achiam and Vedant Misra and Evan Morikawa and Alec Radford and Matthew Knight and Miles Brundage and Mira Murati and Katie Mayer and Peter Welinder and Bob McGrew and Dario Amodei and Sam McCandlish and Ilya Sutskever and Wojciech Zaremba},
  year={2021},
  eprint={2107.03374},
  archivePrefix={arXiv},
  primaryClass={cs.LG}
}

常见问题

相似工具推荐

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

160.8k|★★☆☆☆|今天
开发框架Agent语言模型

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|1周前
语言模型图像Agent

spec-kit

Spec Kit 是一款专为提升软件开发效率而设计的开源工具包,旨在帮助团队快速落地“规格驱动开发”(Spec-Driven Development)模式。传统开发中,需求文档往往与代码实现脱节,导致沟通成本高且结果不可控;而 Spec Kit 通过将规格说明书转化为可执行的指令,让 AI 直接依据明确的业务场景生成高质量代码,从而减少从零开始的随意编码,确保产出结果的可预测性。 该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程,用户只需通过简单的命令行操作,即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念,支持社区扩展与预设模板,允许用户根据特定技术栈定制开发流程。此外,Spec Kit 强调官方维护的安全性,提供稳定的版本管理,帮助开发者在享受 AI 红利的同时,依然牢牢掌握架构设计的主动权,真正实现从“凭感觉写代码”到“按规格建系统”的转变。

88.7k|★★☆☆☆|2天前
语言模型图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|2周前
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.3k|★★☆☆☆|昨天
图像数据工具视频

funNLP

funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。

79.9k|★☆☆☆☆|1周前
语言模型数据工具其他