LWN:尝试AI帮助改进Linux patch review!

关注了就能看到更多这么棒的文章哦~

Testing AI-enhanced reviews for Linux patches

By Joe Brockmeier
September 6, 2024
Netdev
Gemini-1.5-flash translation
https://lwn.net/Articles/987319/

代码审查对于大多数开源项目来说需求量大,但供给不足。审查者的时间宝贵,因此任何能减轻工作量的工具都值得探索。这就是 Jesse Brandeburg 和 Kamel Ayari 决定测试 ChatGPT 等工具是否能够审查补丁,为贡献者提供有关常见问题的快速反馈的原因。在今年 7 月的 Netdev 0x18 大会上,Brandeburg 在 一篇演讲 中概述了使用机器学习来审查发送到 netdev 邮件列表的包含补丁的电子邮件的实验。大型语言模型 (LLMs) 不会很快取代人工审查者,但它们可能是帮助人类将注意力集中在更深入的审查,而不是简单的规则违规上的有用补充。

我无法亲自参加 Netdev 大会,但我有机会观看演讲视频并参考 幻灯片。需要注意的是,使用机器学习工具来帮助内核开发的想法并不完全是新的。LWN 报道 了 Sasha Levin 和 Julia Lawall 在 2018 年关于使用机器学习来区分修复错误的补丁和其他补丁的演讲,这样修复错误的补丁就可以进入稳定内核。我们也 报道 了 2019 年的后续演讲。

但是,使用 LLMs 来协助审查似乎是一种新的方法。在演讲的介绍中,Brandeburg 指出 Ayari 正在国外休假,无法共同演讲。Brandeburg 在演示中讨论的工作尚未公开发布,但他表示,计划很快上传一篇包含更多细节的论文。他还提到,演讲的重点是讨论可能性,而不是具体的技术实现。

为什么是 AI?

Brandeburg 说,对使用 LLMs 来帮助审查感兴趣并非因为它是一个流行词,而是因为它有潜力做一些用常规编程难以做到的事情。他还澄清说,他根本不想取代人们,而是想帮助他们,因为进行审查的人员不堪重负。“我们每月在 netdev 上看到 2,500 条消息,在 LKML 上看到 10,000 多条消息,”他说。高级审查者必须“在邮件列表中第 7000 次”回复贡献者以修复他们的格式。“这真的很枯燥”,而且浪费审查者的时间去纠正简单的事情。

当然,已经有工具可以帮助审查者,但它们的限制更多。Brandeburg 提到了 checkpatch,这是一个 Perl 脚本,用于检查 Linux 内核补丁中的错误。他说,它在它所做的事情方面相当好,但它“对于适应不同的代码和拥有任何上下文来说很糟糕”。它可能能够发现单行错误,但它“不擅长告诉你‘这个函数太长了’”。

实验

对于实验,Brandeburg 说,他和 Ayari 使用了 ChatGPT-4o LLM,并开始向它提供内容,以“将其变成一个专家在针对简单事物发表评论的审查者”。他说,他们使用内核文档以及他和其他人经验创造了一个“大型规则集”,来设定 ChatGPT 审查范围。“我们不希望 AI 只是(你懂的。。。)对每个人吹嘘。”

他说,让一个工具提供对简单事物的反馈,将使他能够使用自己的“经验、知识、上下文和历史,即我带入方程的人类部分”。但是,另一个好处是该工具可以保持一致。查看邮件列表,“即使在简单的事情上,人们也得到不一致的回应”。例如,补丁可能缺少正确的主题行或有糟糕的提交消息,但“有人还是提交了它”。

Brandeburg 说,他们试图建立一些实验来观察 AI 审查是否有效,并将其结果与人们在 netdev 列表上完成审查和帖子时真实回复进行比较。他展示了几张幻灯片,将 LLM 审查与“传统自动化”以及人工审查进行了比较,并逐步介绍了每种审查给出的反馈示例。他说,LLM 审查实际上提供了建议或帮助,但审查者往往不会。“他们说一些类似‘嘿,你能修复它吗?’或‘嘿,你能去阅读文档吗?’之类的话。”但 ChatGPT 以人类可读的语言给出好的反馈。此外,LLMs“非常擅长阅读段落并理解它们试图表达的意思”,而 checkpatch 之类的工具做不到。

LLMs 擅长的另一件事是判断提交消息是否以 祈使语气 编写。补丁提交指南 要求将更改描述为“好像你在命令代码库更改其行为”。他说,编写程序来解释文本并像 LLM 一样判断这一点非常困难。

