伊利诺伊大学厄巴纳-香槟分校的研究人员已经招募了 ChatGPT,这是一种响应书面指令的 OpenAI 聊天机器人,可以在不破坏银行的情况下修复软件错误。
Chunqiu 研究生助理 Steven Xia 和计算机科学副教授 Lingming Zhang 在他们最近的预印本论文的标题中给出了令人惊讶的结尾,“让对话继续下去:使用 ChatGPT 修复 337 个错误中的 162 个,每个 0.42美元”
你当然可以付出更多。
两位研究人员着手改进自动程序修复 (APR),这是一门新兴学科,专注于开发自动修复程序错误的技术。
他们在论文中解释说,传统的 APR 技术往往会生成缺乏多样性且需要大量手动微调的补丁。最近使用 LLM 的工作产生了更好的结果,但仍然使用相同的底层技术——从初始输入样本生成大量补丁,然后验证每个补丁。
他们争辩说,这种方法会重复产生不正确的补丁,并且无法从失败中吸取教训。这在时间和计算资源方面具有非常实际的成本。
Xia 和 Zhang 开发了一个他们称之为 ChatRepair 的自动错误修复过程,该过程结合了有关软件测试失败的信息,并从对话输入以及成功和失败中学习。这比说“修复你的错误,HAL”要复杂一些——从论文随附的插图中可以看出——但它可能比神秘的错误消息更可取。
ChatRepair 对话流图 – 点击放大
“ChatRepair 不像现有的基于 LLM 的 APR 技术那样直接根据错误代码生成补丁,ChatRepair 还提供了有价值的测试失败信息,以进一步协助 LLM 生成补丁,”研究人员在他们的论文中解释道。
“此外,ChatRepair 不是像以前基于 LLM 的 APR 技术那样从相同的提示中连续采样,而是跟踪对话历史,并通过提示从早期失败和成功的同一错误修补尝试中进一步学习。”
代码可能有误,但很有用
通过将不正确的补丁与相关的测试失败数据结合起来,Xia 和 Zhang 表明他们可以在模型改进代码时改进提供给 ChatRepair 的提示。这避免了一遍又一遍地犯同样的错误,同时还会在看似合理的补丁上产生变化,从而增加正确修复的可能性。
在发给The Register的电子邮件中——不是由 ChatGPT 撰写,我们确信——Xia 表示,测试失败数据的包含对 ChatRepair 的改进做出了重大贡献。
“我们观察到,包括有用的信息,例如测试失败错误甚至失败的测试名称本身,都可以提供额外的信息,例如错误的类型(例如空指针异常)和代码的预期正确行为,”他解释说。“与之前不使用此类测试失败信息的 APR 工具相比,ChatRepair 利用 ChatGPT 强大的理解能力来修复更多错误。”
- ChatGPT 来抢你的饭碗——至少是糟糕的饭碗
- 欧洲隐私监管机构嗅到意大利的 ChatGPT 禁令,考虑采取比萨饼行动
- FTC 敦促冻结 OpenAI 的“有偏见、欺骗性”的 GPT-4
- 所以你想集成 OpenAI 的 bot。以下是软件安全扫描器 Socket 的工作原理
夏说,合并这些信息的价值可以在基线比较中看出,该基线比较涉及在没有测试失败数据的情况下运行 ChatGPT。他说,访问测试失败数据使修复的错误数量增加了 40% 以上。
更好的是,通过不重复生成相同的无效补丁,研究人员可以避免冗余 API 调用的成本和浪费的 GPU 执行时间——这是探索如何将 OpenAI 的模型集成到他们的产品中的人们普遍关心的问题。
“为了降低成本,我们利用 ChatGPT 的对话方面,它能够跟踪先前的输出并根据我们提供的先前历史和反馈(测试失败信息)调整其后代,”Xia 解释道。
“我们利用这种能力为 ChatGPT 提供以前生成的错误补丁,因此我们可以避免一遍又一遍地重复采样相同的错误补丁,并减少样本数量和修复错误的成本。”
Xia 表示,虽然 APR 渴望以最少的开发人员工作量完全自动化地修复软件错误,但这个目标还有很长的路要走。
“ChatRepair 首次表明,这样的修复过程可以是一次对话,”夏说。“我相信,通过让人类开发人员参与循环并加快修复过程,我们可以实现更好的性能。”
“为了做到这一点,未来的工作肯定应该更多地关注 ChatGPT 等强大的 LLM 与人类开发人员之间的动态,以额外增加人类的直觉和对代码库的理解,以便更好地组合错误修复。” ®