Skill: ben61405/weread-digest (version 1.0.0)

--- name: weread-digest description: > 微信读书笔记智能消化技能。 AI-powered reading note digestion for WeRead (微信读书). Generates weekly/monthly reading reports, synthesizes book highlights into structured summaries, explores themes across books, surfaces reading stats, and archives concepts to knowledge bases. 触发词 / Triggers: "读书报告"、"reading digest"、"总结笔记"、"summarize my notes"、 "这周读了什么"、"reading report"、"微信读书报告"、"notebook summary"、"读书回顾"、 "reading review"、"reading stats"、"读书统计"、"跨书主题"、"cross-book theme"、 "整理进知识库"、"archive to knowledge base"、"同步笔记到知识库"、"入库" metadata: tags: [weread, reading, notes, digest, summary, knowledge-management, 微信读书] --- # 微信读书笔记智能消化 / WeRead Note Digest > Layer 2 skill — depends on `weread` skill for raw data. This skill provides the AI processing layer. 把微信读书的划线+想法，变成有洞察的输出。不扩展 `weread` 的 API 能力，而是在已有数据上做 AI 加⼯。 --- ## 前置依赖 / Prerequisites 本技能依赖 `weread` skill 的数据导出功能。执行任何操作前，先确保： 1. `weread` skill 已安装且 Cookie 已配置 2. 已运行过至少一次全量导出：`python3 ~/.openclaw/workspace/skills/weread/scripts/export_notes.py` 数据文件位于： ``` ~/.weread/ ├── books.json # 书籍索引 ├── notes/ # 单书笔记文件（<bookId>.json） └── notes_index.json # 全量笔记索引（按时间排序） ``` ### 快速检查 ```bash python3 ~/.openclaw/workspace/skills/weread/scripts/export_notes.py --stats ``` 如果报错"未导出"，先帮用户配置 Cookie 并运行全量导出。 --- ## 核心功能 / Core Features | # | 功能 | 触发示例 | 说明 | |---|------|---------|------| | 1 | 📊 阅读统计 | "读书统计"、"reading stats" | 书架概览、阅读时长、笔记分布 | | 2 | 📰 周期读书报告 | "本周读书报告"、"上月读书回顾" | 指定时间段的阅读摘要 + AI 洞察 | | 3 | 📖 单书笔记摘要 | "总结《XXX》的笔记" | 一本书所有笔记的结构化摘要 | | 4 | 🔗 跨书主题串联 | "我的笔记里有哪些共同主题" | 发现不同书之间的共同话题 | | 5 | 🧠 知识库归档 | "把《XXX》整理进知识库" | 从划线/笔记中提炼概念，按规则入库 | --- ## 功能一：阅读统计 / Reading Stats ### 触发 "读书统计"、"reading stats"、"看看我的阅读数据" ### 工作流 1. 检查 `~/.weread/books.json` 和 `~/.weread/notes_index.json` 是否存在 2. 如果不存在 → 运行 `python3 ~/.openclaw/workspace/skills/weread/scripts/export_notes.py` 3. 读取两个 JSON 文件 4. 提取并展示： ``` 📚 书架总览 总计 X 本 | 读完 Y 本 | 在读 Z 本 | 未读 W 本 ⏱ 总阅读时长：XX 小时 XX 分钟 ✏️ 总笔记数：N 条（M 本有笔记的书） 📅 最近阅读：[最近读过且有进度的书 1-3 本] 📊 笔记最多的书 TOP 5： 1. 《XXX》 — N 条笔记 2. ... 📅 笔记时间分布： 2026: XX 条 2025: XX 条 ... ``` 用 emoji 和简洁的排版，适合快速浏览。 --- ## 功能二：周期读书报告 / Reading Digest ### 触发 - "本周读书报告" / "weekly reading digest" - "这个月的读书回顾" / "monthly reading review" - "最近两周的读书情况" - 也可以指定任意日期范围："看看 5 月份的读书报告" ### 工作流 **Step 1: 确定时间范围** - "本周" = 本周一到今天 - "上周" = 上周一到上周日 - "本月" = 本月 1 号到今天 - "上月" = 上月 1 号到最后一天 - 用户指定日期时按指定范围 **Step 2: 获取数据** 1. 读取 `~/.weread/notes_index.json`，筛选时间范围内的笔记 2. 读取 `~/.weread/books.json`，获取相关书籍的元信息 3. 如果需要更详细的阅读数据，运行 `python3 ~/.openclaw/workspace/skills/weread/scripts/weread_api.py shelf` **Step 3: 生成报告** 报告结构（Markdown 格式）： ```markdown # 📰 [时间段] 读书报告 > 生成时间：YYYY-MM-DD ## 📊 概览 - 阅读 X 本书 | 新增 Y 条笔记 | 读完 Z 本 - 累计阅读时长约 XX 小时 ## 📖 阅读书目 | # | 书名 | 作者 | 笔记数 | 状态 | |---|------|------|--------|------| | 1 | 《XXX》 | 作者 | N 条 | 在读/读完 | （按笔记数降序排列，只列有笔记的书） ## 💡 本周精华笔记（精选 5-8 条） > 从本期所有笔记中挑选最有深度、最具启发性的内容 1. 📖「《书名》」 > 原文：... > 💭 我的想法：...（如有） 2. 📖「《书名》」 > 原文：... （挑选标准：笔记长度适中、观点鲜明、有独立价值） ## 🧠 AI 洞察 > 基于本周期笔记内容的综合分析 - **阅读主题**：本期主要集中在 [领域A]、[领域B] 等话题 - **思维模式**：[观察到的阅读倾向，如偏爱案例、关注方法论等] - **一个收获**：[最值得带走的一个核心观点] ## 📈 趋势 - 与上期对比：[笔记增减、阅读时长变化] - 连续阅读天数：X 天 ``` **精选笔记的挑选原则：** - 优先选择有"想法"（用户自己写的）而非仅有划线的笔记 - 内容有一定长度（至少 20 字），避免无上下文的短句 - 覆盖不同书籍，每本书最多 2 条 - 优先选择近期笔记 **如果时间范围内没有笔记：** ``` 📭 [时间段] 没有新增读书笔记。 最近一次笔记：YYYY-MM-DD（《XXX》） 要不要看看更早的？试试"上月读书报告"或"全部读书回顾"。 ``` --- ## 功能三：单书笔记摘要 / Book Note Synthesis ### 触发 - "总结《XXX》的笔记" / "summarize my notes on XXX" - "帮我整理一下《XXX》的划线" - "《XXX》我都划了什么" ### 工作流 **Step 1: 定位书籍** 1. 读取 `~/.weread/books.json`，模糊匹配书名 2. 如果匹配到多本，列出让用户选 3. 如果没找到 → 可能还没导出该书笔记，尝试运行 `export_notes.py --incremental` 或提示用户 **Step 2: 获取该书笔记** 1. 读取 `~/.weread/notes/<bookId>.json` 2. 确认有多少条笔记（highlights + thoughts） **Step 3: 生成摘要** 报告结构： ```markdown # 📖 《书名》— 笔记摘要 > 作者 | 阅读进度：XX% | 笔记 N 条 | 读完/在读 ## 🏷️ 核心主题 （AI 将笔记按主题归类，3-6 个主题，每个 1-2 句话概括） - **主题A**：... - **主题B**：... - **主题C**：... ## 📝 精华笔记（按主题整理） ### 主题A 1. > 原文：... 💭 我的想法：...（如有） 2. > 原文：... ### 主题B ... ## 🎯 关键收获 （3-5 句话总结这本书给你留下的核心观点，基于笔记而非全书） ## 📌 行动建议 （基于笔记内容，提炼 1-3 条可付诸实践的建议） ``` **如果笔记很多（>50 条）：** - 先做主题归类，每个主题挑 3-5 条最有代表性的笔记 - 告知用户总数和展示数，如"共 87 条笔记，展示精选 25 条" **如果笔记很少（<5 条）：** - 逐条展示，不做归类 - 提示："笔记较少，可能刚开始读，建议多划线加深理解" **如果该书没有任何笔记：** ``` 📭 《XXX》暂无划线或笔记。 当前进度：XX%。要不要先去微信读书划线一些内容？ ``` --- ## 功能四：跨书主题串联 / Cross-Book Theme Explorer ### 触发 - "我的笔记里有哪些共同主题" - "跨书主题分析" - "帮我找找不同书的笔记有什么关联" - "我的阅读关键词是什么" ### 工作流 **Step 1: 扫描全量笔记** 1. 读取 `~/.weread/notes_index.json` 2. 提取所有笔记的 content（想法）和 highlight（划线原文） **Step 2: AI 分析** 对全量笔记进行主题聚类，输出： ```markdown # 🔗 跨书阅读主题地图 > 基于 N 本书、M 条笔记的分析 ## 🗺️ 你的阅读关键词 🏷️ [关键词1] — X 本书 Y 条笔记 🏷️ [关键词2] — X 本书 Y 条笔记 🏷️ [关键词3] — X 本书 Y 条笔记 ... ## 📚 主题 × 书籍矩阵 | 主题 | 《书A》 | 《书B》 | 《书C》 | |------|--------|--------|--------| | 认知偏见 | 5条 | — | 8条 | | 决策方法 | 3条 | 12条 | 2条 | ... （只展示出现 ≥2 本书的主题） ## 🔗 有趣的连接 1. 《书A》和《书B》都在讨论 [共同话题]，但角度不同： - 《书A》认为：... - 《书B》认为：... 2. ... ## 🧭 阅读偏好画像 - 你的阅读集中在 [领域] - 你特别关注 [话题] - 你较少涉猎 [领域]（可考虑拓展） ``` **如果笔记 < 10 条：** ``` 📭 笔记太少（当前仅 N 条），主题分析需要更多数据。 建议多读几本书、多划线，积累到 30+ 条笔记后再做跨书分析。 ``` --- ## 功能五：知识库归档 / Knowledge Base Archive ### 触发 - "把《XXX》的笔记整理进知识库" / "archive XXX to knowledge base" - "把最近读的书全部入库" / "batch archive recent books" - "同步微信读书笔记到知识库" / "sync reading notes to KB" - "入库" ### 首次运行：配置引导 / First-Run Config 首次触发此功能时，检查 `~/.weread/kb-config.json` 是否存在。若不存在，引导用户： ``` 🧠 要把读书笔记转成知识库卡片，我需要知道： 1. 你用什么知识库？ - Obsidian（默认，推荐） - 纯 Markdown 文件夹 - Notion / Logseq / 其他 2. 知识库路径是什么？ 例：D:\\Obisidian\\MyVault\\ 3. 有没有知识库规则文件？ - 有的话给路径（如 WIKI-SCHEMA.md），我严格按规则执行 - 没有的话我用内置默认规则 配置一次就行，以后说"入库"我就提取概念、列出清单等你确认。 ``` **配置文件 `~/.weread/kb-config.json`：** ```json { "version": "1.0", "knowledgeBase": { "tool": "obsidian", "path": "/path/to/vault/", "schemaPath": "/path/to/WIKI-SCHEMA.md", "language": "zh-en" } } ``` ### 工作流 / Workflow #### Step 1: 获取书籍笔记 1. 从 `~/.weread/books.json` 匹配书名 → bookId 2. 读取 `~/.weread/notes/<bookId>.json` 获取完整笔记 3. 如果笔记文件不存在 → 提示先运行 `export_notes.py` #### Step 2: 识别书籍归属 / Classify Book 判断书籍属于哪个知识库学科分类： | 书籍类型 | 对应知识库文件夹 | |---------|---------------| | 经济学/宏观/微观 | `06-经济学/` | | 投资/理财/K线 | `13-投资学/` | | AI/计算机/编程 | `05-人工智能与基础设施/` 或 `00-计算机科学与技术/` | | 哲学思想 | `09-哲学/` | | 心理学/认知 | `11-心理学/` | | 政治学 | `12-政治学/` | | 社会学 | `16-社会学/` | | 历史 | `22-历史学/` | | 思想史 | `14-思想史/` | | 文学/小说 | `19-文学/` | | 法律 | `08-法律基础/` | | 数据分析 | `10-数据分析/` | | 亲密关系/人际关系 | `11-心理学/` | | 个人成长/认知思维 | `11-心理学/` 或 `09-哲学/` | > 📌 **原则**：优先匹配现有文件夹，无匹配时才新建。新建文件夹格式：`{NN}-{学科名}/` #### Step 3: 概念提取与分流 / Extract & Route 逐条处理笔记，按以下逻辑分流： - **A. 核心概念（创建新节点）**：书中定义的新术语、关键知识点、能独立成篇的洞见 → 创建 `.md` 文件 - **B. 补充型内容（追加已有节点）**：具体案例、实操清单、对已有概念的补充 → 追加到已有文件 - **C. 纯摘录（不建节点）**：仅划线无想法、过短、无独立概念价值 → 跳过或合入摘要 #### Step 3.5: 用户确认 / User Confirmation ⚠️ 强制步骤 **在创建任何文件之前，必须先将提取结果展示给用户确认。** 展示格式： ``` 📋 《XXX》概念提取结果，请确认： 📁 归类：06-经济学/ 🆕 新建概念（X 个）： 1. 充分就业 — 宏观经济政策四大目标之一 → 文件：06-经济学/宏观经济学/05-充分就业.md 2. 理性人假设 — 所有市场参与者追求效用最大化 → 文件：06-经济学/微观基础/03-理性人假设.md 📎 补充已有（Y 个）： 1. GDP — 追加 GNP 与 GDP 的区别说明 → 文件：06-经济学/宏观经济学/01-GDP.md ⏭️ 跳过（Z 条）： - "NI=NNP-间接税+企业补贴"（纯摘录无独立概念） - "微调？"（过于简短） 🔗 将建立的跨学科链接： - [[理性人假设]] ↔ [[09-哲学/西方哲学/01-理性主义|理性主义]] 💡 思维模型类比 --- 确认以上操作？回复"确认"开始归档，或指出需要调整的地方。 ``` **规则：** - 用户说"确认"/"可以"/"OK" → 执行 Step 4-7 - 用户要调整 → 按反馈修改后重新展示 - 用户说"全部跳过" → 不创建任何文件 - **绝不跳过此步骤直接创建文件** 每个概念文件格式（Obsidian / Plain Markdown）： ```markdown --- aliases: - EnglishName - 中文别名 --- # ConceptName / 概念名 > One-line summary. 一句话概述。 > 📖 来源：《书名》— 作者 ## 核心内容 / Core Content （AI 基于划线内容提炼的核心知识点，2-5 段） ## 💡 内容补充 / Supplements （后续同一主题的补充内容追加到这里） ## 关联 / Related - [[path/to/related|Related Concept]] — 关联说明 --- **创建日期**：YYYY-MM-DD ``` **格式规则（严格遵循）：** 1. **一个概念一个文件** — 绝不打包多个概念 2. **数字前缀文件名** — `{NN}-{ConceptName}.md` 3. **YAML frontmatter 含 aliases** — 英文名和中文别名 4. **中英双语**（language=zh-en） — `# English / 中文` 5. **Wikilink 规范**：`[[完整路径/文件名|显示名]]`，`|` 两边无空格 6. **双向链接** — A↔B 互相引用 7. **来源标注** — 每文件标注来源书籍 #### Step 5: 去重检查 / Duplicate Detection 创建前强制检查： 1. 知识库中是否已有同名/相似概念（含 aliases） 2. 已存在 → 建 wikilink 不重复建 3. 部分重叠 → 补充到已有节点 4. 内容矛盾 → 标记 `⚠️ 待确认` #### Step 6: 更新索引与总纲 - 更新 `00_概念索引.md` - 更新学科总纲（如 `06-经济学总纲.md`） - 新学科文件夹 → 同时创建总纲文件 - 如果知识库有断链检查脚本 → 运行 #### Step 7: 完成汇报 ``` 🧠 《XXX》笔记已归档到知识库 📊 统计：处理 N 条 | 新建 X 个 | 补充 Y 个 | 跳过 Z 条 🆕 新建：充分就业、理性人假设… 🔗 链接：[[A]] ↔ [[B]], 💡 跨学科… 📋 索引已更新 | ⚠️ 0 个断链 ``` ### 批量归档 / Batch Archive 触发："把最近读的书全部整理进知识库" 1. 列出所有有笔记的书，逐本确认或全选 2. 逐本执行 Step 1-7 ### 与 knowledge-digest 的分工 | | knowledge-digest | weread-digest 归档 | |---|---|---| | 场景 | 上完课归档 | 读完书归档笔记 | | 数据源 | 课堂对话 | 微信读书划线 | | 知识库规则 | 相同 | 相同 | | 协同 | 共享知识库，去重互检 | 共享知识库，去重互检 | --- ## 常见工作流 / Common Workflows ### 工作流 A：快速了解自己的阅读状况 ``` 用户："读书统计" → 直接展示统计信息（功能一） ``` ### 工作流 B：每周回顾 ``` 用户："本周读书报告" → 如果 ~/.weread/ 数据不是最新的 → 先运行 export_notes.py → 生成周报（功能二） ``` ### 工作流 C：深入消化一本书 ``` 用户："总结《思考，快与慢》的笔记" → 获取该书笔记 → 生成摘要（功能三） → 主动问："要导出到知识库吗？"（如有知识库配置） ``` ### 工作流 D：发现阅读模式 ``` 用户："帮我看看最近读了什么" → 先展示统计 + 最近笔记（功能一 + 功能二精简版） → 主动问："想看看跨书主题分析吗？"（链接功能四） ``` ### 工作流 E：阅读→知识库闭环 ``` 用户："把《西方思想史十二讲》整理进知识库" → 获取该书笔记 → 提取概念 → 按规则入库 → 汇报新建/更新/链接情况 → 断链检查 → 完成 ``` --- ## 设计原则 / Design Principles 1. **AI 加工，非 API 扩展** — 不做新的 API 调用，所有数据来自 `weread` skill 的导出 2. **渐进深度** — 统计 → 报告 → 摘要 → 主题串联，由浅入深 3. **人类可读** — 输出用自然语言和 emoji，不丢 JSON 原文 4. **尊重隐私** — 笔记在本地处理，不上传第三方 5. **容错友好** — 数据不足时给明确提示，不报错崩溃 6. **保留出处** — 每条笔记都标注来源书籍，可追溯 --- ## 与 weread skill 的分工 / Division of Labor | | weread skill | weread-digest skill | |---|---|---| | 获取书架 | ✅ | — | | 获取划线/笔记 | ✅ | — | | Cookie 管理 | ✅ | — | | 导出笔记到本地 | ✅ | — | | 浏览笔记内容 | — | ✅ | | 生成阅读报告 | — | ✅ | | AI 摘要和归类 | — | ✅ | | 跨书主题分析 | — | ✅ | | 阅读习惯洞察 | — | ✅ | | 知识库归档 | — | ✅ | --- ## 错误处理 / Error Handling | 情况 | 处理 | |------|------| | `~/.weread/` 目录不存在 | 提示先配置 weread skill 的 Cookie 并运行 `export_notes.py` | | Cookie 过期 | 委托 weread skill 的 Cookie 更新流程，完成后重新导出 | | 指定时间段无笔记 | 温和提示"这段时间没有笔记"，给出最近笔记时间 | | 书名匹配不到 | 列出现有书籍让用户选，或提示是否增量导出 | | 笔记文件损坏/格式异常 | 提示重新运行 `export_notes.py` | | 用户没有想法只有划线 | 正常处理，标注"💭 无想法"即可 | | 知识库未配置 | 首次触发 功能五 时自动引导配置 | | 知识库路径不存在 | 提示确认路径，或帮用户创建目录结构 | | 概念已存在 | 跳过新建，建立 wikilink + 补充内容到已有节点 | | 书籍无法归类 | 列出候选文件夹让用户选，或创建新文件夹 |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)