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助手支持播客生成、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工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多