ProgramBench Vetted:从可运行二进制文件进行逆向工程

Hacker News Top 论文

摘要

ProgramBench Vetted 是一个包含50个任务的基准,用于评估AI代理从可运行二进制文件重构程序的能力,旨在研究长上下文协调并为强化学习提供密集奖励。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/22 19:41

# ProgramBench 精选版 来源: https://vetto.ai/companies/programbench-vetted.html 属于计算机文集基准测试系列。 ## ProgramBench 精选版 智能体能否从可执行二进制文件重建程序?这是 ProgramBench (https://arxiv.org/abs/2605.03546) 背后的核心问题。我们发布了 **ProgramBench 精选版**,包含 50 项基于同一前提的任务,并对任务设计流程进行了改进,使基准测试更公平、更可靠。除了保留可量化的部分进展和基于确定性测试的评分外,我们的任务设计流程还增加了更广泛的控制措施,以应对测试重复、环境质量、可破解性和公平性方面的失败模式。 **ProgramBench 精选版模型结果** 通过 100% 测试的任务,在 50 项保留任务中的 pass@1 结果 · 默认 ProgramBench mini-swe-agent 配置 ProgramBench 之所以重要,是因为程序重建是少数围绕非常长期工作的编码基准测试格式之一。智能体必须在扩展的轨迹中保留和修改程序模型,这使得这些任务对于研究长上下文协调非常有用。它们对于强化学习虚拟奖励也极具价值:许多确定性行为检查可以提供 **密集、行为驱动的奖励**,而智能体仍需将该反馈整合为一个连贯的实现。 由于这些任务来自公开仓库,其中一些可能已出现在大型模型的预训练数据中。然而,先前接触并不意味着模型在被要求从观察到的行为回到代码时,能够从记忆中检索或重建实现。《逆向诅咒》(https://arxiv.org/abs/2309.12288) 为这一差距提供了一个有用的类比。我们在附录 D 中讨论了由此产生的 **记忆悖论 (https://vetto.ai/companies/programbench-vetted.html#appendix-memorization)** 及其训练影响。 ## 什么是 ProgramBench ProgramBench 由 Meta 于 2026 年 5 月发布,它给智能体一个它 *可以执行但无法读取* 的编译程序,以及其使用文档。智能体必须编写一个新的代码库来重现观察到的行为。 200 项任务中的每一项都是一个真实的开源 CLI 项目,从小型工具到 FFmpeg、SQLite 和 PHP 解释器。预期的任务包是一个密封容器:二进制文件仅可用于执行,文档被保留,而源代码和 git 历史记录被移除。智能体获得一个 shell,无互联网访问,一千个步骤和六小时。行为测试对结果进行评分。 这些测试本身也是由一个探查原始仓库和二进制文件的智能体编写的。原始构建过程有三个阶段: 1. **构建参考。** 选择一个使用编译语言的仓库,并让构建智能体生成 *金标准* 二进制文件。 2. **生成行为测试。** 测试生成智能体在有权访问源代码、现有测试和文档的情况下,探索仓库和二进制文件。它可以调整上游测试,并使用源代码行覆盖率来指导进一步的探索。 3. **验证和密封。** 每个生成的测试都必须通过断言检查器、通过金标准二进制文件的测试,并且无法通过虚拟二进制文件的测试。然后一个单独的步骤将模型的工作区缩减为可执行文件、文档和保留的测试资产。 在评估时,源代码、仓库测试和 git 历史记录缺失。智能体保留文档,并在构建替代品时可以执行参考二进制文件。生成的行为套件随后根据通过的测试比例对重建进行评分;只有所有测试都通过时,任务才算完成。 保留的文档提供了部分规范,但并非完整的行为契约。其余部分必须通过探查二进制文件、形成假设、实现、比较结果和修改来推断。论文中分析的四种前沿智能体,其 23% 到 34% 的动作都用于探测参考程序,使得实证调查成为任务的重要组成部分,而非简单的设置步骤。 ## 为何 ProgramBench 精选版与众不同 ProgramBench 精选版并非设计得更难。它的设计目标是让每个奖励点更忠实地代表预期行为。我们的目标是校准难度:任务应为有意义的局部进展留出空间,但不应为重现浅层接口或利用评估中的缺陷而奖励大部分分数。 ### 我们的内部 ProgramBench 生成流程 与原始 ProgramBench 类似,我们的流程将仓库转化为两个耦合的产出物:一个洁净室重建环境和一个定义其奖励的行为测试套件。然而,为了解决我们在审核已发布数据集时发现的失败模式,我们在整个构建过程中添加了验证和修复,而不是依赖最终的单次审查。 研究人员的持续审查为专门的 **“作为法官的智能体”** 和 **“作为医生的智能体”** 提供了种子。法官们调查工作区,测试相关行为,并生成评分报告和供审查的证据。当有前景的任务存在可修复的问题时,医生们利用这些证据进行受约束的更改,然后任务再次通过相同的检查。 这些循环与针对可精确测量属性的确定性门控以及主动尝试利用任务或其奖励的对抗性智能体并行运作。人类审查员处理模糊情况,做出最终决定,并将反复出现的失败模式转化为后续审查的更强标准。 我们将计算分布在这些专门的阶段,因为构建完整性、环境泄漏、测试质量和奖励利用需要不同形式的调查;没有任何单一分数能够涵盖所有这些方面。这种专门计算与累积审查知识的结合是我们构建任务的核心。 下面的四个展示将过程分为多个相连的阶段,包含许多步骤。 **人类** | **智能体** | **确定性流程** --- | --- | --- **阶段 01:源代码与构建** 一个可行的参考先于测试生成 | 源代码、构建并验证参考程序 人类选择的仓库经过来源审查官、构建智能体、确定性编译门控以及审查官-医生修复循环,最终生成金标准二进制文件和洁净室基础。 | 人类选择 | | 来源 CLI | 大多为 C、C++ 和 Rust | | 调查智能体 | “来源”审查官 | 评估可行性 | | 构建阶段 | 构建二进制文件智能体 | 策略遵循复杂性 | | 确定性门控 | 验证二进制文件 | 编译、启动、行为 | | 接受的参考 | 金标准 + 洁净室基础 | 准备并行阶段 | | 调查智能体 | “构建”审查官 | 测试、评分并报告 | | ×N 修复智能体 | “构建”医生 | 修复后返回审查官 | | ×N 次失败后 | 人类审查 | 检查、修复、指导、拒绝 | | 人类发现反馈到来源审查官、构建审查官和构建医生 | **展示 1:源代码与构建。** 研究人员选择一个合适的 CLI 仓库,然后由来源审查官、构建智能体、确定性门控以及审查官-医生修复循环建立一个可工作的参考。反复失败会升级为人类审查;通过的结果产生金标准二进制文件和洁净室环境的基础。 **作为法官的智能体评估;作为医生的智能体修复。** 每个审查官调查任务,应用从反复出现的生成失败中得出的标准,并生成带有支持性产出物的评分。配对的医生利用这些证据修复可修复的任务,然后将其交还给同一审查官。专门的配对让流水线能够分别从来源、构建、洁净室、测试和推理中的失败中学习,而不是要求一个通用检查覆盖每一层。 **反复失败升级为人类审查。** 一旦自动化循环达到其轮次限制,审查员可以检查产出物和轨迹,拒绝任务,修复并批准它,或给相关的医生明确的指示。这些发现成为后续运行的更强标准和修复策略,在减少重复人类工作的同时,将新颖、模糊的情况和最终的接受决定留给研究人员。 **阶段 02:生成与去重** 一个参考,多个独立尝试描述其行为 | 生成和去重行为测试 仓库和二进制文件馈送给多达十五个独立的测试生成分支。确定性验证和专门的去重过程产生候选行为套件。 | 输入 | 仓库 + 二进制文件 | 源码、文档、测试、二进制文件 | | 最多 ×15 个分支 · 5 个前沿模型 | 独立生成 | | 多分支测试生成 | 扩展的 mini SWE 工具 | | 行为探索工具 | 确定性检查 | | 验证生成的测试 | 金标准通过 · 虚拟失败 | | 执行 + 不稳定性检查 | 多阶段分析 | | 去重 | 跨分支的重复或包含行为 | | 输出 | 行为套件 | 活动需求 | | 确定性质量测试 | 行覆盖率 | **展示 2:生成与去重。** 高达 15 个独立分支,使用五种前沿模型探索仓库和经过验证的二进制文件。确定性门控移除无效或不稳定的测试,然后多阶段去重过程将重复或包含的行为合并到候选套件中。 **覆盖来自独立搜索;奖励在之后整合。** 五种前沿模型通过多达 15 次测试生成试验探索每个候选任务。在生成的检查成为奖励之前,确定性门控要求可靠的执行、金标准二进制文件的通过以及虚拟实现的失败。然后去重移除重复或包含的行为,这样额外的分支扩大了套件,而不是重复相同的奖励。 **阶段 03:审计与修复清理** 环境和分数作为一个系统被审查 | 审计、修复和清理洁净室与测试 并行的洁净室泄漏和测试质量审查官可以调用可选的修复医生。审查官批准的输出直接进入候选任务;反复失败则升级为人类审查。 | 环境通道 | 洁净室 | 文档、二进制文件、必需资产 | | 调查智能体 | “泄漏”审查官 | 评估捷径 | | 可选 ×N | 可选修复智能体 | “泄漏”医生 | 修复后返回审查官 | | 测试通道 | 去重后的测试 | 候选奖励信号 | | 调查智能体 | “测试质量”审查官 | 评估质量 | | 可选 ×N | 可选修复智能体 | “测试质量”医生 | 修复后返回审查官 | | 审查官批准的输出 | 候选任务 | 验证的环境 + 验证的测试 | | 人类升级 | 人类审查 | 检查、修复、指导、拒绝 | **展示 3:审计与修复清理。** 洁净室和去重后的测试作为独立但耦合的表面进行调查。专门的审查官检查泄漏、捷径、可达性、稳定性和行为质量;可选的医生修复可修复的失败,而未解决的案例在两个人工表面重新合并为候选任务之前,升级为人类审查。 **审查和重新验证针对需要判断的失败。** 合成测试生成很丰富;诊断无效任务则不然。我们将上下文审查集中在构建、覆盖率和运行时专业知识可以跨任务转移的地方,在 Rust、C 和 C++ 方面尤其深入。反复出现的诊断成为明确的检查项,用于检测泄露的神谕、环境 CLI、可加载库、不稳定测试、不可达需求和易受捷径影响的奖励。一个标志可以触发重播、修复或拒绝。无论任务是由人类修复还是在 AI 辅助下修复,产生的产出物都必须再次通过受影响的验收标准才能继续。 **阶段 04:校准与批准** 模型解决任务;对抗性智能体试图破坏其奖励 | 推理、对抗性推理和最终批准 候选任务并行运行正常的模型推理和专门的对抗性推理。一个通用质量审查官评估两个流,并为人类接受、修复或拒绝该任务的决定准备证据。 | 验证的包 | 候选任务 | 洁净室加测试 | | 模型评估 | 推理(使用 N 个模型) | 轨迹和测试结果 | | 攻击评估 | 对抗性推理 | 尝试利用奖励 | | 调查智能体 | “通用质量”审查官 | 公平性、可靠性和可破解性 | | 最终人类决定 | 接受 | 修复或拒绝 | | 修复返回相关阶段并重新运行 | **展示 4:校准与批准。** 当前模型尝试候选任务,而对抗性智能体搜索通往奖励的更便宜路径。通用质量审查官一起评估普通和对抗性证据,但最终接受、修复或拒绝该任务的决定仍然是人类的;任何修复都会返回通过受影响的检查。 ### 当前候选集 候选集包含 50 项保留的、经过验证器评分的任务。构建使用五种前沿模型,每个任务最多进行 15 次独立的测试生成试验,以及覆盖引导的探索、结构去重、泄漏检查和对抗性审查: 1. **捷径检查。** 流水线探测已知的失败类别:非变化的金标准行为、可到达的参考实现、恒定的固定测试和退化的套件形状。 2. **校准。** 我们让多个模型针对每个候选任务运行,并研究部分分数的分布。当观察到的分数未能反映任务旨在测量的行为时,我们会检查原因,修改测试、文档或环境,并再次运行任务。目标是实现一个有用的难度范围:足够的可访问行为以衡量进展,足够的未解行为以保留提升空间,以及一个随着重建质量提高而变化的分数。那些几乎均匀成功、几乎均匀失败或呈现尖锐全有或全无阈值的任务会接受进一步审查。 3. **公平性和可破解性。** 我们调查真实实现无法满足的需求以及无需重建预期行为即可获得奖励的捷径。一个公平的任务使指定行为可达;一个稳健的任务不会暴露通往其奖励的更便宜路径。在原始数据集中,FFmpeg 依赖于缺失的参考输入[示例](https://vetto.ai/companies/programbench-vetted.html#ffmpeg-fate-audit);文档回声在未实现核心行为的情况下清除了 79.5% 的 cmatrix 套件[示例](https://vetto.ai/companies/programbench-vetted.html#cmatrix-facade-audit);而一个围绕任务环境中已安装的 XZ 可执行文件的八行包装器已经获得了其活动奖励的 77.3%[示例](https://vetto.ai/companies/programbench-vetted.html#ambient-delegation-audit)。 我们将这些案例中的经验编码为构建门控和修复,而不是将难度本身视为质量的证据。可疑案例会针对参考程序和密封环境进行重播,测试、文档、运行时映像和任务契约作为一个系统进行审查。当证据指向不可达的需求、规格不足的接口或易受捷径影响的奖励时,我们会修改相关的测试、文档或环境,并再次运行任务。 4. **去重。** 我们合并被分类为覆盖相同或包含行为的对。 ### 排行榜比较 | 模型 | ProgramBench 平均奖励 | 几乎解决 (≥95%) | ProgramBench 精选版 平均奖励 | 几乎解决 (≥95%) | 已解决 | | :--- | :--- | :--- | :--- | :--- | :--- | | Claude Opus 5 (xhigh) | 74.7% | 37.0% | 4.5% | **81.9%** | **50.0%** | **14.0%** | | Grok 4.6 (xhigh) | --- | --- | --- | **68.7%** | **24.0%** | **6.0%** | | GPT 5.5 (xhigh) | 69.8% | 13.5% | 0.5% | **85.2%** | **28.0%** | **2.0%** | | DeepSeek V4 Pro 0813 (xhigh) | --- | --- | --- | **71.8%** | **22.0%** | **2.0%** | | Claude Sonnet 5 (xhigh) | --- | --- | --- | **57.9%** | **14.0%** | **2.0%** | | Muse Spark 1.2 (high) | --- | --- | --- | **55.5%** | **6.0%** | **2.0%** | | GPT 5.6 Sol (xhigh) | 69.9% | 15.5% | 1.0% | **82.8%** | **28.0%** | **0.0%** | | Kimi K3 (max) | 77.8%\* (https://www.kimi.com/blog/kimi-k3) | --- | --- | **22.1%** | **10.0%** | **0.0%** | | Gemini 3 Pro (high) | --- | --- | --- | **59.0%** | **18.0%** | **0.0%** |

相似文章

ProgramBench(5分钟阅读)

TLDR AI

ProgramBench 是一项全新的基准测试,用于评估 AI 智能体在无法获取源代码或反编译工具的情况下,仅凭编译后的二进制文件和文档重建完整软件项目的能力。