夜雨聆风学习资料网

ARTICLE · 1228994

OpenClaw Skill 自动化:公众号日更压到20分钟

OpenClaw Skill 自动化:公众号日更压到20分钟

📅 2026-10-23

先说结论:我们把公众号日更做成了一套 OpenClaw 自动化流水线,每天从选题、配图、写稿、门禁到出 Word 全自动跑完,一次人工介入都不需要。原来一篇稿子从选题到能发要 3 小时,现在压到 20 分钟以内,剩下的时间只是人工通读一遍。

这篇不讲 OpenClaw 是什么,只讲我是怎么搭的、你照着做能得到什么、哪里会踩坑。

✦ ✦ ✦

▎ 一、先看清楚:这套流程到底省在哪

原来写一篇公众号,流程是这样的:

选题(翻半小时)→ 找素材(再半小时)→ 搭结构写初稿(一小时)→ 配图(三张图跑两轮)→ 排版导 Word(半小时)→ 通读查错(半小时)。

3 小时里,真正需要人脑的只有两个动作:决定写什么、和最后通读确认。剩下全是搬运。

所以自动化的目标很明确:不是让 AI 代替你思考,是让 AI 干搬运。

我们把它拆成了 5 个环节,每个环节交给一个专职的 OpenClaw 子 Agent(我们叫 sub-agent):

环节

谁干

产出

抓选题

抓取 Agent

选题池文件

挑选题

编辑 Agent

今天写哪条,锁定

写稿

写稿 Agent

draft.md

配图

视觉 Agent

3 张插画

出稿+门禁

编排 Agent

Word 文件

关键是每个 Agent 只干一件事,且只读上游的产出文件,不共享上下文。

✦ ✦ ✦

▎ 二、第一步:把 Skill 写清楚,比把 Agent 调通更重要

OpenClaw 里一个「干活的」单位叫 Agent(子 Agent),一个「干活的流程」叫 Skill(技能包)。

很多人搭自动化第一个坑就是:在 Agent 的提示词里写了一堆规矩,结果 Agent 干活干到一半忘了。

我们的做法是反过来的:规矩写进 Skill,Agent 只负责触发。

一个 Skill 的最小结构就是一个 markdown 文件:

---

name: yangsheng-tietu-batch

description: 养生贴图 Word 文档批生产,无叠字 + 门禁 + 附件交付。

---

# 养生贴图批生产

## 铁律(违反任何一条算失败)

1. 配图绝不后期叠字

2. 每张图必须逐张验字

3. 走门禁脚本,exit 0 才交付

## 出图命令

$PY generate_image_v3.py --type cover --aspect 3:4 --output "$D/images/00_cover.jpg" --prompt "..."

关键在 description 那一行 —— 它是 OpenClaw 决定「该不该用这个 Skill」的依据,写得含糊了,Skill 就永远不会被触发。

⚠️ 实测踩坑:我们最初把 description 写成「辅助工具」,结果 30 天里这个 Skill 一次都没被自动触发过。改成一句话说清「什么时候用我 + 我干什么」,第二天就触发了。

✦ ✦ ✦

▎ 三、第二步:用 cron 把环节串起来

Skill 定义了「怎么做」,cron 定义了「什么时候做」。

我们给公众号日更排了 4 个 cron,时间是错开的:

# 16:40 抓选题(读缓存,不实时调外部 API)

- cron: "40 16 * * *"

script:fetch_ai_news.py

# 16:50 挑选题并锁定

- cron: "50 16 * * *"

script:auto_pick_topic.py

# 17:30 写稿 + 配图 + 门禁 + 出 Word

- cron: "30 17 * * *"

script:run_article_delivery.py

# 19:10 复核门禁 + 推飞书

- cron: "10 19 * * *"

script:verify_and_push.py

错峰是硬要求,不是优化。我们同时跑 3 个 cron 撞同一个 API 套餐,直接吃到限流,一次挂了 53 分钟。所以每档之间至少留 10 分钟,且同一天内不允许两个 cron 用同一个模型配额。

✦ ✦ ✦

▎ 四、第三步:给每个环节装一个「不许偷懒」的检查

