20 KiB
Bug 严重等级分级系统
文档版本: v1.0 创建日期: 2026-02-25 用途: AI 自动评估 Bug 严重程度,决定是否需要人工审核
📊 分级概述
等级范围
1-10 级,数字越大表示风险越高
| 等级 | 风险级别 | 审核方式 | 典型场景 |
|---|---|---|---|
| 10 | 🔴 极高风险 | 必须人工审核 | 支付、认证、数据泄露 |
| 9 | 🔴 极高风险 | 必须人工审核 | 核心业务逻辑 |
| 8 | 🟠 高风险 | 人工审核(默认阈值) | 复杂业务流程 |
| 7 | 🟠 高风险 | 人工审核 | 数据库操作 |
| 6 | 🟡 中风险 | 自动合并 | 一般业务逻辑 |
| 5 | 🟡 中风险 | 自动合并 | API 参数验证 |
| 4 | 🟢 低风险 | 自动合并 | 非关键功能 |
| 3 | 🟢 低风险 | 自动合并 | UI 显示问题 |
| 2 | 🔵 极低风险 | 自动合并 | 语法错误 |
| 1 | 🔵 极低风险 | 自动合并 | 代码格式 |
默认审核阈值
# 配置项
severity_threshold_for_review: int = 8 # ≥8 级需要人工审核
🎯 详细分级标准
Level 10:极高风险(必须人工审核)
特征
涉及资金安全:
- 支付、充值、提现相关代码
- 订单金额计算逻辑
- 优惠券、折扣计算
- 余额、积分操作
涉及数据安全:
- 用户认证(登录、注册、Token)
- 权限控制(admin 权限、角色管理)
- 敏感数据加密/解密
- 数据库备份/恢复
系统稳定性:
- 可能导致服务不可用
- 可能导致系统崩溃
- 数据库连接池管理
示例
# ❌ 极高风险:支付金额计算错误
def calculate_order_price(items):
total = 0
for item in items:
total += item.price * item.quantity # Bug: 未考虑优惠券
return total
# ❌ 极高风险:权限验证绕过
def admin_required(func):
def wrapper(request):
# Bug: 缺少权限检查
return func(request)
return wrapper
AI 判定输出示例
{
"severity_level": 10,
"severity_label": "极高风险",
"risk_category": "资金安全",
"reasoning": [
"涉及订单金额计算逻辑",
"错误可能导致用户支付金额错误",
"修改了 payment_service.py 核心支付模块",
"测试覆盖不足,缺少边界条件测试"
],
"recommendation": "必须人工审核并进行充分测试后才能上线",
"business_impact": "可能导致财务损失和用户投诉",
"rollback_difficulty": "困难"
}
Level 8-9:高风险(需要人工审核)
特征
核心业务逻辑:
- 用户绑定设备流程
- 智能体(Spirit)创建/修改
- 设备状态流转(in_stock → out_stock → bound)
- 批次管理逻辑
数据一致性:
- 数据库事务处理
- 外键关联操作
- 批量更新操作
- 数据迁移脚本
复杂业务流程:
- 多步骤业务流程
- 涉及多个模块交互
- 状态机流转逻辑
示例
# ⚠️ 高风险:设备绑定逻辑
def bind_device_to_user(device_id, user_id):
device = Device.objects.get(id=device_id)
# Bug: 未检查设备是否已被绑定
device.owner_id = user_id
device.status = "bound"
device.save()
# ⚠️ 高风险:批量更新
def batch_update_devices(device_ids, **kwargs):
# Bug: 缺少事务保护
for device_id in device_ids:
device = Device.objects.get(id=device_id)
for key, value in kwargs.items():
setattr(device, key, value)
device.save()
AI 判定输出示例
{
"severity_level": 8,
"severity_label": "高风险",
"risk_category": "核心业务逻辑",
"reasoning": [
"修改了设备绑定流程,属于核心业务",
"未充分检查边界条件(设备已绑定的情况)",
"修改涉及 Device 模型的状态流转",
"测试用例覆盖了基本场景,但缺少异常场景测试"
],
"recommendation": "建议人工审核业务逻辑,并补充异常场景测试",
"business_impact": "可能导致设备重复绑定或状态异常",
"rollback_difficulty": "中等"
}
Level 5-7:中风险(自动合并,但需关注)
特征
一般业务逻辑:
- 非核心功能的实现
- API 参数验证和错误处理
- 数据查询和过滤逻辑
- 边界条件处理
API 层问题:
- 请求参数验证
- 响应格式化
- 错误码定义
- 分页逻辑
示例
# 🟡 中风险:参数验证
def get_user_devices(request):
user_id = request.GET.get("user_id")
# Bug: 未验证 user_id 格式
devices = Device.objects.filter(owner_id=user_id)
return JsonResponse({"devices": list(devices.values())})
# 🟡 中风险:错误处理
def create_spirit(name, avatar):
# Bug: 缺少异常捕获
spirit = Spirit.objects.create(name=name, avatar=avatar)
return spirit
AI 判定输出示例
{
"severity_level": 6,
"severity_label": "中风险",
"risk_category": "API 参数验证",
"reasoning": [
"修改了 API 参数验证逻辑",
"未影响核心业务流程",
"测试覆盖充分,包含边界条件",
"修改范围小,仅涉及单个 API 端点"
],
"recommendation": "可以自动合并,建议后续监控生产环境日志",
"business_impact": "可能导致参数错误时返回不友好的错误信息",
"rollback_difficulty": "容易"
}
Level 3-4:低风险(自动合并)
特征
UI 和展示:
- 前端显示问题
- 错误提示文案
- 日志输出格式
非关键功能:
- 辅助工具函数
- 测试代码修复
- 文档更新
示例
# 🟢 低风险:日志输出
def process_data(data):
# Bug: 日志格式错误
logger.info(f"Processing data: {data}") # 修复:添加时间戳
return process(data)
# 🟢 低风险:错误提示
def validate_input(value):
if not value:
# Bug: 错误提示不友好
raise ValueError("Invalid input") # 修复:改为 "请输入有效的值"
AI 判定输出示例
{
"severity_level": 3,
"severity_label": "低风险",
"risk_category": "日志和提示",
"reasoning": [
"仅修改了日志输出格式",
"不影响业务逻辑",
"不涉及数据操作",
"测试通过"
],
"recommendation": "可以自动合并,无需人工审核",
"business_impact": "无明显影响",
"rollback_difficulty": "容易"
}
Level 1-2:极低风险(自动合并)
特征
语法和格式:
- Import 语句错误
- 拼写错误
- 代码格式问题(空格、换行)
- 注释错误
构建和依赖:
- requirements.txt 更新
- Dockerfile 格式修复
- CI/CD 配置优化
示例
# 🔵 极低风险:Import 错误
# Bug: from django.contrib.auth import User
from django.contrib.auth.models import User # 修复
# 🔵 极低风险:拼写错误
def get_devcie_list(): # Bug: devcie → device
pass
AI 判定输出示例
{
"severity_level": 1,
"severity_label": "极低风险",
"risk_category": "语法错误",
"reasoning": [
"仅修复了 import 语句",
"不涉及业务逻辑",
"属于纯语法问题",
"测试全部通过"
],
"recommendation": "自动合并,无风险",
"business_impact": "无",
"rollback_difficulty": "容易"
}
🤖 AI 分级判断实现
Claude 评估 Prompt 模板
文件位置: log_center/repair_agent/prompts/severity_assessment.txt
你是一个 Bug 严重等级评估专家。请根据以下信息评估 Bug 的严重等级(1-10 级)。
## Bug 信息
**错误类型:** {error_type}
**错误消息:** {error_message}
**文件路径:** {file_path}
**堆栈信息:**
{stack_trace}
**修复内容:**
- 修改文件: {modified_files}
- 代码 Diff:
```diff
{diff}
测试结果: {test_passed}
评估标准
Level 10(极高风险)
- 涉及支付、充值、提现等资金交易
- 涉及用户认证、权限控制的核心逻辑
- 可能导致数据泄露或安全漏洞
- 可能导致系统崩溃或服务不可用
- 关键词: payment, auth, security, admin, permission, password, token, encrypt, decrypt
Level 8-9(高风险)
- 核心业务逻辑错误(设备绑定、智能体管理)
- 数据库事务处理错误
- 复杂业务流程错误
- 影响多个模块的错误
- 关键词: bind, device, spirit, transaction, batch, workflow, state_machine
Level 5-7(中风险)
- 一般业务逻辑错误
- API 参数验证错误
- 非关键功能的错误
- 关键词: validate, filter, query, api, endpoint
Level 3-4(低风险)
- UI 显示问题
- 日志输出错误
- 测试代码错误
- 关键词: ui, display, log, test, format
Level 1-2(极低风险)
- 语法错误(import、拼写)
- 代码格式问题
- 注释错误
- 关键词: import, syntax, format, comment, typo
判断依据
请综合考虑以下因素:
-
业务重要性 (权重 30%)
- 是否涉及核心业务流程?(设备管理、智能体、用户绑定)
- 是否影响用户核心功能?
-
安全风险 (权重 30%)
- 是否涉及敏感数据?(用户信息、Token)
- 是否涉及资金相关?(虽然当前项目可能不涉及)
- 是否可能导致权限绕过?
-
影响范围 (权重 20%)
- 影响多少用户?(全部/部分/极少数)
- 影响多少模块?(单模块/多模块)
- 是否影响数据一致性?
-
修复质量 (权重 10%)
- 测试是否充分?
- 修复方案是否合理?
- 是否引入新的风险?
-
回滚难度 (权重 10%)
- 如果出错,回滚是否容易?
- 是否涉及数据迁移?
输出格式
请严格按照以下 JSON 格式输出(在最后一行):
{
"severity_level": <1-10 的整数>,
"severity_label": "<极低风险|低风险|中风险|高风险|极高风险>",
"risk_category": "<资金安全|数据安全|核心业务逻辑|一般业务|UI展示|语法问题|其他>",
"reasoning": [
"<理由1:为什么判定为该级别>",
"<理由2:关键风险点>",
"<理由3:测试覆盖情况>",
"<理由4:建议>"
],
"recommendation": "<是否建议人工审核的具体说明>",
"key_files": ["<核心修改文件列表>"],
"business_impact": "<对业务的影响描述,50字以内>",
"rollback_difficulty": "<容易|中等|困难>"
}
重要提示:
- 如果涉及
payment,auth,admin,permission等关键词,最低 8 级 - 如果修改了
models.py且涉及核心业务模型(Device, Spirit, User),最低 7 级 - 如果测试失败或测试覆盖不足,等级 +1
- 如果只是语法错误(ImportError, SyntaxError)且测试通过,最高 2 级
请立即开始评估,最后一行输出完整的 JSON。
---
## 💻 完整技术实现代码
### 文件清单
log_center/repair_agent/ ├── agent/ │ ├── claude_service.py # 新增 assess_bug_severity() 方法 │ ├── core.py # 修改修复流程,集成分级判断 │ └── git_manager.py # 新增 merge_pull_request() 方法 ├── models/ │ └── bug.py # RepairReport 增加严重等级字段 ├── config/ │ └── settings.py # 新增分级相关配置 └── prompts/ └── severity_assessment.txt # Claude 评估 Prompt
### 详细代码实现
见主文档:[bug-repair-workflow-optimization.md](./bug-repair-workflow-optimization.md) 中的 "技术实施" 章节
---
## 📊 修复报告示例
### 高风险 Bug 修复报告
```json
{
"error_log_id": 123,
"project_id": "rtc_backend",
"status": "PENDING_REVIEW",
"severity_level": 9,
"severity_label": "高风险",
"risk_category": "核心业务逻辑",
"severity_reasoning": [
"修改了设备绑定流程 (bind_device_to_user),属于核心业务",
"涉及 Device 模型的状态流转 (in_stock → bound)",
"未充分检查边界条件(设备已被其他用户绑定的情况)",
"测试覆盖了基本场景,但缺少冲突场景测试"
],
"recommendation": "建议人工审核业务逻辑,补充异常场景测试后再合并",
"business_impact": "可能导致设备重复绑定,影响用户使用",
"rollback_difficulty": "中等",
"modified_files": ["apps/device/views.py", "apps/device/models.py"],
"test_passed": true,
"pr_url": "https://gitea.xxx/rtc/rtc_backend/pulls/45"
}
低风险 Bug 修复报告
{
"error_log_id": 124,
"project_id": "rtc_backend",
"status": "MERGED",
"severity_level": 2,
"severity_label": "极低风险",
"risk_category": "语法问题",
"severity_reasoning": [
"仅修复了 import 语句路径错误",
"不涉及任何业务逻辑",
"属于纯语法问题 (ImportError)",
"测试全部通过"
],
"recommendation": "可以自动合并,无需人工审核",
"business_impact": "无",
"rollback_difficulty": "容易",
"modified_files": ["apps/device/serializers.py"],
"test_passed": true,
"pr_url": "https://gitea.xxx/rtc/rtc_backend/pulls/46",
"auto_merged": true
}
🔄 完整工作流程
┌─────────────────────────────────────────────────────────┐
│ 1. Agent 扫描发现 Bug │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 2. AI 修复代码 (Claude Code CLI) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 3. 运行测试 │
│ ├─ 测试通过 → 继续 │
│ └─ 测试失败 → 下一轮重试 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 4. AI 评估严重等级 (1-10) │
│ - 分析错误类型 │
│ - 评估业务影响 │
│ - 检查修改范围 │
│ - 综合判定等级 │
└─────────────────────────────────────────────────────────┘
↓
判定等级?
↙ ↘
┌──────────────┐ ┌──────────────┐
│ ≥8 级(高风险)│ │ <8 级(低风险)│
└──────────────┘ └──────────────┘
↓ ↓
┌──────────────┐ ┌──────────────┐
│ 创建 PR │ │ 创建 PR │
│ 标注高风险 │ │ 标注低风险 │
└──────────────┘ └──────────────┘
↓ ↓
┌──────────────┐ ┌──────────────┐
│ 状态 → │ │ 自动合并 PR │
│ PENDING_REVIEW│ └──────────────┘
└──────────────┘ ↓
↓ ┌──────────────┐
┌──────────────┐ │ 状态 → MERGED │
│ 等待人工审核 │ └──────────────┘
└──────────────┘ ↓
↓ │
┌──────────────┐ │
│ 人工点击 Merge│ │
└──────────────┘ │
↓ │
┌──────────────┐ │
│ 状态 → MERGED │◀────────────────┘
└──────────────┘
↓
┌──────────────┐
│ CI/CD 部署 │
└──────────────┘
↓
┌──────────────┐
│状态 → DEPLOYED│
└──────────────┘
📈 预期效果
效率提升
| 场景 | 当前方式 | 优化后 |
|---|---|---|
| 低风险 Bug (1-7级) | 每个都需人工审核 | 自动合并,秒级完成 |
| 高风险 Bug (8-10级) | 人工审核 | 人工审核(保持不变) |
| 整体效率 | 100% 人工介入 | 70% 自动处理 + 30% 人工审核 |
预估比例(基于典型项目)
低风险 Bug (1-7级): 约 70% → 自动合并
高风险 Bug (8-10级): 约 30% → 人工审核
人工工作量
假设每天 20 个 Bug:
- 优化前:20 个 × 3 分钟/个 = 60 分钟
- 优化后:6 个 × 3 分钟/个 = 18 分钟
节省时间:70%
⚙️ 配置示例
# .env 或 settings.py
# Bug 严重等级评估
SEVERITY_THRESHOLD_FOR_REVIEW=8 # ≥8 级需要人工审核
ENABLE_AUTO_MERGE=true # 启用低风险 PR 自动合并
# 严格模式(可选)
STRICT_MODE=false # true: ≥6 级就需审核
📋 FAQ
Q1: AI 评估等级不准确怎么办?
A: 有以下保障措施:
- 阈值可调整:默认 ≥8 级需审核,可根据实际情况调整为 6 或 7
- 人工复核:在 Web 界面可以看到 AI 的判定理由,如果不合理可以手动调整
- 持续优化:收集误判案例,优化 Prompt 模板
- 保守策略:当 AI 无法评估时,默认设为 6 级(中风险),偏向安全
Q2: 自动合并的 PR 出错了怎么办?
A:
- 快速回滚:在 Gitea 可以一键 revert commit
- 降级处理:临时关闭自动合并,所有 PR 都需人工审核
- 监控告警:部署后持续监控错误日志,发现问题立即回滚
Q3: 能否针对不同项目设置不同的阈值?
A: 可以!配置支持项目级覆盖:
# 默认阈值
severity_threshold_for_review: int = 8
# 项目级覆盖
project_severity_thresholds: dict = {
"rtc_backend": 7, # 后端更谨慎
"rtc_web": 8, # 前端正常
"airhub_app": 9, # 移动端更宽松
}
🎯 下一步
- ✅ 实施 Phase 1:实现 AI 分级评估功能
- ✅ 测试验证:运行 50+ Bug 修复,验证分级准确性
- ✅ 调优阈值:根据实际情况调整默认阈值
- ✅ 上线监控:部署后持续监控自动合并的 PR 质量
维护信息:
- 创建:2026-02-25
- 作者:AI + 开发团队
- 审核:待审核