Chat-CodeReview

Chat-CodeReview

GitLab自动化代码审查工具 基于ChatGPT

Chat-CodeReview是一个集成ChatGPT的GitLab代码审查工具。该工具可自动触发审查流程,解析代码差异,并利用ChatGPT分析能力提供审查意见。它支持GitLab API集成、全面自动化审核和失败重试机制,旨在提升代码质量和团队开发效率。

ChatGPTGitLab代码审查自动化WebhookGithub开源项目

Chat-CodeReview(Gitlab)

ChatGPT自动化GitLab代码审查。

翻译版本:英文 | 简体中文 | 繁體中文 | 韩文 | 日文

特性

ChatGPT集成GitLab实现自动化代码审计,为软件开发团队提供高效、智能的代码审查解决方案

  1. 自动触发和及时响应:利用GitLab的Webhook功能,系统自动触发代码提交、合并请求和标签创建等事件。收到新的代码提交后,系统立即响应并启动审计流程,无需人工干预。
  2. 集成GitLab API接口:通过与GitLab的API接口集成,该解决方案可以轻松扩展和增加功能。这种集成增强了与GitLab交互的灵活性,适应各种定制化审计需求。
  3. 全面自动化审计:ChatGPT对GitLab的代码进行自动代码审计,涵盖三种类型的代码提交:推送(commit)、合并(merge request)和标签(tag创建)。无论是新的代码提交还是代码合并,系统都会自动检查并提供审计意见。
  4. 重试机制:为解决可能出现的网络异常或其他问题,系统引入了重试机制。如果由于网络问题导致请求失败,系统会自动重试,确保审计过程的可靠性和稳定性。

审计原理

1689647943933

步骤:

  1. GitLab的Webhook事件推送:GitLab可以配置Webhook,在代码提交或合并请求等事件发生时触发通知。当有新的代码提交或合并请求时,GitLab会向预先定义的URL发送POST请求,包含相关事件数据。
  2. 解析Diff内容并发送给ChatGPT:收到Webhook事件后,GitLab解析diff内容,即新旧代码之间的差异。随后,这些差异被发送到ChatGPT的API端点,使ChatGPT能够理解代码变更。
  3. ChatGPT处理并返回结果:ChatGPT作为强大的自然语言处理模型,能够理解和处理自然语言文本。当ChatGPT收到diff内容时,它会分析并理解代码变更,提供对潜在问题、漏洞或优化建议的评估和反馈。ChatGPT将处理后的结果返回给触发的GitLab实例。
  4. 将ChatGPT处理结果显示为评论:GitLab接收来自ChatGPT的处理结果,并将其作为评论添加到相应的代码提交或合并请求中。因此,代码贡献者和其他团队成员可以查看ChatGPT的审计结果,并根据建议进行适当的改进或修复。

通过将GitLab的代码审计与ChatGPT集成,可以实现自动化的代码质量检查和审查,从而帮助团队识别潜在问题、漏洞或改进机会。(以上仅供参考。)

prompt

经验丰富的领导

messages = [ {"role": "system", "content": "你是一位经验丰富的编程专家,负责审查GitLab提交中的代码变更。代码修改将以Git diff字符串的形式提供,你将为每个变更分配一个分数,格式为"分数:实际分数",分数范围为0到100。你的反馈应简明扼要但严谨,使用精确的语言和严肃的语气突出指出发现的问题。如有必要,你可以直接提供修订后的内容。你的反馈必须严格遵守Markdown格式的约定。" }, {"role": "user", "content": f"请审查以下代码变更:{content}", }, ]

骄傲而有朝气的年轻女性

要审查,请参考以下角色陈述:

{ "role": "system", "content": "你是一位天才少女,精通编程领域。带着一点骄傲和自豪,你的角色是审查前辈们的代码修改。你优雅而俏皮地使用Markdown格式指出任何问题,注入青春的活力和朝气。你可以自由地用迷人的表情符号来装饰你的反馈,为你的消息增添魅力和生气。" }

环境变量

  • gitlab_server_url:Gitlab服务器的URL地址
  • gitlab_private_token:用于访问Gitlab API的私人访问令牌(private token)
  • openai_api_key:用于访问OpenAI API的密钥

Gitlab WebHook

GitLab的Webhook是一种事件通知机制,允许你在GitLab内配置一个URL地址。当特定事件发生时,GitLab会向该URL发送HTTP请求,传输相关的事件数据到你的应用程序。这使得你的应用程序能够根据接收到的事件数据执行自定义操作或响应。

Webhook可用于监控和响应GitLab中的各种事件,如代码提交、合并请求、标签创建、分支操作等。通过利用Webhook,你可以实现广泛的自动化任务、集成和持续集成/持续部署(CI/CD)工作流程。

