基于 AI 的智能 GitHub Pull Request 代码审查与 Issue 分析机器人,具备主动探索代码库的能力
English | 中文
- AI 推理模式:利用 AI 推理能力进行深度代码分析,主动调用工具查看项目结构和任意文件
- 跨文件依赖理解:通过多轮对话理解模块间的复杂依赖关系,具备"全域视野"
- 自适应审查策略:根据 PR 规模自动选择快速/标准/深度审查模式
- 结构化审查报告:整体评分 + 分类问题(🔴严重/🟡重要/💡优化)+
<details>折叠详情 - 增量审查学习:AI 自动总结历史审查记录,识别评分趋势和问题热点,逐步提升审查质量
- 智能审查批准:基于 AI 评分自动决策 APPROVE / REQUEST_CHANGES / COMMENT
- PR 变更自动总结:AI 自动生成 PR 变更摘要,并在 PR 更新时增量更新总结内容
- PR 依赖图生成:AI 分析变更文件的 import/模块依赖,生成 Mermaid 格式可视化依赖关系图
- Token 消耗追踪:实时追踪审查中所有 AI API 调用的 token 消耗量与预估成本
- 一键撤回:管理员使用
/revoke命令一键撤回所有 AI 评论和 Review - 辅助模型支持:独立配置轻量级模型处理摘要、上下文压缩、标签推荐等任务,降低推理成本
- AI 工具系统:read_file、list_directory、search_in_files、get_git_info、list_commits、search_web、read_sakura_docs、list_sakura_directory,AI 按需主动调用
- 跨文件代码搜索:AI 可在仓库中跨文件搜索关键词,快速定位函数/变量/类的所有使用位置
- Git 信息查询:AI 可获取仓库基本信息、分支列表和提交历史,理解项目演进脉络
- Web 搜索增强:支持 DuckDuckGo / Tavily,AI 可主动检索互联网信息辅助审查决策
- 仓库级知识库(RAG):向量语义检索项目文档,为 AI 审查提供规范上下文
- PR 代码自动索引:语法感知分块 + 语义搜索,AI 可精准定位相关代码
- 🧠 项目记忆系统:基于
.sakura/目录的自我反思和知识积累,AI 审查越来越了解你的项目
- AI 全仓库扫描:定期对仓库进行全面的 AI 代码扫描,自动发现代码质量问题和安全隐患
- 自动创建 Issue:扫描发现的问题自动创建 GitHub Issue,包含详细的问题描述和修复建议
- 灵活扫描配置:可配置扫描间隔、冷却时间、Token 预算、并发数等参数
- 扫描管理界面:WebUI 中查看扫描列表、扫描详情和统计数据
- 扫描通知:扫描完成后通过 Telegram Bot 发送通知
- Issue 智能分析:自动分类、优先级判定、标签推荐、重复检测、关联 PR 发现
- Issue 自动打标:AI 自动分类并推荐标签,高置信度自动应用
- Issue 自动指派:AI 分析内容并自动指派给合适的仓库协作者
- Issue 标题改写:AI 自动优化模糊或不够准确的 Issue 标题
- PR-Issue 关联:自动解析 Issue 引用,注入上下文增强审查精度
- 语义 Issue 关联:基于向量语义相似度发现并关联相关 Issue
- 首次部署引导(Setup Wizard):首次启动自动检测配置状态,分步引导完成 GitHub App、数据库、AI 模型、RAG 等配置,支持断点续配
- 动态配置管理:通过 WebUI 修改配置即时生效,无需重启服务
- GitHub App 安装管理:自动处理 GitHub App 安装/卸载事件,同步仓库授权状态
- SSE 实时推送:基于 Redis Pub/Sub 的多进程实时通信,WebUI 数据即时更新
- 配额制访问控制:基于配额的灵活访问管理体系,支持用户自注册
- 付费配额系统:套餐计划管理、兑换码批量生成与兑换、管理员手动充值,支持一次性包和订阅模式
- 管理员操作审计:完整的操作日志,覆盖配置变更、用户管理等关键操作
- WebUI 管理界面:仪表盘、PR 管理、用户管理、配置管理、队列监控、操作日志、仓库扫描管理,支持 Markdown 内容渲染
- Telegram Bot:实时通知、按钮菜单交互、三级权限体系(超级管理员/管理员/普通用户)、配额管理
- GitHub OAuth 登录:与 Telegram 用户体系打通,明暗主题切换
┌─────────────────────────────────────────────────────────────┐
│ GitHub │
│ PR / Issue / OAuth │
└──────────┬───────────────────────────────┬──────────────────┘
│ Webhook │ OAuth / API
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ FastAPI Web Server │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Webhook │ │ PR 分析器 │ │ 评论服务 │ │
│ │ Handler │ │ (策略选择) │ │ (发布结果) │ │
│ │ (PR+Issue) │ │ │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ WebUI (Jinja2 + HTMX + Alpine.js) · SSE 实时推送 │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ Setup Wizard · 动态配置管理 · 管理员操作审计 │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ AI 审查引擎 │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ read_file │ │ list_dir │ │search_files│ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ git_info │ │ commits │ │ search_web │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ RAG 检索 │ │ 代码索引 │ │ 历史上下文 │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ read_sakura_docs │ │ list_sakura_directory │ │
│ └──────────────────────┘ └──────────────────────┘ │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ MySQL │ │ Redis │ │ ChromaDB │ │
│ │ (业务数据) │ │ (队列/PubSub)│ │ (向量检索) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
技术栈:FastAPI (Python 3.11+) · Jinja2 + Tailwind CSS + HTMX + Alpine.js · DeepSeek-R1 / OpenAI 兼容 API · MySQL 8.0 + Redis (队列/PubSub) + ChromaDB · GitHub App (PyGithub) + OAuth · Docker Compose · 可选 Celery Worker
- 原生 Android App:🚧 锐意开发中 → Sakura-AI-Reviewer-APP 通过 API v1 接口 与 Sakura-AI-Reviewer 后端对接,提供移动端管理体验
- Linux 服务器(推荐 Ubuntu 20.04+)
- Docker 和 Docker Compose
- 公网 IP 和域名
- GitHub 账号
- DeepSeek API Key(或其他 OpenAI 兼容 API)
git clone https://github.com/Sakura520222/Sakura-AI-Reviewer.git
cd Sakura-AI-Reviewer所有配置(GitHub App、AI 模型、数据库等)通过首次启动后的 Setup Wizard 在 Web 界面完成,无需手动编辑配置文件。
- 访问 GitHub Apps 设置,点击 New GitHub App
- 填写名称、Homepage URL
- Repository permissions:Pull requests
Read and write,ContentsRead and write,IssuesRead and write(可选) - Webhook URL:
https://your-domain.com:8000/api/webhook/github,填写 Webhook secret - Webhook events:勾选 Pull requests、Pull request reviews、Issues(可选)、Issue comments(可选)
- 创建后,在 App 页面底部 Generate a private key,下载
.pem文件(Setup Wizard 中需粘贴完整私钥内容) - 点击左侧 Install App,选择要启用审查的仓库
WebUI 登录需额外创建 OAuth App,回调地址设为
https://your-domain.com/webui/auth/callback
在宿主机安装并启动 MySQL 和 Redis:
sudo apt update && sudo apt install mysql-server redis-server -y
sudo systemctl start mysql && sudo systemctl start redis
sudo mysql -e "CREATE DATABASE IF NOT EXISTS \`sakura-pr\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'your_password';"
sudo mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';"
sudo mysql -e "FLUSH PRIVILEGES;"cd docker
docker-compose up -d首次启动后访问 https://your-domain.com/setup,Setup Wizard 将分步引导完成所有配置(支持断点续配):
- 数据库配置:填写 MySQL 和 Redis 连接地址,提供在线连接测试
- GitHub App 配置:填写 App ID、私钥和 Webhook Secret,自动验证 App 连接
- AI 模型与通知:配置 AI API(支持自动获取模型列表)和 Telegram Bot Token
- 管理员与 OAuth:设置管理员账户、应用域名和 GitHub OAuth 凭证
Setup Wizard 内置 RAG 嵌入与重排序模型配置(可折叠),可跳过后续在 WebUI 中配置。
curl http://your-domain.com:8000/health
# {"status":"healthy","service":"Sakura AI Reviewer"}WebUI:https://your-domain.com/webui/
在已安装 App 的仓库中创建 PR,AI 会自动审查并发布结构化报告。审查报告使用 <details> 折叠详情,保持评论简洁。在 PR 中可使用以下命令:
/full-review— 清理旧评论并触发全量重新审查(PR 作者或协作者)/revoke— 一键撤回所有 AI 评论和 Review(仅管理员)
- 自动分析:Issue opened/edited/reopened 时自动触发,发布分类、优先级、标签建议
- 自动打标:AI 推荐标签,高置信度自动应用到 Issue
- 手动触发:在 Issue 中评论
/analyze - 重复检测:自动识别重复 Issue 并关联已有 Issue
访问 https://your-domain.com/webui/,使用 GitHub 账号登录(需先在 Telegram Bot 中注册)。支持仪表盘图表、PR 管理、用户管理、动态配置管理、审查队列监控、操作日志等功能。配置修改即时生效,无需重启服务。
提供实时通知(审查开始/完成)、配额管理、权限控制(三级体系)和丰富的管理命令。详见 Telegram Bot 集成指南。
所有配置遵循优先级:数据库 app_config(WebUI 管理) > Settings 默认值,YAML 配置文件(config/strategies.yaml、config/labels.yaml)管理审查策略和标签定义。
动态配置:通过 WebUI 的配置管理页面修改的配置项即时生效,无需重启服务。支持 AI 模型、辅助模型、RAG、Web 搜索、代码索引等多个配置分组。
- AI 模型:WebUI 配置管理中设置 API 地址、API Key 和模型名称
- 辅助模型:WebUI 配置管理中设置
summary_model、summary_api_base、summary_api_key,用于摘要生成、上下文压缩、标签推荐等轻量任务,留空则自动回退到主模型 - 审查策略:编辑
config/strategies.yaml,支持快速/标准/深度/大PR 四种策略 - 文件过滤:在
config/strategies.yaml中配置跳过的文件扩展名和路径 - AI 工具:WebUI 配置管理中
enable_ai_tools/max_tool_iterations - 标签推荐:
config/labels.yaml配置 PR 标签推荐开关与置信度;Issue 标签在全局配置页issue_auto_create_labels/issue_confidence_threshold - 审查批准:
config/strategies.yaml中review_policy配置阈值和仓库级覆盖 - PR 变更总结:WebUI 配置管理中
enable_pr_summary - PR 依赖图:WebUI 配置管理中
enable_pr_dependency_graph/pr_dependency_graph_max_nodes/pr_dependency_graph_max_files - Token 成本追踪:WebUI 配置管理中
review_price_per_1k_prompt/review_price_per_1k_completion,追踪审查 Token 消耗与成本 - RAG 知识库:WebUI 配置管理中配置嵌入模型(支持 BAAI/bge-m3 等)、重排序模型、ChromaDB 等
- PR 代码索引:WebUI 配置管理中配置代码分块、支持语言、核心目录等
- Issue 自动指派:WebUI 配置管理中
issue_auto_assign/issue_assignee_confidence_threshold - Issue 标题改写:WebUI 配置管理中
issue_auto_rewrite_title - 语义 Issue 关联:WebUI 配置管理中
enable_semantic_issue_linking/semantic_issue_similarity_threshold - 增量审查历史:WebUI 配置管理中
enable_incremental_history_context,AI 自动学习历史审查记录 - Web 搜索工具:WebUI 配置管理中
web_search_provider(duckduckgo免费或tavily高级) - 跨文件搜索:
config/strategies.yaml中context_enhancement.search_in_files,配置 GitHub Search API 优先策略、上下文行数、最大结果数等 - Git 信息工具:
config/strategies.yaml中context_enhancement.git_tools,配置默认分支和提交返回数量 - 项目记忆系统:WebUI 配置管理中
sakura_memory_enabled启用记忆系统,sakura_reflection_enabled启用审查后反思,sakura_consolidation_interval合并触发的反思轮数(默认 5),sakura_auto_init自动初始化.sakura/目录 - 模型上下文:WebUI 配置管理中配置上下文窗口、自动压缩等,详见 模型上下文管理
pip install -r requirements.txt
python -m backend.main首次启动将进入 Bootstrap 模式,访问
http://localhost:8000/setup通过 Setup Wizard 完成配置。
python run_ruff.pySakura-AI-Reviewer/
├── backend/
│ ├── api/ # API 路由(webhook、health、v1)
│ │ └── v1/ # RESTful API v1(移动端对接)
│ ├── core/ # 核心配置、动态配置管理
│ ├── models/ # 数据模型(SQLAlchemy)
│ ├── services/ # 业务逻辑
│ │ ├── ai_reviewer/ # AI 审查引擎
│ │ │ ├── tools/ # AI 工具(文件读取、跨文件搜索、Git 信息、Web 搜索、Sakura 记忆)
│ │ │ └── compression/ # 上下文压缩
│ │ ├── pr_analyzer.py # PR 分析器(策略选择)
│ │ ├── issue_analyzer.py # Issue 分析引擎
│ │ ├── issue_service.py # Issue 服务(打标、指派、改写)
│ │ ├── issue_embedding_service.py # Issue 向量嵌入
│ │ ├── pr_issue_linker.py # PR-Issue 关联
│ │ ├── decision_engine.py # 审查决策引擎
│ │ ├── comment_service.py # 评论服务
│ │ ├── rag_service.py # RAG 知识库
│ │ ├── code_index_service.py # 代码索引
│ │ ├── scan_prompt_builder.py # 仓库扫描 Prompt 构建
│ │ ├── scan_report_service.py # 扫描报告服务
│ │ ├── scan_scheduler.py # 扫描调度器
│ │ └── history_context_service.py # 增量审查历史
│ │ ├── sakura_memory_service.py # .sakura/ 项目记忆服务
│ │ ├── github_write_service.py # GitHub 写操作服务(.sakura/ 写入)
│ ├── webui/ # WebUI 管理界面
│ │ ├── routes/ # 路由(dashboard, config, users, ...)
│ │ ├── templates/ # Jinja2 模板
│ │ ├── auth.py # GitHub OAuth 认证
│ │ └── sse.py # SSE 实时推送
│ ├── workers/ # 后台任务(review_worker, issue_worker, scan_worker)
│ ├── telegram/ # Telegram Bot(通知、命令、按钮菜单、权限)
│ └── bootstrap.py # Setup Wizard 引导配置
├── config/ # YAML 配置文件(strategies.yaml)
├── docker/ # Docker Compose 部署
└── docs/ # 项目文档
| 文档 | 说明 |
|---|---|
| Telegram Bot 集成指南 | Bot 设置、权限体系、命令参考 |
| 审查批准功能 | 智能审查批准系统详细说明 |
| 手动审查功能 | 超级管理员手动触发审查 |
| 模型上下文管理 | AI 模型上下文和压缩功能 |
| API v1 参考文档 | RESTful API 接口文档(移动端对接) |
| WebUI 设计文档 | WebUI 设计规范 |
| 项目记忆系统设计 | .sakura/ 记忆系统架构与配置 |
本项目使用标准 Gitflow 工作流:
main:生产发布分支,仅接收release/*与hotfix/*合并develop:日常集成分支,普通功能与修复的目标分支feature/*:功能分支,从develop创建并合回developrelease/*:发布准备分支,从develop创建并合入mainhotfix/*:线上紧急修复分支,从main创建并合入main
日常贡献流程:
- Fork 本项目
- 基于
develop创建特性分支 (git checkout develop && git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'feat: add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启 Pull Request,目标分支选择
develop
发布流程由维护者执行:从 develop 创建 release/x.y.z,完成版本号、文档和回归检查后合并到 main;合并后自动发布 Release,并将 main 回合到 develop。
紧急修复流程由维护者执行:从 main 创建 hotfix/x.y.z,修复后合并到 main 并发布,再将 main 回合到 develop。
自动化工作流会协助维护 Gitflow:PR 分支流向校验会阻止普通分支直接合入 main;CI 会在 develop / main PR 和主要开发分支上运行 Ruff 与测试;release/* 或 hotfix/* 合入 main 后会自动发布 Release,并自动尝试将 main 回合到 develop;已合并的临时 Gitflow 分支会自动清理。
提交信息请使用英文 Conventional Commits 格式。
GNU Affero General Public License v3.0 (AGPLv3) — 自由使用、修改和分发,网络服务需提供源代码。
Sakura AI Reviewer — 让代码审查更智能、更高效
Made with 🌸 by Sakura520222
问题反馈:Issues · 邮箱:Sakura520222@outlook.com




