Files
tech/.claude/commands/arno-dl-wx.md
T
arno b06247a816 功能(命令): 新增公众号文章批量下载与文章分析命令
- 新增 arno-dl-wx:批量下载微信公众号文章,串行调度子智能体逐篇归档并自动生成分析报告
- 新增 arno-anl-article:对单篇文章进行批判性阅读,输出结构化分析报告
2026-06-29 13:51:04 +08:00

12 KiB
Raw Blame History

name, description, argument-hint
name description argument-hint
arno-dl-wx 批量下载微信公众号文章全文,以发布日期为前缀保存为 Markdown 文件到 `资料/文章/` 目录,逐篇自动调用 `arno-anl-article` 生成批判性分析报告,最后验证内容完整性。在工作管理项目中,可用于收集行业动态、技术文章、政策法规等公众号文章作为参考材料。触发词:下载公众号文章、批量获取微信公众号、微信文章下载、公众号全文保存、wx批量下载、行业文章下载、公众号归档。 <链接列表>

用户输入

$ARGUMENTS

用户输入为一批微信公众号文章链接(每行一个或多个),以及可选的目标保存目录。若未指定目标目录,默认保存到 资料/文章/ 目录。

链接格式:https://mp.weixin.qq.com/s/<文章ID>

概述

批量获取微信公众号文章全文内容,以主智能体-子智能体协作模式,依次逐个下载每篇文章,保存为 yyyy-MM-dd_文章标题.md 格式的 Markdown 文件(以文章发布日期为前缀),最后验证全部内容的完整性和章节连贯性。

标准输出模板

每篇保存的文章 MUST 遵循以下统一格式:

# <文章标题>

> **来源**<公众号名称>  
> **作者**<作者名>  
> **发布日期**<yyyy-MM-dd>  
> **原文链接**<URL>

---

<文章正文内容,保留原始 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 篇文章待下载
mkdir -p "<目标目录>"

第二步:串行调度子智能体

对每个链接依次执行:

启动子智能体,传入以下任务指令:

你的任务是获取以下微信公众号文章的完整内容并保存。

**链接**: `<文章URL>`
**序号**: <当前序号>/<总文章数N>
**目标目录**: `<目标目录>`

**执行步骤**:

1. 使用 mcp__web-reader__webReader 工具获取该链接的完整文章内容。
   - 微信公众号文章 WebFetch 通常无法访问,直接使用 web-reader。
   - 如果内容被截断,尝试调整参数或分段获取。

2. 从获取的内容中提取文章元数据:
   - **标题**:文章中最大号的文字或第一行加粗文字
   - **发布日期**:优先从页面 HTML 中的 `create_time` Unix 时间戳转换(`date -d @<timestamp> '+%Y-%m-%d'`),其次从文章顶部日期标注提取;如都无法获取,使用当前日期
   - **公众号名称**:从 `og:site_name` 元数据或文章顶部公众号名称提取,缺省为 `微信公众平台`
   - **作者名**:从 `author` / `og:article:author` 元数据或文章开头署名提取,缺省为 `未知`

3. 将完整文章内容按照**标准输出模板**保存为 Markdown 文件:
   - 文件名格式:`yyyy-MM-dd_文章标题.md`(日期为该文章发布日期)
   - 文件名中空格和特殊字符(包括中文标点如 `,。!?;:""''、【】《》—…、` 及英文标点 `/ \ : * ? " < > |`)全部替换为 `_`
   - 多个连续 `_` 合并为一个,末尾 `_` 去除
   - 保存路径:`<目标目录>/yyyy-MM-dd_文章标题.md`
   - **严格遵循标准输出模板**
     ```
     # <文章标题>

     > **来源**<公众号名称>  
     > **作者**<作者名>  
     > **发布日期**<yyyy-MM-dd>  
     > **原文链接**<文章URL>

     ---

     <文章正文内容>
     ```
   - 元数据块使用 `>` 块引用,字段间用两个空格换行
   - 元数据与正文之间用 `---` 分隔线隔开
   - 正文保留原始格式(段落、标题层级、加粗、列表等),图片链接保留不删除

