论文

差异与整个文件:Flutter/Dart 代码模型的基于迭代编辑和直接生成的实证比较

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

模型评测模型行为与机制分析

摘要

用于代码编辑的 大语言模型 可以在至少两种输出机制中进行训练和部署:直接生成,其中模型一次发出整个修改的文件,以及基于差异的迭代生成(“步骤”),其中模型发出一系列本地化搜索/替换编辑,一次应用一个,直到发出完成信号或步骤预算耗尽。基于差异的机制很有吸引力,因为它反映了开发人员编辑代码的方式,并且每回合需要的生成词元要少得多。我们在共享的 Flutter/Dart 数据集上训练两个代码模型 - 一个从头开始训练的 100M 参数模型 (Rainbow-Pony-100M) 和一个经过微调的 Qwen2.5-Coder-0.5B - 在两个机制中,每个模型保留约 1,790 个任务,并评估所有四个结果模型。在我们测量的每个指标上,直接生成都远远优于基于差异的生成 - 编译/静态分析通过率、每字节位数、与参考的字符级相似性,以及目标实现、正确性和代码质量的盲 LLM 判断评级 - 并且在通过匹配 ID 比较控制任务难度后以及限制在双方编译的代码时,差距仍然存在。然后,我们在基于差异的生成确实获胜的条件背后确定了一个独立于体系结构的机制:它在短的、空间局部化的编辑方面具有竞争力,并且其类别级别的胜利集中在两个任务类别 - 重构和错误处理/边缘情况修复 - 在我们的数据集中具有最低的平均编辑步骤数。我们将此任务局部性称为任务局部性,并讨论其对于基于编辑的训练制度何时是或不是代码编辑模型的正确选择的影响。