🌸 Sakura AI - 审查批准功能实现总结
智能审查批准功能实现总结,介绍多维度决策引擎、幂等性保护和配置部署建议。
📋 功能概述
成功实现了智能审查批准功能,使 Sakura AI 能够根据 AI 评分和问题严重程度自动做出审查决策,并直接提交到 GitHub。
✨ 核心特性
1. 多维度决策引擎
python
决策逻辑:
┌─────────────────────────────────────────┐
│ AI审查完成,获得评分和问题 │
└──────────────┬──────────────────────────┘
│
▼
┌──────────────────────┐
│ Critical > 0 ? │──Yes──► REQUEST_CHANGES (一票否决)
└──────────┬───────────┘
│ No
▼
┌──────────────────────┐
│ Score < 4 ? │──Yes──► REQUEST_CHANGES (低分阻断)
└──────────┬───────────┘
│ No
▼
┌──────────────────────┐
│ Score >= 8 && │
│ Major <= 1 ? │──Yes──► APPROVE (批准合并)
└──────────┬───────────┘
│ No
▼
COMMENT (中立评论)2. 三种审查决策
- APPROVE:代码质量优秀,可以合并
- REQUEST_CHANGES:发现严重问题或评分过低,需要修复
- COMMENT:处于中间状态,建议人工复审
3. 幂等性保护
检查是否已存在相同类型的 Review,避免重复提交:
python
def has_existing_review(
repo_owner, repo_name, pr_number,
bot_username, event
) -> bool🗂️ 文件变更清单
1. 配置文件
- config/strategies.yaml(v3.1.3之后存储为数据库节键
strategy.review_policy,经 WebUI 审查策略页管理)- 添加
review_policy配置段 - 支持仓库级别的覆盖配置
- 可配置的审查模板
- 添加
2. 数据库模型
- backend/models/database.py
- 新增
ReviewDecision枚举 PRReview表添加decision和decision_reason字段
- 新增
3. 决策引擎
- backend/services/decision_engine.py (新建)
DecisionEngine类make_decision()方法:根据评分和问题做出决策format_review_body()方法:格式化审查评论
4. GitHub API 集成
- backend/core/github_app.py
has_existing_review(): 幂等性检查submit_review(): 提交审查决定到 GitHubget_bot_username(): 获取机器人用户名
5. 审查流程
- backend/workers/review_worker.py
- 导入决策引擎
- 添加
_make_and_submit_decision()方法 - 在审查完成后自动执行决策
⚙️ 配置说明
基础配置
yaml
review_policy:
# 是否启用自动批准功能(建议先设为false观察效果)
enabled: false
# 批准阈值:分数 >= 此值才考虑批准
approve_threshold: 8
# 阻断阈值:分数 < 此值自动请求变更
block_threshold: 4
# 是否在存在Critical问题时自动请求变更
block_on_critical: true
# 允许的Major问题数量上限
max_major_issues: 1
# 幂等性检查:是否检查已有Review避免重复提交
enable_idempotency_check: true仓库级别覆盖
yaml
review_policy:
repo_overrides:
"owner/core-project":
approve_threshold: 9 # 核心项目更严格
block_threshold: 5 # 更宽松🚀 部署建议
阶段1:观察期(推荐)
yaml
review_policy:
enabled: false # 仅评论,不自动批准观察 1-2 周,检查 AI 评分的准确性。
阶段2:逐步启用
yaml
review_policy:
enabled: true
approve_threshold: 9 # 先设置高阈值
block_on_critical: true阶段3:正式运行
根据观察结果调整阈值。
🔍 工作流程
PR Opened
↓
AI 审查(评分 + 问题分类)
↓
决策引擎分析
↓
提交 GitHub Review
├─ APPROVE ✅
├─ REQUEST_CHANGES ❌
└─ COMMENT 💬
↓
保存到数据库
├─ decision: approve/request_changes/comment
└─ decision_reason: 决策理由📊 数据库记录
每个审查记录现在包含:
sql
SELECT
id,
overall_score, -- AI评分 1-10
decision, -- approve/request_changes/comment
decision_reason -- 决策理由
FROM pr_reviews;⚠️ 重要提示
- 首次部署:建议
enabled: false,先观察效果 - Critical 问题:建议保持
block_on_critical: true - 测试环境:先在测试仓库验证,再应用到生产
- 监控日志:密切关注决策引擎的日志输出
- 人工复审:COMMENT 状态的 PR 需要人工审查
🎯 使用场景
自动批准
- 评分 >= 8 分
- 无 Critical 问题
- Major 问题 <= 1 个
自动阻断
- 评分 < 4 分
- 存在 Critical 问题
人工复审
- 评分 4-7 分(中间状态)
- Major 问题过多
🔧 故障排查
Review 未提交
- 检查 GitHub App 权限
- 查看日志中的错误信息
- 确认
review_policy.enabled是否为 true
决策不符合预期
- 检查 AI 评分是否准确
- 查看
overall_score和问题分类 - 调整
approve_threshold或block_threshold
重复提交 Review
- 确认
enable_idempotency_check: true - 检查机器人用户名是否正确获取
📈 后续优化方向
- 学习反馈:记录人工修改的决策,优化评分模型
- 审批链:支持需要多个批准的场景
- 统计分析:展示批准率、阻断率等指标
- 智能调优:根据历史数据自动调整阈值
🎉 总结
成功实现了一个稳健且具有威慑力的审查批准系统:
✅ 多维度决策(评分 + 问题严重程度) ✅ 幂等性保护(避免重复提交) ✅ 灵活配置(支持仓库级别覆盖) ✅ 完整日志(可追溯所有决策) ✅ 渐进式部署(观察期 -> 逐步启用)
这个功能将大大提升团队研发效率,同时保证代码质量!🚀
最后更新:2026-8-16 · 发现错误?提 Issue