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

276 阅读6分钟

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

 
时间消耗大:代码评审是一个耗时的过程,特别对于大型项目和复杂的代码更是如此。
无档期:评审者无时间会造成研发卡点。
一致性缺乏:不同的审查者可能会有不同的编码标准和偏好,这可能导致代码审查的反馈缺乏一致性,给开发者带来混淆。
可能遗漏错误:人为审查的过程中可能会因为疲劳、疏忽或知识限制而遗漏一些错误,尤其是对于难察觉的逻辑错误和性能问题。
主观性:代码审查很容易受到审查者个人偏好和情绪的影响,有时可能会导致不必要的争议。

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

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

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

将 GPT 嵌入到 CI 实时 code review 助研发一臂之力。
提高效率:自动化审查过程大大减少了人工审查所需的时间,加快了开发周期。
增强准确性:AI 模型可以持续学习,减少人为疏漏,提高代码审查的准确性和质量。
一致性保障:确保代码遵循最佳实践和项目规范,整体一致性。
即时反馈:开发者可以即时获得反馈,快速修正问题,不卡点。
知识共享:AI 评审过程中的建议可以作为学习资源,帮助开发团队提升编码水平。

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

【简易版📌】AI 代码评审接入手册 👉 见评论 已成型机制,京东内部一键式接入!

群号见评论区哦!

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

言犀大模型文档 (JD 内部免费 - 代码安全)

**申请接入 GPT(**评论区加群 or 私信我 **审批连接):填写申请原因和基础信息。**🖐(行业内类 ChatGPT 大模型均可~)

审批完成会收到 API key (chatrhino-14B 暂时输入内容的最大长度为 45000 字符,通常代码修改可以满足)

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

1、调用 coding API(获取 MR 的 commit 起止点) 2、调用 coding API(获取本次代码 diff) 3、调用 GPT- API(京东大模型)

脚本链接汇总(评论区加群 or 私信我 获取): 目前支持的模型有 Chatrhino-14B(最新版本 - 选择此模型)、Chatrhino、Chatrhino-JingYan 其它模型持续集成中。

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

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

替换 2 个变量:

① API Token

• 建议申请协同虚拟账号(优势:很稳定,不会随个人账号离职等变化):部门公共 AI 架构师评审,设置 API Token

【流程中心 - 协同办公 - 协同(虚拟)账号管理】👉 别忘了 coding 给他加个权限!

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

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

• 核心脚本逻辑步骤 如下示例:

void aiCodeReviewByChatrhino() {
    
    String mergeRequest = System.getProperty("mergeRequest");
    if (mergeRequest == null) return;
    
    System.out.println("【流水线触发MergeRequest】------------------------------------------------ " + mergeRequest);

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

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

    
    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}

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 阻塞合入*

5.1 Coding AI 评审记录

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

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

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

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

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

5.2 流水线运行

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 个 / 人。

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

**👏 很荣幸推动了 JD 的 AI 代码评审生态,机制还有很多优化之处,欢迎大家共同交流!**群在评论区。