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

本文来自:

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

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

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

一、原理说明


如上图所示:

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 相同:

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

3. ChatGPT 评审效果

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

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


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

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

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

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

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

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

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

# coding=utf-8import gitlab
import openaiclass 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连接成功')# projectself.project_id = project_idself.project = self.gl.projects.get(project_id)print('找到project')# mrself.merge_request_id = merge_request_idself.merge_request = self.project.mergerequests.get(merge_request_id)print('找到mr')# changesself.changes = self.merge_request.changes()# openaiopenai.api_key = openai_api_key# commentsself.review_notes = []# noteself.note = ''def ai_code_review(self):print('开始code review')for change in self.changes['changes']:# https://platform.openai.com/docs/guides/chat/introductionmessages = [{"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_contentself.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 变更评审啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19143.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度:ChatGPT只是表面的喧嚣,大模型才是那柄尖刀!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 如果把时钟拨到2023年底&#xff0c;当我们回过头来看今年科技界最激动人心的大事件&#xff0c;ChatGPT的横空出世无疑会占据一席之地。就像几年前大家被谷歌AlphaGo点燃对人工智能的热情一样&#xff0c;人们对ChatGPT的热…

GPT-4:我不是来抢你饭碗的,我是来抢你锅的

目录 一、GPT-4&#xff0c;可媲美人类 二、它和ChatGPT 有何差别&#xff1f; 01、处理多达2.5万字的长篇内容 02、分析图像的能力&#xff0c;并具有「幽默感」 03、生成网页 三、题外话 四、小结 GPT-4的闪亮登场&#xff0c;似乎再次惊艳了所有人。 看了GPT-4官方的…

文心一言正式对标GPT-4,是青铜还是王者?

昨天&#xff0c;OpenAI正式发布GPT-4模型 号称史上最先进的AI系统 今天&#xff0c;百度文心一言在万众瞩目中闪亮登场 这款产品被视为中国版ChatGPT 在这一个多月内备受关注 文心一言某种程度上具有了对人类意图的理解能力 回答的准确性、逻辑性、流畅性都逐渐接近人类…

python详解(7)——进阶(1):排序算法

目录 &#x1f3c6;一、前言 &#x1f3c6;二、什么是算法&#xff08;简单&#xff09; &#x1f6a9;1、算法 &#x1f6a9;2、排序算法 &#x1f3c6;三、冒泡排序&#xff08;中等&#xff09; &#x1f3c6;四、快速排序&#xff08;困难&#xff09; &#x1f3c6;五&…

如何解决ChatGPT 的数据保护盲点

自成立以来的短时间内&#xff0c;ChatGPT 和其他生成式 AI 平台理所当然地赢得了终极生产力助推器的声誉。然而&#xff0c;能够按需快速生成高质量文本的技术&#xff0c;可能同时暴露敏感的公司数据。最近发生的一件事&#xff0c;其中东方联盟网络安全研究人员将专有代码粘…

ChatGPT 的数据保护盲点以及安全团队如何解决这些盲点

自成立以来的短时间内&#xff0c;ChatGPT 和其他生成式 AI 平台理所当然地赢得了终极生产力助推器的声誉。 然而&#xff0c;能够按需快速生成高质量文本的技术&#xff0c;可能同时暴露敏感的公司数据。 最近发生的一起事件&#xff0c;三星软件工程师将专有代码粘贴到 ChatG…

ChatGPT 数据泄露的技术细节公开:引用的 Redis 开源客户端导致

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) 在上周一&#xff0c;ChatGPT 遭遇了一次用户数据泄漏事件&#xff0c;许多 ChatGPT 的用户都在自己的历史对话中看到了其他人的对话记录。不光是对话的历史记录&#xff0c;不少 ChatGPT Plus 用户还在 Reddit 和 T…

A股管家股票自动交易软件系统,功能完善强大

2013年的时候&#xff0c;有个广东的朋友说再用这款A股管家股票自动系统&#xff0c;我当时比较惊讶&#xff0c;以前想过要是有一款股票自动交易软件能偶尔代替我一下就好了&#xff0c;虽然是职业股民&#xff0c;但也经常遇到太忙的时候&#xff0c;实在没时间。然后就在朋友…

如何让chatgpt十分正确的帮咱们编写代码文档和单元测试

有多少次你专注于编程而忘记了写函数、方法、类的非常简单的代码文档&#xff1f;我不是在问单元测试. 直到我发现ChatGPT可以做到这一点: 除了代码文档&#xff0c;它在编写单元测试方面也做得很好。此外&#xff0c;在最后&#xff0c;我可以要求他为其他想使用我的代码的贡…

chatGPT如何开启 Browsing 功能,实现即时联网查询?

Openai 为每一个 chatGPT Plus 用户都开放了 Browsing 和 plugins 功能。 前者可以在 ChatGPT 觉得有必要的时候&#xff08;比如你问它今天的新闻&#xff09;&#xff0c;自动联网查询&#xff0c;后者是第三方开发者开发的插件&#xff0c;数量繁多&#xff0c;可以解决各种…

雷军:小米 13 暂无做半代升级版本计划;微软放宽 Bing 搜索引擎使用限制;.NET 8 发布首个预览版本|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

三星被曝因ChatGPT泄露芯片机密!韩媒惊呼数据「原封不动」直传美国,软银已禁止员工使用......

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信技术交流群 明敏 萧箫 发自 凹非寺转载自&#xff1a;量子位&#xff08;QbitAI&#xff09; 三星引入ChatGPT不到20天&#xff0c;就发生3起数据外泄事件…

垂直大模型渐入佳境,解码国内首个智能校对领域大模型“蜜度文修”

一枝独秀不是春&#xff0c;百花齐放春满园。 ChatGPT的兴起&#xff0c;引发了全球性的大模型竞赛热潮。走过开始的混沌期&#xff0c;大模型竞技场当前越来越呈现出两条清晰的路线&#xff1a;一是以云服务厂商为代表的巨头们逐鹿的基础通用大模型赛道&#xff1b;二是在基础…

目标检测算法——YOLOv5/YOLOv7改进之结合GAMAttention

>>>深度学习Tricks&#xff0c;第一时间送达<<< 目录 超越CBAM&#xff0c;全新注意力GAM&#xff1a;不计成本提高精度&#xff01; &#xff08;一&#xff09;前沿介绍 1.GAM结构图 2.相关实验结果 &#xff08;二&#xff09;YOLOv5/YOLOv7改进之结…

chatgpt赋能python:Wi-FiPython拦截抓包基础知识

Wi-Fi Python拦截抓包基础知识 Wi-Fi Python拦截抓包的技术可以用于网络安全研究、漏洞挖掘和应用开发等领域中。本文将基于Python语言介绍Wi-Fi Python拦截抓包的基础知识。 前置条件 在学习Wi-Fi Python拦截抓包之前&#xff0c;需要掌握以下知识&#xff1a; Python编程…

WireShark提取特定软件的网络包

WireShark的下载安装以及简单的使用方法这里就不赘述&#xff0c;可以参考&#xff1a; 网络抓包分析工具Wireshark的下载、安装和使用_wireshark下载教程_初见未晚的博客-CSDN博客https://blog.csdn.net/weixin_45054982/article/details/123257808?ops_request_misc%257B%2…

chatgpt赋能python:抓包是什么?

抓包是什么&#xff1f; 当我们在浏览器中访问一个网站时&#xff0c;我们的电脑会向网络服务器发送请求并接收响应。这个过程中&#xff0c;有一些工具可以让我们查看和分析这些请求和响应&#xff0c;其中最常用的就是“抓包”。 抓包就是指截获网络通信过程中的数据包并分…

chatgpt赋能python:Python抓取数据包:如何从网络中提取有用数据

Python抓取数据包&#xff1a;如何从网络中提取有用数据 在数据分析和网络安全中&#xff0c;使用Python抓取数据包是一种常见的技术。Python拥有强大的网络编程能力&#xff0c;可以用于捕获、分析和保存从网络流中提取出的数据。本文将介绍如何使用Python进行数据包捕获&…

【考研复试】某985考研复试英语面试问题汇总(综合面试+英语口语面试)

写在前面的话&#xff1a; 本科是某985Top10&#xff0c;研究生考的是自己院。笔试成绩中等&#xff0c;专业面试倒数第一&#xff0c;机试与英语面试第一。总分在录取的人员名单中倒数第一&#xff0c;稳稳压线上岸。 在准备复试时&#xff0c;我花了1个小时准备机试&#xff…

信息收集(二)

目录 DNS服务器的类型 DNS解析流程 ping / nslookup PING nslookup IP归属查询 如何获取CDN背后的真实IP 什么是CDN CDN的优势 几种访问方式的不同 CDN的配置 常见的CDN服务商 获取CDN背后的真实IP 超级ping 查询子域名 国外访问 DNS服务器的类型 DNS解析流程 pi…