diff --git a/.claude/commands/arno-anl-article.md b/.claude/commands/arno-anl-article.md new file mode 100644 index 0000000..73a2037 --- /dev/null +++ b/.claude/commands/arno-anl-article.md @@ -0,0 +1,182 @@ +--- +name: arno-anl-article +description: 对单篇文章进行批判性阅读,提取事实与观点,输出结构化分析报告。在工作管理项目中,可用于深度理解行业动态、技术文章、政策法规等参考材料。触发词:分析文章、文章分析、深度阅读、提取观点、文章总结、批判性阅读。 +argument-hint: <文章文件路径> +--- + +## 用户输入 + +```text +$ARGUMENTS +``` + +用户输入为**单篇**本地 Markdown 文件的路径(绝对路径)。 + +## 概述 + +对单篇文章进行批判性阅读和结构化分析,提取事实与观点,给出独立评价,输出独立的 `_分析.md` 文件。本技能聚焦于"提炼可迁移的认知增量",而非罗列文章内容。 + +方法论参照 Vivek Nair《How to be good at research》中"文献阅读能力"框架: +> 读书不要摘抄结论,核心拷问三个问题:作者的假设是什么?证据能否支撑结论?这个研究的边界和缺陷在哪里。 + +## 执行流程 + +### 第一步:读取文章 + +使用 Read 工具读取目标文章全文内容。 + +### 第二步:价值判断 + +快速评估文章的认知价值,决定分析深度: + +| 判断维度 | 追问 | 高价值信号 | +|----------|------|-----------| +| 创新性 | 提供了什么"不知道的东西"? | 挑战共识、提出新框架、解释反常 | +| 可迁移性 | 结论能否跨场景复用? | 可操作的方法论或思维模型 | +| 论据质量 | 证据能否支撑结论? | 实验数据、工程验证、一手经验 | +| 边界意识 | 是否说明适用范围? | 明确指出局限性和前提假设 | + +- **高价值**(≥2 项高价值信号)→ 深度分析,完整输出 +- **中等价值**(1 项)→ 标准分析 +- **低价值**(0 项)→ 简要摘要,仍产出分析文件但篇幅精简 + +### 第三步:批判性阅读 + +对文章内容进行三个核心追问: + +1. **作者的假设前提是什么?** —— 建立在哪些未经证明的前提之上?如果前提不成立,结论是否仍有效? +2. **论据是否支撑结论?** —— 证据链条是否完整?是否存在逻辑跳跃或选择性举证? +3. **该研究的边界和缺陷在哪里?** —— 结论的适用范围是什么?哪些场景下结论可能失效? + +### 第四步:知识分类 + +将文章观点归类: + +| 类别 | 定义 | 输出标记 | +|------|------|---------| +| **共识** | 业界广泛认同的观点 | 标注"业界共识" | +| **争议** | 存在不同声音的方向 | 保留对立观点 | +| **未探索** | 作者指出的空白 | 标注为后续关注线索 | +| **范式突破** | 挑战现有框架的新思路 | **粗体突出** | + +### 第五步:提取事实与观点 + +从文章中分离: + +- **事实**:可验证的数据、事件、案例、实验结果 +- **观点**:作者的判断、推论、建议、预测 +- **金句**:可直接引用的精炼表达(2-5 句) + +### 第六步:生成分析报告 + +分析报告保存为独立 Markdown 文件。 + +**文件名**:`<原文文件名(不含.md)>_分析.md`,保存在原文同一目录。 + +**模板**: + +```markdown +# 📊 文章分析:<文章标题> + +> **原文**:<原文文件名> +> **分析日期**: + +--- + +## 一、文章概要 + +| 属性 | 内容 | +|------|------| +| 标题 | <文章标题> | +| 来源 | <公众号名称> | +| 作者 | <作者名> | +| 发布日期 | | +| 价值评级 | ⭐⭐⭐ 高 / ⭐⭐ 中 / ⭐ 低 | + +**一句话概要**:<用一句话概括文章真正想说什么> + +--- + +## 二、事实提取 + +从文章中提取的可验证信息: + +1. <事实 1> +2. <事实 2> +3. ... + +> 如无可验证事实,标注"本文以观点输出为主,无可独立验证的事实陈述"。 + +--- + +## 三、观点提取 + +作者的核心论断和判断: + +1. **<观点 1>** — <简要说明> +2. **<观点 2>** — <简要说明> +3. ... + +--- + +## 四、批判性分析 + +### 4.1 作者假设前提 + +<作者立论建立在哪些假设之上?> + +### 4.2 论据与逻辑 + +<证据是否支撑结论?逻辑链条是否完整?> + +### 4.3 边界与局限 + +<结论适用范围?哪些场景不适用?作者是否明确指出?> + +--- + +## 五、知识分类 + +| 观点 | 分类 | 说明 | +|------|------|------| +| <观点简述> | 共识 / 争议 / 未探索 / **范式突破** | <分类理由> | + +--- + +## 六、可引用金句 + +> "<金句 1>" + +> "<金句 2>" + +--- + +## 七、总体评价 + +**亮点**: +- <优点 1> +- <优点 2> + +**不足**: +- <不足 1> + +**适用场景**:<结论适用于什么场景、什么人群> + +**关联建议**:<可进一步阅读的方向或文章> +``` + +### 模板规则 + +1. 每个章节必须填写,不可省略 +2. 低价值文章可精简"批判性分析"和"知识分类"章节 +3. 观点提取必须忠实原文,区分"作者的结论"和"分析者的推断" +4. 金句必须来自原文,不可改写 +5. 文件名中如有特殊字符,沿用原文的文件名安全规则(`_` 替换) + +## 关键指令 + +1. **忠实原文**:不注入自己的观点,不选择性筛选结论 +2. **区分事实与观点**:事实可验证,观点是判断 +3. **批判性阅读**:不止于摘抄,追问假设、证据、边界 +4. **独立输出**:分析报告保存为独立的 `_分析.md` 文件,不修改原文 +5. **简洁有力**:每条要点控制在 1-3 行,金句直接引用 diff --git a/.claude/commands/arno-dl-wx.md b/.claude/commands/arno-dl-wx.md new file mode 100644 index 0000000..1c1e3e1 --- /dev/null +++ b/.claude/commands/arno-dl-wx.md @@ -0,0 +1,275 @@ +--- +name: arno-dl-wx +description: 批量下载微信公众号文章全文,以发布日期为前缀保存为 Markdown 文件到 `资料/文章/` 目录,逐篇自动调用 `arno-anl-article` 生成批判性分析报告,最后验证内容完整性。在工作管理项目中,可用于收集行业动态、技术文章、政策法规等公众号文章作为参考材料。触发词:下载公众号文章、批量获取微信公众号、微信文章下载、公众号全文保存、wx批量下载、行业文章下载、公众号归档。 +argument-hint: <链接列表> +--- + +## 用户输入 + +```text +$ARGUMENTS +``` + +用户输入为一批微信公众号文章链接(每行一个或多个),以及可选的目标保存目录。若未指定目标目录,默认保存到 `资料/文章/` 目录。 + +链接格式:`https://mp.weixin.qq.com/s/<文章ID>` + +## 概述 + +批量获取微信公众号文章全文内容,以主智能体-子智能体协作模式,依次逐个下载每篇文章,保存为 `yyyy-MM-dd_文章标题.md` 格式的 Markdown 文件(以文章发布日期为前缀),最后验证全部内容的完整性和章节连贯性。 + +## 标准输出模板 + +每篇保存的文章 MUST 遵循以下统一格式: + +```markdown +# <文章标题> + +> **来源**:<公众号名称> +> **作者**:<作者名> +> **发布日期**: +> **原文链接**: + +--- + +<文章正文内容,保留原始 Markdown 格式> +``` + +### 模板字段说明 + +| 字段 | 提取来源 | 缺省值 | +|------|----------|--------| +| `文章标题` | 文章正文最大号文字或首行加粗文字 | 无(必填) | +| `公众号名称` | web-reader 返回的 `og:site_name` 或文章顶部公众号名称 | `微信公众平台` | +| `作者名` | web-reader 返回的 `author` / `og:article:author` 元数据,或文章开头署名 | `未知` | +| `发布日期` | 页面 `create_time` 时间戳转换,或文章顶部日期标注 | 当前日期 | +| `原文链接` | 用户提供的链接 | 无(必填) | +| `文章正文` | web-reader 返回的正文内容,保留原始段落、标题、加粗、列表等格式 | — | + +### 模板规则 + +1. 元数据块使用 `>` 块引用格式,字段间用两个空格 ` ` 换行(Markdown 软换行) +2. 元数据与正文之间用 `---` 分隔线隔开 +3. 正文保留原始 Markdown 格式不变 +4. 正文中如有图片链接(`![Image]` 格式),保留不删除 + +## 适用场景 + +- 批量下载系列连载文章(如书籍章节、课程讲义) +- 保存微信公众号专栏的全部文章 +- 归档公众号内容以供离线阅读或二次处理 +- **家庭管理场景**:收集家庭教育方法、健康养生知识、理财技巧、家庭关系建设等公众号文章,作为家庭参考资料的积累 + +## 架构模式 + +采用 **主智能体 → 子智能体串行调度** 模式: + +``` +主智能体(协调者) + ├─ 子智能体 #1 → 获取文章 1 → 保存 → 关闭 + │ └─ 主智能体 → 调用 arno-anl-article 分析文章 1 + ├─ 子智能体 #2 → 获取文章 2 → 保存 → 关闭 + │ └─ 主智能体 → 调用 arno-anl-article 分析文章 2 + ├─ ... + └─ 子智能体 #N → 获取文章 N → 保存 → 关闭 + └─ 主智能体 → 调用 arno-anl-article 分析文章 N + │ + └─ 主智能体验证全部文章完整性 +``` + +### 为什么串行而非并行 + +1. 微信公众号有反爬机制,并发请求容易触发限流 +2. 子智能体之间无共享状态依赖,但需要确保编号连续不混乱 +3. 串行执行方便追踪进度、定位问题 + +## 执行流程 + +### 第一步:初始化 + +1. 解析用户提供的链接列表,确认总链接数 N +2. 确认目标目录存在,不存在则创建 +3. 告知用户共 N 篇文章待下载 + +```bash +mkdir -p "<目标目录>" +``` + +### 第二步:串行调度子智能体 + +对每个链接依次执行: + +**启动子智能体**,传入以下任务指令: + +```text +你的任务是获取以下微信公众号文章的完整内容并保存。 + +**链接**: `<文章URL>` +**序号**: <当前序号>/<总文章数N> +**目标目录**: `<目标目录>` + +**执行步骤**: + +1. 使用 mcp__web-reader__webReader 工具获取该链接的完整文章内容。 + - 微信公众号文章 WebFetch 通常无法访问,直接使用 web-reader。 + - 如果内容被截断,尝试调整参数或分段获取。 + +2. 从获取的内容中提取文章元数据: + - **标题**:文章中最大号的文字或第一行加粗文字 + - **发布日期**:优先从页面 HTML 中的 `create_time` Unix 时间戳转换(`date -d @ '+%Y-%m-%d'`),其次从文章顶部日期标注提取;如都无法获取,使用当前日期 + - **公众号名称**:从 `og:site_name` 元数据或文章顶部公众号名称提取,缺省为 `微信公众平台` + - **作者名**:从 `author` / `og:article:author` 元数据或文章开头署名提取,缺省为 `未知` + +3. 将完整文章内容按照**标准输出模板**保存为 Markdown 文件: + - 文件名格式:`yyyy-MM-dd_文章标题.md`(日期为该文章发布日期) + - 文件名中空格和特殊字符(包括中文标点如 `,。!?;:""''、【】《》—…、` 及英文标点 `/ \ : * ? " < > |`)全部替换为 `_` + - 多个连续 `_` 合并为一个,末尾 `_` 去除 + - 保存路径:`<目标目录>/yyyy-MM-dd_文章标题.md` + - **严格遵循标准输出模板**: + ``` + # <文章标题> + + > **来源**:<公众号名称> + > **作者**:<作者名> + > **发布日期**: + > **原文链接**:<文章URL> + + --- + + <文章正文内容> + ``` + - 元数据块使用 `>` 块引用,字段间用两个空格换行 + - 元数据与正文之间用 `---` 分隔线隔开 + - 正文保留原始格式(段落、标题层级、加粗、列表等),图片链接保留不删除 + +4. 检查保存的文件内容字数,与原文内容字数进行比对。 + - 使用 `wc -c` 或字符计数工具 + - 差异应在 1% 以内(允许 Markdown 格式化标记带来的微小差异) + - 如果差异过大,说明内容可能被截断,需重新获取 + +5. 完成后向主智能体报告: + - 文章标题、作者、公众号、发布日期 + - 保存的文件名 + - 原文字数 vs 保存字数 + - 是否完整获取 +``` + +**关键约束**: +- **每次只启动 1 个子智能体**,等待其完成后才启动下一个 +- 子智能体使用 `general-purpose` 类型 +- 子智能体完成后自动关闭,不保留上下文 + +### 第三步:逐篇分析 + +每篇文章下载完成后(子智能体报告后),**立即**调用 `arno-anl-article` 技能对该文章进行批判性分析: + +```bash +# 使用 Skill 工具调用 +Skill: arno-anl-article +Args: <目标目录>/<刚下载的文章文件名>.md +``` + +**分析产物**: +- 分析报告保存为 `<文章文件名(不含.md)>_分析.md`,与原文在同一目录 +- 分析报告是独立文件,**不修改、不覆盖**原文 + +**关键约束**: +- **分析必须在下一篇下载之前完成**,保持串行节奏 +- 分析报告字数应与原文篇幅匹配(长文深度分析,短文简要分析) +- 分析报告文件名中的特殊字符与原文使用相同的 `_` 替换规则 + +### 第四步:验证全部文章 + +所有 N 篇文章下载并分析完成后,执行完整性检查: + +1. **文件清单检查**:确认目录下有 N 个文件,数量正确无缺漏 + +```bash +ls -1 "<目标目录>"/*.md +``` + +2. **文件大小检查**:确认每个文件非空,大小合理(微信公众号文章通常 3,000~15,000 字符) + +```bash +wc -c "<目标目录>"/*.md +``` + +3. **首尾内容检查**:读取每篇文章的开头和结尾,验证: + - 文章有明确的标题 + - 文章有自然的结尾(不是被截断的半句话) + - 如果文章是系列连载,检查相邻文章的章节衔接是否连贯 + +```bash +for f in "<目标目录>"/*.md; do + echo "=== $(basename "$f") ===" + head -2 "$f" + echo "..." + tail -3 "$f" + echo "" +done +``` + +4. **连贯性检查**(可选,适用于系列连载): + - 前一章的结尾是否自然引出下一章 + - 章节编号是否连续(第1章 → 第2章 → …) + - 是否有内容重复或遗漏 + +### 第五步:修复遗漏(如有) + +如果验证发现以下问题: + +| 问题类型 | 处理方式 | +|----------|----------| +| 文件缺失(某文件不存在) | 重新分配子智能体下载该链接 | +| 内容截断(字数明显偏少) | 重新分配子智能体下载该链接 | +| 内容异常(乱码、空内容) | 尝试不同工具重新获取 | +| 日期错误(文件名日期与实际不符) | 调整文件名中的日期 | + +**原则**:不手动修复内容,只重新下载。 + +### 第六步:输出汇总 + +```markdown +## 下载完成 + +- 目标目录: <目录路径> +- 文章总数: N 篇 +- 总大小: XXXX 字节 +- 完整率: N/N (100%) + +| 序号 | 发布日期 | 文章标题 | 字符数 | 下载 | 分析 | +|------|----------|----------|--------|------|------| +| 1 | 2026-06-29 | XXX | X,XXX | ✅ | ✅ | +| 2 | 2026-06-29 | XXX | X,XXX | ✅ | ✅ | +| ... | ... | ... | ... | ... | ... | +``` + +## 关键指令 + +1. **串行调度**:每次只运行 1 个子智能体,等待完成后再启动下一个 +2. **使用 web-reader**:微信公众号文章 WebFetch 通常无法访问,直接使用 `mcp__web-reader__webReader` +3. **日期命名**:文件名以文章发布日期 `yyyy-MM-dd` 为前缀,后接下划线 + 文章标题 +4. **文件名安全**:空格和特殊字符(中英文标点如 `,。!?;:""''、【】《》—…、` 及 `/ \ : * ? " < > |`)全部替换为 `_`,多个连续 `_` 合并为一个 +5. **标准模板**:每篇文章 MUST 严格遵循标准输出模板,含来源、作者、发布日期、原文链接四个元数据字段 +6. **字数比对**:每个子智能体必须比对原文字数与保存字数,发现差异 >1% 需重试 +7. **不修改原文**:保存时只添加模板元数据头部(标题、元数据块、分隔线),不改动正文内容 +8. **逐篇分析**:每篇下载完成后立即调用 `arno-anl-article` 生成独立分析报告,分析完成后才启动下一篇下载 +9. **验证优先**:全部下载和分析完成后必须执行第四步验证,不可跳过 +10. **遇错重下**:发现问题不手动修复,重新分配子智能体下载 + +## 已知陷阱 + +- **WebFetch 不可用**:`WebFetch` 工具对 `mp.weixin.qq.com` 域名通常返回错误或被屏蔽内容,**必须使用 `mcp__web-reader__webReader`** 替代 +- **内容截断**:极长文章(>15,000 字符)可能被 web-reader 截断,如遇此情况可尝试调整 `return_format` 或 `content_size` 参数 +- **反爬限流**:短时间内大量请求可能触发微信反爬,串行执行天然规避此问题;若单篇文章也失败,等待 5-10 秒后重试 +- **标题特殊字符**:文章标题可能含 `/`(如"无代码/低代码")及各种中英文标点,文件名中必须替换为 `_` +- **URL 有效期**:微信公众号文章链接通常长期有效,但部分文章可能被删除或转为仅关注可见 +- **图片丢失**:web-reader 返回的 Markdown 可能不含文章中的图片,如需保留图片需另行处理 + +## 与项目现有工具的配合 + +本技能聚焦于微信公众号文章的获取和归档。获取完成后,可配合以下项目技能进一步处理: + +| 后续操作 | 使用技能 | +|----------|----------| +| 文章批判性分析 | `arno-anl-article`(下载后自动调用) |