概述
gitlab 接入 ai code review,利用 AI 提高代码审查流程的效率,确保开发人员获得有价值的指导。
Gitlab 社区有相关倡议,让 gitlab 官方集成 ai code review,目前官方未有最新动态。
就算推出,估计也是作为付费项。所以自建一个性价比较高。
功能范围
- ✅ 通过 gitlab pr webhook / CI 触发
- ⏳自部署开源模型,保证代码安全
- ⏳接入知识库,基于已有规范提供审查建议
方案
触发方式
Webhook
以 CR Mentor 作为参考
cr-mentor 商业版本:
cr-mentor 开源版本:
以 webhook 接入,通过 web 平台进行展示,cr 流程、知识库管理、chat 集成在一个平台上。
但他是基于一些云服务 supabase、clerk 构建而成,不便于改造,仅作为思路参考。
Ci plugin
以 OpenAI-Gitlab-PR-Review、ai-code-reviewer 作为思路参考,在 ci/cd 流程拿 diff 数据进行 AI 分析。
经过改造后,流程如下:
私有部署开源模型
目前开源模型里面代码能力较强的为 deepseek-v3。
部署方式 WIP
Gitlab 相关 API
获取单个 mr 详情
https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr
Diff
显示有关合并请求的信息,包括其文件和更改。
https://docs.gitlab.com/ee/api/merge_requests.html#get-single-merge-request-changes
在返回结构中找到 changes 属性。
Diff 本应是下面这个接口,但是公司部署的版本调不通 🤔
https://docs.gitlab.com/ee/api/merge_requests.html#list-merge-request-diffs
评论
获取该 mr 的所有评论
https://docs.gitlab.com/ee/api/notes.html#list-all-merge-request-notes
和 diff 搭配使用,可以实现对 diff 的增量处理:
- 判断 diff 是否已有评论:diff 和 notes 都有 position ,通过其中的 old_path 和 new_path 校对一下
- 判断 diff 的评论是否关闭:notes 接口 resolved_by 不为 bull 时,即被关闭
参考资料
- https://github.com/Gijela/CR-Mentor
- https://github.com/nfacha/OpenAI-Gitlab-PR-Review
- https://gitlab.com/groups/gitlab-org/-/epics/13008
- https://github.com/buxuku/ai-code-reviewer
Prompts
Ai code review
cr-mentor