Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

114 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

视频地址

bilibili.com/video/BV1xpVQ6xERh/?spm_id_from=333.1387.upload.video_card.click

Code Review Agent

Code Review Agent 是一个代码审查场景的 AI 辅助审查工具。它可以拉取 Pull Request (自动或手动)或指定分支差异,结合依赖关系、静态扫描、团队规则和项目规则生成结构化审查结果,并在 Web 控制台中展示风险、证据、上下文和后续追问。

1. 这是给谁用、解决什么问题?

给谁用?

只要你想用,谁都可以用。主要是给开发者使用。

它解决的核心问题是:传统代码审查高度依赖人工经验,容易遗漏跨文件影响、重复审查相同代码、静态扫描结果缺少上下文判断,且审查结论难以沉淀成团队规则。Code Review Agent 通过“Git diff + 依赖分析 + 静态扫描 + AI map-reduce + 规则/偏好沉淀”的组合,把审查过程自动化、结构化、可追踪。

2. 主要功能

功能 解决的问题
手动发起审查 支持在控制台输入仓库、baseRef、headRef 和可选访问 token,适合本地验证、非 webhook 场景或临时审查。
GitHub PR Webhook PR opened、synchronize、reopened、ready_for_review 时自动触发审查,减少人工操作。
GitHub OAuth 和 Webhook 注册 支持绑定代码托管账号,并为仓库注册 webhook,降低接入成本。
Git 差异采集 自动 clone 仓库、解析 base/head commit、获取 changed files 和 unified diff,为后续分析提供准确输入。
依赖图和影响面分析 根据源码 import/export 关系推断受影响文件,避免只看直接变更文件。
分块审查 Chunk Planner 将变更按文件、依赖和 diff 拆成审查单元,控制上下文规模,并支持并发 AI 审查。
静态扫描 内置 ESLint 扫描,并可接入 Sonar 报告或命令,先用确定性规则发现基础问题。
AI Map-Reduce 审查 Map 阶段逐块审查,Reduce 阶段汇总全局变更、影响范围、风险计数和测试建议。
增量复用 对 fingerprint 未变化的 chunk 复用上次审查结果,减少重复调用模型和等待时间。
团队规则和项目规则 将团队约定、项目特殊规范注入审查 prompt,让 AI 审查更贴近本团队上下文。
忽略偏好 用户可忽略某类 rule 或 tag,后续审查自动过滤相同偏好,降低噪音。
问题追问 对单个 finding 继续提问,结合 chunk、diff、上下文和历史问答生成解释。
Web 控制台 展示审查列表、结构化摘要、文件树、diff、finding、追问、忽略偏好、规则和集成配置。
MySQL 持久化 可选择将审查结果、规则、连接信息和追问历史落库;未配置数据库时使用内存存储。

3. 技术选型和方案取舍

Monorepo + npm workspaces

项目采用 npm workspaces 管理 apps/apiapps/webpackages/shared。这样可以让前后端共享类型定义,同时保持 API、Web 和共享包的边界清晰。

TypeScript

前后端和共享模型都使用 TypeScript,适合审查结果、finding、chunk、规则、OAuth 等结构化数据较多的场景。类型定义集中在 packages/shared,能减少接口漂移。

Fastify

后端使用 Fastify 提供 API、Webhook、OAuth callback 和健康检查。Fastify 启动快、插件模型简单、适合这种轻量 API 服务。

Vue 3 + Vite

前端使用 Vue 3 和 Vite。Vite 提供快速本地开发体验,Vue 组合式 API 适合将审查控制台中的状态、筛选、追问、规则管理等交互拆到 composable 中。

Zod

接口输入使用 Zod 做运行时校验,避免 webhook payload、手动审查请求、OAuth callback 等外部输入直接进入业务逻辑。

AI Map-Reduce

一次 PR 可能包含很多文件,直接把完整 diff 发给模型会遇到上下文长度、成本和稳定性问题。因此这里采用 Map-Reduce:

  • Map:按 chunk 并发审查,聚焦局部 diff、上下文和静态扫描结果。
  • Reduce:汇总所有 chunk 和 findings,生成全局摘要、影响范围和风险计数。

