# 2026-05-21 工作日志

## P0 实时检测与推送 [刘新玉需求]

### 背景
- 原有两个每分钟 crontab 任务已被注释（5/11），因为每次全量重跑浪费资源且 P0 会重复推送
- 刘新玉要求做真正的增量 P0 实时分发

### 完成事项
1. ✅ 新建 `scripts/detect_p0_realtime.py`（~200行）：
   - 复用 `sync_feishu_feedback.py` 的聚类逻辑 + `priority_classifier.py` 的优先级判定
   - 查询最近 2 小时消息 → 聚类 → 判定 P0 → 去重（簇签名 MD5）→ 推送
   - 去重状态存在 `tmp/p0_dispatched_state.json`，24 小时自动过期
   - 每天 10:00-10:01 自动清空去重，配合全量分发
2. ✅ crontab 每分钟执行：`* * * * * python3 detect_p0_realtime.py`
3. ✅ 步骤 4-6 不做每分钟恢复（增量改造成本高，日汇总实时性需求弱）

### AI 归纳流程修复 [刘新玉需求]

### 背景
- 5/15 问题描述出现严重退化：问题一变成"可以在这里Po问题"（元指令文本），问题二变成"图片 (1/1)"
- 根因：(1) 关键词模式只能覆盖约 8 类症状，不匹配时退化到首条消息原文 (2) AI 归纳靠心跳触发，5/15 当天漏执行

### 完成事项
1. ✅ 新建 `scripts/ai_summarize_feedback.py`：
   - 读取 `cluster_context_{date}.json`，调用 DeepSeek API（deepseek-v4-pro）生成精炼问题描述
   - 保存 `ai_descriptions_{date}.json` → 调用 `--apply-ai` 回写到知识库
   - 回写后自动清理 context 文件
2. ✅ crontab 每天 10:05 执行（在 10:00 全量同步之后）
3. ✅ HEARTBEAT.md 移除 AI 归纳任务（已由 crontab 接管）
4. ✅ 扩展 `generate_problem_description()` 关键词覆盖：
   - 新增：语音识别/判分、内容/命名缺失、后台弹窗残留、网络/VPN、热更/打包/测试包
   - 新增：后台加载场景识别
   - 5/15 验证：问题一从"可以在这里Po问题"→"语音识别不准确（对话表达，只识别成错误内容）"；问题二从"图片 (1/1)"→"后台加载提示/弹窗未自动消失，持续显示 需确认是否因 VPN/网络代理导致"
5. ✅ 未启用步骤 4-6 每分钟执行（理由同刘新玉确认）

### 调度总览（更新后）
```
每 5 分钟 → 群消息同步入 MySQL
每分钟    → P0 实时检测 + 增量推送
每分钟    → 反馈数据实时导出到表格
每天 10:00 → 全量七步处理 + 全量分发
每天 10:05 → AI 归纳（DeepSeek 生成描述 → 回写文档）
```
# 2026-05-21 工作日志

## P0 实时检测与推送 [刘新玉需求]

### 背景
- 原有两个每分钟 crontab 任务已被注释（5/11），因为每次全量重跑浪费资源且 P0 会重复推送
- 刘新玉要求做真正的增量 P0 实时分发

### 完成事项
1. ✅ 新建 `scripts/detect_p0_realtime.py`（~200行）：
   - 复用 `sync_feishu_feedback.py` 的聚类逻辑 + `priority_classifier.py` 的优先级判定
   - 查询最近 2 小时消息 → 聚类 → 判定 P0 → 去重（簇签名 MD5）→ 推送
   - 去重状态存在 `tmp/p0_dispatched_state.json`，24 小时自动过期
   - 每天 10:00-10:01 自动清空去重，配合全量分发
2. ✅ crontab 每分钟执行：`* * * * * python3 detect_p0_realtime.py`
3. ✅ 步骤 4-6 不做每分钟恢复（增量改造成本高，日汇总实时性需求弱）

### AI 归纳流程修复 [刘新玉需求]

