实现一个AI Code Review项目,欢迎试用

360影视 动漫周边 2025-09-11 12:49 2

摘要:开发中由于代码 Review 占用时间太长,一些潜在的 Bug 没有办法发现,所以开发了代码 Review 工具,现在分享给你:github.com/monto-fe/co… 欢迎。

开发中由于代码 Review 占用时间太长,一些潜在的 Bug 没有办法发现,所以开发了代码 Review 工具,现在分享给你:github.com/monto-fe/co… 欢迎。

如果你使用 gitlab 也可以进行私有化部署,帮助你发现潜在的代码 Bug。

项目需要达到两个目的:

能尽可能的发现BUG能改动最少,方便快速安装部署

在实际使用的过程中发现,用户可能录入不止一个Token。因此为了在用户提交merge时对应到具体的Token,需要提前检索对应的项目进行匹配

private async fetchProjectIds(token: string, gitlabAPI: string): Promise { const projectIds: string = ; let page = 1; const perPage = 100;while (true) { const res = await axios.get(`${gitlabAPI}/v4/projects`, { headers: { 'PRIVATE-TOKEN': token }, params: { per_page: perPage, page }, }); if (Array.isArray(res.data) && res.data.length) { const ids = res.data.map((proj: any) => String(proj.id)); projectIds.push(...ids); if (res.data.length

Gitlab 接口每次只能拉取100条,所以需要循环拉取

当前 AI 模型的能力不同,我们目前支持的公司内部的 AI,需要提供更多的 AI 选择,这里通过数据库配置,预留了当前能力

public async loadConfig { const configRow = await DB.AIConfig.findOne({ where: { is_active: true }, order: [['update_time', 'DESC']] }); if (!configRow) { console.warn('No active AI config found, using fallback or skipping initialization.'); return; } this.config = { name: configRow.name, apiKey: configRow.api_key, apiUrl: configRow.api_url, model: configRow.model }; }

我们主要对提交 merge 的 diff 信息进行审核,这一步通过接口读取。

const response = await axios.get(`${gitlabAPI}/v4/projects/${projectId}/merge_requests/${mergeRequestId}/changes`, { headers: { 'PRIVATE-TOKEN': gitlabToken }});

这里内置提示词进行检测,后续需要调整为自定义配置,方便优化提示词

请检查以下代码差异(diff),确保其符合以下原则: ${rule} 要求基于描述信息和逻辑判断分析出diff中疑似Bug的地方,用Markdown格式输出(若没有可输出:未发现Bug): 输出格式: - 不符合的代码行号 | 违反的原则 | 修改建议 代码信息: 合并请求标题:${title} 描述: ${description || '无描述'} 提交人: ${author_name} 查看合并请求: ${web_url} 代码差异:${diff.map((change:any) => `文件: ${change.new_path}\n差异:\n${change.diff}`).join('\n')} 请按照上述要求进行检查并输出结果。 `

将生成的检测信息作为 commit 的评论信息推送到 gitlab 仓库

const response = await axios.post(`${gitlabAPI}/v4/projects/${projectId}/merge_requests/${mergeRequestId}/notes`, { body: comment, }, { headers: { 'PRIVATE-TOKEN': gitlabToken, 'Content-Type': 'application/json', } });.├── frontend/│ ├── src/│ ├── public/│ ├── node_modules/│ ├── .husky/│ └── [配置文件]│├── backend/│ ├── src/│ ├── swagger/│ ├── node_modules/│ ├── .husky/│ └── [配置文件]│├── mysql/├── images/├── .env├── docker-compose.yml├── docker-compose.mysql.yml└── docker-compose.mariadb.yml

为了实现快速部署,对项目中的变量进行了抽离,详细配置如下:

# 部署机器IPIP=192.168.1.1# CONSOLECONSOLE_PORT=9003# APINODE_ENV=production API_PORT=9000# 数据库支持:mysql | mariadbDB_TYPE=mysql# 使用自有数据库,这里改为您对应的数据库信息DB_HOST=192.168.1.1 DB_PORT=3306 DB_USER=root DB_PASSWORD=mysql123456 DB_DATABASE=ucode_review

这样部署的时候只需要更新部署的 IP 地址和数据库配置,即可拉起服务。

地址: http://192.168.1.1:9003 默认账号密码:admin / 12345678

首次登录请配置以下内容:

✅ AI 模型 Key(支持主流模型)✅ GitLab Token(需具备完整权限)✅ 企业微信机器人(可选)

在对应项目中:

Settings ➜ Webhooks

✅ 如果 GitLab 支持 Group Webhook,推荐在 Group 层级统一配置。

提交 Merge Request 时将自动触发 AI 审查。

减少推送频率只针对部分情况进行检测,比如create merge和update merge的时候,其他情况不再重复推送。环境变量传参问题:通过.env文件 => docker-compose.yml => project读取。backend启动时mysql未启动问题通过设置服务延时启动来解决。

来源:墨码行者

相关推荐