前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CI+GPT双引擎驱动,开启AI代码评审新纪元

CI+GPT双引擎驱动,开启AI代码评审新纪元

作者头像
京东技术
发布2024-06-11 18:07:51
1890
发布2024-06-11 18:07:51
举报
文章被收录于专栏:京东技术

01现状问题

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!

代码评审 Code Review 是提高代码质量、促进团队合作、知识间共享的关键环节,对于系统代码质量和稳定性都至关重要。

【人为代码评审(Code Review)】存在很多弊端

时间消耗大:代码评审是一个耗时的过程,特别对于大型项目和复杂的代码更是如此。

无档期:评审者无时间会造成研发卡点。

一致性缺乏:不同的审查者可能会有不同的编码标准和偏好,这可能导致代码审查的反馈缺乏一致性,给开发者带来混淆。

可能遗漏错误:人为审查的过程中可能会因为疲劳、疏忽或知识限制而遗漏一些错误,尤其是对于难察觉的逻辑错误和性能问题。

主观性:代码审查很容易受到审查者个人偏好和情绪的影响,有时可能会导致不必要的争议。

02分析原因

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将

🤔人为代码评审存在的弊端主要源于人力的局限性(如疲劳、无时间、主观偏见、认知局限等)。这些因素共同作用导致审查过程中可能出现的时间效率低、一致性差、错误遗漏和主观性问题。

🗣用五个词语总结: 易疲劳 主观偏见 规范少 沟通难 知识缺

03采取措施

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将

🤖 利用AI大模型进行代码评审,可以显著提高效率、减少人为错误,通过自动化分析和建议,弥补人为评审的局限性。同时还能促进代码一致性和质量,但需要适当的人机协作模式以充分发挥其潜力。

将GPT嵌入到CI实时code review 助研发一臂之力。

提高效率:自动化审查过程大大减少了人工审查所需的时间,加快了开发周期。

增强准确性:AI模型可以持续学习,减少人为疏漏,提高代码审查的准确性和质量。

一致性保障:确保代码遵循最佳实践和项目规范,整体一致性。

即时反馈:开发者可以即时获得反馈,快速修正问题,不卡点。

知识共享:AI评审过程中的建议可以作为学习资源,帮助开发团队提升编码水平。

底层依赖:京东言犀大模型、行云流水线(云原生)、单元测试脚本、coding 代码评审机制(webhook)

*注:“咚咚”为京东内部协同办公平台,下同;

04实践步骤

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将

4.1 接入京东言犀大模型(行业内类ChatGPT大模型均可)

图为京东言犀大模型Chatrhino

4.2 内置AI Review脚本(Git代码库API打通)

1、调用coding API(获取MR的commit起止点)

2、调用coding API(获取本次代码diff)

3、调用GPT- API(京东大模型)

代码评审脚本和流水线模版连接: https://3.cn/10giI-vdG: 目前支持的模型有Chatrhino、Chatrhino-JingYan 其它模型持续集成中。

‍‍AiCodeReview.java 脚本案例(java语言-junit5版本)粘贴到自己代码库中即可

📢注意:不必须依赖junit5,可以自行切换junit4,demo只是提供框架思路,落地后可根据代码库场景优化脚本!

替换几个变量

① API Token

② PROJECT_ID:替换为您的Git 应用id(如下查看)

③ 大模型api-key:替换为您的key(查看4.1部分)

  • 核心脚本逻辑步骤 如下示例:‍
代码语言:javascript
复制
void aiCodeReviewByChatrhino() {
    //1、get mr
    String mergeRequest = System.getProperty("mergeRequest");
    if (mergeRequest == null) return;

    System.out.println("【流水线触发MergeRequest】------------------------------------------------ " + mergeRequest);

    //2、get coding diff
    String codeDiff = getCodingDiff(mergeRequest);
    System.out.println("【coding的diff内容】------------------------------------------------" + codeDiff);

    //3、gpt code review
    String result = gptReview(codeDiff);
    System.out.println("【京东言犀大模型评论】------------------------------------------------" + result);

    //4、output review content
    note(objectMapper.readTree(result).get("choices").get(0).get("message").get("content").asText(), mergeRequest);
    System.out.println("【coding评审note记录】------------------------------------------------" + noteContent + "-----------------------------------------------");
}