### 背景
- 5/15 问题描述出现严重退化：问题一变成"可以在这里Po问题"（元指令文本），问题二变成"图片 (1/1)"
- 根因：(1) 关键词模式只能覆盖约 8 类症状，不匹配时退化到首条消息原文 (2) AI 归纳靠心跳触发，5/15 当天漏执行

### 完成事项
1. ✅ 新建 `scripts/ai_summarize_feedback.py`：
   - 读取 `cluster_context_{date}.json`，调用 DeepSeek API（deepseek-v4-pro）生成精炼问题描述
   - 保存 `ai_descriptions_{date}.json` → 调用 `--apply-ai` 回写到知识库
   - 回写后自动清理 context 文件
2. ✅ crontab 每天 10:05 执行（在 10:00 全量同步之后）
3. ✅ HEARTBEAT.md 移除 AI 归纳任务（已由 crontab 接管）
4. ✅ 扩展 `generate_problem_description()` 关键词覆盖：
   - 新增：语音识别/判分、内容/命名缺失、后台弹窗残留、网络/VPN、热更/打包/测试包
   - 新增：后台加载场景识别
   - 5/15 验证：问题一从"可以在这里Po问题"→"语音识别不准确（对话表达，只识别成错误内容）"；问题二从"图片 (1/1)"→"后台加载提示/弹窗未自动消失，持续显示 需确认是否因 VPN/网络代理导致"
5. ✅ 未启用步骤 4-6 每分钟执行（理由同刘新玉确认）

### 调度总览（更新后）
```
每 5 分钟 → 群消息同步入 MySQL
每分钟    → P0 实时检测 + 增量推送
每分钟    → 反馈数据实时导出到表格
每天 10:00 → 全量七步处理 + 全量分发
每天 10:05 → AI 归纳（DeepSeek 生成描述 → 回写文档）
```

---

## 历史数据回写（2026-05-11 ~ 2026-05-19）[刘新玉需求]

### 需求
- 刘新玉要求回写 5/11~5/19 共 9 天的"问题描述"为 AI 归纳版本，验证效果

### 工具
- 新建 `scripts/backfill_ai_descriptions.py`：循环处理多天，读MySQL→聚类→DeepSeek生成描述→覆盖写入知识库子文档
- 包含 AI 失败回退机制：空描述/无意义输出自动回退到关键词 `generate_problem_description`

### 结果
| 日期 | 问题数 | AI 归纳质量 |
|------|--------|------------|
| 5/11 | 2个(P1+P2) | ✅ Spine动画屏幕适配、U级别显示数字 |
| 5/12 | 3个(P0+P2) | ✅ Hotfix卡加载、关卡场景物丢失 |
| 5/13 | 2个(P2) | ✅ 单元名显示问号占位 |
| 5/14 | 1个(P2) | ✅ AI正确识别为无实质问题 |
| 5/15 | 2个(P2) | ✅ 语音识别"a bee"→"a b"、后台加载提示不消失 |
| 5/16-17 | 无消息 | 周末 |
| 5/18 | 1个(P0) | ✅ 热更后无法进入测试包 |
| 5/19 | 2个(P2) | ✅ 图片多选数量不匹配、配置URL报错 |

### 关键发现
- **5/15 对比**：关键词版吐出"可以在这里Po问题"，AI版准确归纳为「"a bee"被语音识别成"a b"」和「后台加载提示持续显示无法消失」
- **5/14**：AI正确识别当天无实质问题（闲聊/确认类消息），未强行生成描述
- **AI 偶尔失败需 fallback**：5/12有一个簇 AI 返回空，成功回退到关键词生成「【频繁】移动端关卡4-28内应用无法打开，疑似网络/VPN导致」

### 文件清单（本次新建/修改）
```
scripts/ai_summarize_feedback.py       # 日常 AI 归纳脚本（crontab 用）
scripts/backfill_ai_descriptions.py    # 批量回写脚本
skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py  # 关键词覆盖扩展
HEARTBEAT.md                           # 移除 AI 归纳心跳任务
```
