基于大模型的自动化代码审查工具:让 AI 成为你的 Code Review 助手

127 阅读10分钟

🚀 基于大模型的自动化代码审查工具:让 AI 成为你的 Code Review 助手

还在为代码审查效率低而烦恼?还在为团队成员代码质量参差不齐而头疼?今天给大家分享一个基于大模型的自动化代码审查工具,支持 GitLab、GitHub、Gitea 三大平台,让 AI 帮你做 Code Review!

ai-code.jpg

📖 项目背景

在软件开发过程中,Code Review 是保证代码质量的重要环节。然而,传统的 Code Review 存在以下痛点:

  • 效率低下:人工审查需要花费大量时间,影响开发进度
  • 标准不统一:不同审查者的标准不一致,审查质量参差不齐
  • 容易遗漏:人工审查容易忽略一些潜在的安全隐患和性能问题
  • 反馈不及时:审查结果反馈延迟,影响开发节奏

为了解决这些问题,我开发了一个基于大模型的自动化代码审查工具,它能够:

自动触发:通过 Webhook 自动监听代码提交和合并请求
智能审查:利用大模型对代码进行多维度分析
实时反馈:审查结果自动回写到代码平台和 IM 工具
数据可视化:提供 Dashboard 展示审查统计和趋势

✨ 核心功能

1. 多模型灵活切换

项目支持多种大模型供应商,可以根据需求自由切换:

  • DeepSeek:性价比高,适合国内用户
  • OpenAI:GPT 系列模型,审查质量高
  • 通义千问:阿里云大模型,稳定可靠

只需修改环境变量即可在不同模型间切换,无需修改代码。

2. 多平台全面支持

一套系统,支持三大主流代码托管平台:

平台支持事件审查结果展示方式
GitLabMerge Request、PushMR 评论、Commit 评论
GitHubPull Request、PushPR 评论、Commit 评论
GiteaPull Request、PushPR 评论、Issue 模式(推荐)

3. 智能消息推送

审查结果可以自动推送到多种 IM 工具:

  • 钉钉:支持 Markdown 格式,展示详细审查报告
  • 企业微信:实时通知,及时响应
  • 飞书:美观的卡片式消息展示

4. 多种审查风格

为了让 Code Review 更有趣,项目支持多种审查风格:

风格特点适用场景
🤵 专业型严谨细致、正式专业正式项目、团队规范
😈 毒舌型毒舌吐槽、直击要害内部项目、轻松氛围
🌸 绅士型温柔委婉、如沐春风新人培养、鼓励为主
🤪 幽默型搞笑风趣、快乐改码活跃团队氛围

5. 智能语言检测

系统会自动检测代码的主要编程语言,并选择相应的专业审查提示词:

  • Python:重点关注 PEP 8 规范、类型提示、异常处理
  • JavaScript/TypeScript:关注 ES6+ 特性、类型安全、异步处理
  • Vue3:专门针对 Composition API、性能优化、TypeScript 集成
  • Java:关注设计模式、异常处理、线程安全

6. 数据可视化 Dashboard

提供完整的 Dashboard 展示审查数据:

  • 📊 项目统计:各项目的提交次数、平均分数
  • 👥 成员分析:每个成员的代码贡献和质量评分
  • 📈 趋势分析:代码质量随时间的变化趋势
  • 🔍 多维度筛选:支持按日期、用户、项目筛选

🏗️ 流程图

