基于ChatGPT的code review机器人试用体验 – 20230303




经组内同学孙中夏 推荐,今天在Curve代码库试用了一个基于ChatGPT的代码review机器人,github地址:https://github.com/anc95/ChatGPT-CodeReview

具体的执行流程和算法原理我没研究,应该也研究不明白,这里就讲讲怎么在GitHub仓库上配置这个bot,以及实际的review效果如何。

部署配置

参考https://github.com/anc95/ChatGPT-CodeReview#usage这里的描述即可:

  1. 安装这个bot的GitHub APP
  2. 安装好之后,在这个APP页面点“Configure”
  3. 选择你要应用到的账号及代码仓库,注意你要有代码库的管理员权限
  4. 之后进入到代码库的主页,进入“Settings”标签
  5. 进入“Secrets and variables” — “Actions”
  6. 注意切换到“variables” tab项,再点“New repository variable”
  7. 填入name和value,name是“OPENAI_API_KEY”,value就是openai的key了

ps. 我用的是GitHub app方案,不是GitHub action,试了action方案没跑起来,有懂行的可以给点指导。

试用效果

尝试创建一个pull request,比如:

PR创建完成后,稍等片刻,就可以看到cr-bot开始review代码了。

单就review效率来说,比人工评审代码要快太多倍了,我上面两个提交都是直接从一个分支合并到另外一个,代码改动量很大,但是cr-bot还是几分钟就搞定了,人工的话估计得好几天还不一定review的很细致。

review效果感受

大家可以自行去查看上面两个测试PR的review效果,我这里截图几个我觉得有代表意义的代码review结果。

上面这个pr,是我去年提交的(golang我只看过基本语法,第一次写实际代码,所以请忽略我粗鄙的编码),这次重新提交一下看看ChatGPT code review bot的效果,可以看出,他指出了我代码里很多问题,其中第3条,是有一个外部curve用户实际遇到过的偶发问题(执行命令卡很久才返回),我自己怎么测都跑不出来,用户那边几乎必现,后来还是组内golang高手小伙伴重构了这段代码才解决。其他几点问题也都是非常有参考价值的。

这个评审意见不需要解释,还是比较有效的。

  • 配置项也能review:

增加简单功能的commit可以理解代码意图,这一点还是很不错的。

总体来说,还是有不少帮助作用的,至少可以让人工评审节省不少时间,比如bot可以辅助解释新提交代码的作用,指出常见错误,给出改进建议等。

如果配合ChatGPT的交流窗口,把有问题的代码片段再次单独交给他评审,可能会有更多的收获:

更多细节可以翻阅上面给到的两个测试PR的review记录。

不足之处

  1. 多次提交同样的代码,每次给出的review结果是不相同的,可能某次的评审建议是相对更合理且全面的,其他的几次不一定,或许需要多给他review几次,然后再综合几次的评审意见进行代码评估
  2. 无法完整的理解某个大的功能特性的设计方案和实现思路,打个形象的比方,就是组内A同学从来没有参加过功能点X的方案设计和评审工作(主要由B同学负责),然后让A同学直接去review B同学提交的代码,就有类似的效果,只能理解函数或代码片段,没有全局意识
  3. 个别review建议可能不一定正确,需要再进行人工判断,这一点也类似人工review,代码评审人提的建议也不一定是正确的
  4. 太长的新增的源文件,好像会无法评审
  5. 如果没有别的建议,bot会给出一堆通用建议,比如增加UT用例、lint检查、注释、log等等,这一点其实也不能说是不足吧