Skip to content

Sakura520222/Sakura-AI-Reviewer

Repository files navigation

🌸 Sakura AI Reviewer

基于 AI 的智能 GitHub Pull Request 代码审查与 Issue 分析机器人,具备主动探索代码库的能力

English | 中文

Version Python FastAPI License Live Demo Android App


✨ 核心特性

审查能力

  • 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 工具与知识库

  • 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 分析

  • 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

客户端


🚀 快速开始

1. 环境要求

  • Linux 服务器(推荐 Ubuntu 20.04+)
  • Docker 和 Docker Compose
  • 公网 IP 和域名
  • GitHub 账号
  • DeepSeek API Key(或其他 OpenAI 兼容 API)

2. 克隆项目

git clone https://github.com/Sakura520222/Sakura-AI-Reviewer.git
cd Sakura-AI-Reviewer

所有配置(GitHub App、AI 模型、数据库等)通过首次启动后的 Setup Wizard 在 Web 界面完成,无需手动编辑配置文件。

3. 创建 GitHub App

  1. 访问 GitHub Apps 设置,点击 New GitHub App
  2. 填写名称、Homepage URL
  3. Repository permissions:Pull requests Read and write,Contents Read and write,Issues Read and write(可选)
  4. Webhook URLhttps://your-domain.com:8000/api/webhook/github,填写 Webhook secret
  5. Webhook events:勾选 Pull requests、Pull request reviews、Issues(可选)、Issue comments(可选)
  6. 创建后,在 App 页面底部 Generate a private key,下载 .pem 文件(Setup Wizard 中需粘贴完整私钥内容)
  7. 点击左侧 Install App,选择要启用审查的仓库

WebUI 登录需额外创建 OAuth App,回调地址设为 https://your-domain.com/webui/auth/callback

4. 准备数据库

在宿主机安装并启动 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;"

5. 启动服务

cd docker
docker-compose up -d

6. Setup Wizard 引导配置

首次启动后访问 https://your-domain.com/setup,Setup Wizard 将分步引导完成所有配置(支持断点续配):

  1. 数据库配置:填写 MySQL 和 Redis 连接地址,提供在线连接测试
  2. GitHub App 配置:填写 App ID、私钥和 Webhook Secret,自动验证 App 连接
  3. AI 模型与通知:配置 AI API(支持自动获取模型列表)和 Telegram Bot Token
  4. 管理员与 OAuth:设置管理员账户、应用域名和 GitHub OAuth 凭证

Setup Wizard 内置 RAG 嵌入与重排序模型配置(可折叠),可跳过后续在 WebUI 中配置。

7. 验证部署

curl http://your-domain.com:8000/health
# {"status":"healthy","service":"Sakura AI Reviewer"}

WebUI:https://your-domain.com/webui/


📖 使用说明

PR 审查

在已安装 App 的仓库中创建 PR,AI 会自动审查并发布结构化报告。审查报告使用 <details> 折叠详情,保持评论简洁。在 PR 中可使用以下命令:

  • /full-review — 清理旧评论并触发全量重新审查(PR 作者或协作者)
  • /revoke — 一键撤回所有 AI 评论和 Review(仅管理员)

Issue 分析

  • 自动分析:Issue opened/edited/reopened 时自动触发,发布分类、优先级、标签建议
  • 自动打标:AI 推荐标签,高置信度自动应用到 Issue
  • 手动触发:在 Issue 中评论 /analyze
  • 重复检测:自动识别重复 Issue 并关联已有 Issue

WebUI 管理

访问 https://your-domain.com/webui/,使用 GitHub 账号登录(需先在 Telegram Bot 中注册)。支持仪表盘图表、PR 管理、用户管理、动态配置管理、审查队列监控、操作日志等功能。配置修改即时生效,无需重启服务。

Telegram Bot

提供实时通知(审查开始/完成)、配额管理、权限控制(三级体系)和丰富的管理命令。详见 Telegram Bot 集成指南


⚙️ 配置说明

所有配置遵循优先级:数据库 app_config(WebUI 管理) > Settings 默认值,YAML 配置文件(config/strategies.yamlconfig/labels.yaml)管理审查策略和标签定义。

动态配置:通过 WebUI 的配置管理页面修改的配置项即时生效,无需重启服务。支持 AI 模型、辅助模型、RAG、Web 搜索、代码索引等多个配置分组。

  • AI 模型:WebUI 配置管理中设置 API 地址、API Key 和模型名称
  • 辅助模型:WebUI 配置管理中设置 summary_modelsummary_api_basesummary_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.yamlreview_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_providerduckduckgo 免费或 tavily 高级)
  • 跨文件搜索config/strategies.yamlcontext_enhancement.search_in_files,配置 GitHub Search API 优先策略、上下文行数、最大结果数等
  • Git 信息工具config/strategies.yamlcontext_enhancement.git_tools,配置默认分支和提交返回数量
  • 项目记忆系统:WebUI 配置管理中 sakura_memory_enabled 启用记忆系统,sakura_reflection_enabled 启用审查后反思,sakura_consolidation_interval 合并触发的反思轮数(默认 5),sakura_auto_init 自动初始化 .sakura/ 目录
  • 模型上下文:WebUI 配置管理中配置上下文窗口、自动压缩等,详见 模型上下文管理

🖥️ 效果展示

审查进行中 Issue分析 WebUI管理界面 Telegram通知 Telegram通知

🛠️ 开发指南

本地开发

pip install -r requirements.txt
python -m backend.main

首次启动将进入 Bootstrap 模式,访问 http://localhost:8000/setup 通过 Setup Wizard 完成配置。

代码检查

python run_ruff.py

代码结构

Sakura-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 创建并合回 develop
  • release/*:发布准备分支,从 develop 创建并合入 main
  • hotfix/*:线上紧急修复分支,从 main 创建并合入 main

日常贡献流程:

  1. Fork 本项目
  2. 基于 develop 创建特性分支 (git checkout develop && git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'feat: add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 开启 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) — 自由使用、修改和分发,网络服务需提供源代码。


🌟 Star History

Star History Chart

Sakura AI Reviewer — 让代码审查更智能、更高效

Made with 🌸 by Sakura520222

问题反馈:Issues · 邮箱:Sakura520222@outlook.com

About

基于 AI 的智能 GitHub Pull Request 代码审查与 Issue 分析机器人,具备主动探索代码库的能力

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages