# review-agent **Repository Path**: f5l5y5/review-agent ## Basic Information - **Project Name**: review-agent - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-14 - **Last Updated**: 2026-01-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GitLab MR AI Code Review 基于 NestJS 的 GitLab Merge Request AI 代码审查服务,支持自动代码审查和钉钉通知。 ## 功能特性 - **自动代码审查**:接收 GitLab Webhook 事件,自动触发 AI 代码审查 - **智能分批处理**:大型 MR 自动分批处理,避免 LLM 上下文长度限制 - 基于 token 数量智能拆分,而非简单的文件数量 - 自动计算系统提示词和 diff 内容的 token 消耗 - 并行调用 LLM,提升审查效率 - 支持自定义模型的最大 token 限制 - **智能行号映射**:自动处理 AI 标记错误,找到最近的可评论行 - **Bot 评论管理**:自动删除旧评论,避免重复评论 - **钉钉通知**:审查结果自动推送到钉钉群 ## 快速开始 ### 开发环境 ```bash # 安装依赖 pnpm install # 配置环境变量 cp .env.example .env # 编辑 .env 文件,填入相关配置 # 启动开发服务 pnpm run start:dev ``` ### 生产环境 #### 1. 本地启动 ```bash # 安装依赖 pnpm install # 配置环境变量 cp .env.example .env # 编辑 .env 文件,填入相关配置 # 构建项目 pnpm run build # 启动服务 pnpm run start:prod ``` #### 2. 使用 PM2 启动(推荐) ```bash # 确保 .env 文件已配置 cp .env.example .env # 使用启动脚本(自动构建并启动 PM2) bash scripts/start.sh # 或手动启动 pnpm run build pm2 start ecosystem.config.js ``` **PM2 常用命令**: ```bash # 查看状态 pm2 status # 查看日志 pm2 logs review-agent # 重启服务 pm2 restart review-agent # 停止服务 pm2 stop review-agent # 删除服务 pm2 delete review-agent ``` ## 环境变量 | 变量名 | 必需 | 默认值 | 说明 | |--------|------|--------|------| | `GITLAB_BASE_URL` | 是 | - | GitLab 实例地址(不含 `/api/v4`,如 `https://gitlab.com`) | | `GITLAB_TOKEN` | 否 | - | GitLab Personal Access Token(可通过 header 传递) | | `AI_SERVICE_URL` | 是 | - | AI 服务 API 地址(OpenAI 兼容格式) | | `AI_TOKEN` | 是 | - | AI 服务 API Token | | `AI_MODEL` | 否 | `gpt-4` | AI 模型名称 | | `AI_TIMEOUT` | 否 | `60000` | AI 请求超时时间(毫秒) | | `AI_TEMPERATURE` | 否 | `0.3` | AI 生成温度(0-1) | | `AI_MAX_TOKENS` | 否 | `64000` | AI 模型最大 token 限制(根据模型调整) | ### 智能分批处理说明 系统会根据 token 数量自动拆分大型 MR,避免超过 LLM 的上下文长度限制: 1. **Token 计算**:使用 `@dqbd/tiktoken` 精确计算系统提示词和 diff 内容的 token 消耗 2. **智能拆分**:当 token 数量超过 `AI_MAX_TOKENS` 时,自动按文件拆分成多个批次 3. **并行审查**:多个批次并行调用 LLM,大幅提升审查速度 4. **结果合并**:所有批次的审查结果自动合并成完整报告 5. **详细日志**:记录每批的 token 消耗和审查进度 6. **内存管理**:每次计算后自动释放编码器内存,避免内存泄漏 **Token 限制配置建议**: - GPT-4 Turbo / GPT-4.1:`AI_MAX_TOKENS=100000` - DeepSeek V3:`AI_MAX_TOKENS=64000`(默认) - Claude 3.5 Sonnet:`AI_MAX_TOKENS=200000` - 其他模型:根据官方文档设置 **示例**: - 如果系统提示词占用 2000 tokens,预留响应 2000 tokens - 可用于 diff 的 token:64000 - 2000 - 2000 = 60000 tokens - 如果 MR 的 diff 占用 150000 tokens,会自动拆分成 3 个批次并行审查 ## 项目结构 ``` src/ ├── app.module.ts # 应用模块 └── modules/ └── webhook/ ├── ai-review.service.ts # AI 审查服务 ├── config.service.ts # 配置服务 ├── gitlab.service.ts # GitLab API 服务 ├── notification.service.ts # 通知服务 ├── webhook.controller.ts # Webhook 控制器 ├── webhook.guard.ts # Webhook 守卫 ├── webhook.module.ts # Webhook 模块 └── webhook.service.ts # Webhook 服务 ``` ## API 接口 ### POST /webhook/trigger 接收 GitLab Merge Request 事件,触发代码审查。 **请求头**: - `x-push-url`: 钉钉通知 Webhook URL(可选)