自动化的最大风险是 Agent 假装自己成功了。我们被这个坑过至少 5 次。

具体表现是:脚本返回成功,但文件根本没落盘;或者 Agent 在回复里说「已完成」,其实一步都没跑。

现在每个环节都强制跑一个检查脚本,退出码不为 0 就当失败:

# 检查图片是否真的落盘 + 尺寸对不对

$PY check_images.py "$D" --account=ai

# 检查成稿门禁(字数/配图数/内容合规)

$PY gzh_gate.py "$D/draft.md" --account ai --docx "$OUT"

echo ">>> exit=$?"

# 检查 Word 成品有没有被偷偷加东西

$PY verify_docx_clean.py "$OUT" --expect-images 3

⚠️ **千万不能这样写**:`gzh_gate.py draft.md | grep 标题`

这样拿到的是 grep 的退出码,不是门禁的退出码。我们踩过一次,明明门禁 FAIL,但管道一接,Agent 看到 exit=0 就当通过了继续往下走。

正确写法是先重定向再取码:

```bash

$PY gzh_gate.py "$D/draft.md" > /tmp/gate.txt 2>&1

ec=$?

```

✦ ✦ ✦

▎ 五、踩过的 4 个坑(都是真金白银换来的)

▶ 坑 1:Skill 的 description 写虚了,永远不触发

见上文。一句话说清「什么时候用 + 干什么」,别写「辅助工具」这种废话。

▶ 坑 2:cron 里跑实时外部 API,必然挂

我们有一次在选题环节直接调外部的MCP接口,结果任务挂了 53 分钟,最后报错是「工具结果还在等待中,转断了」。

根因是外部 API 响应慢,加上调用要审批,整个环节挂在那儿等。

正路:把「进料」和「消费」分开。 进料是一个独立的、定时跑的流程,负责把素材存成文件;写稿的 cron 只读本地文件,不碰外部 API。宁可素材旧一天,也不能让写稿环节卡死。

▶ 坑 3:脚本路径必须放在允许的目录里

OpenClaw 的 cron 有安全校验,脚本路径会被检查真实路径(会解析软链接)。用软链接绕是绕不过去的。

正路:写一个 wrapper 脚本放在允许目录里,里面再用 subprocess 调真正的脚本。

# ~/.OpenClaw/scripts/cron_wrap_fetch.py

import subprocess, sys

r = subprocess.run([sys.executable, "/真实路径/fetch_ai_news.py", *sys.argv[1:]],

capture_output=True)

print(r.stdout.decode(), r.stderr.decode())

sys.exit(r.returncode)

▶ 坑 4:报告「跑通了」不等于「有产出」

有一次 cron 显示 success: true,我们以为一切正常。实际上那次是静默退出,什么都没做。

正路:验收点必须落在产物上,不在日志上。

# ❌ 不够:只看 cron 返回成功

# ✅ 够:查产物 + 查门禁状态

ls -la "$D"/draft.md

$PY -c "import json;print(json.load(open('/path/to/job.json'))['last_status'])"

⚠️ cron 显示成功但实际 `last_status: error` 的情况我们遇到过,所以这两件事必须分开查。

✦ ✦ ✦

▎ 六、这套东西适合谁,不适合谁

适合:

·内容生产有固定流水线的人(公众号、头条、小红书、多平台分发)

·每天重复劳动多、但判断权要握在自己手里的人

·愿意花一周时间把流程拆清楚的人

不适合:

·一次性任务 —— 为一件事搭自动化,成本远高于手动做

·需要大量主观判断的活 —— AI 干不了判断,只干得了搬运

·不愿意检查的人 —— 自动化不做质检 = 批量生产垃圾,我们见过跑量跑到账号被限的

最后这句是重点。自动化让你从 3 小时压到 20 分钟,但这 20 分钟你干什么,决定了结果是「省时间」还是「废号」。我们的做法是把这 20 分钟全用在通读上:查数据有没有编、查来源有没有泄漏、查结论站不站得住。

机器负责跑得快,人负责别跑偏。这两件事分开,才叫自动化;混在一起,就叫失控。

相关学习资料