✋脚本内设定AI人设 (content字段) :根据自己需求定义prompt

比如你想用于分析本次改动业务语义、或者专注于找bug、亦或者代码写法是否规范等

4.3 搭建CI流水线(持续集成)

① 新建流水线:导入AI流水线脚本模版yaml 创建AI Code Review机制

流水线原子:【下载代码】+【java编译】+【咚咚通知】

② 原子参数配置修改:【下载代码原子】+【maven编译原子】改为自己代码库和脚本路径

  • 【咚咚通知原子】默认配置即可,📢 提交代码研发

✍️ 同部门下建议独立脚本代码库,projectID动态传入,不同应用可实现《一键式接入》(只需导入流水线即可实现AI评审)-DprojectId=${globalParams.user.WEBHOOK_ATTR_PROJECT_ID}

分支:${globalParams.user.BRANCH} 相对目录(脚本放置位置):${globalParams.system.APP_IDENTIFIER}

代码语言:javascript
复制
mvn test -Dtest=com.jdwl.wms.common.AiCodeReview -DmergeRequest=${globalParams.user.WEBHOOK_ATTR_MERGE_REQUEST_ID} -DfailIfNoTests=false -Dmaven.test.failure.ignore=true

③【触发设置】绑定自己代码库,MR Create/Updated 事件(原因:coding的push操作统一触发mr create/update操作)

4.4 配置coding(Webhook联合CI)

① 增加【持续集成】账号 master权限

② webhook:流水线生成的webhook链接(Push + Merge Resuest)

③ 代码评审机制:* 所有分支push时 自动创建MR 阻塞合入

05达成效果

5.1 Coding AI评审记录

👉 不同系统根据自己需求来设定AI人设:有的可能用于分析本次改动业务语义、有的专注于找bug、有的看代码写法规范度等

1.代码push稍等片刻 收到咚咚通知:AI代码评审完成

  • 自动创建Merge Request触发code review流水线,自动AI架构师-代码评审记录!

👉 可以针对代码中【潜在bug】和【不规范写法】可以指出优化建议!

👉 可以分析代码变动,警示研发一些注意事项!

5.2 流水线运行

06效能提升

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将

6.1 人效提升,降低研发人力成本,减少研发阶段占比

自动替代人为评审,每次push都会自动评审,活跃代码库 评审需求量>10次/天,减少了 提交人和评审人的沟通 时间成本总和。

自动2024-13周落地实践后,开发阶段占比阶段性降低,从需求周期的 62% 降低至 52%,大约降低了10%的比例(多数为代码push后评审的耗时,评审时间、沟通时间、返工时间、修复时间 ......)

6.2 需求交付提升,缩短需求交付周期

自从2024-13周落地实践后,研发节省大量人力成本在每一次push的代码评审,只是辅助评审,则更多精力在需求研发设计交付上,需求交付周期之前的 26.57天 缩短至目前 17.14天。

6.3 过程质量提升,有效减少BUG数

自从2024-13周落地实践后,AI评审代码后,新增bug数呈现下降趋势,从之前的14个/人减少到目前 6个/人。

07简要总结

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将

🤖AI Code Review 机制通过CI流水线自动化评审代码,显著提升了 研发效率代码质量,使研发能够更专注于创新和核心业务的开发,进而 优化用户体验提升需求交付速率

👏 欢迎大家在评论区共同交流!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京东技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 、现状问题
  • 02 、分析原因
  • 03 、采取措施
  • 04 、实践步骤
    • 4.1 接入京东言犀大模型(行业内类ChatGPT大模型均可)
      • 4.2 内置AI Review脚本(Git代码库API打通)
        • 4.3 搭建CI流水线(持续集成)
          • 4.4 配置coding(Webhook联合CI)
          • 05 、达成效果
            • 5.1 Coding AI评审记录
              • 5.2 流水线运行
              • 06 、效能提升
                • 6.1 人效提升,降低研发人力成本,减少研发阶段占比
                  • 6.2 需求交付提升,缩短需求交付周期
                    • 6.3 过程质量提升,有效减少BUG数
                    • 07 、简要总结
                    相关产品与服务
                    持续集成
                    CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档