flowchart TD
    A["🎯 GitLab/GitHub/Gitea"] --> B["🌐 Webhook API Call"]
    B --> C{"📂 平台识别<br/>Platform = ?"}
    C --> C1{"📂 事件类型<br/>Event = ?"}
    
    %% Merge Request 流程
    C -- "merge request" --> D["📌 处理合并请求<br/>handle_merge_request"]
    D --> E{"⚙️ 操作类型?<br/>action = open / update?"}
    E -- "是" --> F["🧾 获取代码变更<br/>obtain code changes"]
    F --> G["🤖 大模型 Review<br/>LLM review"]
    G --> H1["📤 发送代码审核 IM<br/>Send CR IM message"]
    
    %% Push 流程
    C -- "push" --> I["📌 处理 Push 请求<br/>handle_push_request"]
    I --> J["📝 记录日志<br/>log push"]
    J --> K{"🛠️ 启用 Push Review?<br/>push review enabled?"}
    K -- "否" --> L["📤 发送 IM 通知<br/>Send IM notice"]
    K -- "是" --> M["🤖 大模型 Review<br/>LLM review"]
    M --> H2["📤 发送代码审核 IM<br/>Send CR IM message"]

    %% 定时任务流程
    Z["⏰ 定时任务触发<br/>Scheduled Timer"] --> P["📂 读取日志<br/>Read logs"]
    P --> Q["🧠 大模型总结<br/>LLM summary"]
    Q --> H3["📤 发送 IM 日报<br/>Send IM report"]

    %% 虚线提示:日志来源
    J -.-> P

    %% 样式统一应用,避免遗漏
    style A fill:#2E86C1,stroke:#1B4F72,stroke-width:3px,color:#FFFFFF,font-weight:bold,font-size:18px
    style B fill:#117A65,stroke:#0B5345,stroke-width:3px,color:#FFFFFF,font-weight:bold,font-size:16px
    style C fill:#D68910,stroke:#9A6400,stroke-width:3px,color:#FFFFFF,font-weight:bold,font-size:16px

    style D fill:#85C1E9,stroke:#2874A6,stroke-width:2px,color:#1B2631,font-weight:bold,font-size:14px
    style E fill:#85C1E9,stroke:#2874A6,stroke-width:2px,color:#1B2631,font-weight:bold,font-size:14px
    style F fill:#85C1E9,stroke:#2874A6,stroke-width:2px,color:#1B2631,font-weight:bold,font-size:14px
    style G fill:#85C1E9,stroke:#2874A6,stroke-width:2px,color:#1B2631,font-weight:bold,font-size:14px

    style I fill:#F7DC6F,stroke:#B7950B,stroke-width:2px,color:#5D4037,font-weight:bold,font-size:14px
    style J fill:#F7DC6F,stroke:#B7950B,stroke-width:2px,color:#5D4037,font-weight:bold,font-size:14px
    style K fill:#F7DC6F,stroke:#B7950B,stroke-width:2px,color:#5D4037,font-weight:bold,font-size:14px
    style M fill:#F7DC6F,stroke:#B7950B,stroke-width:2px,color:#5D4037,font-weight:bold,font-size:14px

    style P fill:#AED6F1,stroke:#2980B9,stroke-width:2px,color:#1B2631,font-weight:bold,font-size:14px
    style Q fill:#AED6F1,stroke:#2980B9,stroke-width:2px,color:#1B2631,font-weight:bold,font-size:14px

    style H1 fill:#27AE60,stroke:#145A32,stroke-width:3px,color:#ECF0F1,font-weight:bold,font-size:15px
    style H2 fill:#27AE60,stroke:#145A32,stroke-width:3px,color:#ECF0F1,font-weight:bold,font-size:15px
    style H3 fill:#27AE60,stroke:#145A32,stroke-width:3px,color:#ECF0F1,font-weight:bold,font-size:15px

    style L fill:#E74C3C,stroke:#922B21,stroke-width:2px,color:#FFFFFF,font-weight:bold,font-size:14px

    style Z fill:#BB8FCE,stroke:#6C3483,stroke-width:3px,color:#FFFFFF,font-weight:bold,font-size:16px

系统采用事件驱动的架构设计,通过 Webhook 接收代码平台的推送事件,使用消息队列异步处理审查任务,确保不会阻塞代码平台的响应。

核心流程

  1. Webhook 触发:代码平台发送 Webhook 请求到系统 API
  2. 事件识别:系统识别平台类型(GitLab/GitHub/Gitea)和事件类型(MR/PR/Push)
  3. 异步处理:将任务放入 Redis 队列,立即返回响应
  4. 代码获取:通过平台 API 获取代码变更(diff)
  5. 智能审查:调用大模型 API 进行代码审查
  6. 结果回写:将审查结果以评论形式回写到代码平台
  7. 消息推送:同时推送审查结果到 IM 工具

技术栈

  • 后端框架:Flask(轻量级,易于部署)
  • 任务队列:Redis + RQ(异步处理,提高响应速度)
  • 数据库:SQLite(轻量级,无需额外配置)
  • 前端:HTML + TailwindCSS + JavaScript(现代化 UI)
  • 大模型:支持 OpenAI、DeepSeek、通义千问

系统设计简洁高效,核心功能通过 Flask 提供 RESTful API,使用 Redis 队列处理异步任务,确保高并发场景下的稳定性。

🎯 使用效果

Push 推送示例

当开发者推送代码时,系统会自动发送审查结果到 IM 工具:

push_example.png

代码审查摘要

审查结果会以清晰的结构展示,包括总体评分、优点总结、改进建议等:

abstract.png

GitLab 评论示例

在 GitLab 的 Merge Request 中,审查结果会自动添加为评论:

comment.png

Gitea 评论示例

Gitea 平台支持在 Pull Request 或 Issue 中展示审查结果:

gitea.png

Dashboard 数据看板

Dashboard 提供了丰富的数据可视化功能,包括项目统计、成员分析、趋势分析等:

dashboard.png

Dashboard 主要功能:

  • 审查记录列表:展示所有审查记录,支持筛选和搜索
  • 项目统计图表:各项目的提交次数和平均分数
  • 成员贡献分析:每个成员的代码行数和质量评分
  • 趋势分析:代码质量随时间的变化

🚀 快速开始

1. 环境准备

克隆项目并安装依赖,项目支持 Python 3.10+ 版本。

2. 配置环境变量

创建配置文件,设置大模型 API 密钥、代码平台访问令牌、消息推送配置等。系统提供了详细的配置示例文件,只需按照说明填写即可。

主要配置项包括:

  • 大模型供应商选择(DeepSeek/OpenAI/通义千问)
  • 代码平台访问令牌(GitLab/GitHub/Gitea)
  • IM 工具推送配置(钉钉/企业微信/飞书)
  • 审查风格和文件类型过滤

