← 查看文章

内容工作流

看到一篇好文章,别急着复制:这个 Skill 会帮你收成 Markdown

深拆 baoyu-url-to-markdown:它把网页、帖子和视频字幕收进本地,变成后续写作能直接用的材料。

看到一篇好文章,别急着复制:这个 Skill 会帮你收成 Markdown

我写公众号时,经常不是卡在写正文。

更常见的是,材料散得到处都是。

一篇网页文章,两个 X 上的帖子,一段 YouTube 视频字幕,再加上 Hacker News 下面几条有意思的评论。

这些东西都看过。真要写的时候,又找不到了。

以前我的做法很笨:打开网页,复制一段,粘到笔记里;再打开另一个页面,又复制一段。遇到图片、引用、标题层级,还要自己慢慢收拾。

收完以后,笔记看起来像一堆刚搬进屋的纸箱。

东西都在,但很难用。

baoyu-url-to-markdown 解决的就是这个问题:把网页内容抓下来,整理成干净的 Markdown。

它不是写作 Skill。

它更像写作前的收纳箱。

1. 它解决什么问题:材料先进屋

很多人让 AI 写文章,上来就是:

帮我写一篇关于某某主题的公众号文章。

AI 可以写。

但如果你没有给它材料,它只能凭通用知识写一篇通用文章。

通用文章最容易有一种毛病:句子顺,内容空。

你真正需要的是先把材料收进来。

比如你看到一篇英文教程,想把里面的思路拆成中文文章;或者看到一个 X thread,里面有几个很好的判断;又或者你想把 YouTube 视频字幕整理成读书笔记。

这时候,问题不是“AI 会不会总结”。

问题是:这些材料能不能先变成一个干净、可引用、可改写的文件。

baoyu-url-to-markdown 做的就是这一步。

它把 URL 变成 Markdown。对 X、YouTube、Hacker News 这些内容,还有专门的适配逻辑。遇到需要登录或验证码的页面,也有等待交互的模式。

这听起来像小事。

但写作里很多小麻烦,都是从这里开始的。

2. 直接看效果:网页变成可用材料

你可以给 AI 一个网页地址,然后说:

请用 baoyu-url-to-markdown 把这个网页保存成 Markdown,图片也尽量下载到本地。

它会做几件事:

  1. 打开页面,读取正文。
  2. 判断这个页面适合用哪种抓取方式。
  3. 把标题、正文、链接、图片整理成 Markdown。
  4. 保存到本地文件,后面可以继续总结、翻译、改写。

最后得到的是一个文件,不是一段临时复制出来的文字。

这点很实在。

文件意味着后面可以继续加工。

你可以让 AI 基于这个文件写摘要,可以提取观点,可以翻译,可以做成选题卡片,也可以把几篇材料合在一起,变成一篇自己的文章。

材料一旦落成文件,后面就不容易丢。

baoyu-url-to-markdown 把网页材料收成干净 Markdown,再交给 AI 做后续写作

3. 怎么使用:最短上手路径

这个 Skill 在宝玉的 Skills 仓库里:

https://github.com/JimLiu/baoyu-skills

把这个 GitHub 地址扔给 AI,然后说:

帮我安装这个仓库里的 baoyu-url-to-markdown Skill。

装好以后,使用方式也不用复杂。

你给它一个 URL,再说你想保存成 Markdown 就行。

比如:

请把这个网页保存成 Markdown,放到我的资料目录里。

如果页面里有图片,可以补一句:

图片也下载到本地,和 Markdown 放在一起。

如果页面需要登录,也直接说:

如果需要登录或验证码,请打开浏览器等我处理。

普通读者不用记参数。

你要记住的只有一句话:把网页交给 AI,让它用这个 Skill 收成 Markdown。

4. 为什么好用:它把“抓网页”写成了流程

这个 Skill 好用,不在于它能打开网页。

能打开网页的工具很多。

它真正值得学的是三层设计。

第一,触发条件很清楚

只要用户说“保存网页”“URL 转 Markdown”“把这个帖子存下来”,它就该出场。

好的 Skill 不能等用户说出准确命令。

普通人不会说“请调用网页抓取适配器并输出 Markdown”。普通人只会说:“这篇文章帮我存一下。”

它的 description 写得很实在:看到 URL、保存网页、转 Markdown,就触发。

这很适合学习。

写 Skill 的时候,别只写能力名称。要写用户会怎么开口。

第二,它给不同来源留了不同处理方式

这一点其实不神奇,就是正常的工程处理。

普通网页、X thread、YouTube 字幕、Hacker News 评论,内容结构本来就不一样。

硬用同一种方式抓,当然也能抓出点东西,但后面总要人再收拾。

baoyu-url-to-markdown 这里比较实在:能识别的来源,就走对应的适配器;识别不了的,再走通用页面处理。

对用的人来说,这样就够了。

不用关心它背后怎么分流,只要最后拿到的 Markdown 别太乱。

第三,它把质量检查写进了 Skill

这个 Skill 里有一个提醒:默认的无头浏览器抓取,只能算临时结果。抓完以后要检查 Markdown。

这句话很值得学。

它没有假装工具永远可靠。

有些网站会给无头浏览器返回残缺页面。有些页面看起来抓到了,实际正文不完整。一个好 Skill 要把这种风险写出来。

Skill 不是只教 AI 怎么做。

也要教 AI 什么时候怀疑自己做得不够好。

5. 它到底是怎么实现的

这里要说清楚一件事。

baoyu-url-to-markdown 不是纯靠提示词,也不是让大模型自己打开网页、复制内容、整理成 Markdown。

真正干活的是一个 CLI:

skills/baoyu-url-to-markdown/scripts/baoyu-fetch

这个 CLI 是 Bun / TypeScript 写的。Skill 本身更像一份操作说明,告诉 AI 什么时候调用它、怎么生成输出路径、要不要下载图片、抓完以后怎么检查质量。

所以它实际是两层结构:

Skill:负责调度和规则
baoyu-fetch:负责抓取、解析、转换和保存

baoyu-url-to-markdown 的真实实现:Skill 负责调度,baoyu-fetch CLI 负责抓取、分流、提取和输出

这里别讲错。

如果只写一个 Skill,让大模型“帮我保存网页”,效果不会稳定。网页抓取这种事,还是要靠浏览器、解析器和脚本。

我们拿一个具体场景看。

你丢给 AI 一个链接,说:

帮我把这篇文章保存成 Markdown,图片也下载到本地。

真正发生的事情,大概是这样。

第一步:AI 先决定怎么用这个工具

用户没有说文件名,也没有说用什么命令。

这时候 Skill 起作用。

它告诉 AI:只要用户想“保存网页”或“URL 转 Markdown”,就应该调用 baoyu-fetch

AI 会先做几件很小但很实际的事:

1. 看这个输入是不是 URL。
2. 给输出文件取一个合理路径。
3. 判断用户要不要下载图片。
4. 组装出真正要执行的 CLI 调用。

比如最后会变成类似这样的动作:

baoyu-fetch https://example.com/article --output url-to-markdown/example/article/article.md --download-media

普通读者不用记这行命令。

但你要知道:AI 不是自己在网页上复制粘贴,它是在按 Skill 的说明去调用底层工具。

第二步:baoyu-fetch 用 Chrome 打开网页

接下来就是 CLI 干活。

它不会只做一个简单的 fetch(url)

现在很多网页是前端渲染的。直接请求 HTML,可能只能拿到一个空壳,正文要等浏览器运行 JavaScript 后才出现。

所以 baoyu-fetch 会用 Chrome CDP 打开网页。

你可以把 CDP 理解成“脚本遥控 Chrome”:

打开网页
等待加载
滚动几次
观察网络请求
拿到页面 HTML

如果页面卡在登录、验证码、Cloudflare 检查,它也能检测出来,然后告诉 AI:这次不能硬抓,需要用户在浏览器里处理一下。

第三步:先看这个链接该交给谁处理

这里的 adapter,可以先理解成“某一类网站的专门处理器”。

为什么要有这个东西?

因为不同网站的内容藏在不同地方。

普通文章的正文,通常在页面 HTML 里。

YouTube 的重点不在页面正文,而在字幕和视频元数据里。

Hacker News 的重点是楼层评论。

X / Twitter 的重点常常在网页加载过程中返回的 JSON 数据里。

所以它不是拿到 URL 后都做同一件事。

它会先看这个链接属于哪类页面,再交给对应的处理器:

X / Twitter:走 x adapter
YouTube:走 youtube adapter
Hacker News:走 hn adapter
其他网页:走 generic adapter

比如你给的是 YouTube 链接,它就不会傻傻地把整个 YouTube 页面当文章抓。

它会优先拿字幕、章节、封面、视频信息。

你给的是 Hacker News,它就会保留评论层级。

你给的是普通文章,它才走通用网页处理。

这就是 adapter 的作用:不是“把 HTML 变 Markdown”的那一步,而是先决定“这个链接应该怎么取内容”。

第四步:普通文章怎么从网页变成 Markdown

如果是普通网页,就进入 generic adapter

这一类最接近我们平时说的“网页转 Markdown”。

流程可以拆成三步。

第一步,先拿到浏览器里已经渲染出来的页面。

注意,不是把 HTML “转成网页”。

