探讨 AI 工具如何自动化和加速代码审查流程,减少人工审查工作量,提升团队效率。
对 Python 有基本了解
访问基于 GPU 的机器(*可选)
经历过无尽代码审查的创伤(*有助于理解这个想法)
代码审查:我们都既爱又恨的必要之恶。每个开发者都经历过无尽地检查代码中的不一致、遗漏标准或忽略最佳实践的痛苦。
在六家以上科技公司工作过之后,你开始看到规律。我注意到的一个普遍问题是:"代码审查很耗时"。
我们都同意,即使代码能编译、生成所需的输出并通过所有测试用例,这仍然不足以推送到生产环境。否则 CI/CD 管道就足够了。
所以我们可以认同,即使经过管道的各个阶段,仍然存在对人类干预的内在需求。一个开发者在 MR 上评论高人一等的"LGTM ✅"字样。一个人对这些改动的责任比开发者本身还要大!众所周知,人为干预意味着人为错误的机会。
如果 AI 能在某个层面处理这个问题呢?AI 不能替代开发者,但肯定可以协助他们!
根据我的经验,开发者遵循两种类型的编码标准和规则:
如果我们记录整个团队决定遵循的所有这些规则呢?(最多需要 30 分钟?)现在每当写新代码时,AI 都会根据所有这些规则进行检查。
这些规则的几个例子:
我想这足以让你理解为什么需要写这些规则(即使没有 AI)。
在我的项目中,AI 发送的代码审查类似于这样:查看日志
现在如果你有需要,让我们深入实现细节!
话不多说,看代码:给你了!
在上面分享的项目链接中,我尝试将这个想法作为 CI/CD 管道本身的一个阶段来实现。还有其他实现这个想法的方式,稍后会讨论。
让我们逐步进行:
如前所述,你需要在一个地方列出所有你想用来测试代码的规则。它可以是一个 markdown 文件或 .txt 文件。只要它能被所有人轻松访问就可以了。
(*可选步骤)确保你有一台基于 GPU 的机器。或任何有足够 RAM 来很好地运行 LLM 的机器!由于我没钱,你可以看到我在使用 GitLab CI/CD Runners 提供的 GPU 资源。
在 2024 年有多种与 LLM 交互的方式!
API 方式 Google 提供了 AI Studio 或 Vertex AI 等 API,Open AI 有其 API,Microsoft 也有一些产品。如果你决定使用外部托管的 LLM,那就不需要合适的机器了!归根结底,这只是一个 API 调用。
Ollama 作为一个 DevOps 工程师,我受过训练能够思考云不可知论的解决方案。所以如果你拥有一台机器(或 VM),你可以考虑 Ollama。在过去的几个月里,它一直是我最喜欢的开发工具之一。它可以在你的机器上运行 LLM,也可以公开一个 API 端点来与之交互!
每个 LLM 模型的响应可能都不同。应该考虑的其他因素包括:响应时间、上下文长度、模型大小等等。如果你想微调 LLM,尽管去做吧!主要是你需要不断尝试。
对于 Ollama 方法,你可以检查可用的 LLM:这里
处理 LLM 的关键是写一个完美的 prompt。说实话,这是碰运气。但更重要的是,你需要优先考虑你从响应中需要的最低限度。
根据我的经验,确保你转义传递给任何 LLM 的字符串。不要忘记调整温度以获得清晰的答案。
我倾向于使用 Python 来编写应用程序级别的脚本。你也可以使用任何其他语言。我们编写一个脚本来:
要解除你的求知欲,请查看这个 Python 文件
我将其保留为 CI/CD 管道中的一个阶段,以确保能够轻松利用基于 GPU 的机器。为了更好的优化,你可以改变工作流触发的时间点。你可以只在 MR 针对 master 分支时运行它,而不是每次提交都运行。它也可以是一个 CRON Job。
如果这个想法在本地机器上执行而不是在 CI/CD 管道中会更好。现在几乎所有新笔记本电脑都能够在 Ollama 上运行 LLM。采纳 Arnav 的建议,为什么不利用字面上就在你指尖的力量呢?
你可以在你的机器上运行 Ollama。在一个端口上提供模型。每当你在本地构建项目时,触发 Python 脚本利用该端口,并在代码编译后进行审查!
不,它不能废除人类代码审查。这只是协助开发者更快地进行代码审查。
正确的 LLM、Prompt 和规则集只有在多次迭代后才能完善。
作为工程师,我们所做的一切都是权衡!资源和时间通常是相互矛盾的,但两者都间接转化为成本。
可能无法总是获得可靠的答案。幻觉是本文范围之外的话题。
如果你使用第三方的 API 方法,请理解你会将你的专有代码发送到该服务!(Ollama 万岁!)
代码审查是开发者所做的最重要的工作!无论有没有 AI,这一点不会改变。有了这个想法,你不仅可以协助审查者,还可以协助进行更改的开发者。开发者可以自己看到他们代码的改进空间。这样的事情将确保代码库在整个团队中遵循共同规则。使新开发者更容易上手。
如果你喜欢这些内容,你可以在这里或 Twitter 上的 kitarp29 关注我以获取更多内容!
感谢阅读我的文章 :)
对于进一步的行动,你可以考虑封禁此人和/或报告滥用。