内容提要
Aider 发现,让 GPT-4 Turbo 使用统一差异格式编辑代码,能显著提升编程表现并减少“惰性”。在 89 个 Python 重构任务基准中,GPT-4 Turbo 得分从 20% 升至 61%,出现惰性评论的任务从 12 个降至 4 个。统一差异格式熟悉、简单、高层次且灵活,可避免行号和复杂转义;提示生成高级差异能减少 30%–50% 的编辑错误,灵活的打补丁策略也很关键。
延伸解读
统一差异格式为何有效
文章指出,统一差异是 git diff 的默认输出,GPT 在训练数据中接触过大量此类示例,因此熟悉该格式。同时,它避免了 JSON 转义和行号等易错元素,核心规则简单:每行前加一个字符标示增删改。这种简单性降低了格式化负担,让模型更专注于代码逻辑而非格式合规。
高级差异提示减少编辑错误
Aider 通过提示引导 GPT 生成“高级差异”,即用完整函数块替换而非逐行微调。实验显示,不使用该提示时编辑错误增加 30%–50%,包括差异无法应用或应用后产生无效代码。高级差异块包含更多上下文行,减少了误匹配无关代码的可能,也弥补了 GPT 无法可靠提供行号的缺陷。
灵活打补丁策略的必要性
GPT 生成的差异常不完整,如遗漏注释、忘记加号前缀、缩进错误或缺少块分隔符。Aider 采用多种策略灵活应用:规范化片段、寻找未标记的新行、相对前导空格匹配、分解重叠子片段等。禁用这些策略后,编辑错误率在原有基准上增加 9 倍,说明灵活打补丁对实际可用性至关重要。
情感呼吁式提示反而有害
文章测试了“用户是盲人、愿意支付小费”等情感呼吁式提示,结果在搜索/替换和统一差异两种模式下成绩都更差。这表明此类民间技巧不仅无效,还可能干扰模型表现。相比之下,改进编辑格式和打补丁策略才是提升编程效率的可靠途径。
Q&A
Aider 为什么让 GPT-4 Turbo 使用统一差异格式来编辑代码?
Aider 发现统一差异格式熟悉、简单、高层次且灵活,能避免行号和复杂转义,从而显著提升 GPT-4 Turbo 的编程表现并减少惰性。
在 Aider 的惰性编程基准测试中,GPT-4 Turbo 使用统一差异格式后得分提升了多少?
GPT-4 Turbo 的得分从使用搜索/替换块编辑模式时的 20% 提升到了 61%。
统一差异格式如何帮助减少 GPT-4 Turbo 的惰性评论?
统一差异格式让 GPT 更像在编写供程序阅读的文本数据,而不是与人交流,这促进了严谨性,减少了在注释中留下非正式编辑指令或马虎编写代码的情况。
Aider 在设计统一差异编辑格式时遵循了哪些原则?
原则包括:熟悉(使用 GPT 熟悉的格式)、简单(避免复杂转义和行号)、高层次(鼓励在函数/方法级别编辑)、灵活(灵活解释编辑指令)。
为什么 Aider 建议 GPT 生成高级差异(high-level diffs)而不是最小差异?
高级差异让 GPT 更容易生成正确的差异,减少编辑错误 30%-50%,因为高级差异块包含更多行,更不易误匹配,且更易于看出代码的协调变化。
Aider 如何灵活应用 GPT 生成的不完整差异?
Aider 采用多种策略:规范化代码片段、寻找忘记标记加号的新行、使用相对前导空格匹配、分解大片段为重叠小片段、调整上下文窗口大小等,以提高应用成功率。
Aider 的重构基准测试是如何构建的?
使用 Python 的 ast 模块分析 9 个流行开源 Python 仓库,找出包含复杂方法的类,选取不使用 self 参数的方法,将其重构为顶级函数,共生成 89 个任务,每个任务有基本正确性检查。