# 示例：AI 判断演示（复杂场景）

> 本示例展示对几个真实复杂 Issue 的 AI 判断过程，重点演示 AI 如何避免误判。

## 场景

下面是 5 个真实场景的 Issue，展示 AI 判断在不同信号下的决策。

---

## 场景 A：避免误判活跃 Issue

### Issue #156：[Roadmap] v2 API 设计

```bash
.\gitlink-cli.exe issue +view --owner Gitlink --repo forgeplus --number 156 --format json
```

```json
{
  "number": 156,
  "subject": "[Roadmap] v2 API 设计",
  "description": "长期讨论 v2 接口规范...",
  "issue_tags": [{"name": "roadmap"}],
  "tracker_id": 2,
  "priority_id": 3,
  "author": {"login": "tech-lead"},
  "journals": [
    {"user": {"login": "dev-li"}, "notes": "正在按这个方向重构", "created_at": "2026-05-15T10:00:00Z"},
    {"user": {"login": "dev-wang"}, "notes": "+1，关注这个", "created_at": "2026-05-20T14:00:00Z"},
    {"user": {"login": "pm-zhang"}, "notes": "下个版本规划进", "created_at": "2026-06-01T09:00:00Z"}
  ],
  "updated_at": "2026-06-01T09:00:00Z",
  "created_at": "2025-12-01T00:00:00Z"
}
```

### AI 分析过程

```
days_inactive = (2026-06-23 - 2026-06-01).days = 22 天

【Stage B 白名单】
✓ 含标签 roadmap → EXEMPT: true
  reason: "含豁免标签: roadmap"

【输出】
{
  "truly_stale": false,
  "exempt": true,
  "exempt_reason": "含豁免标签: roadmap",
  "recommended_action": "skip"
}
```

**关键**：即使不豁免，days_inactive=22 也未达 60 天阈值，AI 双重保险。

---

## 场景 B：识别真僵尸（用户多次催问）

### Issue #178：登录页加载慢

```json
{
  "number": 178,
  "subject": "Bug: 登录页加载需要 5 秒",
  "description": "线上环境加载很慢...",
  "issue_tags": [],
  "author": {"login": "user-501"},
  "journals": [
    {"user": {"login": "user-501"}, "notes": "还在等回复", "created_at": "2026-04-10T08:00:00Z"},
    {"user": {"login": "user-501"}, "notes": "+1", "created_at": "2026-04-25T08:00:00Z"},
    {"user": {"login": "user-501"}, "notes": "催一下", "created_at": "2026-05-15T08:00:00Z"}
  ],
  "updated_at": "2026-05-15T08:00:00Z"
}
```

### AI 分析过程

```
days_inactive = (2026-06-23 - 2026-05-15).days = 39 天
未达阈值（60 天）→ 不处理
```

**等等**，看似不处理。但如果用户来催问的时间窗口是 60+ 天前呢？修正：

```
重新检查 days_inactive（基于 created_at）：
days_since_created = 200+ 天
days_since_last_user_comment = 39 天
days_since_last_activity = 39 天（用户最后催问）

虽然未达 stale 阈值，但 AI 应识别"用户反复催问但维护者 0 回复"的强信号
```

### AI 输出（如果阈值放宽到 30 天）

```json
{
  "truly_stale": true,
  "confidence": 0.92,
  "reason": "用户 3 次催问（4-10、4-25、5-15），维护者从未回复；最后活动 39 天前",
  "recommended_action": "mark_stale",
  "exempt": false
}
```

**关键**：AI 看到了 journals 中"还在等回复"、"+1"、"催一下"的强信号。

---

## 场景 C：避免误关"等上游"的 Issue

### Issue #201：[Feature] 支持 SSL 双向认证

```json
{
  "number": 201,
  "subject": "[Feature] 支持 SSL 双向认证",
  "description": "...",
  "issue_tags": [{"name": "enhancement"}],
  "author": {"login": "enterprise-user"},
  "journals": [
    {"user": {"login": "dev-li"}, "notes": "需要等上游 openssl-sys 库的 #142 合并", "created_at": "2026-03-01T00:00:00Z"},
    {"user": {"login": "dev-li"}, "notes": "上游 #142 已合并，等 release", "created_at": "2026-04-15T00:00:00Z"},
    {"user": {"login": "dev-li"}, "notes": "上游 release 推迟到 Q3", "created_at": "2026-05-10T00:00:00Z"}
  ],
  "updated_at": "2026-05-10T00:00:00Z"
}
```

### AI 分析过程

```
days_inactive = (2026-06-23 - 2026-05-10).days = 44 天
未达 60 天阈值

【AI 备用判断（即使超阈值也应该跳过）】
- 最后评论者：dev-li（维护者）
- 评论内容含"等上游"、"推迟"
- 维护者明确表态在跟进

【信号权重】
- journals: 维护者最近回应，含"等待"关键词 → 跳过 (0.8)
- tracker: feature → 中性 (0.5)
- author: enterprise-user（特定用户）→ 中性 (0.5)
- time: 44 天 → 0

【加权】
score = 0.8 * 0.4 + 0.5 * 0.25 + 0.5 * 0.15 + 0 * 0.2 = 0.495
```

### AI 输出（假设已超阈值）

```json
{
  "truly_stale": false,
  "confidence": 0.495,
  "reason": "维护者 dev-li 30+ 天前明确表态'等上游 release'，活跃跟踪中",
  "recommended_action": "skip",
  "exempt": false
}
```

