image

     人工智能时代已经来临。从事 IT 工作的每个人都已经熟悉了我们开发的 “新挚友”--人工智能。

概念

您希望每个拉取/合并请求都先由 ChatGPT-4 检查,然后再由您检查吗?
你想在同事看到代码修改之前就得到即时反馈吗?
想不想检测出谁泄露了机密数据或 API 密钥,并能标记 “罪魁祸首 ”以便立即纠正?
我们非常清楚,GPT 可以很好地生成代码。......但事实证明,它也能同样顺利地审查代码!下面将向大家展示实际操作过程(为避免显示过多,部分代码采用了模糊处理)。

流程

image

准备工作
  1. Gitlab平台:确保已经搭建好Gitlab平台,并且拥有管理员权限。
  2. ChatGPT账号:注册并获取OpenAI API的访问密钥,这是与ChatGPT进行交互的必需凭证。
  3. 开发环境:搭建一个能够处理Web请求的开发环境,用于接收Gitlab的Webhook通知,并调用ChatGPT API进行代码审查。

步骤一

创建了一个测试合并请求,并在其中添加了一个格式略有损坏的 JSON 文件和明文密码,从而再现了一个安全漏洞:

image

我们可以看到,人工智能不仅检测到了敏感信息,还将其屏蔽在评论中,并标记我将其删除。

这里还有另一条评论:

image

与 GitLeaks 等使用 regex 和通配符静态执行简单搜索的工具相比,它的分析功能要强大得多。

步骤二

来自前端合并请求的示例(同事的截图),仅突出某些要点:

image

GPT-4o 模型显示了对 React 的充分了解。每个人都知道这个设计的关键,但他们总是忘记。

或者说,在这里,我就像读了一本书:

image

我以举出很多例子,但关键是它的建议是有意义的!当然,并不是所有的意见都值得关注,但很大一部分是非常宝贵的。

实施

      将介绍如何在短短一小时内用 Python 编程实现自动审核流程。这段代码应立即添加到 CI/CD 流程中,以实现最大效果和流程自动化。将其封装到一个 CI/CD 作业中并在每个 MR/PR 上执行(只需将来自 renovate/dependabot 的更改作为例外情况)是再好不过的了。将与您分享带有架构模块的想法,让您像构造函数一样将其拼凑起来。

在 GitLab 的 CI/CD pipeline 中,编写一个脚本,它能够:

  • 获取 Merge Request 中的代码差异(diff)或者变更文件。
  • 将代码发送到 ChatGPT 进行分析。
  • 获取 ChatGPT 的反馈,并将其以审查评论的形式提交到合并请求中。

示例流程

# .gitlab-ci.yml
stages:
   - code_review

code_review:
   stage: code_review
   script:
     # 1. 获取代码变更
     - git diff HEAD~1 HEAD > changes.diff
     # 2. 使用 Python 调用 OpenAI API 发送代码进行审查
     - python3 scripts/chatgpt_review.py changes.diff
     # 3. 将 ChatGPT 的反馈添加为 MR 评论
   only:
     - merge_requests

让我们开始工作,用 Python 编写代码:

第一步:连接人工智能模型

我们需要连接到人工智能模型:

import openai

示例Python脚本

import os
import openai

# 设置 API 密钥
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_code_diff(file_path):
     with open(file_path, 'r') as file:
         return file.read()

def get_chatgpt_review(code_diff):
     response = openai.Completion.create(
         engine="gpt-4",  # 使用 GPT-4 模型
         prompt=f"Review the following code changes:\n\n{code_diff}",
         max_tokens=500,
         temperature=0.5
     )
     return response.choices[0].text.strip()

def main():
     # 获取代码变更
     code_diff = get_code_diff("changes.diff")
    
     # 请求 ChatGPT 进行代码审查
     review = get_chatgpt_review(code_diff)
    
     # 输出审查反馈,后续可以通过 GitLab API 添加到 MR 评论中
     print(review)

if __name__ == "__main__":
     main()

是 OpenAI 的 GPT-4o。但我推荐 Azure OpenAI

from openai import AzureOpenAI

如果是第一次,请向 GPT 询问如何操作。

第二步:代码更改和注释