静态扫描 + AI 裁决

纯 AI 审查容易产生幻觉,纯静态扫描又缺少业务上下文。当前方案先运行 ESLint/Sonar,再将静态结果作为 AI 输入;最终 finding 标记来源,如 aistatic-ai-adjudicatedlocal-adjudicator,便于判断可信度。

MySQL 可选持久化

未配置 DATABASE_URL 时使用内存仓储,方便本地快速启动;配置 MySQL 后使用正式持久化,适合长期运行和 webhook 场景。

4. 本地运行和环境变量配置

前置依赖

  • Node.js 20+,建议使用当前 LTS。
  • npm。
  • Git 命令行。
  • 可选:MySQL 8+。
  • 可选:Sonar Scanner 或能产出 Sonar issues JSON 的工具。

安装依赖

npm install

配置环境变量

复制 API 环境变量模板:

cp apps/api/.env.example apps/api/.env

常用配置如下:

变量 说明
PORT API 端口,默认 3001
DASHSCOPE_API_KEY DashScope API Key;不配置时会退化为本地裁决/静态扫描结果,AI 能力不可用。【sk-c7d8993a9d17412aa19c11d5bb1a24e6(这是我都aliyun API KEY额度9元)】
DASHSCOPE_BASE_URL DashScope 兼容模式地址,默认 https://dashscope.aliyuncs.com/compatible-mode/v1
MAP_MODEL Map 阶段模型,默认 qwen-plus
MAP_DEEP_MODEL 大上下文或复杂变更时使用的 Map 模型,默认 qwen-max
MAP_DEEP_MODEL_CONTEXT_BYTES 触发 deep model 的上下文字节阈值,默认 120000
MAP_DEEP_MODEL_CHANGED_FILES 触发 deep model 的变更文件数阈值,默认 8
MAP_CONCURRENCY Map 阶段并发数,默认 4
MODEL_REQUEST_TIMEOUT_MS 模型请求超时时间,默认 60000
REDUCE_MODEL Reduce 阶段模型,默认 qwen-max
DATABASE_URL MySQL 连接串;不配置时使用内存存储。(示例:mysql://root:123456@192.168.111.111:3306/code_review_agent)【SQL文件在apps\api\schema.sql】
CONSOLE_BASE_URL Web 控制台地址,默认本地开发通常为 http://127.0.0.1:5173
API_BASE_URL API 对外地址,webhook 注册时会用到。
OAUTH_STATE_SECRET OAuth state 签名密钥。
GITHUB_OAUTH_CLIENT_ID / GITHUB_OAUTH_CLIENT_SECRET GitHub OAuth App 配置。
GITHUB_WEBHOOK_SECRET GitHub webhook 签名校验密钥。
GITHUB_API_TOKEN 读取 PR metadata 或注册 webhook 时使用的 GitHub token。
SONAR_SCANNER_COMMAND 可选,执行 Sonar 扫描的命令。
SONAR_ISSUES_REPORT_PATH 可选,Sonar issues JSON 报告路径。
GIT_COMMAND_TIMEOUT_MS Git/Sonar 命令超时时间,默认 45000
GIT_COMMAND_MAX_BUFFER Git/Sonar 命令输出 buffer,默认 10485760

启动服务

分别启动 API 和 Web:

npm run dev:api
npm run dev:web

或使用根目录脚本同时启动:

npm run dev

默认地址:

  • API: http://127.0.0.1:3001
  • Web: http://127.0.0.1:5173

构建和测试

npm run build
npm test

5. 原来的痛点

  • 审查成本高:Reviewer 需要手动打开 diff、理解上下文、定位风险,耗时且受经验影响大。
  • 只看变更文件不够:很多问题来自调用链、依赖关系和间接受影响文件,人工审查容易漏掉。
  • 静态扫描噪音多:ESLint/Sonar 能找到基础问题,但无法判断业务影响、是否命中新增代码、是否值得阻塞合并。
  • 重复审查浪费时间:PR 多次提交后,未变化的代码会被反复审查。
  • 团队规范难沉淀:约定常散落在文档、口头经验或 reviewer 习惯里,难以稳定注入每次审查。
  • 审查结论难追踪:人工评论缺少统一结构,后续追问、忽略偏好和历史复用不容易管理。

6. 核心流程

  1. 触发审查:通过手动表单、API 或 GitHub PR webhook 创建审查任务。
  2. 创建记录:后端生成 queued review,并查找同一 PR 的上一次完成审查,用于增量复用。
  3. 拉取仓库:克隆目标仓库,解析 base/head ref 对应的 commit SHA。
  4. 计算差异:获取 changed files 和 unified diff。
  5. 构建依赖图:分析源码依赖关系,推断 impacted files 和 related files。
  6. 拆分审查单元:按变更文件、依赖关系和 diff 创建 chunks,并附加代码上下文。
  7. 增量复用判断:对 fingerprint 未变化的 chunk 复用上次结果,只重新审查变化部分。
  8. 运行静态扫描:对待审查 chunk 执行 ESLint,并可合并 Sonar findings。
  9. 加载规则和偏好:读取团队规则、项目规则和用户忽略偏好。
  10. AI Map 审查:并发审查各 chunk,生成结构化 findings。
  11. AI Reduce 汇总:汇总 chunk、findings 和风险计数,生成全局摘要。
  12. 保存结果并通知:持久化 review、chunks、findings,必要时向平台发送 queued/completed/failed 通知。
  13. 控制台查看和追问:前端展示结果,支持筛选风险、查看 diff、忽略 finding 和追问。

7. 第三方工具、库和框架

后端

  • fastify:HTTP API 服务。
  • @fastify/cors:跨域配置。
  • dotenv:加载环境变量。
  • zod:请求、配置和外部报告的运行时校验。
  • mysql2:MySQL 持久化。
  • eslint:内置静态扫描。
  • @typescript-eslint/parser:支持 TypeScript/TSX 语法扫描。
  • ts-morph:构建源码依赖关系。
  • tsx:本地开发时运行 TypeScript。
  • vitest:测试框架。

前端

  • vue:Web 控制台框架。
  • vite:前端开发服务器和构建工具。
  • vue-tsc:Vue TypeScript 类型检查。
  • lucide-vue-next:图标库。
  • markdown-it:渲染 AI 返回的 Markdown 内容。
  • dompurify:清洗 Markdown HTML,降低 XSS 风险。
  • vitest:前端单元测试。

外部服务和命令

  • Git:clone、diff、commit SHA 解析。
  • GitHub:OAuth、Pull Request metadata、Webhook。
  • DashScope:AI 审查模型服务。
  • Sonar/SonarQube:可选静态扫描输入。
  • MySQL:可选持久化存储。

8. 当前限制和后续计划

当前限制

  • 代码托管平台目前主要面向 GitHub,其他平台还没有完整接入。
  • AI 模型客户端当前面向 DashScope 兼容模式,暂未抽象成多供应商配置。
  • 依赖图分析主要适合 JavaScript/TypeScript 项目,其他语言需要扩展解析器。
  • Sonar 集成依赖外部命令或报告路径,项目本身不负责 Sonar 服务配置。
  • 未配置 MySQL 时使用内存存储,重启后审查记录、规则和偏好会丢失。
  • Webhook 场景需要 API 有公网可访问地址,本地开发通常需要 ngrok、内网穿透或反向代理。
  • 当前源码中存在部分中文字符串编码异常,可能影响界面文案和错误信息展示,需要后续统一修复编码。

后续计划

  • 支持更多代码托管平台,如 GitLab、Gitee。
  • 抽象模型供应商
  • 扩展多语言依赖图和静态扫描能力。
  • 增加审查任务队列、重试、超时恢复和更完整的运行状态追踪。
  • 支持直接回写 PR review comments 或 check run 状态。
  • 增加组织级规则模板、规则版本管理和审查效果统计。
  • 优化前端文案编码、空状态、失败恢复和大 diff 性能。
  • 编辑器插件
  • 通过编辑器插件一键替换建议代码
  • 通过编辑器插件一键生成总结

About

760-5-29-x-engineer

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages