玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

这篇具有很好参考价值的文章主要介绍了玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文来自:

尹学峰 极狐(GitLab)高级解决方案架构师

自从 ChatGPT 闪亮登场以来,各种基于它的软件扩展纷至沓来。爱折腾的极狐GitLab 开发者们,也花式玩转起了 ChatGPT + 极狐GitLab,让研发工作更高效。

今天,我们来看看如何让 ChatGPT 进行自动化的 MR 变更评审,Enjoy~

一、原理说明


玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

如上图所示:

1. 当极狐GitLab 有代码变更时(创建 MR),通过 webhook 发送事件消息到 ai-code-review App;

2. 当 ai-code-review App 收到消息后,发送 Review Reqeust 到 ChatGPT(调用 ChatGPT 的 API);

3. ChatGPT 将 Code Review 结果以 Review Response 形式返回;

4. ai-code-review 收到 Review Response 后,将内容(Review Comment)发送到极狐GitLab 的 MR 中。

二、快速上手指南


1. ai-code-review环境

即上图中紫色机器,需要满足基本条件:

  • 此机器能够访问 api.openai.com
  • 此机器与极狐GitLab 机器之间网络互相可以访问,或者说彼此可以 ping 通。

1.1 Linux / MacOS / *Unix

1.1.1 Docker 安装

如已经安装 Docker 可忽略此章节。

安装脚本如下:

curl -fsSL https://get.docker.com | bash -s docker

1.1.2 运行程序

使用如下命令。注意,需要修改其中 3 个 Token/License 参数为实际参数:

  • gitlab_private_token: GitLab Token,应具有 Merge Requst 写权限。在生成此 Token 时,建议勾选所有权限;
  • openai_api_key: 需在 OpenAI API Keys 自行申请;
  • acr_licensetest 即可。
docker run -itd -p 8888:8888 \
--restart=always \
--name ai-code-review \
-e gitlab_private_token="<你的GitLab Token>" \
-e language="Chinese" \
-e openai_api_key="<你的OpenAI Token>" \
-e acr_license="test" \
satomic/ai-code-review:20230321

2. 极狐GitLab Webhook 配置

在极狐GitLab 中,进行 AI code review 的 group 或 project 配置,以 project 为例,建议使用 group 级别的 webhook,这样 group 内的所有项目的 MR 都会被 AI 审查,无需为每个 project 重复配置,配置方式与 project 相同:

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

每次合并请求产生及变化时,都会看到发送记录 :

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

3. ChatGPT 评审效果

Review 效果如下,更多可访问 Public 演示仓库 AI自动MR评审演示。

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

三、定义自己的评审机器人


前文中的自动化评审机器人🤖封装在 docker 镜像中 ,其角色声明为:

{
    "role": "system",
    "content": "你是是一位资深编程专家,负责代码变更的审查工作。需要给出审查建议。在建议的开始需明确对此代码变更给出「拒绝」或「接受」的决定,并且以格式「变更评分:实际的分数」给变更打分,分数区间为0~100分。然后,以精炼的语言、严厉的语气指出存在的问题。如果你觉得必要的情况下,可直接给出修改后的内容。建议中的语句可以使用emoji结尾。你的反馈内容必须使用严谨的markdown格式。"
}

所以机器人讲话很没有感情,如果想 “注入感情”🎨 ,则需要定义自己的评审机器人,比如希望是一个傲娇少女👧来评审,参考如下角色声明:

{
    "role": "system",
    "content": "你是一个天才小女孩,精通编程工作,性格很傲娇又高傲,负责对前辈的代码变更进行审查,用后辈的态度、活泼轻快的方式的指出存在的问题。使用markdown格式。可以包含emoji。"
}

按照这样的角色声明,评审的效果是这样:

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

‍💁‍♀️下面,基于如下源码创造自己的傲娇评审少女吧~

创建 ai_code_review.py 文件,内容如下:

# coding=utf-8

import gitlab
import openai

class AICodeReview():
    
    def __init__(self,
                 gitlab_private_token,
                 project_id,
                 merge_request_id,
                 openai_api_key,
                 gitlab_server_url='https://jihulab.com',
                 ):
        self.gl = gitlab.Gitlab(
            gitlab_server_url,
            private_token=gitlab_private_token,
            timeout=300,
            api_version='4'
        )
        print('初始化GitLab连接成功')
        
        # project
        self.project_id = project_id
        self.project = self.gl.projects.get(project_id)
        print('找到project')
        
        # mr
        self.merge_request_id = merge_request_id
        self.merge_request = self.project.mergerequests.get(merge_request_id)
        print('找到mr')
        
        # changes
        self.changes = self.merge_request.changes()
        
        # openai
        openai.api_key = openai_api_key
        
        # comments
        self.review_notes = []
        
        # note
        self.note = ''
        
        
    def ai_code_review(self):
        
        print('开始code review')
        for change in self.changes['changes']:
            # https://platform.openai.com/docs/guides/chat/introduction
            messages = [
                {"role": "system",
                 "content": "你是是一位资深编程专家,负责代码变更的审查工作。需要给出审查建议。在建议的开始需明确对此代码变更给出「拒绝」或「接受」的决定,并且以格式「变更评分:实际的分数」给变更打分,分数区间为0~100分。然后,以精炼的语言、严厉的语气指出存在的问题。如果你觉得必要的情况下,可直接给出修改后的内容。建议中的语句可以使用emoji结尾。你的反馈内容必须使用严谨的markdown格式。"
                 },
                {"role": "user",
                 "content": f"请review这部分代码变更{change}",
                 },
            ]

            print('思考中...')
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=messages,
            )
            new_path = change['new_path']
            print(f'对 {new_path} review中...')
            response_content = response['choices'][0]['message']['content'].replace('\n\n', '\n')
            total_tokens = response['usage']['total_tokens']

            review_note = f'# `{new_path}`' + '\n\n'
            review_note += f'({total_tokens} tokens) {"AI review 意见如下:" }' + '\n\n'
            review_note += response_content
            
            self.review_notes.append(review_note)

    def comment(self, notice=None):
        if notice is None:
            review_note = '\n\n---\n\n'.join(self.review_notes)
            self.note = {'body': review_note}
            self.merge_request.notes.create(self.note)
            print('review内容', self.note)
            print('review完成')
        else:
            self.note = {'body': notice}
            self.merge_request.notes.create(self.note)
            print(notice)

核心函数说明:

  • ai_code_review: 调用 openai.ChatCompletion.create() 方法基于预设 prompt 角色发起一次对话,得到评审结果。
  • comment: 调用 .merge_request.notes.create() 方法追加评审内容到 MR 中。

单次评审的使用方式如下,只要传递对应参数即可。实际使用中,可以在外层封装 HTTP Server,接收 MR 创建/更新的 Webhook 推送的 Json 对象,解析内容并自动进行 AICodeReview 对象的实例化及动作。

acr = AICodeReview(
    gitlab_server_url=<你的GitLab地址>,
    gitlab_private_token=<你的GitLab private_token>,
    project_id=<project_id>,
    merge_request_id=<merge_request_id>,
    openai_api_key=<openai_api_key>,
)
acr.ai_code_review()
acr.comment()

完成了上述内容,你就可以让 ChatGPT 自动来进行 MR 变更评审啦。文章来源地址https://www.toymoban.com/news/detail-450396.html

到了这里,关于玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Jenkins+gitlab实现自动化部署

    Jenkins+gitlab实现自动化部署

    Jenkins 是一个用 Java 编写的开源自动化工具,带有用于持续集成的插件。用于持续构建和测试您的软件项目,从而使开发人员更容易将更改集成到项目中,并使用户更容易获得新的构建。它还允许您通过与大量测试和部署技术集成来持续交付软件。 Jenkins 集成了各种开发生命

    2024年02月21日
    浏览(13)
  • Gitlab自动触发jenkins完成自动化构建
jenkins

    Gitlab自动触发jenkins完成自动化构建 jenkins

     首先安装gitlab插件,我已经安装过了,首次请在 可选插件 中进行搜索。   进入项目配置--构建触发器: Build when a change is pushed to GitLab. GitLab webhook URL: 请复制此处的URL,后续有用。  然后点击高级   “Allowed branches”触发分支可以用默认的全部分支,也可以选择仅由指定名

    2024年02月16日
    浏览(16)
  • Jenkins结合gitlab自动化持续集成

    Jenkins结合gitlab自动化持续集成

    大家好,我是自动化测试老司机~ 最近在公司有负责搭建自动化测试环境,自动化脚本写好后,毋庸置疑是需要将自动化脚本进行持续集成测试,能够根据企业的定制化需求,通过Jenkins触发执行构建任务,定时执行自动化脚本等,今天就给大家介绍一下Jenkins结合gitlab进行自动

    2024年02月11日
    浏览(17)
  • Gitlab+Jenkins自动化部署,解放双手

    Gitlab+Jenkins自动化部署,解放双手

    ​ 在部署项目前需要对源码进行打包,一个简单的SpringBoot项目默认是打包为jar包,也就是在pom.xml中的 packagingjar/packaging 方式,当然也会有一些打包成war包方式,使用外置的Tomcat应用服务器部署war包,那么就是 packagingwar/packaging 。 在父子类聚合项目中,父工程的 pom.xml 文件中

    2024年02月07日
    浏览(20)
  • 使用JavaScript+Selenium玩转Web应用自动化测试

    使用JavaScript+Selenium玩转Web应用自动化测试

    自动化测试 在软件开发过程中, 测试是功能验收的必要过程, 这个过程往往有测试人员参与, 提前编写测试用例, 然后再手动对测试用例进行测试, 测试用例都通过之后则可以认为该功能通过验收. 但是软件中多个功能之间往往存在关联或依赖关系, 某一个功能的新增或修改可能

    2024年01月18日
    浏览(16)
  • 记录使用gitlab实现Docker自动化部署

    记录使用gitlab实现Docker自动化部署

    目录 前言 一、gitlab-runner docker安装 二、gitlab-runner的注册与使用 1.注册 2. .gitlab-ci.yml 脚本编写 总结 前面搭建了gitlab与harbor ,现在就使用它们来实现自动化docker部署。所谓自动化部署,就是提交代码到指定分支时自动触发预先写好的脚本,来实现打包,推送镜像。想要实现这

    2023年04月11日
    浏览(9)
  • 【git】2、gitlab CICD 模型部署自动化

    【git】2、gitlab CICD 模型部署自动化

    GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。 安装方法是参考 GitLab 在 GitHub 上的 Wiki 页面。Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进

    2024年02月04日
    浏览(24)
  • Jenkins + Gitlab 实现项目自动化构建及部署

    Jenkins + Gitlab 实现项目自动化构建及部署

      通俗来讲就是本地项目 push 到 gitlab 后, Jenkins 能够识别到项目的更新并自动构建部署;  本文以实际操作的方式来表述详细配置过程及避开配置 Jenkins 时的坑. 默认电脑已经安装了虚拟机, 默认gitlab 上已经有了你想要部署的项目, 部署了 maven 和 jdk 并配置了环境变量!!! 1 执行

    2024年02月16日
    浏览(13)
  • Gitlab + Docker + Jenkins + Harbor实现自动化部署

    Gitlab + Docker + Jenkins + Harbor实现自动化部署

    目录 文章目录 前言 一、第一台服务器--Jenkins 1、安装前 2、安装Jenkins 3、修改正在跑容器的端口 4、Jenkins内部插件和配置  二、第二台服务器--Harbor 1、安装docker-compose 2.安装及配置 3、卸载Harbor  4、Harbor启动后操作 三、第三台服务器--生产环境  1、配置私服地址 四、Jenkin

    2024年02月14日
    浏览(16)
  • 一文4000字使用JavaScript+Selenium玩转Web应用自动化测试

    一文4000字使用JavaScript+Selenium玩转Web应用自动化测试

    在软件开发过程中, 测试是功能验收的必要过程, 这个过程往往有测试人员参与, 提前编写测试用例, 然后再手动对测试用例进行测试, 测试用例都通过之后则可以认为该功能通过验收. 但是软件中多个功能之间往往存在关联或依赖关系, 某一个功能的新增或修改可能或影响到其

    2023年04月22日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包