log-center/docs/bug-severity-grading-system.md
zyc 5611839fd8
Some checks failed
Build and Deploy Log Center / build-and-deploy (push) Failing after 1m55s
fix git pr
2026-02-25 10:55:26 +08:00

672 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bug 严重等级分级系统
> 文档版本: v1.0
> 创建日期: 2026-02-25
> 用途: AI 自动评估 Bug 严重程度,决定是否需要人工审核
---
## 📊 分级概述
### 等级范围
**1-10 级**,数字越大表示风险越高
| 等级 | 风险级别 | 审核方式 | 典型场景 |
|------|----------|----------|----------|
| **10** | 🔴 极高风险 | 必须人工审核 | 支付、认证、数据泄露 |
| **9** | 🔴 极高风险 | 必须人工审核 | 核心业务逻辑 |
| **8** | 🟠 高风险 | 人工审核(默认阈值) | 复杂业务流程 |
| **7** | 🟠 高风险 | 人工审核 | 数据库操作 |
| **6** | 🟡 中风险 | 自动合并 | 一般业务逻辑 |
| **5** | 🟡 中风险 | 自动合并 | API 参数验证 |
| **4** | 🟢 低风险 | 自动合并 | 非关键功能 |
| **3** | 🟢 低风险 | 自动合并 | UI 显示问题 |
| **2** | 🔵 极低风险 | 自动合并 | 语法错误 |
| **1** | 🔵 极低风险 | 自动合并 | 代码格式 |
### 默认审核阈值
```python
# 配置项
severity_threshold_for_review: int = 8 # ≥8 级需要人工审核
```
---
## 🎯 详细分级标准
### Level 10极高风险必须人工审核
#### 特征
**涉及资金安全:**
- 支付、充值、提现相关代码
- 订单金额计算逻辑
- 优惠券、折扣计算
- 余额、积分操作
**涉及数据安全:**
- 用户认证登录、注册、Token
- 权限控制admin 权限、角色管理)
- 敏感数据加密/解密
- 数据库备份/恢复
**系统稳定性:**
- 可能导致服务不可用
- 可能导致系统崩溃
- 数据库连接池管理
#### 示例
```python
# ❌ 极高风险:支付金额计算错误
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 判定输出示例
```json
{
"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
- 批次管理逻辑
**数据一致性:**
- 数据库事务处理
- 外键关联操作
- 批量更新操作
- 数据迁移脚本
**复杂业务流程:**
- 多步骤业务流程
- 涉及多个模块交互
- 状态机流转逻辑
#### 示例
```python
# ⚠️ 高风险:设备绑定逻辑
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 判定输出示例
```json
{
"severity_level": 8,
"severity_label": "高风险",
"risk_category": "核心业务逻辑",
"reasoning": [
"修改了设备绑定流程,属于核心业务",
"未充分检查边界条件(设备已绑定的情况)",
"修改涉及 Device 模型的状态流转",
"测试用例覆盖了基本场景,但缺少异常场景测试"
],
"recommendation": "建议人工审核业务逻辑,并补充异常场景测试",
"business_impact": "可能导致设备重复绑定或状态异常",
"rollback_difficulty": "中等"
}
```
---
### Level 5-7中风险自动合并但需关注
#### 特征
**一般业务逻辑:**
- 非核心功能的实现
- API 参数验证和错误处理
- 数据查询和过滤逻辑
- 边界条件处理
**API 层问题:**
- 请求参数验证
- 响应格式化
- 错误码定义
- 分页逻辑
#### 示例
```python
# 🟡 中风险:参数验证
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 判定输出示例
```json
{
"severity_level": 6,
"severity_label": "中风险",
"risk_category": "API 参数验证",
"reasoning": [
"修改了 API 参数验证逻辑",
"未影响核心业务流程",
"测试覆盖充分,包含边界条件",
"修改范围小,仅涉及单个 API 端点"
],
"recommendation": "可以自动合并,建议后续监控生产环境日志",
"business_impact": "可能导致参数错误时返回不友好的错误信息",
"rollback_difficulty": "容易"
}
```
---
### Level 3-4低风险自动合并
#### 特征
**UI 和展示:**
- 前端显示问题
- 错误提示文案
- 日志输出格式
**非关键功能:**
- 辅助工具函数
- 测试代码修复
- 文档更新
#### 示例
```python
# 🟢 低风险:日志输出
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 判定输出示例
```json
{
"severity_level": 3,
"severity_label": "低风险",
"risk_category": "日志和提示",
"reasoning": [
"仅修改了日志输出格式",
"不影响业务逻辑",
"不涉及数据操作",
"测试通过"
],
"recommendation": "可以自动合并,无需人工审核",
"business_impact": "无明显影响",
"rollback_difficulty": "容易"
}
```
---
### Level 1-2极低风险自动合并
#### 特征
**语法和格式:**
- Import 语句错误
- 拼写错误
- 代码格式问题(空格、换行)
- 注释错误
**构建和依赖:**
- requirements.txt 更新
- Dockerfile 格式修复
- CI/CD 配置优化
#### 示例
```python
# 🔵 极低风险Import 错误
# Bug: from django.contrib.auth import User
from django.contrib.auth.models import User # 修复
# 🔵 极低风险:拼写错误
def get_devcie_list(): # Bug: devcie → device
pass
```
#### AI 判定输出示例
```json
{
"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`
```markdown
你是一个 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
## 判断依据
请综合考虑以下因素:
1. **业务重要性** (权重 30%)
- 是否涉及核心业务流程?(设备管理、智能体、用户绑定)
- 是否影响用户核心功能?
2. **安全风险** (权重 30%)
- 是否涉及敏感数据?(用户信息、Token)
- 是否涉及资金相关?(虽然当前项目可能不涉及)
- 是否可能导致权限绕过?
3. **影响范围** (权重 20%)
- 影响多少用户?(全部/部分/极少数)
- 影响多少模块?(单模块/多模块)
- 是否影响数据一致性?
4. **修复质量** (权重 10%)
- 测试是否充分?
- 修复方案是否合理?
- 是否引入新的风险?
5. **回滚难度** (权重 10%)
- 如果出错,回滚是否容易?
- 是否涉及数据迁移?
## 输出格式
请严格按照以下 JSON 格式输出(在最后一行):
```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 修复报告
```json
{
"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%
```
---
## ⚙️ 配置示例
```python
# .env 或 settings.py
# Bug 严重等级评估
SEVERITY_THRESHOLD_FOR_REVIEW=8 # ≥8 级需要人工审核
ENABLE_AUTO_MERGE=true # 启用低风险 PR 自动合并
# 严格模式(可选)
STRICT_MODE=false # true: ≥6 级就需审核
```
---
## 📋 FAQ
### Q1: AI 评估等级不准确怎么办?
**A:** 有以下保障措施:
1. **阈值可调整**:默认 ≥8 级需审核,可根据实际情况调整为 6 或 7
2. **人工复核**:在 Web 界面可以看到 AI 的判定理由,如果不合理可以手动调整
3. **持续优化**:收集误判案例,优化 Prompt 模板
4. **保守策略**:当 AI 无法评估时,默认设为 6 级(中风险),偏向安全
### Q2: 自动合并的 PR 出错了怎么办?
**A:**
1. **快速回滚**:在 Gitea 可以一键 revert commit
2. **降级处理**:临时关闭自动合并,所有 PR 都需人工审核
3. **监控告警**:部署后持续监控错误日志,发现问题立即回滚
### Q3: 能否针对不同项目设置不同的阈值?
**A:** 可以!配置支持项目级覆盖:
```python
# 默认阈值
severity_threshold_for_review: int = 8
# 项目级覆盖
project_severity_thresholds: dict = {
"rtc_backend": 7, # 后端更谨慎
"rtc_web": 8, # 前端正常
"airhub_app": 9, # 移动端更宽松
}
```
---
## 🎯 下一步
1.**实施 Phase 1**:实现 AI 分级评估功能
2.**测试验证**:运行 50+ Bug 修复,验证分级准确性
3.**调优阈值**:根据实际情况调整默认阈值
4.**上线监控**:部署后持续监控自动合并的 PR 质量
---
**维护信息:**
- 创建2026-02-25
- 作者AI + 开发团队
- 审核:待审核