3. 启动服务

启动 API 服务接收 Webhook 请求,启动 Dashboard 服务查看审查数据。两个服务可以独立运行,互不影响。

4. 配置 Webhook

在代码平台的项目设置中配置 Webhook,将 URL 指向系统的 API 服务地址,选择需要监听的事件类型(Push 和 Merge Request/Pull Request)。

GitLab Webhook 配置

在项目设置中配置 Webhook URL,选择触发事件类型,系统会自动识别并处理。

GitHub Webhook 配置

在项目设置中添加 Webhook,配置 URL 和事件类型,系统支持标准的 GitHub Webhook 格式。

Gitea Webhook 配置

Gitea 的配置方式与 GitHub 类似,系统会自动识别平台类型并采用相应的处理逻辑。

5. Docker 部署(推荐)

使用 Docker Compose 可以一键部署整个系统,包括 API 服务、Dashboard 服务和 Redis 队列服务,无需手动配置环境。

💡 核心特性详解

1. 智能代码审查

系统会对代码进行多维度分析:

  • 代码质量:命名规范、代码结构、注释质量、代码重复
  • 安全性:输入验证、SQL 注入、XSS 防护、权限控制
  • 性能优化:算法效率、资源管理、缓存使用、数据库查询
  • 错误处理:异常处理、边界条件、错误信息、日志记录
  • 可维护性:模块化、可测试性、可扩展性、文档完整性

2. 自动生成开发日报

系统可以基于 Commit 记录自动生成开发日报,展示:

  • 每个成员的提交情况
  • 代码变更统计
  • 审查结果汇总
  • 团队整体表现

日报会定时发送到 IM 工具,让团队及时了解开发动态。

3. 专项审查功能

除了常规代码审查,系统还支持专项审查:

  • 目录结构审查:检查项目目录组织是否合理
  • 数据库审查:审查 MySQL 表结构设计、索引优化
  • 分支策略审查:检查分支命名和合并策略

🎨 项目亮点

  1. 开箱即用:配置简单,5 分钟即可完成部署
  2. 高度可配置:支持多种模型、多种风格、多种推送方式
  3. 异步处理:使用队列异步处理,不影响代码平台响应速度
  4. 多平台支持:一套系统支持三大主流代码托管平台
  5. 数据可视化:提供完整的 Dashboard 展示审查数据
  6. 智能检测:自动识别编程语言,使用专业审查提示词

📊 实际应用场景

场景一:团队代码质量提升

通过自动化 Code Review,团队可以:

  • 统一代码规范,提升代码质量
  • 及时发现潜在问题,减少线上 Bug
  • 通过数据统计,了解团队代码质量趋势

场景二:新人培养

对于新加入团队的成员:

  • 通过 AI 审查学习代码规范
  • 及时获得反馈,快速成长
  • 减少老成员的审查负担

场景三:开源项目维护

对于开源项目:

  • 自动审查 PR,提升合并效率
  • 保证代码质量,维护项目声誉
  • 减少维护者的审查工作量

🔧 高级配置

自定义审查提示词

系统支持自定义审查提示词模板,可以根据团队的具体需求调整审查标准和重点。提示词模板采用 YAML 格式,结构清晰,易于维护。

审查维度包括:

  • 功能实现的正确性与健壮性(40分)
  • 安全性与潜在风险(30分)
  • 是否符合最佳实践(20分)
  • 性能与资源利用效率(5分)
  • Commits 信息的清晰性与准确性(5分)

审查风格切换

系统支持四种审查风格,可以通过环境变量轻松切换:

  • 专业严谨:使用标准的工程术语,保持专业严谨
  • 毒舌吐槽:大胆使用讽刺性语言,但要确保技术指正准确
  • 温和建议:多用"建议"、"可以考虑"等温和措辞
  • 幽默风趣:在技术点评中加入适当幽默元素和 Emoji

文件类型过滤

可以配置需要审查的文件类型,系统只会对指定类型的文件进行审查,避免对二进制文件、配置文件等不必要的审查,提高效率。

📈 未来规划

  • 支持更多大模型(Claude、Gemini 等)
  • 支持更多代码托管平台(Bitbucket、Gitee 等)
  • 支持自定义审查规则
  • 支持审查结果导出和报告生成
  • 支持团队协作和审查流程管理

🤝 贡献与反馈

项目已开源,欢迎 Star 和 Fork!

📝 总结

这个项目通过结合大模型和代码审查,实现了自动化、智能化的 Code Review,大大提升了开发效率和代码质量。无论是个人项目还是团队协作,都能从中受益。

核心价值:

  1. 提升效率:自动化审查,节省人工时间
  2. 保证质量:统一标准,及时发现问题
  3. 数据驱动:通过 Dashboard 了解团队代码质量
  4. 易于集成:支持主流平台,配置简单

如果你也在为 Code Review 效率低而烦恼,不妨试试这个工具,让 AI 成为你的 Code Review 助手!


如果觉得项目有用,欢迎 Star ⭐ 支持一下!

相关链接: