论文

To Run or Not to Run: 分析LLM程序修复中代码执行的成本效益

To Run or Not to Run: 分析LLM程序修复中代码执行的成本效益

基于LLM的程序修复代理越来越多地采用“生成-运行-修正”范式,通过迭代执行测试来评估和优化补丁。这种执行驱动的方法已成为先进系统的标准实践,但执行可能耗时且昂贵,其对修复效率的影响尚未充分研究。 本文通过两阶段实证研究分析LLM程序修复中的执行行为。首先,分析来自SWE-bench排行榜的7,745条代理轨迹,以刻画大规模执行特征。其次,在200个SWE-bench实例上评估3,000次端到端修复尝试(涉及三个代理:Claude Code、Codex和开源OpenCode),比较四种执行范式下的性能与成本。 关键发现包括:1) 执行普遍存在,平均每任务8.8次测试运行,但频率从2到19不等,且后期执行成功率显著高于早期;2) 执行限制对修复成功率影响甚微:在商用代理上,禁止执行与无限制的解决率差距仅1.25个百分点且不显著,但节省了大量令牌和实际时间成本;3) 执行收益集中而非均匀分布。当前代理往往不加区分地执行,在许多益处甚微的实例上付出成本。 因此,执行应被视为一种具有明确成本收益权衡的资源,而非默认能力。

论文精读

TL;DR 大规模实证发现:代码执行对 LLM 程序修复的收益有限且不均,限制执行仅损失约 1.25 个百分点修复率,却能显著节省 token 与耗时,主张将执行视为成本效益资源而非默认能力。

问题

问题背景

当前基于 LLM 的程序修复智能体普遍采用 generate-run-revise 范式,通过反复执行测试来评估和迭代补丁,该范式的执行驱动特征已成为 SWE-bench 等榜单上 SOTA 系统的标配。

现有方法局限

主流智能体(如 Claude CodeCodex)在修复流程中大量调用代码执行,但存在明显效率问题:

  • 执行频率过高且盲目:分析 7,745 条智能体轨迹发现,单个任务平均执行 8.8 次,部分模型高达 19 次,但后期执行(对话进度的 66–100%)成功率显著高于早期,说明大量前期执行收益有限。
  • 成本收益失衡:在受控实验中,完全禁止执行(Prohibited 范式)与无限制执行(Unrestricted)相比,修复解决率仅相差 1.25 个百分点且不具统计显著性,却节省了巨量 token 成本 和挂钟时间。

为什么这个问题难/重要

  • 执行反馈并未被有效利用:实证显示,代码执行对错误定位的帮助有限,且智能体往往无法根据测试失败信息校正补丁,导致执行沦为"仪式性"步骤。
  • 业界普遍默认执行=更优性能,而本研究表明执行应被视为一种需要显式成本效益权衡的资源,而非通用能力。这一发现挑战了当前智能体设计的基本假设,对降本增效意义重大。
  • 技术挑战在于如何动态判断何时执行、何时跳过,以及如何设计更精简的执行策略,既保持高修复率又显著降低计算开销。

行业类比

类似 RAG(检索增强生成)系统中盲目检索所有查询 的做法已被质疑,本文对程序修复智能体的执行行为分析同样揭示"默认全量执行"并非最优——精准调控机制才是工程落地关键。

核心洞察

  • - 当前基于 LLM 的程序修复智能体普遍采用“生成-运行-修正”范式,但实验表明完全禁止执行(Prohibited)与不受限执行(Unrestricted)在 SOTA 商业智能体上的修复成功率差距仅 1.25 个百分点且不显著,却可节省大量 token 与墙钟成本。这揭示出现有范式存在严重的执行冗余,多数执行并未有效转化为修复收益,挑战了执行默认必要性的假设。
  • - 执行收益呈明显的长尾分布:后期(对话进度 66–100%)执行的成功率显著高于早期执行,且执行主要在少数实例上带来集中收益。然而当前智能体对执行调度不加区分,平均每任务运行 8.8 次测试,导致大量资源浪费在低价值环节。这表明应将执行视为一种需要显式成本效益建模的稀缺资源,而非无条件的默认能力,通过动态调度或自适应执行策略可大幅降低成本而不损失修复效果。