获取代码变更和对这些变更的注释。我们使用的是 GitLab,因此将立即提供端点作为示例:

使用 MR 变更 API 获取代码变更: /api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/changes?access_raw_diffs=true
使用 MR Notes API 发表评论: /api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/notes?order_by=created_at&sort=asc
其中:

gitlab_request_id = os.getenv("CI_MERGE_REQUEST_IID")

gitlab_project_id = os.getenv("CI_PROJECT_ID")

为美观起见,需要对 GitLab 的 JSON 响应进行解析。

第三步:发送代码供人工智能审查


不要忘了在开头添加一个提示,说明要做什么,并将所有内容放入一个请求中:

review_request=f"{prompt}\n\n{notes}\n\n{changes}"

在提示中,您需要礼貌地要求人工智能根据标准分析您的代码更改--类似这样(与我们使用的相比,这是一个非常简化的版本):

“As a Developer, I want to ask you to perform a GitLab Merge Request review.
Consider previous comments noted below and avoid repeating similar recommendations.
If you spot a recurring issue, skip it.

For security issues or sensitive information leaks, mention the assignee's username with @.

Make your feedback clear, concise, and actionable, with specific improvement recommendations.

Review the code snippet below based on these criteria:

  • Syntax and Style: Look for syntax errors and deviations from conventions.
  • Performance Optimization: Suggest changes to improve efficiency.
  • Security Practices: Check for vulnerabilities and hard-coded secrets (mask half the info).
  • Error Handling: Identify unhandled exceptions or errors.
  • Code Quality: Look for code smells, unnecessary complexity, or redundant code.
  • Bug Detection: Find potential bugs or logical errors.”

步骤 4:将回复作为评论发布


只需将收到的回复作为评论发布即可。

为此创建一个名为 AI MR review 的 GitLab PAT 令牌,并直接 POST 到 MR notes API: /api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/notes

在获取 ChatGPT 的反馈后,使用 GitLab 的 API 将这些反馈作为合并请求的评论提交。

示例提交评论的请求:

curl --request POST \
   --header "PRIVATE-TOKEN: <your_access_token>" \
   --data "body=ChatGPT review feedback: $review" \
   --url
https://gitlab.example.com/api/v4/projects/:id/merge_requests/:mr_iid/notes


优化和扩展
  1. 自定义ChatGPT模型:如果可能的话,可以使用自定义的ChatGPT模型来进行代码审查。这可以通过微调预训练的ChatGPT模型来实现,使其更加适合特定项目的代码审查需求。
  2. 增加审查规则:除了ChatGPT生成的评论和建议外,还可以增加一些自定义的审查规则。例如,可以检查代码是否符合特定的编码规范、是否存在常见的安全漏洞等。
  3. 优化性能:随着项目的不断发展和代码量的增加,代码审查机器人的性能可能会成为瓶颈。因此,需要不断优化代码审查机器人的性能,以提高其处理速度和准确性。


结论

优势

实施此解决方案将为以下方面带来改进

DevSecOps: 大幅提高安全性
高级+级别: 现在,查找 MR/PR 中的错误和不足无需通读代码即可完成,人工智能将为您代劳。
开发/质量保证:您将立即获得令人惊喜的有用评论和建议。
业务: 在输出时获得更好的代码。

缺点

成本: 难以预测;这完全取决于您计划提交多少审查意见以及由哪个模型进行审查。

风险

持续改进: 改进这种工具的想法可能无穷无尽;更多的内容并不总是意味着更好的审核。迭代测试更改需要一些时间。
“改进": 可能会变得更懒=),但懒惰是进步的动力,不是吗?

前景

想象一下机会:这将是你的脚本,因此你可以,例如:

从 Jira 添加任务上下文
为 PM 创建摘要
编写发布说明/发布变更
搜索漏洞

通过以上步骤,就可以将ChatGPT集成到Gitlab的Merge Request中,实现自动代码审查。这将大大提高代码审查的效率和准确性,同时减轻开发者的负担。让我们把代码写得更好,让生活变得更轻松。欢迎来到人工智能时代,亲爱的同事们!



今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

image_thumb2_thumb_thumb_thumb_thumb[1]

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。

posted on 2024-10-13 20:55  PetterLiu  阅读(178)  评论(0编辑  收藏  举报