这篇文章将讲述如何利用GenAI进行代码审查。
前提条件完成
- 基本的 Python 知识
- 能访问到带有 GPU 的机器
- 经历过无数次代码审查(这有助于体会这个概念)
代码审查(Code Review):我们又爱又恨的必要之痛。每个开发者都经历过这样的痛苦,无休止地查找代码中的不一致、未遵循的规范或被忽视的最佳实践。这些经历让开发者深感疲惫。
在几家科技公司工作过之后,你开始会发现一些模式。其中一个常见的问题是:代码审查太耗时。
大家都知道,如果代码编译通过,得出了预期的结果,并通过了所有TCs,这还是不够的。否则,CI/CD流水线就足够了。
即使在经过管道的各个阶段之后,我们仍然可以达成一致。一个开发者会对在合并请求中 ✨"LGTM ✅" ✨ 这种自以为是的评论进行评论。这个人需要对这些更改负更大的责任,甚至比开发者本身还要大!我们都知道,人为干预意味着存在犯错的机会。
如果AI能在某种程度上处理呢?
AI无法取代开发者,但肯定能帮助他们!
💡 解决.
根据我的经验,开发人员遵循两种类型的编码标准和规则,
- 书里写的规定
- 前辈们遵循的规定,所以团队也跟着做
如果我们把这些规则写下来呢?(这大概需要花30分钟吧?)
现在每当有新代码写出来,都会被AI根据这些规则检查。
以下是一些这样的规则示例:
- 确保所有仓库中的日志结构一致。
- 网络调用的故障转移策略
- 变量命名的一致性(使用驼峰命名法(camelCase)或破折号命名法(kebab-case))
- 错误代码
- 可能引发 panic 的情况
我觉得这样你应该能大概明白为什么需要写下这些规则,即使没有人工智能也一样。
在我的项目中,AI 会像这样给出代码审查意见:查看这里的日志,如下:查看日志
看起来怎么样?
那么,如果你感觉需要的话,让我们深入实现吧!
🛠️ 实施
说说容易做做难,给代码看看:看这里!
在上述分享的项目链接中,我尝试将这一想法作为CI/CD流水线的一个环节来实现。还有其他实现这一想法的方式,我们将在后续讨论。
咱们一步一步来吧:
1. 规则.md 📖
正如之前提到的,你需要将所有的规则集中在一个地方。所有的规则可以选择 Markdown 文件或 .txt 文件作为存放位置,只要所有人都能方便地访问就行。
2. 合适的机器🖥️
(* 可选步骤)
确保你有一台带有GPU的机器。或者任何内存足够运行大型语言模型的机器!因为我没钱,你可以看到我正在借用GitLab CI/CD Runner提供的GPU计算资源。
3. 选择一个LLM服务商 🔌
在2024年,你可以通过多种方式与LLM互动!(大型语言模型)
-
API 方法
谷歌提供了诸如 AI Studio 或 Vertex AI 的 API,Open AI 也有自己的 API,微软也提供了多个选项。
如果你选择使用外部托管的 LLM,那么并不一定需要专用的机器!归根结底,这不过是一次 API 调用。 - Ollama
作为一名DevOps工程师,我受过训练来思考云无关的解决方案。所以如果你有一台空闲的机器(或虚拟机),你可以试试看Ollama。过去几个月,它一直是我最爱的工具之一。它可以在你的机器上运行大语言模型,并且还提供一个API端点方便你与其交互!
4. 选一个合适的LLM吧 🧐
每个大语言模型的回复可能都不一样。还需要考虑的因素有:响应时间、上下文的长度、模型大小等。如果你想对大语言模型进行微调,尽管放手去试吧!
主要就是多尝试多练习,试试看吧。
对于Ollama方法的可用大模型,可以在这里查看可用的大模型。
5. 超级棒的提示 🪄
与大型语言模型(LLM)编写完美提示的工作充满挑战和不确定性。说实话,这更像是摸着石头过河。更重要的是,你需要优先考虑最基本的回复需求。
根据我的经验,确保你在传递给任何LLM时对字符串进行了转码。别忘了调整温度以获得更清晰的答案。
6. 代码 🐍
我更喜欢用Python编写应用程序级别的脚本。当然,你也可以用其他语言。
我们编写一个脚本来处理...
- 阅读 RULES.md 文件里的规则
- 查看你感兴趣的文件的更改
- 通过 API 调用(比如 Ollama 或云端服务)向 LLm 发送请求
- 若成功则输出响应
为了满足你的好奇心,可以看看这个Python文件(buaji-container.py)。
想法的范围
我一直把它作为一个 CI/CD 流水线的阶段,确保 GPU 基础的机器易于利用。为了更好地优化流程,你可以只在 MR 针对 master 分支时触发工作流,而不是对每个提交都触发。它也可以是一个 CRON (定时任务) 作业。
在本地机器上进行AI辅助的代码审查
如果能在本地机器上实现这样的想法而不是在CI/CD管道中执行会很棒。
现在几乎所有的新笔记本电脑都有足够的性能来运行Ollama上的大型语言模型。参考Arnav的建议,为什么不利用就在你指尖的强大能力呢?
你可以在这台机器上运行Ollama,在指定的端口上运行模型。
每次你在本地构建项目时,运行Python脚本使用该端口,并在代码编译完成后检查一下!
限制 😞
-
不,不能取消人审代码。这只会让开发人员更快地完成代码审查。
只有经过多次迭代,我们才能优化出合适的LLM、Prompt和规则集设定。
-
我们工程师做的每一件事都是一个 权衡,资源和时间总是互相冲突,但最终这一切都会转化为金钱。
-
可靠的答案未必总是能得到。本文不讨论这一话题,幻觉现象超出了本文的范围。
- 要是你使用第三方的API方法,请记住你的专有代码将会被发送到那个服务!(Ollama,厉害了!)
代码审查是开发人员最重要的任务!无论有没有AI,这一点都不会改变。这样不仅可以帮助审阅者,还可以帮助进行更改的开发人员。开发人员可以自己发现他们代码中需要改进的地方。
这样可以确保代码库在整个团队中遵守共同的规范。这使新开发人员更容易上手工作。
如果你喜欢这些内容,可以在这里或在Twitter上关注我@kitarp29,获取更多精彩!
谢谢读我的文章,希望你喜欢 :)