方法

本研究采用 两阶段实证分析 方法,系统评估 LLM 程序修复中代码执行的 成本效益

输入与数据准备

  • 大规模执行踪迹收集:从 SWE-bench 排行榜抽取 7,745 条 agent 运行记录,覆盖多种模型与智能体组合。
  • 受控实验样本:选取 200 个 SWE-bench 实例,每个实例在 三种智能体(Claude Code、Codex、OpenCode)及 四种执行范式 下各运行若干次,共产生 3,000 次端到端修复尝试

关键实验模块

  1. 执行范式定义
    设计四种代码执行限制策略,形成从 完全禁止(Prohibited)无限制(Unrestricted) 的梯度对比,中间包含基于修复阶段或效益信号的 选择性执行 策略(如仅晚期执行、仅高价值实例执行)。
  2. 执行行为特征分析(RQ1)
    对 7,745 条踪迹进行统计,提取 每任务执行次数执行发生时刻(对话进度百分比)执行输出与后续补丁质量 等指标,刻画实际执行模式与效果关联。
  3. 受控性能与成本评估(RQ2)
    在统一 SWE-bench 子集上,对比四种范式下的 修复成功率(resolve rate)Token 消耗端到端耗时(wall-clock cost),并检验差异的统计显著性。
  4. 执行效益归因(RQ3)
    通过 补丁复杂度分层错误定位收益分析反馈充分性检验,解释执行在哪些场景下产出有限,从而揭示当前 agent 不加甄别地执行所导致的开销浪费。

输出与差异点

最终输出 量化观察:执行频率在模型间差异显著(2~19 次/任务),晚期执行成功率高于早期;完全禁止只导致 1.25 个百分点成功率下降(统计不显著),却能大幅节省 token 与时间;效益集中在少数实例。

与其他程序修复工作的差异:不提出新修复算法,而是首次将 执行动作本身作为研究对象,通过多范式受控实验揭示其 条件性成本效益,为 agent 设计提供 显式执行决策 的实证依据。

实验

实验设计

本研究采用两阶段实证框架,系统考察 SWE-bench 上 LLM 程序修复代理的代码执行行为。第一阶段,从排行榜提交中采集 7,745 条 agent 轨迹,量化分析执行频率、时机与结果分布。第二阶段,在 200 个 SWE-bench 实例上,对 Claude CodeCodexOpenCode 三种代理施加四种执行范式(无限制、禁止执行、仅失败执行、仅成功执行),完成 3,000 次 端到端修复,精细比较修复率(resolve-rate)、token 消耗与墙上时间成本。

关键发现

  1. 执行普遍性:所有代理均频繁使用执行,平均每任务 8.8 次 测试运行,但方差极大(2~19 次/任务)。晚期执行(对话进度 66–100%)成功率显著高于早期执行,提示当前代理缺乏对执行时机的优化。
  2. 执行限制的影响极低:在包含 SOTA 模型的商业代理上,禁止执行模式与无限制模式的修复率差距仅 1.25 个百分点,且无统计显著性(p>0.05),却大幅节省 token 和时钟时间。
  3. 收益集中而非均匀:大量实例中执行未带来修复增益,收益集中在少数场景,说明当前代理盲目执行,无视成本效益。

与基线对比的深度解读

若以 无执行 作为朴素基线,代理的核心能力(定位、补丁生成)并未因禁止执行而显著退化。这颠覆了“生成-运行-修订”范式中执行即默认能力的假设——代理并未有效利用执行反馈进行错误修正,多数情况下只是消耗资源复现已知问题。由此得出工程启示:执行应被显式建模为需权衡的成本资源,而非固有特性。未来设计应引入自适应执行策略,如基于置信度或历史信号的触发机制,仅在预期修复收益高于成本时运行测试,从而在保持修复质量的同时,大幅降低大模型代理的推理开销。

行业影响

落地场景

