智能分析 GitHub Pull Request,自动生成变更摘要、风险识别与 Review 建议,让代码评审更高效。
- PR 变更总结 — 自动理解 PR 意图,一键生成中文变更摘要
- 风险代码识别 — 按高/中/低三级标注风险文件与代码位置
- Review 建议生成 — 针对安全问题、逻辑错误、性能瓶颈给出具体修改建议
- SSE 流式响应 — AI 分析结果实时逐字输出,无需等待
- 语言感知 — 按 Go/Python/TypeScript/Rust 等语言定制审查规则
- GitHub OAuth 登录 — 登录后可分析私有仓库 PR
- 一键复制 — 每条建议一键复制到剪贴板
- Node.js 18+
- Go 1.21+
- DeepSeek API Key(获取地址)
git clone https://github.com/alan22333/PRMind.git
cd PRMindcd backend
cp .env.example .env
# 编辑 .env,填入 DEEPSEEK_API_KEY
go run cmd/server/main.gocd frontend
npm install
npm run dev- 打开 http://localhost:3000
- 粘贴 GitHub PR 链接,如
https://github.com/gin-gonic/gin/pull/1 - 点击「开始分析」,实时查看 AI 分析结果
- (可选)点击「登录 GitHub」后即可分析私有仓库 PR
- 前往 GitHub Developer Settings 注册 OAuth App
- 回调地址填写:
http://localhost:8080/api/auth/callback - 将
Client ID和Client Secret填入.env:
GITHUB_CLIENT_ID=your-client-id
GITHUB_CLIENT_SECRET=your-client-secret
JWT_SECRET=your-random-secret
FRONTEND_URL=http://localhost:3000- 自定义审查规则系统 — 业内首个支持用户自定义规则 + 大厂规范预设的 AI Review 工具。内置 Google Go、Uber Go、Airbnb JS/React、OWASP 安全审计、性能审查、空安全健壮性 6 套预设模板,可多选叠加,也可自由输入团队编码规范
- 语言感知分析 — 自动识别变更文件语言(Go/Python/TypeScript/Rust/Java/SQL),注入对应的审查规则。例如 Go 文件会检查 goroutine 泄露和 error 处理,TSX 文件会检查 XSS 和 hooks 依赖
- SSE 流式响应 — 不同于传统工具的 loading 等待,用户可实时看到 AI 的思考过程,首 token 延迟 <500ms
采用「按需获取 + 智能过滤」策略,不克隆完整仓库:
- 通过 GitHub REST API 获取 PR metadata、description、file diffs
- 自动跳过 lock/JSON/YAML/图片等非代码文件,节省 30-50% token 消耗
- 大文件 diff >8000 字符自动截断,PR description >2000 字符截断
- 保留文件级别的完整 patch 上下文,AI 可跨文件关联分析
- 风险分级 — high/medium/low 三级,颜色编码(红/黄/绿)一目了然
- 结构化输出 — 要求 AI 返回固定 JSON Schema,避免自由文本的歧义
- 降级容错 — AI 返回非法 JSON 时自动降级为原文展示,不丢失信息
- 语言规则约束 — 语言特定规则缩小审查范围,避免通用建议式的"误报"
| 场景 | 耗时 |
|---|---|
| 冷启动(GitHub API + AI 分析) | ~3-5s |
| 缓存命中 | <1ms |
| SSE 首 token | <500ms |
| 不同规则组合 | 分别缓存,互不干扰 |
Browser (React + TailwindCSS)
│
├── GET /api/analyze → JSON 结果
├── GET /api/analyze/stream → SSE 流式输出
├── GET /api/auth/login → GitHub OAuth
└── GET /api/auth/callback → JWT 签发
│
Go Backend (Gin)
│
├── GitHub API → 获取 PR 信息 + diff
├── DeepSeek API → AI 代码分析
└── Memory Cache → 1 小时 TTL
| 层级 | 技术 |
|---|---|
| 前端 | React 18, TypeScript, TailwindCSS, Vite |
| 后端 | Go, Gin, golang-jwt |
| AI | DeepSeek Chat (OpenAI 兼容接口) |
| 认证 | GitHub OAuth + JWT (HS256, 24h 过期) |
| 缓存 | 内存缓存 (TTL 1h) |
选用 DeepSeek Chat(OpenAI 兼容格式),基于三点考量:
- 成本优势 — DeepSeek 定价约为 GPT-4 的 1/50,适合高频 PR 分析场景
- 中文优化 — 对中文技术术语的理解准确度更高,中文 Review 建议更自然
- 接口兼容 — 完全兼容 OpenAI SDK,切换模型只需修改
baseURL,未来可无缝迁移到 GPT-4 或其他兼容模型
采用按需获取 + 智能过滤策略,而非全量克隆:
- 通过 GitHub REST API 直接获取 PR metadata + file diffs
- 自动跳过 lock/JSON/YML/图片等非代码文件,节省 token 消耗
- 大文件 diff 超出 8000 字符自动截断
- PR description 超出 2000 字符自动截断
- 不克隆整个仓库,避免对大型项目的资源浪费
| 策略 | 实现 |
|---|---|
| 语言感知 prompt | 按 .go/.py/.ts 等扩展名注入专属审查规则 |
| 结构化输出 | 要求 AI 返回固定 JSON schema,降低解析失败率 |
| Markdown 容错 | 自动剥离 ```json ``` 包裹层 |
| 降级处理 | AI 返回非法 JSON 时,以原始文本作为 summary,不从 diff 统计补充 |
| 风险分级 | high/medium/low 三级,红色/黄色/绿色视觉区分 |
- 内存缓存 — 相同 PR 1 小时内直接返回,冷请求 ~3s,热请求 <1ms
- SSE 流式 — 用户在看到第一个 token 后即感知"正在分析",而非等待完整响应
- 跳过大文件 — 二进制/锁文件/配置文件自动跳过,减少上下文体积
- 平台扩展 — 预留 GitLab/Bitbucket 接口适配层
- 规则插件化 — 团队可自定义 Review 规则(如命名规范、安全策略)
- 增量分析 — 仅分析 PR 新增 commits,避免重复分析
- 历史趋势 — 记录 PR 质量趋势,识别项目热点模块
- Webhook 集成 — 新 PR 自动触发分析,结果直接评论到 PR
- 对比审查 — 展示同类 PR 的 AI 建议采纳率,帮助团队改进
PRMind/
├── backend/ # Go 后端
│ ├── cmd/server/ # 入口
│ ├── internal/
│ │ ├── handler/ # HTTP handlers (pr, auth, health)
│ │ ├── service/ # 业务逻辑 (github, analyzer, auth, cache)
│ │ └── model/ # 数据模型
│ ├── pkg/openai/ # OpenAI 兼容客户端
│ └── test_e2e.sh # E2E 测试脚本
├── frontend/ # React 前端
│ └── src/
│ ├── components/ # UI 组件 (Header, PRInput, AnalysisResult)
│ └── api/ # API 模块 (pr, auth)
└── docs/ # 设计文档
cd backend
bash test_e2e.sh测试覆盖:单元测试、服务启停、URL 校验、真实 PR 分析、缓存验证、前端构建。
MIT