以下是GitLab Webhook的主要特点和用途:

  1. 事件触发:当你在GitLab中配置并启用Webhook时,它会在特定事件(如代码提交或合并请求)发生时自动触发。
  2. HTTP请求:一旦事件被触发,GitLab会向你预先配置的URL发送HTTP请求。这个请求包含相关的事件数据,通常以JSON格式呈现。最常用的方法是POST请求。
  3. 自定义操作:通过编写接收Webhook请求的脚本或服务,你可以解析和处理接收到的事件数据,从而执行自定义操作。例如,自动构建、自动测试和自动部署。
  4. 与其他服务集成:Webhook使GitLab能够与其他服务和工具集成。例如,你可以自动将代码同步到持续集成(CI)平台、向团队成员发送通知或更新任务跟踪系统。
  5. 可配置性:GitLab的Webhook提供了广泛的配置选项。你可以选择要监控的事件类型、设置触发条件,以及定义请求的内容和格式。

1689651530556

1689651554862


测试数据(push)

请求URL: POST http://192.168.96.19:5000/git/webhook 200

触发器: Push Hook

耗时: 0.01 秒

请求时间: 刚刚


请求头:
Content-Type: application/json
X-Gitlab-Event: Push Hook
X-Gitlab-Token: asdhiqbryuwfqodwgeayrgfbsifbd
请求体:
{
  "object_kind": "push",
  "event_name": "push",
  "before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
  "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
  "ref": "refs/heads/master",
  "checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
  "message": "Hello World",
  "user_id": 4,
  "user_name": "John Smith",
  "user_email": "john@example.com",
  "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
  "project_id": 15,
  "project": {
    "id": 15,
    "name": "gitlab",
    "description": "",
    "web_url": "http://test.example.com/gitlab/gitlab",
    "avatar_url": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
    "git_ssh_url": "git@test.example.com:gitlab/gitlab.git",
    "git_http_url": "http://test.example.com/gitlab/gitlab.git",
    "namespace": "gitlab",
    "visibility_level": 0,
    "path_with_namespace": "gitlab/gitlab",
    "default_branch": "master"
  },
  "commits": [
    {
      "id": "c5feabde2d8cd023215af4d2ceeb7a64839fc428",
      "message": "在公共区域为项目添加简单搜索",
      "timestamp": "2013-05-13T18:18:08+00:00",
      "url": "https://test.example.com/gitlab/gitlab/-/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428",
      "author": {
        "name": "Test User",
        "email": "test@example.com"
      }
    }
  ],
  "total_commits_count": 1,
  "push_options": {
    "ci": {
      "skip": true
    }
  }
}
响应头:
Server: Werkzeug/2.3.6 Python/3.8.0
Date: Tue, 18 Jul 2023 03:39:51 GMT
Content-Type: application/json
Content-Length: 26
Connection: close
响应体:
{
  "status": "success"
}

安装和运行

1、下载代码

git clone https://github.com/nangongchengfeng/chat-review.git

2、安装依赖

1689663745702

python deal_package.py

3、更新配置

config/config.py

""" 这个文件是用来从apollo配置中心获取配置的, 如果没有apollo配置中心,可以直接在这里配置 """ WEBHOOK_VERIFY_TOKEN = "asdhiqbryuwfqodwgeayrgfbsifbd" gitlab_server_url = gitlab_server_url gitlab_private_token = gitlab_private_token openai_api_key = openai_api_key

4、运行app.py

简单 nohup python3 app.py &

5、Gitlab Webhook

http://192.168.96.19:5000/git/webhook 可以更改运行机器的IP地址,也可以更改域名。 http://gitlab.ownit.top/git/webhook

1689651530556

问题

diff处理

1689661104194

方法1(简洁)

1、将获取到的diff全部内容传递给chatgpt处理(包括添加行和删除行)

优点:方便快捷。

缺点:如果内容过长,可能会导致ChatGPT处理出现问题,导致代码不完整,逻辑可能不连贯。

方法2(推荐)

2、获取diff内容的处理,删除删除行和"+"符号。

优点:方便快捷,节省了相当大的空间。

缺点:如果内容过长,可能会导致ChatGPT处理失败,只有部分代码,逻辑不连贯。

def filter_diff_content(diff_content): filtered_content = re.sub(r'(^-.*\n)|(^@@.*\n)', '', diff_content, flags=re.MULTILINE) processed_code = '\n'.join([line[1:] if line.startswith('+') else line for line in filtered_content.split('\n')]) return processed_code

1689661743140

方法3(复杂)未联合调试,代码已被覆盖

3、处理diff的内容,删除删除行和'+'符号,获取修改的原始文件,使用JavaParser进行解析。获取对应的代码块上传进行审核。

优点:节省空间,提供完整的方法,逻辑稍微好一些。

缺点:非常繁琐,只支持Java。

[{ 'code': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'SettlementDetailController' }, { 'code': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'queryRecord' }, { 'code': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'name': 'populateBatchItemVO' }]

演示

1689663598079

贡献

感谢anc95 小安大佬对项目的支持和灵感 https://github.com/anc95/ChatGPT-CodeReview.git

头像

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多