diff --git a/.vala_skill_hashes b/.vala_skill_hashes index 5432899..cdf422c 100644 --- a/.vala_skill_hashes +++ b/.vala_skill_hashes @@ -14,4 +14,4 @@ user-feedback-collector c0320451bf7ea0ce3d8ceaa603ae0a7b55c373c048363a5142258a4c user-feedback-data-source a95eb9142f3019fd193c46f89147dc7e0bf01dfe250202565a86f8bc52f37b13 user-feedback-processor 61783a8e9f03a973c187b359a87749ad1993dc71f8364b0a853d8b3ff64c75e8 feishu-group-msg-sync 1b581de76d419e6a33db0836125efc16ef2c972013fcae6f08c03aa7e2276445 -feishu-feedback-sync f00631ca2f9ed68c139b6dd0b08992bc937576db27c001aac72a3edb3a2e108e +feishu-feedback-sync 9c9ca1f0c42a289e037289cd394299b7debf7e240d3b30429899da42b601d953 diff --git a/data/last_wechat_sync_id b/data/last_wechat_sync_id index 27c71ca..f4236d2 100644 --- a/data/last_wechat_sync_id +++ b/data/last_wechat_sync_id @@ -1 +1 @@ -1647 +1674 diff --git a/memory/.dreams/events.jsonl b/memory/.dreams/events.jsonl index d38f305..38e49ae 100644 --- a/memory/.dreams/events.jsonl +++ b/memory/.dreams/events.jsonl @@ -19,3 +19,5 @@ {"type":"memory.recall.recorded","timestamp":"2026-05-25T02:22:57.258Z","query":"小葵小葵群 问题反馈 发送消息 定时任务 5月23日","resultCount":1,"results":[{"path":"memory/2026-04-18.md","startLine":1,"endLine":5,"score":1}]} {"type":"memory.recall.recorded","timestamp":"2026-05-25T02:22:57.259Z","query":"crontab 定时 上午10点 反馈 群发","resultCount":5,"results":[{"path":"memory/2026-05-21.md","startLine":58,"endLine":77,"score":1},{"path":"memory/2026-05-09.md","startLine":17,"endLine":37,"score":1},{"path":"memory/2026-05-21.md","startLine":35,"endLine":64,"score":1},{"path":"memory/2026-05-21.md","startLine":1,"endLine":26,"score":1},{"path":"memory/2026-05-21.md","startLine":22,"endLine":42,"score":1}]} {"type":"memory.recall.recorded","timestamp":"2026-05-25T07:11:25.527Z","query":"微信反馈 全链路 cron 采集 整理 归纳 分发","resultCount":3,"results":[{"path":"memory/2026-05-25.md","startLine":21,"endLine":42,"score":1},{"path":"memory/2026-05-25.md","startLine":38,"endLine":44,"score":1},{"path":"memory/2026-05-22.md","startLine":129,"endLine":158,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-26T03:40:13.634Z","query":"微信飞书问题汇总 小葵小葵群 发送汇总","resultCount":3,"results":[{"path":"memory/2026-05-25.md","startLine":21,"endLine":42,"score":1},{"path":"memory/2026-05-25.md","startLine":38,"endLine":44,"score":1},{"path":"memory/2026-05-22.md","startLine":129,"endLine":158,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-26T03:40:24.708Z","query":"小葵小葵群 chat_id 分发消息群","resultCount":1,"results":[{"path":"memory/2026-04-18.md","startLine":1,"endLine":5,"score":1}]} diff --git a/memory/.dreams/short-term-recall.json b/memory/.dreams/short-term-recall.json index 9ce57c3..94a4cb6 100644 --- a/memory/.dreams/short-term-recall.json +++ b/memory/.dreams/short-term-recall.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-05-25T07:11:25.527Z", + "updatedAt": "2026-05-26T03:40:24.708Z", "entries": { "memory:memory/2026-04-18.md:1:5": { "key": "memory:memory/2026-04-18.md:1:5", @@ -9,26 +9,28 @@ "endLine": 5, "source": "memory", "snippet": "# 2026-04-18 工作日志 ## 术语共识 [李若松确认] 术语「飞书反馈消息数据库」默认指代用户反馈收集技能中的飞书内部测试反馈MySQL数据表 `vala_test.lark_group_message`,存储「内容测试问题反馈」群(oc_fabff7672e62a9ced7b326ee4a286c26)的同步消息数据。", - "recallCount": 6, + "recallCount": 7, "dailyCount": 0, "groundedCount": 0, - "totalScore": 6, + "totalScore": 7, "maxScore": 1, "firstRecalledAt": "2026-04-30T03:47:21.989Z", - "lastRecalledAt": "2026-05-25T02:22:57.258Z", + "lastRecalledAt": "2026-05-26T03:40:24.708Z", "queryHashes": [ "353f9765c086", "a6b740c99377", "9625ed0029fd", "f865295b9ac7", "42fe8210f22c", - "81f7a2647922" + "81f7a2647922", + "261597c52d5b" ], "recallDays": [ "2026-04-30", "2026-05-06", "2026-05-07", - "2026-05-25" + "2026-05-25", + "2026-05-26" ], "conceptTags": [ "vala-test.lark-group-message", @@ -887,18 +889,20 @@ "endLine": 42, "source": "memory", "snippet": "- `update_summary_doc_as_children()` 默认 title_prefix 从 `\"\"` 改为 `\"飞书-\"` - `create_child_doc()` 日期提取兼容 `飞书-` / `微信-` 前缀 - `dispatch_summary_to_chat()` 消息标题和链接同步更新 - `get_today_doc_obj_token()`、`--apply-ai` 路径、步骤7分发 的标题格式全部更新 ### 补跑历史数据 - 飞书 5/22(3条)、5/23(1条)AI归纳回写成功 + 自动分发到群聊 - 飞书 5/24:当天无飞书群新数据,跳过 - 微信 5/22(23条)、5/23(13条)、5/24(29条)AI归纳回写成功 + 自动分发 ### 知识库文档重命名 - 13个飞书历史文档(5/6-5/23)从 `{date} 问题反馈` 重命名为 `飞书-{date} 用户反馈问题归纳` ## 新增逻辑:飞书/微信文档标题渠道区分 - [刘新玉需求] 飞书文档标题加 `飞书-` 前缀以便与微信区分 - 飞书格式:`飞书-{date} 用户反馈问题归纳` - 微信格式:保持 `微信-{date} 问题反馈`(由 `sync_wechat_feedback.py` 传入 `title_prefix=\"微信-\"`) - `update_summary_doc_as_children()` 默认 `title_prefix=\"飞书-\"`,微信调用时显式覆盖为 `\"微信-\"` - `create_child_doc()` 日期提取已兼", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-25T07:11:25.527Z", - "lastRecalledAt": "2026-05-25T07:11:25.527Z", + "lastRecalledAt": "2026-05-26T03:40:13.634Z", "queryHashes": [ - "1e9d4a024a31" + "1e9d4a024a31", + "442660038a9b" ], "recallDays": [ - "2026-05-25" + "2026-05-25", + "2026-05-26" ], "conceptTags": [ "update-summary-doc-as-children", @@ -918,18 +922,20 @@ "endLine": 44, "source": "memory", "snippet": "- `update_summary_doc_as_children()` 默认 `title_prefix=\"飞书-\"`,微信调用时显式覆盖为 `\"微信-\"` - `create_child_doc()` 日期提取已兼容两种前缀(strip `飞书-` 或 `微信-` 再解析) ## 注意事项 - 今天(5/25)的反馈数据将在明天 10:00 正常走全流程 - `ai_summarize_feedback.py` 中 `apply_descriptions` 修复后需注意:微信渠道需要 `--date` 参数,飞书渠道 `--date` 可选", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-25T07:11:25.527Z", - "lastRecalledAt": "2026-05-25T07:11:25.527Z", + "lastRecalledAt": "2026-05-26T03:40:13.634Z", "queryHashes": [ - "1e9d4a024a31" + "1e9d4a024a31", + "442660038a9b" ], "recallDays": [ - "2026-05-25" + "2026-05-25", + "2026-05-26" ], "conceptTags": [ "update-summary-doc-as-children", @@ -949,18 +955,20 @@ "endLine": 158, "source": "memory", "snippet": "- 步骤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 下午) ### 背景 刘新玉要求微信用户反馈流程与飞书一致(收集→整理→归纳→分发),之前微信只有 M", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-25T07:11:25.527Z", - "lastRecalledAt": "2026-05-25T07:11:25.527Z", + "lastRecalledAt": "2026-05-26T03:40:13.634Z", "queryHashes": [ - "1e9d4a024a31" + "1e9d4a024a31", + "442660038a9b" ], "recallDays": [ - "2026-05-25" + "2026-05-25", + "2026-05-26" ], "conceptTags": [ "文件/资源/游戏/动画/设计等50", diff --git a/memory/2026-05-26.md b/memory/2026-05-26.md new file mode 100644 index 0000000..4d9c892 --- /dev/null +++ b/memory/2026-05-26.md @@ -0,0 +1,40 @@ +# 2026-05-26 工作日志 + +## 刘新玉 - 微信/飞书问题汇总分发排查与修复 + +### 问题 +刘新玉询问是否向"小葵小葵"群发送了昨天(5/25)的问题汇总。 + +### 排查结果 +- **飞书 5/25**:「内容测试问题反馈」群昨天无新消息,飞书 crontab 10:00 输出 `✅ 无新数据,无需同步`,无需分发 +- **微信 5/25**:数据库有 17 条消息,但大部分是单条消息,仅 1 个有效簇(≥2条),AI 归纳为"无明确问题",属于无效反馈 + +### 修复的 Bug(均在本次会话中修复) + +**Bug 1:`sync_wechat_feedback.py` 文档标题不匹配** +- 文件:`scripts/sync_wechat_feedback.py` +- 问题:`--apply-ai` 路径搜索子文档时标题为 `微信-{date} 问题反馈`,但实际创建的是 `微信-{date} 用户反馈问题归纳`,导致创建后找不到文档 +- 修复:两处标题改为 `微信-{date} 用户反馈问题归纳`(apply-ai 路径 + 步骤7分发路径) + +**Bug 2:`dispatch_summary_to_chat` 标题前缀** +- 文件:`skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py` +- 问题:title 硬编码 `飞书-{day_label}`,微信调用时 day_label 已含 `微信-` 前缀,导致出现 `飞书-微信-{date}` 双重前缀 +- 修复:检测 day_label 是否已含前缀,已含则复用,否则加 `飞书-` + +**Bug 3:姓名脱敏正则误伤** +- 文件:`scripts/ai_summarize_feedback.py` +- 问题:`strip_names()` 中 `[姓][一-鿿]` 匹配过于宽泛,致 `程序`→`相关人员`、`常完`→`相关人员`,破坏正常描述 +- 修复:content_words 排除词扩充(程序、方式、正常、完成、加载、原生等) + +**Bug 4:过滤后空消息仍发送** +- 文件:`skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py` +- 问题:`dispatch_summary_to_chat` 过滤 `- 无明确问题` 后,若只剩标题无实质条目,仍会发送空消息 +- 修复:增加 `has_items` 检查,无 `- ` 开头的内容行则不发送 + +### 操作记录 +- 手动补跑微信 5/25 apply-ai 回写知识库 +- 撤回小葵小葵群中两条无效消息(`om_x100b6e653633aca4b268daf5d0579e7`、`om_x100b6e65e7cb90b8b3d97c2a9fc5f07`) + +### 刘新玉指令(12:03) +- 确认记住今天的变动 +- 明确规则:微信反馈中"无明确问题"的簇不分发到小葵小葵群 diff --git a/output/daily_feedback/ai_descriptions_feishu_2026-05-25.json b/output/daily_feedback/ai_descriptions_feishu_2026-05-25.json new file mode 100644 index 0000000..b85868a --- /dev/null +++ b/output/daily_feedback/ai_descriptions_feishu_2026-05-25.json @@ -0,0 +1,9 @@ +{ + "date": "2026-05-25", + "descriptions": [ + { + "index": 1, + "description": "无明确问题" + } + ] +} \ No newline at end of file diff --git a/output/daily_feedback/ai_descriptions_wechat_2026-05-25.json b/output/daily_feedback/ai_descriptions_wechat_2026-05-25.json new file mode 100644 index 0000000..c29768a --- /dev/null +++ b/output/daily_feedback/ai_descriptions_wechat_2026-05-25.json @@ -0,0 +1,69 @@ +{ + "date": "2026-05-25", + "descriptions": [ + { + "index": 1, + "description": "APP端磨耳朵功能存在较多适配问题。" + }, + { + "index": 2, + "description": "无明确问题" + }, + { + "index": 3, + "description": "在L2S2U14第五节课知识巩固环节,从第一题开始持续播放警报声。" + }, + { + "index": 4, + "description": "用户反馈进入关卡时出现闪退。" + }, + { + "index": 5, + "description": "无明确问题" + }, + { + "index": 6, + "description": "无明确问题" + }, + { + "index": 7, + "description": "无明确问题" + }, + { + "index": 8, + "description": "学而思平板在第四单元第四节中,孩子回答正确后系统仍持续提示重新做,无法正常完成。" + }, + { + "index": 9, + "description": "无明确问题" + }, + { + "index": 10, + "description": "无明确问题" + }, + { + "index": 11, + "description": "小程序熏听播放时声音断断续续" + }, + { + "index": 12, + "description": "无明确问题" + }, + { + "index": 13, + "description": "H5端无法调用小程序原生音频API和后台托管能力" + }, + { + "index": 14, + "description": "无明确问题" + }, + { + "index": 15, + "description": "采用webview加载方式导致内存消耗大" + }, + { + "index": 16, + "description": "无明确问题" + } + ] +} \ No newline at end of file diff --git a/output/daily_feedback/cluster_context_2026-05-25.json b/output/daily_feedback/cluster_context_2026-05-25.json new file mode 100644 index 0000000..1fe0486 --- /dev/null +++ b/output/daily_feedback/cluster_context_2026-05-25.json @@ -0,0 +1,36 @@ +{ + "date": "2026-05-25", + "total_clusters": 1, + "clusters": [ + { + "index": 1, + "cluster_id": "7499191672818531430", + "location": { + "端": "未知", + "环节": "未知", + "课程": "", + "角色/组件": "" + }, + "priority": "P2", + "priority_detail": "", + "category": "其他问题", + "conclusion": "**当前问题排查结论:** 暂无结论排查中", + "messages": [ + { + "sender": "一_FVision", + "content": "[表情]", + "msg_type": "sticker", + "media_url": "", + "time": "2026-05-25 19:40:10" + }, + { + "sender": "瓦拉英语-露露班班(早10晚7)", + "content": "[表情]", + "msg_type": "sticker", + "media_url": "", + "time": "2026-05-25 19:40:24" + } + ] + } + ] +} \ No newline at end of file diff --git a/output/daily_feedback/飞书反馈_2026-05-26.xlsx b/output/daily_feedback/飞书反馈_2026-05-26.xlsx new file mode 100644 index 0000000..02193f9 Binary files /dev/null and b/output/daily_feedback/飞书反馈_2026-05-26.xlsx differ diff --git a/scripts/ai_summarize_feedback.py b/scripts/ai_summarize_feedback.py index 2e0b647..3ed5902 100644 --- a/scripts/ai_summarize_feedback.py +++ b/scripts/ai_summarize_feedback.py @@ -175,6 +175,10 @@ def strip_names(text, cluster=None): '注册','打开','关闭','更新','调试','运行','启动','停止', '通过','失败','成功','完成','开始','结束','使用','操作', '调整','优化','修改','增加','删除','添加','移除','切换', + '程序','方式','相关','进入','平板','第四','单元','原生', + '声音','断断','续续','后台','托管','无法','熏听','加载', + '消耗','容器','时候','较多','知识','巩固','环节','第一', + '播放','警报','正确','系统','操作','权限','人员','内核', } def _replace(m): name = m.group(0) diff --git a/scripts/sync_wechat_feedback.py b/scripts/sync_wechat_feedback.py index aa989d6..2e14c12 100755 --- a/scripts/sync_wechat_feedback.py +++ b/scripts/sync_wechat_feedback.py @@ -187,7 +187,7 @@ def main(): print(f" 🔄 微信 #{old_idx}→#{new_idx}: {placeholder} → {desc[:50]}...") # 回写知识库子文档 - title = f"微信-{date_str} 问题反馈" + title = f"微信-{date_str} 用户反馈问题归纳" nodes = fsf.list_child_nodes() node_info = nodes.get(title, {}) obj_token = node_info.get("obj_token") @@ -287,7 +287,7 @@ def main(): if do_summary and not args.skip_dispatch and not args.ai_placeholders: print(f"\n📨 微信步骤7:问题分发...") child_nodes = fsf.list_child_nodes() - child_title = f"微信-{date_str} 问题反馈" + child_title = f"微信-{date_str} 用户反馈问题归纳" child_info = child_nodes.get(child_title, {}) child_nt = child_info.get("node_token", fsf.SUMMARY_PARENT_NODE) child_url = f"https://makee-interactive.feishu.cn/wiki/{child_nt}" diff --git a/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc b/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc index 9cd3ca6..d15c4de 100644 Binary files a/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc and b/skills/feishu-feedback-sync/scripts/__pycache__/sync_feishu_feedback.cpython-312.pyc differ diff --git a/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py b/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py index 81db450..67dbcbe 100755 --- a/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py +++ b/skills/feishu-feedback-sync/scripts/sync_feishu_feedback.py @@ -1434,8 +1434,10 @@ def dispatch_summary_to_chat(day_label, summary_text, p0_only=False, doc_url=Non 归纳_lines.append(line) 归纳_content = "\n".join(归纳_lines).strip() - if not 归纳_content: - print(" ⚠️ 无归纳内容可分发") + # 检查是否有实质问题描述(非纯标题/空段落) + has_items = any(line.strip().startswith("- ") for line in 归纳_lines) + if not 归纳_content or not has_items: + print(" ⚠️ 无归纳内容可分发(已过滤无明确问题条目)") return False # 检查是否有 P0 问题 @@ -1453,7 +1455,9 @@ def dispatch_summary_to_chat(day_label, summary_text, p0_only=False, doc_url=Non # 构建富文本消息(post 格式) # P0 @跟在标题行后面,不放单独段落 - title = f"📋 飞书-{day_label} 用户反馈问题归纳" + # day_label 可能已含前缀(如 "微信-2026-05-25"),避免重复前缀 + label_prefix = "" if day_label.startswith(("微信-", "飞书-")) else "飞书-" + title = f"📋 {label_prefix}{day_label} 用户反馈问题归纳" # 飞书 post 消息不支持 HTML 标签的 at,需要用富文本 tag # 把归纳内容按 P0/P1/P2/P3 段落拆分,P0 标题行后追加 at tag @@ -1486,7 +1490,7 @@ def dispatch_summary_to_chat(day_label, summary_text, p0_only=False, doc_url=Non summary_doc_url = doc_url or f"https://makee-interactive.feishu.cn/wiki/{SUMMARY_PARENT_NODE}" content_parts.append([ {"tag": "text", "text": "\n📄 详细文档:"}, - {"tag": "a", "text": f"飞书-{day_label} 用户反馈问题归纳", "href": summary_doc_url} + {"tag": "a", "text": f"{label_prefix}{day_label} 用户反馈问题归纳", "href": summary_doc_url} ]) post_content = json.dumps({