继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

告别繁琐的代码审查:利用生成式AI提升效率

慕桂英3389331
关注TA
已关注
手记 379
粉丝 43
获赞 187

这篇文章将讲述如何利用GenAI进行代码审查。

前提条件

完成

  • 基本的 Python 知识
  • 能访问到带有 GPU 的机器
  • 经历过无数次代码审查(这有助于体会这个概念)
🤔 理解这个问题

代码审查(Code Review):我们又爱又恨的必要之痛。每个开发者都经历过这样的痛苦,无休止地查找代码中的不一致、未遵循的规范或被忽视的最佳实践。这些经历让开发者深感疲惫。

在几家科技公司工作过之后,你开始会发现一些模式。其中一个常见的问题是:代码审查太耗时。

大家都知道,如果代码编译通过,得出了预期的结果,并通过了所有TCs,这还是不够的。否则,CI/CD流水线就足够了。

即使在经过管道的各个阶段之后,我们仍然可以达成一致。一个开发者会对在合并请求中 ✨"LGTM ✅" ✨ 这种自以为是的评论进行评论。这个人需要对这些更改负更大的责任,甚至比开发者本身还要大!我们都知道,人为干预意味着存在犯错的机会。

如果AI能在某种程度上处理呢?
AI无法取代开发者,但肯定能帮助他们!


💡 解决.

根据我的经验,开发人员遵循两种类型的编码标准和规则,

  1. 书里写的规定
  2. 前辈们遵循的规定,所以团队也跟着做

如果我们把这些规则写下来呢?(这大概需要花30分钟吧?)
现在每当有新代码写出来,都会被AI根据这些规则检查。

以下是一些这样的规则示例:

  • 确保所有仓库中的日志结构一致。
  • 网络调用的故障转移策略
  • 变量命名的一致性(使用驼峰命名法(camelCase)或破折号命名法(kebab-case))
  • 错误代码
  • 可能引发 panic 的情况

表情包

我觉得这样你应该能大概明白为什么需要写下这些规则,即使没有人工智能也一样。

在我的项目中,AI 会像这样给出代码审查意见:查看这里的日志,如下:查看日志

由AI进行的代码审查可能看起来像这样的一张截图
看起来怎么样?

那么,如果你感觉需要的话,让我们深入实现吧!


🛠️ 实施

说说容易做做难,给代码看看看这里!

在上述分享的项目链接中,我尝试将这一想法作为CI/CD流水线的一个环节来实现。还有其他实现这一想法的方式,我们将在后续讨论。

咱们一步一步来吧:

1. 规则.md 📖

正如之前提到的,你需要将所有的规则集中在一个地方。所有的规则可以选择 Markdown 文件或 .txt 文件作为存放位置,只要所有人都能方便地访问就行。

2. 合适的机器🖥️

(* 可选步骤)
确保你有一台带有GPU的机器。或者任何内存足够运行大型语言模型的机器!因为我没钱,你可以看到我正在借用GitLab CI/CD Runner提供的GPU计算资源。

3. 选择一个LLM服务商 🔌

在2024年,你可以通过多种方式与LLM互动!(大型语言模型)

  • API 方法
    谷歌提供了诸如 AI StudioVertex 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脚本使用该端口,并在代码编译完成后检查一下!


限制 😞
  1. ,不能取消人审代码。这只会让开发人员更快地完成代码审查。

    只有经过多次迭代,我们才能优化出合适的LLM、Prompt和规则集设定。

  2. 我们工程师做的每一件事都是一个 权衡,资源和时间总是互相冲突,但最终这一切都会转化为金钱。

  3. 可靠的答案未必总是能得到。本文不讨论这一话题,幻觉现象超出了本文的范围。

  4. 要是你使用第三方的API方法,请记住你的专有代码将会被发送到那个服务!(Ollama,厉害了!)
我的看法是这样的 😊

代码审查是开发人员最重要的任务!无论有没有AI,这一点都不会改变。这样不仅可以帮助审阅者,还可以帮助进行更改的开发人员。开发人员可以自己发现他们代码中需要改进的地方。

这样可以确保代码库在整个团队中遵守共同的规范。这使新开发人员更容易上手工作。


如果你喜欢这些内容,可以在这里或在Twitter上关注我@kitarp29,获取更多精彩!

谢谢读我的文章,希望你喜欢 :)

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP