← 最新论文
🤖 AI

Diffs vs. Whole Files: An Empirical Comparison of Iterative Edit-Based and Direct Generation for Flutter/Dart Code Models

本文通过实证表明,在针对 Flutter/Dart 代码编辑的任务中,大语言模型直接进行全文件生成在所有指标上都显著优于基于迭代差异(diff-based)的生成,而后者仅在重构和错误处理等短小且空间局部化的编辑任务中表现出竞争力。

原作者: Andrej Andrejev

发布于 2026-09-09✓ Author reviewed
📖 1 分钟阅读☕ 轻松阅读

原作者: Andrej Andrejev

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

当计算机程序需要修复代码中的错误时,智能机器有两种主要的方式来完成这项工作。第一种方式是从头开始重写整个文件,生成一份全新的、完整的文档。第二种方式则是像人类编辑一样,进行一系列细微且具体的修改——比如找到一个句子并将其替换为新的句子,或者删除一行并插入另一行——直到任务完成。这种第二种方法通常被称为“diff”或“补丁”(patch),在软件领域非常流行,因为它看起来更高效;它生成的文本更少,并且模仿了人类实际的工作方式。直觉上认为,进行细小、有针对性的编辑比重写全部内容要好,这似乎是理所当然的。然而,在教导人工智能编写代码时,这种直觉是否成立,仍然是一个悬而未决的问题。

最近的一项研究试图通过一项受控实验来解决这场争论。研究人员训练了两种不同的计算机模型,用一种用于构建移动应用程序的特定编程语言来修复代码。他们教其中一组模型一次性重写整个文件,并教另一组模型通过执行一系列细小的、逐步的编辑来完成相同的任务。随后,他们针对近 1,800 个不同的编码任务对这两组模型进行了测试,以观察哪种方法产生的结果更好。研究结果非常明确,且有些令人惊讶:那些重写整个文件的模型在表现上始终优于那些尝试进行小步迭代修改的模型。这种优势体现在每一个衡量成功的指标上,从代码是否能正常运行,到其与正确答案的匹配程度。

研究人员发现,逐步处理方法的失败通常并不是因为模型耗尽了时间或陷入了死循环。事实上,大多数情况下,使用逐步处理方法的模型都能成功完成其指令列表。问题在于,最终生成的结果往往存在细微的缺陷。研究发现,逐步处理方法的一个核心失败原因在于:当输入代码中存在两个或多个完全相同或高度相似的代码片段时,模型的消歧启发式算法(disambiguation heuristic)无法准确判断应该替换哪一个。这一机制本身就解释了在所测试的两种架构中,约有五分之二到三分之二的逐步处理模式失败案例。此外,当模型进行一系列细小的编辑时,它也可能因为无法同时观察整个文件而丢失整体语境,或者在选择要修改的代码部分时出错,导致其细小的改动意外破坏了之前原本正常的代码部分。这些错误往往是“无声”的,这意味着代码仍能运行,但无法实现用户预期的功能。

即使研究人员过滤掉了明显的失败案例,仅观察那些两种方法都产生了可成功编译代码的任务时,直接重写的方法仍然能产生更高质量的结果。一个独立的 AI 评判员在不知道生成方式的情况下对代码进行了评估,并判定直接生成的输出更加正确且编写得更好。该研究排除了逐步处理模型仅仅是因为训练不足或任务过于复杂而无法分段处理的可能性。即使在研究人员考虑了这些因素后,性能差距依然存在,这表明生成代码本身的方法是导致差异的主要原因。

然而,故事并非完全是单方面的。研究人员发现,逐步处理的方法确实有一个特定的利基市场(niche)。只有当所需的更改非常微小且局限于文件的一个极小部分时,它的表现才具有竞争力。例如,当任务涉及修复单个错误或重构一段简短、孤立的代码块时,逐步处理模型的表现几乎与重写整个文件的模型一样好。但一旦任务需要进行较长链条的修改,或者编辑分散在文件的不同部分,逐步处理法就会迅速落后。研究人员得出结论,编辑策略的成功取决于任务的“局部性”(locality):如果改动是微小且自包含的,补丁或许可行;但对于任何更复杂的任务,重写整个文件才是更安全、更可靠的选择。

这一发现挑战了一个普遍的假设,即对于人工智能来说,进行细小、有针对性的编辑总是最有效的路径。虽然逐步处理法节省了计算机需要生成的文本量,但它引入了更高的累积细微错误的风险。研究表明,为了构建可靠的代码编辑工具,最好的方法不是强迫模型始终使用其中一种方法,而是识别任务的性质。当改动是广泛或复杂时,应当允许模型重写整个文件以确保准确性。只有当改动很小且局限于特定位置时,系统才应依赖于一系列细小的编辑。这一洞察有助于明确如何设计更好的开发者工具,确保开发者使用的人工智能生成的代码不仅在生成过程上是高效的,而且在实践中是正确且健壮的。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →