缓存时间:
2026/05/08 09:21
# ProgramBench
来源:https://programbench.com/
ProgramBench logo语言模型能从零重建程序吗?
仅给定一个编译后的二进制文件及其文档,智能体必须设计并实现一套完整的代码库,以复现原始程序的行为。
## 关于 ProgramBench
在每个任务中,智能体会收到一个可执行文件及其文档,并必须重新实现该可执行文件。它无法获取该可执行文件的*任何*源代码,不能对可执行文件进行反编译(https://programbench.com/#faq-decompilation),也不能使用互联网(https://programbench.com/#faq-internet)。共有200个任务(https://programbench.com/tasks/),涵盖不同的程序复杂度,从小型终端工具如 jq(https://programbench.com/task/jqlang__jq.b33a763/)和 ripgrep(https://programbench.com/task/burntsushi__ripgrep.3b7fd44/),到大型软件项目如 PHP 编译器(https://programbench.com/task/php__php-src.c891263/)、FFmpeg(https://programbench.com/task/ffmpeg__ffmpeg.360a402/)和 SQLite(https://programbench.com/task/sqlite__sqlite.839433d/)。
智能体必须选择编程语言、设计架构、编写所有源代码并生成构建脚本。每一个设计决策都由模型自主做出。
一旦智能体提交程序,我们的测试套件会将候选程序的行为与原始程序进行比较。只有当某个任务的所有测试都通过时,该候选程序才算通过。
我们的测试套件通过智能体驱动的模糊测试生成,包含超过248,000个行为测试,覆盖200个任务(https://programbench.com/tasks/)。
ProgramBench 中的任务有可能完全解决吗?是的。智能体可以运行给定程序并观察其任意输入下的行为,因此不存在无法通过实验发现的隐藏信息。该基准测试虽然困难,但设计上是可以解决的:所有参考可执行文件都能通过我们的测试套件。更多内容请阅读我们的博客文章(https://programbench.com/blog/is-programbench-impossible/)。
为什么 ProgramBench 的分数这么低?从零构建程序本质上是一项极具挑战性的任务。智能体目前在许多任务上已取得部分进展(详见扩展结果 https://programbench.com/extended/),但完全通过所有测试仍然难以实现。
**智能体真正需要进行架构设计。**这部分是因为与其他整库生成项目不同,我们不给智能体任何提示或结构,意味着智能体必须真正自主设计解决方案(参见"ProgramBench 有何不同?https://programbench.com/#faq-related-work")。
**无需调优测试框架。**其他近期或同期工作针对单个或少数任务进行了大量的框架调优。我们刻意避免这种做法,因为针对少量精选任务调优框架得出的 headline 分数会严重夸大智能体从零构建软件的真实能力。相反,ProgramBench 使用单一的通用测试框架评估所有任务。
**洁净室实现。**我们采取了大量措施防止作弊。智能体在沙箱容器中运行,无互联网访问,因此无法获取原始源代码或获得其他形式的帮助。
**禁止反编译。**参见"任务可以通过反编译解决吗?https://programbench.com/#faq-decompilation"
我们在论文的第6节(https://arxiv.org/abs/2605.03546)回顾了相关工作。我们还在下方的 FAQ(https://programbench.com/#faq-cheating)和论文第4.1节讨论了作弊问题。
你的智能体脚手架足以解决所有任务吗?
**广泛采用的基线。**我们使用 mini-SWE-agent(https://github.com/swe-agent/mini-swe-agent/),因为它既被其他基准测试(SWE-bench Verified、SWE-bench Multilingual、Terminal-bench)广泛采用作为基线,又刻意保持脚手架的简洁性,以减少模型能力与框架设计之间的混淆因素。大多数其他智能体(如 Claude Code,据称有数十万行代码)也在不断以非透明的方式变化,而 mini-SWE-agent 可以在可预见的未来实现模型性能的公平比较。
**几乎没有运行时限制。**除极少数例外,模型是主动提交解决方案,而非超出我们宽松的时间或步骤限制,且它们从未耗尽上下文窗口。由于我们不限制总成本,我们的单次运行成本最高可达 $5,000(Sonnet 4.5)。
**不同程度的难度。**ProgramBench 刻意包含从仅几千行代码的极短仓库到极其庞大的各种难度任务。我们认为极低的分数更多反映的是模型能力不足,而非只有多智能体系统才能解决我们的任务。尽管如此,如果 ProgramBench 能成为首批包含只有多智能体系统才能解决任务的系统性基准之一,我们将非常兴奋。
**开启新的脚手架竞赛。**我们相信 mini-SWE-agent(https://github.com/swe-agent/mini-swe-agent/)是正确的基线选择,且它绝对可以解决(部分)任务。然而,如果 ProgramBench 能开启一场新的脚手架竞赛,我们将更加兴奋!我们即将开放提交(https://programbench.com/#faq-submit)。
智能体能作弊吗?智能体在沙箱容器中运行,无互联网访问,对二进制文件仅有执行权限,且无法使用反编译工具。在早期未设限的试验中,模型发现了从 GitHub 克隆源代码仓库或通过包管理器下载代码等捷径。更多内容请阅读我们的博客文章(https://programbench.com/blog/is-programbench-impossible/)和论文第4.1节(https://arxiv.org/abs/2605.03546)。
为什么以及如何阻止反编译?提供给智能体的可执行文件只有执行权限,没有读取权限。这意味着任何非执行操作(如运行反编译器、反汇编器、`objdump`、`strings` 或 `hexdump`)都会失败。
我们这样做是因为希望 ProgramBench 回答的问题是"语言模型从零构建程序的能力如何",而非"语言模型拼凑反编译代码片段的能力如何"。
排行榜如何排序?主要指标是什么?ProgramBench 应报告的主要指标是完全解决的任务数。目前在主要指标分数较低的情况下,我们也报告"接近解决"(超过95%的测试用例通过)作为额外参考。排行榜首先按完全解决数排序,其次按接近解决数排序,最后按平均测试通过率排序。
要详细了解模型性能,我们推荐查看详细排行榜(https://programbench.com/extended/)上的图表。另见:"你们考虑过其他指标吗?https://programbench.com/#faq-metrics"
如何提交到排行榜?公开提交门户即将上线。请关注作者(John https://x.com/jyangballin、Kilian https://x.com/KLieret)获取更新。
为什么不允许使用互联网?我们广泛研究了包括允许互联网在内的不同推理设置。我们发现允许互联网会导致大量作弊,需要语言模型作为评判来标记和取消资格解决方案。这使得基准测试的可靠性降低,尤其是因为在从网络获取源代码的背景下,精确定义作弊并非易事。
然而,除了包含作弊的实例外,我们并未观察到允许互联网时分数有显著提升。
相关消融实验见论文第4.1节(https://arxiv.org/abs/2605.03546)和 John 的解释(https://x.com/jyangballin/status/2051829957199011974)。
你们考虑过其他指标吗?例如,平均通过测试数?是的,经过深思熟虑后我们确定了当前的解决指标。我们的核心问题是"语言模型能从零构建程序吗?",最相关的指标是能完全构建的程序比例。报告平均测试通过率会极具误导性,因为每个实例都包含非常简单的测试(如检查标志是否存在、使用 `--help` 调用可执行文件时的行为等)。
我们也考虑过使用更宽松的指标如"接近解决"。然而,放宽到 ≥95% 甚至 99% 的测试通过也存在问题。首先,对于某些任务,我们有近15,000个测试。即使1%也意味着150个测试。而且即使单个测试失败也可能表明程序存在严重问题。因此"接近解决"仅作为额外参考,直到主要"解决"指标有足够的区分度。
然而,所有辅助指标对于诊断和改进模型及脚手架仍然有用!它们只是不适合作为基准指标。更多信息请查看扩展结果(https://programbench.com/extended/)。另见:"排行榜如何排序?https://programbench.com/#faq-sorting"
那污染/记忆化问题呢?所有任务均来自开源仓库。因此,评估的语言模型在训练期间肯定见过它们。然而,我们目前**并不**担心这一点:
**零分。**即使记忆化在起作用(在我们看来并非如此),它也远不足以获得高分。分数似乎与系统性的功能实现努力更为相关。
**不同语言消融。**在论文第4.1节(https://programbench.com/static/paper.pdf)中,我们引入了一种替代推理设置,强制模型使用与原始程序不同的语言实现,有效绕过了记忆化(尤其是因为记忆化极度依赖提示)。分数没有显著变化,得出当前分数与原始源代码的记忆化没有显著相关的结论。
直接记忆化极其容易测量,我们正在积极监控。如果它成为明显问题,我们可能会调整推理设置来防止。目前,更重要的是确保所有任务都是可解决的(https://programbench.com/#faq-solvable)且自然的,因此我们去除了防止作弊(https://programbench.com/#faq-cheating)之外不必要的限制。
🌸 命令行模糊查找器 79,721 go 最佳分数:82%(https://programbench.com/task/junegunn__fzf.b56d614/)
git 命令的简单终端 UI 76,901 go 最佳分数:56%(https://programbench.com/task/jesseduffield__lazygit.1d0db51/)
ripgrep 递归搜索目录中的正则表达式,同时尊重 gitignore 62,855 rs 最佳分数:80%(https://programbench.com/task/burntsushi__ripgrep.3b7fd44/)
https://git.ffmpeg.org/ffmpeg.git 的镜像 59,217 c 最佳分数:5%(https://programbench.com/task/ffmpeg__ffmpeg.360a402/)
带翅膀的 cat(1) 克隆 58,487 rs 最佳分数:33%(https://programbench.com/task/sharkdp__bat.f822bd0/)
强大且易学的标记排版系统 52,957 rs 最佳分数:28%(https://programbench.com/task/typst__typst.88356d0/)
通用标记转换器 43,632 hs 最佳分数:14%(https://programbench.com/task/jgm__pandoc.5caad90/)
'find' 的简单、快速、用户友好替代方案 42,668 rs 最佳分数:78%(https://programbench.com/task/sharkdp__fd.40d8eb3/)
PHP 解释器 40,030 c 最佳分数:5%(https://programbench.com/task/php__php-src.c891263/)
DuckDB 是一款分析型进程内 SQL 数据库管理系统 37,657 cpp 最佳分数:12%(https://programbench.com/task/duckdb__duckdb.bdb65ec/)
更智能的 cd 命令。支持所有主流 shell 35,994 rs 最佳分数:76%(https://programbench.com/task/ajeetdsouza__zoxide.67ca1bc/)
命令行 JSON 处理器 34,541 c 最佳分数:90%(https://programbench.com/task/jqlang__jq.b33a763/)
git、diff、grep、rg --json 和 blame 输出的语法高亮分页器 30,445 rs 最佳分数:37%(https://programbench.com/task/dandavison__delta.acd758f/)
命令行基准测试工具 27,960 rs 最佳分数:54%(https://programbench.com/task/sharkdp__hyperfine.327d5f4/)
ggreer/the_silver_searcher 类似 ack 但更快速的代码搜索工具 27,080 c 最佳分数:59%(https://programbench.com/task/ggreer__the_silver_searcher.a61f178/)
Zstandard - 快速实时压缩算法 27,013 c 最佳分数:69%(https://programbench.com/task/facebook__zstd.1168da0/)
facebookresearch/fastText 快速文本表示与分类库 26,511 cpp 最佳分数:76%(https://programbench.com/task/facebookresearch__fasttext.1142dc4/)
robertdavidgraham/masscan TCP 端口扫描器,异步发送 SYN 数据包,5 分钟内扫描整个互联网 25,544 c 最佳分数:57%(https://programbench.com/task/robertdavidgraham__masscan.b99d433/)
编程工具的增量解析系统 24,953 rs 最佳分数:37%(https://programbench.com/task/tree-sitter__tree-sitter.5e23cca/)
简单、现代、安全的加密工具(及 Go 库),具有小巧显式密钥、无配置选项和 UNIX 风格可组合性 22,077 go 最佳分数:63%(https://programbench.com/task/filosottile__age.706dfc1/)
从 markdown 文件创建书籍。类似 Gitbook,但用 Rust 实现 21,541 rs 最佳分数:55%(https://programbench.com/task/rust-lang__mdbook.37273ba/)
n3 非正统终端文件管理器 21,506 c 最佳分数:98%(https://programbench.com/task/jarun__nnn.cb2c535/)
终端 JSON 查看器和处理器 20,433 go 最佳分数:76%(https://programbench.com/task/antonmedv__fx.86d0d34/)
yq 是一款可移植的命令行 YAML、JSON、XML、CSV、TOML、HCL 和 properties 处理器 15,281 go 最佳分数:39%(https://programbench.com/task/mikefarah__yq.602586d/)
⬛️ 将完整网页保存为单个 HTML 文件的 CLI 工具和库 15,024 rs 最佳分数:51%(https://programbench.com/task/y2z__monolith.8702e66/)
整理你的 .profile 14,998 go 最佳分数:62%(https://programbench.com/task/direnv__direnv.02040c7/)
Brotli 压缩格式 14,673 c 最佳分数:91%(https://programbench.com/task/google__brotli.b3dc9cc/)
让 JSON 可 grep!14,424 go 最佳分数:90%(https://programbench.com/task/tomnomnom__gron.88a6234/)
快速统计代码量 14,300 rs 最佳分数:70%(https://programbench.com/task/xampprocky__tokei.505d648/)
⚡ 用 Rust 编写的代码结构化搜索、lint 和重写 CLI 工具 13,541 rs 最佳分数:12%(https://programbench.com/task/ast-grep__ast-grep.dde0fe0/)
cheat 允许你在命令行创建和查看交互式速查表。旨在帮助 *nix 系统管理员记住常用但不常记的命令选项 13,278 go 最佳分数:60%(https://programbench.com/task/cheat__cheat.b8098dc/)
git 的文本模式界面 13,200 c 最佳分数:84%(https://programbench.com/task/jonas__tig.8334123/)
注重速度的小型构建系统 12,895 cpp 最佳分数:72%(https://programbench.com/task/ninja-build__ninja.cc60300/)
查看和导航目录树的新方式:https://dystroy.org/broot 12,619 rs 最佳分数:67%(https://programbench.com/task/canop__broot.d6c798e/)
带图表的 Ping 12,433 rs 最佳分数:78%(https://programbench.com/task/orf__gping.26eb5b9/)
🌀 无意义活动生成器 11,995 rs 最佳分数:59%(https://programbench.com/task/svenstaro__genact.16f96e3/)
极速压缩算法 11,781 c 最佳分数:83%(https://programbench.com/task/lz4__lz4.1519f46/)
命令行 Git 信息工具 11,745 rs 最佳分数:82%(https://programbench.com/task/o2sh__onefetch.e5958ce/)
更直观的 rust 版 du 11,609 rs 最佳分数:71%(https://progr