经组内同学孙中夏 推荐,今天在Curve代码库试用了一个基于ChatGPT的代码review机器人,github地址:https://github.com/anc95/ChatGPT-CodeReview
具体的执行流程和算法原理我没研究,应该也研究不明白,这里就讲讲怎么在GitHub仓库上配置这个bot,以及实际的review效果如何。
ps. OpenAI的key是杭研AI团队提供的,感谢支持~
部署配置
参考https://github.com/anc95/ChatGPT-CodeReview#usage这里的描述即可:
-
安装这个bot的GitHub APP
-
安装好之后,在这个APP页面点“Configure”
-
选择你要应用到的账号及代码仓库,注意你要有代码库的管理员权限
-
之后进入到代码库的主页,进入“Settings”标签
-
进入“Secrets and variables” — “Actions”
-
注意切换到“variables” tab项,再点“New repository variable”
-
填入name和value,name是“OPENAI_API_KEY”,value就是openai的key了
ps. 我用的是GitHub app方案,不是GitHub action,试了action方案没跑起来,有懂行的可以给点指导。
试用效果
尝试创建一个pull request,比如:
-
Curve代码库(C++语言):https://github.com/aspirer/curve/pull/3
-
CurveAdm代码库(golang语言):https://github.com/aspirer/curveadm/pull/1
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记录。
不足之处
-
多次提交同样的代码,每次给出的review结果是不相同的,可能某次的评审建议是相对更合理且全面的,其他的几次不一定,或许需要多给他review几次,然后再综合几次的评审意见进行代码评估
-
无法完整的理解某个大的功能特性的设计方案和实现思路,打个形象的比方,就是组内A同学从来没有参加过功能点X的方案设计和评审工作(主要由B同学负责),然后让A同学直接去review B同学提交的代码,就有类似的效果,只能理解函数或代码片段,没有全局意识
-
个别review建议可能不一定正确,需要再进行人工判断,这一点也类似人工review,代码评审人提的建议也不一定是正确的
-
太长的新增的源文件,好像会无法评审
-
如果没有别的建议,bot会给出一堆通用建议,比如增加UT用例、lint检查、注释、log等等,这一点其实也不能说是不足吧