# 2026-05-27 工作日志

## 用户反馈同步故障排查与修复 [刘新玉反馈]

### 问题
5月26日飞书/微信用户反馈定时任务出现回写失败。

### 根因
1. **Python 缓存过期** — `ai_summarize_feedback.py` 中 `subprocess` 模块导入失败（`NameError: name 'subprocess' is not defined`），实际源码有 `import subprocess`，但 `__pycache__` 中的旧 `.pyc` 未包含此导入
2. **sync_wechat_feedback.py** — 同样因缓存问题导致 `with open(tmp_md)` 写入失败

### 修复
- 清理了工作区内所有 `__pycache__` 和 `.pyc` 文件
- 重新执行飞书 AI 归纳回写：`sync_feishu_feedback.py --date 2026-05-26 --apply-ai`
- 重新执行微信 AI 归纳回写：`sync_wechat_feedback.py --date 2026-05-26 --apply-ai`
- 两个渠道均成功回写并分发到「小葵小葵」群

### 分发架构确认
| 渠道 | 10:00/10:02 Wrapper | 10:05/10:07 AI 归纳 |
|------|---------------------|---------------------|
| 飞书 | `--dispatch-mode all` → 分发占位符 | `--apply-ai` → 替换占位符+重新分发 |
| 微信 | `--skip-dispatch` → 不分发 | `--apply-ai` → 替换占位符+分发 |

微信依赖 AI 归纳成功才能分发，飞书双重分发（占位符+AI）。

### 5月26日反馈概况
- 飞书：17条消息，3个问题簇（2个有效：录音识别率低、飞船音乐不保存）
- 微信：27条消息，14个问题簇（4个有效：飞船音乐、录音识别、音频无法播放、AI回复无关语句）

### 后续注意
- 删除/修改 `ai_summarize_feedback.py` 后需清理 `__pycache__`，否则缓存版本可能落后于源码

## P0 实时检测去重修复 [刘新玉反馈]

### 问题
微信 `detect_p0_wechat.py` 每分钟扫描最近120分钟消息，同一个问题因讨论线程持续生长，`sort_threads` 聚类每次产生不同消息集合，导致：
- 不同次的聚类有不同的 `cluster_signature`（基于 `sorted(message_ids)` MD5）
- 去重完全失效，同一问题被重复推送（今天2个真实问题各推了3次 = 6次）

### 修复
在 `detect_p0_wechat.py` 和 `detect_p0_realtime.py` 中增加**内容语义去重**：
1. 新增 `cluster_content_fingerprint()`：拼接簇内前5条有意义消息作为内容指纹 + 发送人集合 + 小时粒度时间窗口
2. 新增 `is_duplicate_p0()`：基于内容相似度（Jaccard）+ 发送人重叠 + 时间窗口三层判断
   - 同小时 + 发送人交集 + 内容相似度 > 0.20 → 重复
   - 发送人高度重叠(≥2) + 内容相似度 > 0.35 → 跨小时重复
3. 状态文件改为 `{"time": ..., "fp": {...}}` 格式存储指纹信息
4. 飞书 P0 检测器同步修复

### 测试验证
360分钟窗口测试：同一话题在不同扫描窗口下签名不同（c69d... vs 70a4...），但内容指纹正确识别为重复（相似度 0.462，is_duplicate=True）