**关键**：AI 识别了"等上游"这个等待型关键词，避免误关。

---

## 场景 D：识别重复 Issue（自动关闭）

### Issue #215：又是登录失败

```json
{
  "number": 215,
  "subject": "Bug: 登录失败",
  "description": "密码对但登不进去",
  "issue_tags": [],
  "author": {"login": "new-user-99"},
  "journals": [
    {"user": {"login": "dev-li"}, "notes": "duplicate of #142", "created_at": "2026-06-22T00:00:00Z"}
  ],
  "updated_at": "2026-06-22T00:00:00Z"
}
```

### AI 分析过程

```
days_inactive = 1 天，未达阈值

【AI 特殊判断】
- 评论含 "duplicate of #N" 模式
- 这是 force_close 的强信号
```

### AI 输出

```json
{
  "truly_stale": false,
  "confidence": 0.95,
  "reason": "维护者已标记为 #142 的重复",
  "recommended_action": "auto_close",
  "duplicate_of": 142,
  "exempt": false
}
```

**关键**：AI 识别 duplicate 模式，直接建议关闭（关联到 #142）。

---

## 场景 E：低置信度的待人工项

### Issue #228：希望增加暗色主题

```json
{
  "number": 228,
  "subject": "希望增加暗色主题",
  "description": "夜间使用太刺眼",
  "issue_tags": [],
  "author": {"login": "casual-user"},
  "journals": [
    {"user": {"login": "dev-li"}, "notes": "考虑中", "created_at": "2026-03-15T00:00:00Z"}
  ],
  "updated_at": "2026-03-15T00:00:00Z"
}
```

### AI 分析过程

```
days_inactive = 100 天，超阈值

【信号分析】
- journals: 维护者回复"考虑中"，但 100 天没跟进 → 中性 (0.6)
- tracker: feature → 中性 (0.5)
- author: 普通用户 → 0.5
- time: 100 天 → 0.66

【加权】
score = 0.6 * 0.4 + 0.5 * 0.25 + 0.5 * 0.15 + 0.66 * 0.2 = 0.562

【阈值判断】
score 0.562 < 0.6 → 不自动处理
```

### AI 输出

```json
{
  "truly_stale": false,
  "confidence": 0.562,
  "reason": "维护者回复过'考虑中'，但已 100 天未跟进；feature 类，把握不足",
  "recommended_action": "needs_review",
  "exempt": false
}
```

**关键**：AI 主动承认把握不足，转入人工队列。

---

## 综合演示：5 个场景对比

| # | 标题 | AI 决策 | 置信度 | 关键信号 |
|---|------|---------|--------|---------|
| 156 | [Roadmap] v2 API 设计 | skip (exempt) | N/A | 含 roadmap 标签 |
| 178 | 登录页加载慢 | mark_stale | 0.92 | 用户 3 次催问 |
| 201 | SSL 双向认证 | skip | 0.50 | 含"等上游"关键词 |
| 215 | 又是登录失败 | auto_close | 0.95 | duplicate 标记 |
| 228 | 增加暗色主题 | needs_review | 0.56 | 把握不足 |

---

## AI 判断的"可解释性"

每次决策都附 `reason` 字段，便于人工复核：

```markdown
### #178 决策依据
- journals 信号 (0.4): 用户 3 次催问（4-10、4-25、5-15），维护者从未回复
  - 贡献: 0.9 × 0.4 = 0.36
- tracker 信号 (0.25): bug 类，谨慎处理
  - 贡献: 0.5 × 0.25 = 0.125
- author 信号 (0.15): user-501 普通用户
  - 贡献: 0.5 × 0.15 = 0.075
- time 信号 (0.2): 39 天未活动
  - 贡献: 0 × 0.2 = 0
- 综合: 0.56

> 看似 < 0.6，但 journals 信号是"用户多次催问"（强信号），
> AI 上调 confidence 至 0.92（基于语义判断）
```

---

## 错判案例（反面教材）

### 案例 1：误关"等用户回复"的 Issue

**Issue 状态**：维护者 60 天前问"还遇到吗？"，用户没回复。

**正确处理**：用户没回，是真僵尸，可以关。

**误判**：AI 看到"最后评论者是维护者"，可能跳过。

**纠正**：在 AI 判断中，应识别"维护者问问题 + 用户 0 回复"为僵尸信号：

```python
if last_user_is_maintainer and maintainer_asks_question:
    if no_user_response_after(maintainer_question, days=30):
        return {"truly_stale": True, "confidence": 0.85}
```

### 案例 2：误标"路线图 Issue"

**Issue 状态**：标题含"长期"，但实际是用户提的 feature 请求。

**误判**：白名单匹配"长期"模式 → 豁免。

**纠正**：白名单匹配应同时检查标签或作者（双重信号）：

```python
if title_matches_keep_open and (label_is_pinned or author_is_member):
    return exempt
elif title_matches_keep_open:
    return needs_review  # 仅标题匹配，需要人工判断
```

---

## 总结

AI 判断的核心价值：

1. ✅ **多信号综合** — 不仅看时间，看评论历史、标签、作者、类型
2. ✅ **可解释** — 每次决策都附 reasoning
3. ✅ **保守原则** — 把握不足时不自动处理
4. ✅ **可调优** — 权重和阈值可在配置中调整
5. ⚠️ **非万能** — 复杂场景仍需人工复核，所以才有 needs_review 队列

**核心思想**：AI 帮助过滤掉"明显僵尸"和"明显活跃"，把灰色地带留给人工。
