公众号热点图文自动流水线 SOP
从当日热点 → AI 生成爆款图文 → 自动推送公众号草稿箱,全程无人值守。
已实战验证:2026-09-10、2026-09-11 连续两次端到端跑通,产出 800 字图文,草稿箱落库校验均通过。
端到端耗时以生成步骤为准,实测 5~15 分钟波动很大(生成任务需 4~10 轮轮询,2026-09-11 晚间一次仅 4 轮 / 5 分 27 秒就终态)。
不要按固定值估,也不要因为跑得快就怀疑失败——成功判据只有退出码 0。
适用场景
每天或定期把当日热点做成一篇文章推入公众号草稿箱;需要「知识库取材 + AI 生成图文 + 联网配图 + 自动桥接推送」全自动跑完时使用。
不适用于:纯文案润色排版、需要个人经历的深度原创长文、API 群发(只进草稿不代发)。
触发词
公众号图文、热点图文、自动生成文章进草稿箱、每天生成一篇公众号、公众号定时更新、用我知识库写文章、联网找配图、推送草稿箱、生成爆款图文。
执行前的前置检查
按顺序确认,缺一不可:
- 凭证:
~/.workbuddy/.env有WECHAT_APPID/WECHAT_SECRET - 自检:
python "<用户主目录>\.workbuddy\skills\wechat-oa-operations\scripts\wechat_connector.py" check显示「连接成功」 - 生成技能已装:
~/.workbuddy/skills/lingyi-article-sticker-viral-generator/config.json里有LY_API_KEY - 扣点确认:每次生成约 62~68 点(随内容长度浮动,实测过 62 / 68,预估 60 点起步,以服务端实扣为准)。
用户已授权每日自动执行时不必再问;单次手动触发要先告知再执行。
第 0 步(可选但推荐):知识库取材
用户已授权「公众号文章可以用 Obsidian 知识库的内容」。
知识库 = <项目根目录>\知识库(唯一 vault,PARA 八目录,含 .obsidian 与 AGENTS.md)。
%PY% scripts/kb_search.py --query "<主题词>" --topn 8
%PY% scripts/kb_search.py --query "<主题词>" --dump 素材.md # 导出命中片段全文
脚本内置红线过滤:黑名单(会展/安保/报批/消防/公文/制度/值班/预算/SZCEC…)命中即整篇丢弃;
再要求命中可写方向白名单(AI工具/知识管理/读书学习/技术折腾/家庭生活/内容创作)才输出。
实测(2026-09-14):扫 1660 个文件,关键词"AI"命中 369 篇,红线拦下 351 篇,只剩 6 篇可用——
过滤率 95% 是正常且正确的,不要为了凑素材去绕过黑名单。
- 用法定位:知识库内容当论据/观点/个人经验来源,热点负责流量入口,两者结合
- 硬规则:禁止读取 D:\szcec(AGENTS.md 硬性规则第 1 条)
- 从知识库取材后,写入正文的观点需用户确认,不要直接暴露内部文件路径
操作步骤
第 1 步:搜热点定选题
WebSearch 搜「今日 AI 热点 / 今日热点新闻」,选当日热度最高、大众能读懂的一条。
方向轮换(避免连撞):AI工具实测 / 行业热点解读 / 提效技巧 / 职场生活。
避重:读 已生成记录.md,用过的跳过,完成后追加登记。
第 2 步:生成图文
cd <用户主目录>\WorkBuddy\2026-09-10-19-11-26
set PY=<用户主目录>\.workbuddy\binaries\python\versions\3.13.12\python.exe
set GEN=<用户主目录>\.workbuddy\skills\lingyi-article-sticker-viral-generator\scripts\article_generation.py
%PY% "%GEN%" --text "<选题>" --word-count 800 --product-name "<产品/工具名>" ^
--selling-points "<卖点1>" --selling-points "<卖点2>" ^
--audience-desc "关注AI工具的职场人和自媒体创作者" ^
--pain-points "AI工具太多不知道选哪个,订阅费越来越贵" --pain-points "怕新工具有上手门槛" ^
--content-format image_message --title-count 3 --main-image-count 1 --inset-image-count 1 --only-create
%PY% "%GEN%" --poll-task <task_id> --text "<同上的选题>" --out ./爆款图文.md
--poll-task必须带--text且与创建时完全一致,否则标题退化成「任务 xxx」- 退出码:0 成功 / 13 仍在执行(立即再跑一次)/ 11、12 失败(点数已返还)/ 2、3、4、8、10 未发起
image_message为公众号格式,封面固定 2.35:1(900×383),配图默认 16:9
轮询要这样跑(2026-09-11 实测修正):
脚本内部每 5s 打一次进度、单次轮询窗口上限 90s,然后退 13。生成任务实际要 8~10 轮才终态。
所以外层必须用循环,且单轮给 170s 而不是 90s——用 timeout 90 会在脚本自己退出前把它 SIGTERM 掉,
> 取退出码的坑(2026-09-18 实测):若写成 cmd | tail,$? 拿到的是 tail 的 0,running 会被当成终态,循环第一轮就假成功退出。
> 必须取 ${PIPESTATUS[0]},或先 cmd > out.txt 2>&1; rc=$? 再单独 tail out.txt。
退出码变成 124(不是 13),容易误判成失败。正确写法:
TASK="<task_id>"
for i in $(seq 1 10); do
timeout 170 %PY% "%GEN%" --poll-task "$TASK" --text "<同上的选题>" --out ./爆款图文.md 2>&1 \
| grep -v "进度:status=running elapsed" | tail -n 40
RC=${PIPESTATUS[0]}
[ "$RC" -eq 0 ] && break
sleep 8
done
- 过滤
进度:status=running elapsed这一行,输出能少 90%,别被刷屏淹没终态结果 - 成功标志只有 exit 0,且输出里会出现
ARTICLE_GEN_POINTS_USED=和「报告已写入」 - 前 8 轮全是 13 属于正常,不要在第 3~4 轮就判定卡死;但也别以为一定要 8 轮,实测过第 4 轮就成功
- 推荐把整个 for 循环写进 .sh 脚本用后台任务跑,比一轮一轮单独调用省事,且不会撞 Bash 工具超时
第 2.5 步(可选):联网搜图当配图
用户已授权「可联网搜索图片生成图文」。AI 生成图之外,可用真实照片当封面/配图。
%PY% scripts/webimg.py --query "<英文关键词命中率更高>" --count 2 --outdir ./webimg
%PY% scripts/webimg.py --url "<图片直链>" --url "<图片直链>" --outdir ./webimg # 直链兜底模式
脚本会把图片行打印成 Markdown,粘进 爆款图文.md 即可(md2draft.py 已支持本地路径)。
| 引擎 | 状态 | 授权 |
|---|---|---|
bing(默认) |
✅ 实测可用(2026-09-14) | 版权不明,发布前必须人工确认 |
pexels |
⚠️ 常被反爬 403 | 免费可商用,能用就优先 |
baidu |
⚠️ 返回格式常变 | 版权不明,需人工确认 |
环境提醒:本机走 WorkBuddy 本地代理(127.0.0.1:63452),
Pexels 搜索页 403、Wikimedia/Openverse 超时是常态,不要为此反复重试。
搜索全挂时的标准兜底:由 Agent 用 WebSearch 找图 → 拿直链 → --url 下载。
第 2.6 步:AI 改图(搜来的图必须走这一步)
为什么必须改:搜索引擎/图库搜来的图普遍带水印(Vecteezy、Dreamstime 实测都是满屏水印),
且有版权风险,直接发布等于侵权。用 ImageGen 的 image-to-image 重绘一遍,
既抹掉第三方水印,又能把画面改成贴合正文的内容。
调用方式(DeferExecuteTool → ImageGen):
{
"prompt": "编辑合成插图:<描述与正文主题强关联的画面>,画面干净整洁,绝对不要出现任何水印、logo、平铺文字或版权标记",
"image1": "<webimg 下载的本地原图绝对路径>",
"input_fidelity": "medium",
"size": "1536x1024",
"quality": "high",
"output_dir": "<工作目录>/webimg_ai"
}
要点:
image1传webimg.py下好的本地图,即为图生图;不传则是纯文生图input_fidelity:medium保留原构图又给足改动空间;调到high会保留原图水印,别用- 每张额外消耗约 5~10 积分,需在最终回复里告知用户
- 生成结果右下角自带「AI生成」标识——这是合规标识,不要裁掉
- 输出文件名是「prompt 片段 + 时间戳」,含中文和
T、:,先重命名成cover_ai.png/seg_ai.png再插进 md,避免路径解析问题 - prompt 里直接写"无水印"有时会反向生成文字水印,用"画面干净整洁 + 不要出现水印/logo/文字"更稳
改完替换 爆款图文.md 里的图片行,覆盖厂商生成图(本地路径 → md2draft → 微信图床),继续走第 3 步。
第 2.7 步:生成稿质检与事实重写(不可跳过)
生成器有稳定缺陷,不是偶发:连续两次(2026-09-14、09-15)均出现
- 截断残句:段落末尾句子断掉,如「微软准则明确要求」「AI红利不会消失,但分配方式在变。从」
- 无来源杜撰数据:凭空造百分比并配假来源,如「真正用进工作流的不到20%」
转换前必须通读 md 全文,逐段检查句末是否有完整句号。
推荐修复手法(实测有效):
- 保留生成图的图片行与图文骨架不动(图已付费生成,且是 md2draft 的图源)
- 用第 1 步 WebSearch 已核实的公开新闻事实重写正文段落:补回字数(原稿常只有 500 字,重写后 800~900 字)、保证事实可追溯
- 删掉所有无出处的量化表述,改定性说法(「不到20%」→「其实很有限」)
事实性表述发布前仍需人工复核,并在最终回复里向用户提示。
第 3 步:桥接转换(不可跳过)
%PY% md2draft.py --md 爆款图文.md --outdir ./draft_pkg --no-dry
产出 正文.html(图片已换 mmbiz 图床、样式内联)、封面.png、摘要.txt、候选标题.txt。
跳过必炸:生成图挂在厂商服务器,微信正文只认自家图床,直接用原链接图片不显示。
产出后必须打开 正文.html 检查开头。生成报告里 > 知识型 · 公众号 这类 meta 行会被转成 <blockquote> 排在正文最前面,
直接推上去读者第一眼看到的就是它。这个前缀不固定:已见过「知识型 · 公众号」「种草型 · 公众号」,按内容调性变化。
判断方法:删掉第 2 行那条 <blockquote ...>XXX · 公众号</blockquote>;不确定就用脚本按 · 公众号 关键字匹配整段删。
第 4 步:推送草稿箱 + 回查
%PY% "<用户主目录>\.workbuddy\skills\wechat-oa-operations\scripts\publish_draft.py" ^
--title "<标题,≤64字节>" --digest "<摘要>" ^
--content-file "draft_pkg\正文.html" --cover "draft_pkg\封面.png" --author "<署名>"
以输出里的「落库校验通过」为准——API 返回 media_id 不等于草稿真的在箱里。
改稿用 --update-media-id <media_id> 原地改写,不留重复草稿。
注意边界
- 只进草稿箱,绝不自动群发,最终发布由人手动点
- 标题 ≤64 字节(约 21 汉字),超了会被截断
- 事实性表述(跑分、价格、产品能力)由模型生成,发布前必须人工复核
- 不虚构具体人名、公司名、私人经历
- 知识库素材红线:本职工作相关内容(会展/安保/报批/制度/公文等)一律不得写进公开文章;
正文里不得出现知识库内部路径、单位名、系统名 - 配图版权:联网搜来的图只有 Pexels 等可商用图库可直接用,搜索引擎图发布前必须确认授权
- 家用宽带动态 IP,突然连不上先复查 IP 白名单
反例避雷(常见坑,详见 references/错误码与排障.md)
| 坑 | 后果 | 正解 |
|---|---|---|
| 跳过桥接直接塞 Markdown | 图片全裂 | 必须跑 md2draft.py --no-dry |
--poll-task 不带 --text |
标题变「任务 xxx」 | 带上完全相同的 --text |
| 只看 media_id 报成功 | 接口成功但空箱 | 以落库校验通过为准 |
| 用 ifconfig.me 的 IP 填白名单 | 多出口 NAT 下永远 40164 | 取微信报错里的 invalid ip |
| 同意图重复提交任务 | 重复扣点(无幂等) | 一个意图只提一次 |
样式写进 <style> 标签 |
微信过滤,样式全丢 | 全部内联到元素 |
外层轮询 timeout 90 |
退出码 124,误判失败 | 单轮给 170s,124/13 都算「继续」 |
轮询写成 cmd \| tail 后取 $? |
$? 是 tail 的 0,running 被误判为终态(2026-09-18 实测第 1 轮即假 DONE) |
用 ${PIPESTATUS[0]},或 cmd > out.txt 2>&1; rc=$? 再 tail 文件 |
| 生成稿整篇落在工作场景 | 触碰内容禁区(第 4 次复现:职场人/工作流/员工KPI/团队/公司财务) | 骨架级问题,删词无效,须整篇重写换生活场景锚点(读书/查资料/家庭/个人创作) |
| 轮询 3~4 轮没出就放弃 | 白白浪费已扣点数 | 实测 8~10 轮才终态,耐心跑满 |
| 只删「知识型 · 公众号」 | 「种草型」等变体漏网 | 按 · 公众号 匹配整段删 |
| 知识库素材不过滤直接用 | 泄密/舆情风险 | 必须跑 kb_search.py,红黑名单双过滤 |
| Pexels 搜图 403 就反复重试 | 白白耗时 | 换 bing,或用 WebSearch+--url 兜底 |
Bing 用 /images/search 抓 murl |
抓到 JS 壳,空手 | 必须用 /images/async?...&mmasync=1 |
| Bing 抓到页面但正则零命中 | 以为引擎挂了 | murl 被转义成 &quot;,先反转义再匹配 |
| 搜索引擎图直接商用 | 版权侵权 | 必须走第 2.6 步 AI 改图重绘一遍 |
| 搜来的图不检查就用 | 满屏 Vecteezy/Dreamstime 水印发出去 | 先 Read 看图,有水印必须 AI 重绘 |
AI 改图后用 input_fidelity: high |
原图水印原样保留 | 用 medium |
| AI 改图输出文件名直接写进 md | 中文+冒号路径解析出错 | 先重命名 cover_ai.png / seg_ai.png |
版本记录
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0.0 | 2026-09-10 | 初版,四步流水线 + md2draft.py 桥接脚本,端到端实战验证通过 |
| v1.1.0 | 2026-09-10 | 固化为可安装技能包;新增自动升级约定;md2draft.py 改为路径自适应 |
| v1.1.1 | 2026-09-10 | 归档策略修正:旧版本归档包保留不删除(v1.0.0 已复原归档) |
| v1.2.0 | 2026-09-11 | 第二次端到端验证;修正轮询写法(单轮 170s、124 也属继续、实测 8~10 轮);元信息块改为按「· 公众号」通配删除,覆盖「种草型」等变体;补充输出过滤与成功判据 |
| v1.2.1 | 2026-09-11 | 第三次端到端验证(高德 ABot-Earth 0.7,实扣 62 点);修正耗时与扣点为区间值(5~15 分钟 / 62~68 点);补充「循环写进 .sh 用后台任务跑」的推荐写法;元信息块通配删除再次验证有效 |
| v1.4.0 | 2026-09-14 | 新增「第 2.6 步 AI 改图」:搜来的图经 ImageGen image-to-image 重绘(去第三方水印 + 画面贴合正文),实测 Vecteezy/Dreamstime 水印图全部洗净;记录 input_fidelity 选型、AI生成标识的合规保留、输出文件重命名三个坑;首次全 AI 改图图文端到端跑通(词元经济选题,实扣 77 点 + 改图积分) |
| v1.4.1 | 2026-09-15 | 新增「第 2.7 步 生成稿质检与事实重写」:确认残句与无来源杜撰数据为生成器稳定缺陷(非偶发),固化「保留生成图 + 用已核实新闻事实重写正文」修复法,实测把 500 字残稿修成 900 字可发稿 |
| v1.4.2 | 2026-09-18 | 第十次端到端验证(OpenAI 6 起对齐偏离披露,实扣 30 点,历次最低);补全「轮询退出码被管道吞掉」这一高危坑(PIPESTATUS[0]);补充红线骨架级踩线的第 4 次复现与整篇换场景重写手法 |
| v1.3.0 | 2026-09-14 | 新增「第 0 步 知识库取材」(kb_search.py:接 Obsidian 库 <项目根目录>\知识库,红线黑白名单双过滤,实测拦截率 95%);新增「第 2.5 步 联网搜图」(webimg.py:bing/pexels/baidu 三引擎 + --url 直链兜底);md2draft.py 支持本地图片路径,打通「联网图 → 微信图床」;补充代理环境下图源可用性与 Bing 反转义两个坑 |
| v1.4.3 | 2026-09-18 | 标题口径统一为知识库标准四段(四步流水线→操作步骤、硬约束→注意边界、常见坑→反例避雷),补「适用场景」「触发词」段;顺带修正 frontmatter 版本漂移(库内副本内容由 v1.4.1 同步至现行 v1.4.2 后再落 v1.4.3)。正文内容零变更 |
自动升级约定
本技能为「活文档」,按以下规则自我迭代,无需用户重复要求:
- 触发时机:本流水线新增/改进了任何步骤,且已实测跑通,或出现新坑并已解决
- 同步三处:① 本 SKILL.md ② 知识库归档包
<项目根目录>\知识库\05-技能库\技能|公众号热点图文自动流水线 SOP vX.Y.Z.zip③ 版本记录表 - 归档保留原则:知识库里的旧版本归档包一律保留、不删除,每次升级只新增新版本包,历史可追溯
- 版本号:小修
x.x.+1/ 加步骤x.+1.0/ 重构+1.0.0 - 每用一次回头修订一次,把新踩的坑补进「常见坑」表