# 2026-05-22 工作日志

## 刘新玉 - 反馈调度链路优化

### AI 归纳质量修复
- **DeepSeek 返回空根因**：`max_tokens: 256` 被 v4-pro 推理（reasoning）全部消耗，实际输出 token=0。修复：`max_tokens` 改为 `1024`
- **空描述回退**：在 `ai_summarize_feedback.py` 的 `generate_descriptions()` 中新增 `generate_fallback_description()`，AI 返回空时回退到关键词规则生成（import `sync_feishu_feedback` 的 `extract_location_elements` + `generate_problem_description`）
- **修复后效果**：4 个簇全部 AI 生成，质量对比规则版提升显著（见下方对照表）

### 2026-05-21 数据修复后的效果对照
| 簇 | 规则版（10:00 群聊） | AI 版（修复后） |
|----|---------------------|----------------|
| #1 (27条) | "在关卡4-4，组件数据丢失" | "U13-4的听力选择题型缺少重点句配置" |
| #2 (9条) | "媒体文件: a8c55e4a3670.png" | "项目中音频文件se_Spaceship_TV_Food存在ogg和mp3格式重名" |
| #3 (4条) | "如果一定要删除一个的话" | "游戏音效存在ogg和mp3两个文件，实际播放调用mp3" |
| #4 (2条) | "图片 (1/1)" | "无明确问题" |

### 新调度流程（明天 5/23 生效）
```
10:00 → sync(步骤1-6) + 保存 context.json + 生成占位符文档 ❌不分发
10:05 → DeepSeek 归纳 → 回写文档 → 📨分发到小葵小葵群
```

### "今日问题拆解"逻辑梳理
刘新玉查看了文档效果，分析了三个关键生成逻辑：
1. **聚类 (sort_threads)**：Union-Find 算法，直接引用+推断引用。当前问题：簇#1 27条消息多个不同话题被合并
2. **结论提取 (extract_conclusion)**：关键词匹配（"已修复"→已修复，"设计如此"→非问题等）。当前问题：簇#1 多个子问题被一个结论覆盖
3. **发言人标记**：🚩 标记首条消息发送者，✅ 标记末条消息发送者。多子问题长对话时标记不准

### 已知待优化问题
1. 簇 #1 话题混杂（U13知识点 + 音频跟读 + Spine bug）
2. 簇 #2 和 #3 本质是同一问题（ogg/mp3重名），被拆成两个簇
3. 结论提取用关键词导致"设计如此"覆盖了不同子问题的结论
4. 刘新玉尚未给出具体优化方向

### 修改的文件
- `/root/.openclaw/workspace-xiaokui/scripts/ai_summarize_feedback.py` — max_tokens 256→1024，新增 generate_fallback_description，import sync_feishu_feedback 用于回退
- `/root/.openclaw/workspace-xiaokui/scripts/sync_feishu_feedback_wrapper.sh` — 10:00 任务改为 --ai-placeholders --skip-dispatch
- `/root/.openclaw/workspace-xiaokui/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py` — --apply-ai 回写成功后新增 dispatch_summary_to_chat 分发
# 2026-05-22 工作日志

## 刘新玉 - 反馈调度链路优化

### AI 归纳质量修复
- **DeepSeek 返回空根因**：`max_tokens: 256` 被 v4-pro 推理（reasoning）全部消耗，实际输出 token=0。修复：`max_tokens` 改为 `1024`
- **空描述回退**：在 `ai_summarize_feedback.py` 的 `generate_descriptions()` 中新增 `generate_fallback_description()`，AI 返回空时回退到关键词规则生成（import `sync_feishu_feedback` 的 `extract_location_elements` + `generate_problem_description`）
- **修复后效果**：4 个簇全部 AI 生成，质量对比规则版提升显著（见下方对照表）

### 2026-05-21 数据修复后的效果对照
| 簇 | 规则版（10:00 群聊） | AI 版（修复后） |
|----|---------------------|----------------|
| #1 (27条) | "在关卡4-4，组件数据丢失" | "U13-4的听力选择题型缺少重点句配置" |
| #2 (9条) | "媒体文件: a8c55e4a3670.png" | "项目中音频文件se_Spaceship_TV_Food存在ogg和mp3格式重名" |
| #3 (4条) | "如果一定要删除一个的话" | "游戏音效存在ogg和mp3两个文件，实际播放调用mp3" |
| #4 (2条) | "图片 (1/1)" | "无明确问题" |