网页本来就在 Chrome 里打开了。脚本做的是从 Chrome 里把当前页面的 DOM 拿出来。

你可以把 DOM 理解成浏览器眼里的页面结构。

脚本会把这个结构复制一份,顺手做几件清理:

把相对链接改成完整链接
把懒加载图片的真实地址补上
把 Shadow DOM 里的内容展开
得到一份比较完整的 HTML

到这里,它拿到的是 HTML,还不是 Markdown。

第二步,从 HTML 里找正文。

网页 HTML 里有很多东西不是正文:

导航栏
广告
推荐阅读
评论区
页脚
登录弹窗

这些不能都塞进 Markdown。

所以它会先用 Defuddle 试着提正文。

如果效果不好,再用 Mozilla Readability 这类工具兜底。

你可以把它们理解成“正文过滤器”:从整页 HTML 里尽量挑出真正的文章主体。

第三步,把正文 HTML 转成 Markdown。

这一步用的是 Turndown

比如网页里原本是:

<h2>标题</h2>
<p>正文第一段</p>
<img src="cover.png">

转出来大概会变成:

## 标题

正文第一段


所以普通网页的核心链路其实是:

Chrome 打开网页
-> 拿到渲染后的 DOM/HTML
-> Defuddle / Readability 提正文
-> Turndown 把正文 HTML 转 Markdown
-> 保存到本地文件

这里没有什么神秘的“AI 理解网页”。

AI 不负责把 HTML 一行行改成 Markdown。

真正转换格式的是脚本和库。

第五步:如果要下载图片,就把链接改成本地路径

如果你说“图片也下载到本地”,它会多做一步。

它会把 Markdown 里引用到的远程图片下载下来,放在文章旁边:

article.md
imgs/
  image-1.png
  image-2.png
videos/
  video-1.mp4

然后把 Markdown 里的图片链接改成本地路径。

这样以后你整理材料、迁移文件、发给 AI 继续处理时,不会因为原网页图片失效而丢东西。

第六步:AI 再检查结果是不是靠谱

脚本跑完,不代表一定成功。

有些网站会返回登录页。

有些网站会返回一堆导航和广告。

有些页面正文很短,明显没抓完整。

这时候又轮到 AI 出场。

Skill 要求 AI 抓完后看一眼 Markdown:

标题是不是目标文章?
正文是不是够长?
有没有全是导航、登录、报错?
图片链接有没有处理好?

如果发现抓到的是登录页,AI 就应该换一种方式:

打开可见 Chrome
让用户登录或过验证码
再继续抓取

所以这套流程不是“AI 替代脚本”,也不是“脚本替代 AI”。

更准确地说:

脚本负责确定性的抓取和转换。
AI 负责把脚本用对、把异常看出来、把结果交给用户。

这才是 baoyu-url-to-markdown 真正值得学的地方。

如果你要实现类似的东西

可以参考它的分层,而不是只照抄一段提示词。

最小版本可以这样做:

1. 写一个 CLI,接收 URL 和输出路径。
2. 用 Chrome CDP 或 Playwright 打开网页。
3. 等页面加载完成,必要时滚动页面。
4. 用 Readability / Defuddle 提取正文。
5. 用 Turndown 把 HTML 转 Markdown。
6. 把 Markdown 写入文件。
7. 再写一个 Skill,告诉 AI 什么时候调用这个 CLI、怎么检查结果、失败时怎么重试。

如果要支持特殊网站,再加 adapter:

YouTube:单独提取字幕。
评论区:保留楼层结构。
社交帖子:处理 thread、引用、图片和视频。
普通网页:走通用正文提取。

这才是这类 Skill 真正值得学的地方。

不是“写一个很长的 Prompt”。

而是把大模型放在调度层,把确定性的抓取和转换交给脚本。

6. 可以怎么改

我最想改的版本,是“公众号选题资料箱”。

它不只是保存网页,还会在保存以后多做一步:

这篇材料适合写成什么选题?
里面有哪些可引用的判断?
有哪些地方需要二次核实?

这样一来,它就不只是资料抓取工具。

它会变成写作前的第一道整理工序。

对内容创作者来说,这一步很值。

因为很多文章不是缺表达,是缺材料。

材料都没进屋,别急着装修。

7. 最后给一个可复制的行动步骤

如果你只是想用:

下次看到一篇想收藏的网页,别先复制。直接把链接给 AI,说:

请用 baoyu-url-to-markdown 把它保存成 Markdown,图片也放到本地。

如果你想学着写:

记住这个设计:先判断材料类型,再选择处理方式,最后检查输出质量。

好 Skill 不只是跑通一步。

它要把容易丢、容易乱、容易抓残的地方,提前管起来。