2026-06-18 21:53:05 +08:00
|
|
|
|
# PR-Helper
|
|
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
AI 驱动的 PR 描述生成器和代码审查工具。自托管设计,专为内部/本地使用。
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
## 功能特性
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
- **PR 描述生成** — 从交互式 Git 图形中选择提交,通过 LLM 生成结构化 PR 描述
|
|
|
|
|
|
- **AI 代码审查** — 按文件分析,严重程度评级,在差异视图中内联显示建议
|
|
|
|
|
|
- **交互式 Git 图形** — D3.js 可视化,点击选择 base/head 引用
|
|
|
|
|
|
- **差异查看器** — diff2html 驱动的分割/统一视图,支持语法高亮
|
|
|
|
|
|
- **审查笔记** — 在整体、文件或建议级别添加 Markdown 笔记
|
|
|
|
|
|
- **PDF 导出** — 生成可打印的审查报告
|
|
|
|
|
|
- **仓库缓存** — 克隆的仓库缓存,可配置过期时间
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
## 快速开始
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### Docker(推荐)
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
docker compose up --build
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
打开 http://localhost:8080。
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### 手动构建
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
要求:Go 1.22+,CGO 启用(用于 SQLite),Chromium(用于 PDF 导出)
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-06-23 22:38:43 +08:00
|
|
|
|
# 安装依赖
|
2026-06-20 00:06:17 +08:00
|
|
|
|
go mod download
|
|
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
# 构建
|
2026-06-20 00:06:17 +08:00
|
|
|
|
CGO_ENABLED=1 go build -o pr-helper .
|
|
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
# 运行
|
2026-06-20 00:06:17 +08:00
|
|
|
|
./pr-helper
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
服务器默认监听 `:8080` 端口。
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
## 配置
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### LLM 设置(必需)
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
导航到 **设置** (`/settings`) 并配置:
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
| 设置 | 说明 | 默认值 |
|
|
|
|
|
|
|------|------|--------|
|
|
|
|
|
|
| API 端点 | OpenAI 兼容 API URL | `https://api.openai.com/v1` |
|
|
|
|
|
|
| API 密钥 | 您的 API 密钥 | (空) |
|
|
|
|
|
|
| 模型 | 模型名称 | `gpt-4o` |
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
支持任何 OpenAI 兼容 API:OpenAI、Deepseek、Ollama、vLLM 等。
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### 审查设置
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
| 设置 | 说明 | 默认值 |
|
|
|
|
|
|
|------|------|--------|
|
|
|
|
|
|
| Top-N 文件数 | 每次审查分析的最大文件数 (0 = 全部) | `20` |
|
|
|
|
|
|
| 并发数 | 并行文件分析数 | `5` |
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### 缓存设置
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
| 设置 | 说明 | 默认值 |
|
|
|
|
|
|
|------|------|--------|
|
|
|
|
|
|
| 最大保留天数 | 自动清理阈值 | `7` |
|
|
|
|
|
|
| 最大缓存大小 (MB) | 总缓存大小限制 | `5000` |
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### 环境变量
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
| 变量 | 说明 | 默认值 |
|
|
|
|
|
|
|------|------|--------|
|
|
|
|
|
|
| `PORT` | 服务器端口 | `8080` |
|
|
|
|
|
|
| `GIN_MODE` | Gin 模式 (`debug`/`release`) | `debug` |
|
|
|
|
|
|
| `DATA_DIR` | 数据目录路径 | `./data` |
|
|
|
|
|
|
| `MYSQL_HOST` | MySQL 主机地址 | `127.0.0.1` |
|
|
|
|
|
|
| `MYSQL_PORT` | MySQL 端口 | `3306` |
|
|
|
|
|
|
| `MYSQL_USER` | MySQL 用户名 | `root` |
|
|
|
|
|
|
| `MYSQL_PASSWORD` | MySQL 密码 | (空) |
|
|
|
|
|
|
| `MYSQL_DATABASE` | MySQL 数据库名 | `pr_helper` |
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
## 使用方法
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
1. **克隆仓库** — 在首页粘贴 Git URL,可选提供私有仓库的认证信息
|
|
|
|
|
|
2. **浏览图形** — 在交互式 D3.js 图形中查看分支、标签和提交历史
|
|
|
|
|
|
3. **选择引用** — 点击图形中的节点或使用下拉选择器选择 base 和 head
|
|
|
|
|
|
4. **生成 PR 描述** — 导航到"生成",选择引用,点击"生成"
|
|
|
|
|
|
5. **运行代码审查** — 导航到"审查",配置 Top-N 和并发数,点击"开始审查"
|
|
|
|
|
|
6. **添加笔记** — 点击任何建议或整体部分添加 Markdown 笔记
|
|
|
|
|
|
7. **导出 PDF** — 点击"导出 PDF"下载格式化报告
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
## API 路由
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
### 页面
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
| 方法 | 路径 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| GET | `/` | 首页 — 克隆表单和已缓存仓库 |
|
|
|
|
|
|
| GET | `/repo/:id` | 仓库详情 — Git 图形和差异查看器 |
|
|
|
|
|
|
| GET | `/settings` | 设置页面 |
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
|
|
|
|
|
### API
|
|
|
|
|
|
|
2026-06-23 22:38:43 +08:00
|
|
|
|
| 方法 | 路径 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| POST | `/api/repos` | 克隆仓库 (SSE 流) |
|
|
|
|
|
|
| GET | `/api/repos` | 列出已缓存仓库 |
|
|
|
|
|
|
| DELETE | `/api/repos/:id` | 删除仓库缓存 |
|
|
|
|
|
|
| POST | `/api/repos/:id/cleanup` | 触发缓存清理 |
|
|
|
|
|
|
| POST | `/api/repos/:id/pull` | 拉取更新 |
|
|
|
|
|
|
| GET | `/api/repos/:id/graph` | Git 图形数据 (JSON) |
|
|
|
|
|
|
| GET | `/api/repos/:id/refs` | 分支和标签 |
|
|
|
|
|
|
| GET | `/api/repos/:id/commits` | 提交日志 |
|
|
|
|
|
|
| GET | `/api/repos/:id/diff` | 两个引用之间的差异 |
|
|
|
|
|
|
| POST | `/api/repos/:id/generate` | 生成 PR 描述 (SSE) |
|
|
|
|
|
|
| POST | `/api/repos/:id/review` | AI 代码审查 (SSE) |
|
|
|
|
|
|
| GET | `/api/repos/:id/review/analyses` | 列出历史审查 |
|
|
|
|
|
|
| GET | `/api/repos/:id/review/analyses/:aid` | 获取单个审查 |
|
|
|
|
|
|
| POST | `/api/repos/:id/review/notes` | 保存审查笔记 |
|
|
|
|
|
|
| GET | `/api/repos/:id/review/notes` | 获取审查笔记 |
|
|
|
|
|
|
| GET | `/api/settings` | 获取设置 |
|
|
|
|
|
|
| PUT | `/api/settings` | 更新设置 |
|
|
|
|
|
|
|
|
|
|
|
|
## 技术栈
|
|
|
|
|
|
|
|
|
|
|
|
| 层级 | 技术 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| 后端 | Go、Gin、MySQL、go-git |
|
|
|
|
|
|
| 前端 | Go html/template、HTMX、D3.js、diff2html、Tailwind CSS |
|
|
|
|
|
|
| LLM | OpenAI 兼容 API (SSE 流式传输) |
|
|
|
|
|
|
| 部署 | Docker |
|
|
|
|
|
|
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
PR-Helper/
|
|
|
|
|
|
├── main.go # 应用入口
|
|
|
|
|
|
├── config/ # 配置加载
|
|
|
|
|
|
├── database/ # 数据库初始化和迁移
|
|
|
|
|
|
├── handlers/ # HTTP 处理器 (页面 + JSON API + SSE)
|
|
|
|
|
|
├── models/ # 数据模型
|
|
|
|
|
|
├── services/ # 业务逻辑 (Git 操作、LLM 调用、缓存管理)
|
|
|
|
|
|
├── templates/ # Go HTML 模板
|
|
|
|
|
|
├── static/ # CSS (Tailwind)、JS、第三方库
|
|
|
|
|
|
├── data/ # 克隆的仓库缓存
|
|
|
|
|
|
└── docs/ # 技术文档
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 技术文档
|
|
|
|
|
|
|
|
|
|
|
|
详细的技术文档位于 [docs/](docs/) 目录:
|
|
|
|
|
|
|
|
|
|
|
|
| 文档 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| [01-architecture.md](docs/01-architecture.md) | 架构概览 — 项目结构、技术栈、数据流 |
|
|
|
|
|
|
| [02-backend-services.md](docs/02-backend-services.md) | 后端服务层 — Git、LLM、PR 生成、代码审查 |
|
|
|
|
|
|
| [03-frontend-interaction.md](docs/03-frontend-interaction.md) | 前端交互设计 — SSE、D3.js 图形、差异查看器 |
|
|
|
|
|
|
| [04-database-design.md](docs/04-database-design.md) | 数据库设计 — 表结构、索引、迁移策略 |
|
|
|
|
|
|
| [05-api-reference.md](docs/05-api-reference.md) | API 接口文档 — 完整的 RESTful API 参考 |
|
|
|
|
|
|
| [06-sse-streaming.md](docs/06-sse-streaming.md) | SSE 流式传输 — 协议、实现、错误处理 |
|
|
|
|
|
|
| [07-llm-integration.md](docs/07-llm-integration.md) | LLM 集成 — 配置、提示模板、流式调用 |
|
|
|
|
|
|
| [08-deployment.md](docs/08-deployment.md) | 部署运维 — Docker、反向代理、监控 |
|
|
|
|
|
|
| [09-development-guide.md](docs/09-development-guide.md) | 开发指南 — 环境搭建、代码规范、测试 |
|
|
|
|
|
|
| [10-troubleshooting.md](docs/10-troubleshooting.md) | 故障排查 — 常见问题和解决方案 |
|
|
|
|
|
|
|
|
|
|
|
|
## 安全
|
|
|
|
|
|
|
|
|
|
|
|
**无认证机制。** 请勿暴露到公网。仅限内部/本地使用。
|
|
|
|
|
|
|
|
|
|
|
|
## 许可证
|
2026-06-20 00:06:17 +08:00
|
|
|
|
|
|
|
|
|
|
MIT
|