# ai-code-review **Repository Path**: whatandwhy_admin/ai-code-review ## Basic Information - **Project Name**: ai-code-review - **Description**: 基于 GitLab Webhook + DeepSeek AI 的自动代码评审服务。当代码推送到指定分支时,自动获取 diff 并调用 DeepSeek 进行智能评审,评审结果以 commit 评论的形式回写到 GitLab。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-25 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI Code Review 基于 GitLab Webhook + DeepSeek AI 的自动代码评审服务。当代码推送到指定分支时,自动获取 diff 并调用 DeepSeek 进行智能评审,评审结果以 commit 评论的形式回写到 GitLab。 ## 工作流程 ``` GitLab Push 事件 │ ▼ Webhook 接收 ──► 分支过滤 ──► 获取 Diff │ ▼ 发表评审评论 ◄── DeepSeek AI 评审 ``` 1. GitLab 推送代码时触发 Webhook,发送 POST 请求到本服务 2. 服务校验 Webhook Secret,过滤非监听分支的推送 3. 通过 GitLab API 获取 `before..after` 之间的代码 diff 4. 将 diff 发送给 DeepSeek AI 进行评审 5. 将评审报告以 commit 评论的形式回写到 GitLab ## 技术栈 - **Java 21** + **Spring Boot 3.2** - **OkHttp** - HTTP 客户端 - **Jackson** - JSON 序列化 - **Lombok** - 简化代码 - **DeepSeek API** - AI 代码评审 ## 项目结构 ``` src/main/java/com/codereview/ ├── CodeReviewApplication.java # 启动类 ├── config/ │ ├── GitLabConfig.java # GitLab 连接配置 │ └── DeepSeekConfig.java # DeepSeek API 配置 ├── controller/ │ └── WebhookController.java # Webhook 入口 ├── model/ │ ├── WebhookPayload.java # Push 事件模型 │ ├── DiffEntry.java # Diff 文件模型 │ └── DeepSeekModel.java # AI 请求/响应模型 └── service/ ├── GitLabService.java # GitLab API 交互 ├── DeepSeekService.java # DeepSeek AI 调用 └── CodeReviewService.java # 评审编排服务 src/main/resources/ ├── application.yml # 应用配置 └── prompts/ └── review-prompt.md # AI 评审提示词 ``` ## 配置说明 编辑 `src/main/resources/application.yml`: ```yaml server: port: 8080 # GitLab 配置 gitlab: url: https://your-gitlab.com # GitLab 地址 token: your-gitlab-token # Personal Access Token(需 api 权限) webhook-secret: your-webhook-secret # Webhook Secret Token branches: # 监听分支列表 - dev - main # DeepSeek AI 配置 deepseek: api-url: https://api.deepseek.com # DeepSeek API 地址 api-key: your-api-key # API Key model: deepseek-v4-flash # 模型名称 prompt-file: prompts/review-prompt.md # 提示词文件路径 max-tokens: 4096 temperature: 0.3 ``` | 配置项 | 说明 | |---|---| | `gitlab.url` | GitLab 实例地址(支持自建 GitLab) | | `gitlab.token` | [Personal Access Token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html),需要 `api` 权限 | | `gitlab.webhook-secret` | Webhook 验证密钥,未配置时跳过验证 | | `gitlab.branches` | 监听分支列表,为空时监听所有分支 | | `deepseek.api-key` | [DeepSeek API Key](https://platform.deepseek.com/) | | `deepseek.model` | 使用的模型,如 `deepseek-chat`、`deepseek-v4-flash` | | `deepseek.prompt-file` | 提示词文件路径(classpath 下),可自定义评审标准 | ## 快速开始 ### 前置条件 - JDK 21+ - Maven 3.8+ - GitLab Personal Access Token(`api` 权限) - DeepSeek API Key ### 构建 & 运行 ```bash # 构建 mvn clean package -DskipTests # 运行 java -jar target/ai-code-review-1.0.0.jar # 或直接运行 mvn spring-boot:run ``` ### 配置 GitLab Webhook 1. 进入 GitLab 项目 → **Settings** → **Webhooks** 2. 填写配置: - **URL**: `http://your-server:8080/webhook/gitlab` - **Secret token**: 与 `application.yml` 中 `gitlab.webhook-secret` 一致 - **Trigger**: 勾选 **Push events** 3. 点击 **Add webhook** ### 健康检查 ```bash curl http://localhost:8080/webhook/health ``` ## 自定义提示词 编辑 `src/main/resources/prompts/review-prompt.md` 即可自定义评审标准和输出格式,无需修改代码。 ## 评审维度 默认从以下维度进行评审: - 🐛 潜在 Bug 和逻辑错误 - 🔒 安全漏洞 - ⚡ 性能问题 - 📐 代码规范和可读性 - 🏗️ 架构设计合理性 - 🧪 测试覆盖情况