4. 检查保存的文件内容字数,与原文内容字数进行比对。
   - 使用 `wc -c` 或字符计数工具
   - 差异应在 1% 以内(允许 Markdown 格式化标记带来的微小差异)
   - 如果差异过大,说明内容可能被截断,需重新获取

5. 完成后向主智能体报告:
   - 文章标题、作者、公众号、发布日期
   - 保存的文件名
   - 原文字数 vs 保存字数
   - 是否完整获取

关键约束

  • 每次只启动 1 个子智能体,等待其完成后才启动下一个
  • 子智能体使用 general-purpose 类型
  • 子智能体完成后自动关闭,不保留上下文

第三步:逐篇分析

每篇文章下载完成后(子智能体报告后),立即调用 arno-anl-article 技能对该文章进行批判性分析:

# 使用 Skill 工具调用
Skill: arno-anl-article
Args: <目标目录>/<刚下载的文章文件名>.md

分析产物

  • 分析报告保存为 <文章文件名(不含.md>_分析.md,与原文在同一目录
  • 分析报告是独立文件,不修改、不覆盖原文

关键约束

  • 分析必须在下一篇下载之前完成,保持串行节奏
  • 分析报告字数应与原文篇幅匹配(长文深度分析,短文简要分析)
  • 分析报告文件名中的特殊字符与原文使用相同的 _ 替换规则

第四步:验证全部文章

所有 N 篇文章下载并分析完成后,执行完整性检查:

  1. 文件清单检查:确认目录下有 N 个文件,数量正确无缺漏
ls -1 "<目标目录>"/*.md
  1. 文件大小检查:确认每个文件非空,大小合理(微信公众号文章通常 3,000~15,000 字符)
wc -c "<目标目录>"/*.md
  1. 首尾内容检查:读取每篇文章的开头和结尾,验证:
    • 文章有明确的标题
    • 文章有自然的结尾(不是被截断的半句话)
    • 如果文章是系列连载,检查相邻文章的章节衔接是否连贯
for f in "<目标目录>"/*.md; do
  echo "=== $(basename "$f") ==="
  head -2 "$f"
  echo "..."
  tail -3 "$f"
  echo ""
done
  1. 连贯性检查(可选,适用于系列连载):
    • 前一章的结尾是否自然引出下一章
    • 章节编号是否连续(第1章 → 第2章 → …)
    • 是否有内容重复或遗漏

第五步:修复遗漏(如有)

如果验证发现以下问题:

问题类型 处理方式
文件缺失(某文件不存在) 重新分配子智能体下载该链接
内容截断(字数明显偏少) 重新分配子智能体下载该链接
内容异常(乱码、空内容) 尝试不同工具重新获取
日期错误(文件名日期与实际不符) 调整文件名中的日期

原则:不手动修复内容,只重新下载。

第六步:输出汇总

## 下载完成

- 目标目录: <目录路径>
- 文章总数: 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_formatcontent_size 参数
  • 反爬限流:短时间内大量请求可能触发微信反爬,串行执行天然规避此问题;若单篇文章也失败,等待 5-10 秒后重试
  • 标题特殊字符:文章标题可能含 /(如"无代码/低代码")及各种中英文标点,文件名中必须替换为 _
  • URL 有效期:微信公众号文章链接通常长期有效,但部分文章可能被删除或转为仅关注可见
  • 图片丢失web-reader 返回的 Markdown 可能不含文章中的图片,如需保留图片需另行处理

与项目现有工具的配合

本技能聚焦于微信公众号文章的获取和归档。获取完成后,可配合以下项目技能进一步处理:

后续操作 使用技能
文章批判性分析 arno-anl-article(下载后自动调用)