llm-code-scorer
这是去年9月份受两个实习生小伙伴讨论代码启发而做的一个小项目,这周五他们回学校了,我也把这个在草稿箱躺了11个月的文章改了改,发出来作为纪念。
背景介绍
为了找出开源代码仓库存在的问题(缺少证书,缺少文档,缺少测试,代码质量不高)并加以改进,我搭建了一个基于 LLM 来自动分析代码仓库并打分的网站,可以在这里体验
实现细节
Clone 仓库
将仓库中的代码、文档、证书、测试例子等按照固定的格式,写成一个总结文档
设计给大模型的 PROMPT 提示词规范
将 PROMPT+总结文档喂给大模型(这里用的是智谱的免费模型 GLM-4-Flash),大模型返回 json 格式的打分结果
网页渲染 json 结果,得到最终的输出
Features
打分维度考虑全面,包括代码质量、仓库大小、Git Commit 规范、文档、测试、开源证书等方面
基于大模型的打分并给出了建议,可以根据建议来改进代码质量
有结果保存成图片的功能,方便记录
代码开源,源代码地址: https://github.com/vra/llm-code-scorer
下面是这个网站制作的详细说明,希望能给想做简单好玩AI应用的朋友们提供一个参考。
起因
有一次想到某个仓库的代码,逻辑非常绕,很不直观。要是有办法能让作者意识到这里的问题,进行优化改进,对使用者也是极好的。
然后联想到有一次团队的一个小伙伴提到某个开源代码,评价其是“一坨狗屎”,突然灵光一现:能不能做一个大模型来对代码进行分析的工具,给出0-10分的打分,最差的0分,锐评就是“一坨狗屎”,把这个梗用上去。
然后整体评估了下,整体上是可行的,大模型见过了那么多的代码,肯定知道哪些代码是好的,哪些代码是烂的。
方案设计
然后一个核心问题出现了:GitHub上的开源代码仓库有大有小,包含文档、配置、测试和真正的有用源代码,如何将这么多东西喂给大模型输出一个总体的评分呢?想起了之前看过的LLM的项目,我设计了一个模板,将内容按照源码、配置项、README、证书,是否有测试等情况进行分类,按照一个模板,汇总成输入给到大模型。
打分的时候,也是设计了Prompt,根据不同的维度进行考察,Prompt如下:
1 |
|
[.gitignore]:
[Git Commit]:
[Code Snapshot]:
[Test Files]:
[Binary Files]:
[Repo Size]:
[Total Files]:
1 |
|
由于智谱提供了免费的LLM API,因此打分模型基于这个免费的API来构建。
思路定了后,就想找一些网页效果比较酷炫的网站来看看,因为模仿也是写代码中很重要的一个部分(看看国内各大大模型的上传图片的UI就知道了)。 之前王登科分享过一个文字风格测试的网站(已经无法使用),想参考其做网站页面。 最后参考了之前体验的 Year in code的网站,渐变的色彩 https://year-in-code.com/
既然想做一个稍微正式点的Side Project,还是值得花点钱准备一些必须要的软硬件。
首先是申请域名时发现, 因为之前调查过,各家云厂商都有100块左右一年的低配机器,而阿里云目前在国内还是做的比较好,又是一个系统的,因此下单了99年一年的机器。
所以这个Side Project的总支出是7+99=106元,算是低成本了。
之前看过一个大佬的博客,说他50%的时间花在Coding上, 50%的时间花在Marketing,因此推广自己的作品和写代码一样重要,不要觉得推广自己的东西很羞耻,如果你做的东西很棒,那就应该让更多的人知道,毕竟在这个信息爆炸的时代,酒香也怕巷子深。
关于这个项目,我的定位还是低成本的Side Project,因此做的推广并不多。具体来说,在网站搭建好,域名还没有备案完成时,先在几个好友之间共享,收集他们的评论和反馈意见。然后网址完成备案后,在v2ex上进行了分享,源码在GitHub上开源,所有人都可以自己跑,然后修改。
它真的有用吗?
平心而论,我觉得目前这个版本用处有限,可能最大的用处是让开发者能知道格式上的问题,例如代码没有README,没有写测试,提交不规范等等,对代码逻辑是否通顺、写法是否优雅这种细致到代码实现细节的方面,它能做的不多。
那么问题在哪里呢?一方面是采用的免费模型还有改进空间,采用更强大的付费模型肯定会有提升,但按token数计算的支出可能是个无底洞,已经超出了这个Side Project的经费上限。
另一方面,Prompt可能还有改进的空间,通过几个版本Prompt的表现来看,修改Prompt是最有效的提升效果的方法,未来我可能也会优化Prompt来更新这个网站。
其实在设计评分结果展示方案的时候,还考虑过用AI生成梗图的方式,例如锐评是“你写的代码比雷军还优雅”,就生成一张类似雷军的点赞的图片,但实际尝试后发现有几个问题: 1. 首先是AI生成的图片中文字效果还做不好,例如下面采用可灵的图片, 然后考虑到AI生图与代码评分本身关系不是很大,即使做好了也只是在戏剧和传播效果有一些作用,对程序员真正地发现代码中的问题并无直接帮助,因此也就去掉了这部分比较耗时的工作。
因为我不懂前端,Vue和css的代码全部是GPT生成的,因此现在的效果展示部分还比较简单。我尝试了让Vue调用D3.js来生成蜘蛛图,显示6个考察的维度,但最终没有成功。另外想做一个生成分享页面的功能,将所有信息都展示到一张图片上,再加上网站的二维码,可以进行社交媒体的分享,因为不熟悉前端也没能搞定。后来实习的小伙伴帮忙优化了网页展示,这里也表示感谢。
其实刚开始我也想过微信或者支付宝小程序,因为它们的传播效应会很明显,万一这个东西做的出色,出圈了,小程序能够做到快速地社群传播。 但小程序也有问题,开发难度比一个网站大,而且又得专门学自有的一台编程语言和工具系统,同时不太开放,而且之前看到小程序也要备案,难度又增大了。 这里我还是考虑Side Project的短平快属性与小程序较高的学习成本与漫长的合法审核周期不契合,因此果断放弃这个思路。如果未来有个创业团队将这种AI打分App当作一个严肃的产品来对待,那小程序还是值得做的平台。
总体上,我认为代码打分这个方向未来肯定会有更专业的人做出一个合格的产品出来,这里因为各方面的原因,我目前能提供的就是这个版本了。