### 新调度流程（明天 5/23 生效）
```
10:00 → sync(步骤1-6) + 保存 context.json + 生成占位符文档 ❌不分发
10:05 → DeepSeek 归纳 → 回写文档 → 📨分发到小葵小葵群
```

### "今日问题拆解"逻辑梳理
刘新玉查看了文档效果，分析了三个关键生成逻辑：
1. **聚类 (sort_threads)**：Union-Find 算法，直接引用+推断引用。当前问题：簇#1 27条消息多个不同话题被合并
2. **结论提取 (extract_conclusion)**：关键词匹配（"已修复"→已修复，"设计如此"→非问题等）。当前问题：簇#1 多个子问题被一个结论覆盖
3. **发言人标记**：🚩 标记首条消息发送者，✅ 标记末条消息发送者。多子问题长对话时标记不准

### 已知待优化问题
1. 簇 #1 话题混杂（U13知识点 + 音频跟读 + Spine bug）
2. 簇 #2 和 #3 本质是同一问题（ogg/mp3重名），被拆成两个簇
3. 结论提取用关键词导致"设计如此"覆盖了不同子问题的结论
4. 刘新玉尚未给出具体优化方向

### 修改的文件
- `/root/.openclaw/workspace-xiaokui/scripts/ai_summarize_feedback.py` — max_tokens 256→1024，新增 generate_fallback_description，import sync_feishu_feedback 用于回退
- `/root/.openclaw/workspace-xiaokui/scripts/sync_feishu_feedback_wrapper.sh` — 10:00 任务改为 --ai-placeholders --skip-dispatch
- `/root/.openclaw/workspace-xiaokui/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py` — --apply-ai 回写成功后新增 dispatch_summary_to_chat 分发

## 刘新玉 - 聚类/结论/发言人三项优化（5/22 上午）

### 聚类优化
- **内容相似度校验**：`infer_missing_references` 策略2（同发送者）和策略3（最近不同发送者）加入 `content_similarity()` 校验，低于 `SIMILARITY_FLOOR=0.08` 不建立推断引用
- **超大簇拆分**：新增 `split_oversized_clusters()`，对超过 `MAX_CLUSTER_MSGS=15` 条的簇按相邻消息内容相似度找边界拆分
- **相似度算法**：中文2字以上词 + 英文3字以上词的 Jaccard 系数，过滤停用词（收到/好的/明白等）
- **拆分层数限制**：最多拆3次，每段至少3条消息，以 sender 切换 + 相似度 < 0.05 为边界

### 结论提取优化
- `extract_conclusion` 对 >8 条消息的簇改为聚焦后 30% 消息（至少3条），避免前面无关结论污染

### 发言人标记优化
- `summarize_cluster` 新增 `is_topic_initiator()` 检测函数，识别话题切换点并用 📌 标记多话题发起者
- 判定逻辑：非首发言人、非简单回复（屏蔽"好的/收到/OK"等）、发送者切换、含问题特征关键词

### 2026-05-21 回归验证结果
| 指标 | 优化前 | 优化后 |
|------|--------|--------|
| 簇数 | 4 | 7 |
| 最大簇 | 27条 | 12条 |
| ogg/mp3 问题 | 拆成2个簇 | 合并为1个簇 ✅ |
| Spine bug | 混在U13里丢失 | 独立为簇 #7 ✅ |
| U13知识点 | 和音频/Spline混 | 独立为簇 #2 + #4 ✅ |

### 新增常量/函数
- `SIMILARITY_FLOOR = 0.08`、`MAX_CLUSTER_MSGS = 15`
- `content_similarity(text1, text2)`、`split_oversized_clusters(clusters_dict)`、`is_topic_initiator(prev_name, name, text)`
- 修改：`infer_missing_references()`、`extract_conclusion()`、`summarize_cluster()`、`sort_threads()`

## 刘新玉 - 分发文档链接修复（5/22 11:20）

### 问题
分发到小葵小葵群的文档链接硬编码为总文档 `RaL6whoYMijyYHkSlWrc7OLLnBy`，而非当天子文档

### 修复
- `dispatch_summary_to_chat()` 新增 `doc_url` 参数
- `--apply-ai` 流程：从 `list_child_nodes()` 返回的 `nodes[title]["node_token"]` 构造链接
- `main()` 分发循环：同上，对每个 day 查 `list_child_nodes()` 获取对应 node_token
- 链接格式：`https://makee-interactive.feishu.cn/wiki/{node_token}`

## 刘新玉 - AI 描述人名脱敏（5/22 11:30）