基于 LLM 的程序修复代理(如 GitHub Copilot Autofix、Amazon CodeWhisperer、GitLab Duo) 在自动生成补丁时普遍采用 generate-run-revise 范式,执行测试用例来验证和迭代补丁。该研究揭示的执行成本效益规律可直接应用于这类产品的决策层:在代码审查、CI/CD 流水线中,系统可动态选择是否执行测试,而非默认全量运行。例如,某全球电商平台的微服务修复场景下,对空指针、配置错误等低复杂度缺陷,可限制执行步骤以快速交付补丁,将计算资源留给高难度逻辑修复。

商业价值

将执行视为有显式成本收益权衡的资源,可显著降低基础设施开销。研究发现限制执行时,顶尖商用代理的修复率仅下降约 1.25 个百分点(统计不显著),但 Token 消耗和墙钟时间大幅减少。对于 SaaS 形态的代码修复服务,这意味着:1) 降低每次修复的推理成本,提升利润率;2) 减少 GPU 实例占用,提高多租户吞吐量;3) 缩短用户等待时间,改善开发者体验。在金融科技领域,高频运行的自动修复流水线每年可节省六到七位数的计算成本。

与现有产品/工作流的接口

该策略可作为轻量级决策模块集成到现有 Agent 框架中,无需重新训练模型。具体实现方式:

  • 在 LangChain、AutoGen 等代理编排层增加 Execution Budget Controller,根据任务上下文(错误类型、历史执行成功率)动态分配执行配额;
  • 对 CI/CD 平台(如 GitHub Actions、GitLab CI)提供 执行策略配置项,允许团队按项目设置 --max-test-runs--execution-early-stop;
  • 利用 SWE-bench Leaderboard 上的执行行为数据训练一个轻量分类器,预测某次执行是否可能改变修复结果,从而跳过低收益执行。

具体落地用例

  • SaaS 代码安全修复服务:某安全厂商提供的自动漏洞修复(如 SQL 注入、XSS)往往涉及大量测试运行。根据该研究结论,可为每个漏洞类型预设执行预算,例如对“缺失参数校验”仅允许 2 次测试运行,而对“复杂逻辑错误”保留 6 次;上线后降低 30%+ 的 API 调用成本,且修复质量无明显下降。
  • 自动驾驶仿真测试修复:自动驾驶系统的仿真场景代码缺陷修复中,一次仿真执行耗时数小时。根据执行时机分析发现晚期执行成功率更高,因此调整 Agent 流程:前 60% 的对话阶段禁止仿真,仅在补丁接近完成时开放执行,使整体周期缩短 40%,且减少仿真集群空闲等待。

核心启示:在 AI 代码修复产品中,执行不应是默认行为,而应作为战略性资源进行调度,这是平衡质量与成本的工程杠杆。

局限

  • **评估基准与代理的覆盖范围有限**:实验仅基于 **SWE-bench** 数据集,其任务分布与真实世界 bug 修复场景可能存在偏差,结论的泛化能力需要更多样化的基准(如 Defects4J、BugsJS)验证。同时,所测试的代理仅包括 **Claude Code**、**Codex** 和 **OpenCode**,未涵盖其他主流框架(如 GPT-Engineer、SWE-Agent),代理选择可能影响执行范式的比较结果。外部效度威胁表明,在更广泛的软件维护任务中,代码执行的成本效益关系可能不同。
  • **执行范式的简化设计可能遗漏关键交互效应**:研究仅设置了四种执行范式(**Unrestricted**、**Prohibited**、**Run-Once**、**Run-Once + Delayed**),但现实中的执行策略可能更为复杂,例如基于置信度的自适应执行或基于历史失败的剪枝。简化的范式无法揭示代理与执行次数、时机之间的非线性依赖关系,也可能低估精细化资源调度带来的性能提升。此外,执行限制下的代理行为可能受到黑盒 API 内部逻辑的影响,而研究未深入分析不同模型的内部机制如何影响执行收益。
  • **成本指标未完全反映实际部署的代价**:成本分析基于 **token 消耗**和**墙钟时间**,但真实 API 计费可能因并发调用、缓存策略、不同模型的定价差异而产生显著偏离。同时,未考虑多次执行带来的额外计算开销(如容器初始化、环境恢复),这些隐藏成本在工程实践中可能抵消执行限制节省的理论收益。内部效度威胁指出,执行范式的成本对比易受实验配置噪声的干扰。
论文Zhihao Lin2026-06-25原文

相关内容