Brandeburg 说,理论上,LLMs 可以做一些作为审查者对他来说“非常非常难”的事情:回顾补丁系列的先前修订,看看是否已解决先前的评论。对于每个系列,他需要“花费数小时”来查看他所做的所有评论。有时“一些小问题会溜过去,因为审查者累了,或者你中途更换了审查者”。LLM 在回顾先前关于补丁的讨论,以考虑最新补丁系列方面可能会好得多。

LLMs 可以做一些“传统”工具做不到的事情:它们可以编造东西,或者在行业术语中“幻觉”。Brandeburg 说,他们看到 LLM“偶尔”会犯错误,如果补丁“真的很小”,或者 LLM 没有足够的上下文。他提到一个例子,其中一个 #define 使用了一个负数,LLM 将其标记为错误。作为一名审查者,他也觉得没有意义,因此他 发布 到 netdev 邮件列表上,并“发现代码完全正确”。他说,这对他和 AI 来说都是很好的反馈,因为它有助于根据新信息改进其规则。

人类确实提供了对技术和具体问题的更好覆盖范围,这“正是我们希望他们做的事情”。人们非常擅长提供上下文和历史,而对于 LLM 来说“几乎是不可能的”。LLM 只是审查补丁的内容,这会遗漏很多上下文。人们的回复往往“杂乱无章”。演示文稿中的一张幻灯片(幻灯片 11)将“AI 与人类”的评论作为覆盖问题的百分比进行了比较。它显示出人类审查者和 AI 评论相同问题的“重叠”仅为 9.3%。

问题

一位观众问道,这是否意味着人类“基本上忽略了所有样式问题”。Brandeburg 说,“是的,这是我们发现的。”人类审查者“不想谈论那些愚蠢的事情”。事实上,他引用了一些 LKML 上的人告诉其他审查者“停止抱怨那些愚蠢的事情”的例子。他说,他理解为什么一个做了很多审查的人会这么说,但让“琐碎的问题”溜过去意味着代码库的长期质量会下降。

另一位观众问道,LLM 是否曾经说过“对我来说看起来不错”,或者只是对补丁没有回复。他们观察到,LLM 经常很难对问题说“我不知道”。Brandeburg 说,它的设置是,如果它有评论,它就会发表评论,如果没有评论,它就不会发表评论。他补充说,他当然还没有准备好让 AI 在补丁中添加“Acked-by”或“Signed-off-by”标签。

观众中另一个人说,这看起来像是很棒的工作,但想知道如果 AI 对补丁的回复不正确,获取人类反馈的计划是什么。Brandeburg 说,他设想将规则集发布到一个公共 Git 存储库中,并允许拉取请求来修改和完善这些规则。

一位与会者问 Brandeburg 和 Ayari 是否将 LLM 工具的输出与 checkpatch 进行了比较,并指出有些人可能不会对 checkpatch 会检测到的问题发表评论。Brandeburg 说,他不认为它会取代 checkpatch。“我认为这是一个额外的工具,它……添加了更多上下文,并能够做 checkpatch 做不到的事情”。他承认,比较结果可能有助于回答一个问题,即人类审查者是否只是忽略了他们知道 checkpatch 会捕获的东西。

由于会议时间不足,Brandeburg 最后回答了一个关于这个 LLM 是否会回复垃圾邮件的问题。他说,如果邮件成功发送到邮件列表,它可能会回复,但他开玩笑说,“希望垃圾邮件中没有代码内容”,并且不会被不注意的维护者提交。

他结束会议时邀请人们阅读幻灯片,其中包含一些常见问题的答案,比如“这会取代我们所有人作为开发人员吗?”他补充说,“我不这么认为,因为我们需要人类来聪明地做人类的事情,需要 AI 来做 AI 事情”。

Brandeburg 没有详细介绍根据实验及其发现实施更改的计划。但是,他演示文稿中的“潜在的未来工作”幻灯片列出了一些关于下一步可能发生的事情的想法。这包括一些想法,比如将 LLM 审查流程变成一个供审查者使用的 Python 库,一个 GitHub-actions 样式的系统,用于提供补丁和提交消息建议,以及完全自动化的回复,以及如果社区喜欢 LLM 驱动的审查,则将其纳入 机器人测试。

人类审查员在未来几十年仍将有很高的需求,但 LLM 驱动的工具可能很快就能使工作变得轻松愉快。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

d88012ae39f4dc57630a1e23a26fa162.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值