### 问题
问题描述中包含员工姓名"江涛"

### 修复（两层防护）
1. **System Prompt** 新增规则6：严禁出现员工姓名，用"某角色/某员工"替代
2. **`strip_names(description, cluster_data)` 后处理**：
   - 步骤1：从 cluster 提取发送者姓名，精确替换
   - 步骤2：姓氏 + 1个中文字符模式匹配，排除内容词白名单（文件/资源/游戏/动画/设计等50+词）
   - 替换为"相关人员"

### 修复效果（簇 #7）
| 修复前 | 修复后 |
|--------|--------|
| "角色江涛的spine动画中，眼睛设计应为睁开但实际显示为闭眼。" | "Spine动画中角色眼睛呈现闭眼状态，与设计不符。" |
## 刘新玉 - 反馈流程完整概览（5/22 12:00）

### 全链路三层架构
```
采集层 → 每5分钟(飞书群同步) / 每分钟(微信群导出+P0检测)
汇总层 → 每天 10:00(飞书) 10:02(微信)  聚类+归纳+写入知识库
AI层   → 每天 10:05(飞书) 10:07(微信)  DeepSeek生成描述+回写+分发群聊
```

### 时间线
| 时间 | 飞书 | 微信 |
|------|------|------|
| 10:00 | sync_feishu_feedback (占位符,不分发) | — |
| 10:02 | — | sync_wechat_feedback (占位符,不分发) |
| 10:05 | ai_summarize_feedback (回写+分发) | — |
| 10:07 | — | ai_summarize_feedback --channel wechat (回写+分发) |

## 刘新玉 - 微信反馈同步系统搭建（5/22 下午）

### 背景
刘新玉要求微信用户反馈流程与飞书一致（收集→整理→归纳→分发），之前微信只有 MySQL 入库和每分钟同步到表格。

### 新增文件
- `scripts/sync_wechat_feedback.py` — 微信同步脚本，复用飞书所有逻辑（聚类/优先级/归纳/分发），仅替换数据源和文档目标
- `scripts/sync_wechat_feedback_wrapper.sh` — crontab wrapper

### 改动文件
- `skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py` — `update_summary_doc_as_children()` 新增 `title_prefix` 参数，支持 "微信-" 前缀
- `scripts/ai_summarize_feedback.py` — 新增 `--channel wechat` 参数，支持微信专属上下文路径和回写脚本

### 微信数据映射
```
wechat_group_message → sync_wechat_feedback.fetch_wechat_data() → 统一元组格式
svr_msg_id → message_id (r[0])
sender_name → sender_name (r[1])
msg_type → msg_type (r[2])
content → content (r[3])
media_url → media_url (r[4])
refer_msg_svrid → quote_message_id (r[5])
msg_time → msg_time (r[6])
msg_timestamp → msg_timestamp (r[7])
```

### 知识库结构
| 文档 | node_token | 父文档 | 用途 |
|------|-----------|--------|------|
| 飞书问题反馈 | FOxgwkVtLiTl3ZkrkIXcT8T2nJg | SB3dwaSshie7ifklKlLc2GswnqX | 飞书原始数据 |
| 微信问题反馈 | R4HRwNU42iwH1Hk3OMCcB6i7n1u | SB3dwa... | 微信原始数据 |
| 飞书用户反馈问题汇总 | RaL6whoYMijyYHkSlWrc7OLLnBy | SB3dwa... | 飞书每日归纳 |
| 微信用户反馈问题汇总 | XhtGwjitFizzCNkw8Xzc2IXsnuf | SB3dwa... | 微信每日归纳 |

### 飞书表格
| 表格 | sheet token | 用途 |
|------|-------------|------|
| 内容测试问题反馈 | AHtnsehwShUVyDtjasSciIvgn7b | 飞书导出 |
| 用户救火群 | RUXfsytPzhJO5kt2uwCcvdIgnLg | 微信导出 |

### WeChat 2026-05-21 测试结果
- 62 条消息 → 28 个初始簇 → 10 个有效簇（≥2条）
- P0: 3 个（阅读问题、发音问题）— 自动判定正常
- AI 归纳 dry-run 通过，占位符替换逻辑正确

### 待确认
- 微信 crontab 条目是否已添加 ✅ 全部就位
- 微信父文档 `XhtGwjitFizzCNkw8Xzc2IXsnuf` 下子文档创建权限 ✅ 已验证
- 飞书总文档名称是否需要更新为 "飞书用户反馈问题汇总"（当前显示为 "用户反馈问题汇总"）
