下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/chaoxiai--wechat-pipeline.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @chaoxiai/wechat-pipeline。多模板
阅读全文 (展开查看完整说明)
概述
公众号自动化流水线 (wechat-pipeline)
一站式公众号内容自动化,覆盖 6 个阶段。你只给链接或选题,它一路走到草稿箱。
约定
{baseDir}指本 skill 的根目录(即SKILL.md所在目录)。所有脚本、引用、凭证都从这里找相对路径。- 首次使用前:复制
.env.example为.env,填入真实凭证。脚本通过SKILL_ROOT/.env读取。
流水线总览
输入(链接/选题)
│
▼
① 抓取/选题 ── 搜狗微信搜索 + 文章下载(有链接时)
│ 或 AI 自主选题(给主题时)
▼
② 洗稿改写 ── 去AI味、结构重组、语言原创化、标题优化
│
▼
③ 确认正文 ── 用户确认标题+正文(checkpoint,不可跳过)
│
▼
④ 配图生成 ── 封面 + 概念图(guizang 规范 + gpt-image-2)
│
▼
⑤ 排版出HTML ── 双引擎:gzh-design 或 wechat-article-styler,让用户选主题
│
▼
⑥ 推送草稿箱 ── 上传素材 + 创建草稿(微信 API)Checkpoint 规则(武硕定下的硬约束):
- ②→③ 必须等用户说"正文 OK"才能往下走
- ④ 配图必须等用户说"走"才生成,不可提前
- ⑤ 排版主题必须让用户从画廊里挑,不可擅自定死
- ⑥ 发布前必须确认"推草稿箱"
环境准备
所有运行时凭证存在本 skill 根目录下的 .env 文件中(复制 .env.example 后填写真实值):
# .env 文件内容示例(复制 .env.example 为 .env 后修改)
# 注:生图 base URL 已定死为 https://sub2api.leefun.top/v1,只需要填 KEY
IMAGE_API_KEY= # 生图 API Key,去 https://sub2api.leefun.top 申请
IMAGE_MODEL=gpt-image-2 # 生图模型名,默认 gpt-image-2
WECHAT_APP_ID= # 微信公众号 AppID
WECHAT_APP_SECRET= # 微信公众号 AppSecretPython 解释器路径由 AI 自动探测,不需要用户填写。AI 会在执行脚本前用以下策略查找可用 Python:
python3 --version或python --version- 常见 managed venv 路径(如 WorkBuddy 的
~/.workbuddy/binaries/python/) - 系统 PATH 中的 python 可执行文件
脚本内部通过 dotenv 或手动读取 .env 获取这些值。.env 已加入 .gitignore(若 skill 进入版本控制)。
阶段 ①:抓取 / 选题
A. 用户给链接
# 下载公众号文章(含正文、图片、元数据)
cd "{baseDir}/scripts/fetch" && npm install # 首次
node download.js "<文章URL>" --output "<保存目录>"输出结构:
<保存目录>/<文章标题>/
├── content/article.html
├── metadata.json
├── images/
└── videos/B. 用户给主题/选题
用搜索脚本按关键词检索爆款文章供参考:
node "{baseDir}/scripts/fetch/search_wechat.cjs" "<关键词>" -n 5 -cC. AI 自主选题
当用户只说"写一篇关于 XX 的公众号文章"时:
- 用搜索工具找该领域近期热门公众号文章
- 提炼 3-5 个可选选题角度,让用户选
- 选定后进入阶段 ②
阶段 ②:洗稿改写
触发:有原文(下载所得或用户提供),执行洗稿。
改写策略
A. 结构重组
- 段落重排:调整段落顺序,打乱原文结构
- 段落拆合:长段拆短、碎片合并
- 叙事角度转换:时间线 ↔ 问题导向 ↔ 对比分析 ↔ 故事引入
- 论据重组:保留核心论据,改变展开方式
B. 语言改写(去 AI 痕迹)
- 删除意义膨胀句:"标志性"、"里程碑"、"深远影响" → 具体事实
- 去虚假权威:"专家认为" → 写明来源或删除
- 去伪深度动词:"赋能"、"推动进程" → 具体动作
- 去 AI 高频词:赋能、闭环、生态、抓手、底层逻辑、范式、沉淀、势能
- 去填充短语:事实上、值得注意的是、总体来说、不难发现
- 去空洞结尾:"未来可期" → 实际结论或行动项
C. 标题改写
生成 3-5 个备选标题,写入初稿.md 的 frontmatter title_candidates 供用户挑选(frontmatter 不写 title,避免与渲染 --title 传参冲突)。
用"钩子"组合,而不是套句式——先通读全文识别核心钩子,再组合 2~3 个进一个标题,制造好奇心缺口:
- 认知冲突:花的钱/精力 vs 得到的结果("花八九百买的录音豆,纪要还是没法用")
- 数字锚定:用具体数字制造冲击("几十亿尽调都做了,被一个会议纪要难住")
- 痛点前置:直接喊出烦恼("AI 会议纪要太水?")
- 反常识 / 新认知:打破固有用法("别让它自己写纪要,让它给你喂素材")
- 人群圈定:精准标记读者("律师专用""飞书录音豆用户")
钩子类型参考(可混搭):疑问型、数字型、悬念型、痛点型。保持"活人感"——口语化动词/语气("补了一刀""一对一的""调教"),避免说明书式平铺。输出时每个标题附一句简短解析(用了哪个钩子、为什么有效),推荐度最高的排第一。
标题公式库、禁止句式、摘要模板详见
{baseDir}/references/rewrite/title-formulas.md,洗稿时按需取用。
D. 开头改写
- 故事引入 / 数据引入 / 痛点引入 / 反问引入
c
- 所有技术例子换成办公场景(如"写周报"、"做报表"、"发邮件")
- 避免"读代码/跑命令/构建/终端"等开发腔
- 受众默认央国企普通办公人员为主
AI 痕迹识别清单(21 项)
| # | 检查项 | 处理 |
|---|---|---|
| 1 | 意义膨胀句 | 替换为具体事实 |
| 2 | 虚假权威引用 | 写明来源或删除 |
| 3 | 伪深度动词 | 改为具体动作 |
| 4 | 广告语气 | 客观描述 |
| 5 | 模板段落 | 删除模板,保留结论 |
| 6 | AI 高频词 | 替换为日常用语 |
| 7 | 负向并列滥用 | 直接表达 |
| 8 | 三段式强拆 | 保留重点,删填充 |
| 9 | 同义词机械轮换 | 同一概念固定用词 |
| 10 | 破折号滥用 | 改句号/逗号 |
| 11 | 加粗强调滥用 | 去掉不必要强调 |
| 12 | 列表模板 | 合并为自然段 |
| 13 | 概念堆砌标题 | 口语化标题 |
| 14 | Emoji 泛滥 | 默认删除 |
| 15 | 聊天语残留 | 删除 |
| 16 | 知识截止声明 | 删除 |
| 17 | 过度讨好 | 客观回应 |
| 18 | 填充短语 | 删除 |
| 19 | 过度模糊 | 改为条件判断 |
| 20 | 空洞结尾 | 实际结论 |
| 21 | 假区间表达 | 列举具体事实 |
输出
- 洗稿后全文(Markdown,无 frontmatter,标题候选附在文末或独立文件)
- 备选标题 3-5 个
- 简要改动说明
- 一句话 summary(写进创作说明,用于分享文案 / 草稿摘要)
- 外链按
references/common/format-normalize.md的「外链处理」转文末引用角标(微信内链mp.weixin.qq.com保留原样)
产物保存为:{日期}/{主题}/初稿.md(正文)+ {日期}/{主题}/创作说明.md(内部 notes,含标题候选、受众、配图规划、创作思路等)
⚠️ 创作说明必须写到独立文件,不可塞进初稿.md 正文末尾。
阶段②末自检(进③前必做)
- AI 味自检 + 三轮事实溯源:按
{baseDir}/references/review/ai-flavor-check.md跑——15 条指纹命中 ≤3 条、零"匿名权威"、关键事实能指回来源。只诊断不阻断,但建议清到可接受再进阶段③。 - 与上方「AI 痕迹识别清单(21 项)」互补:21 项查词藻 / 结构,ai-flavor-check 查指纹 / 密度 / 事实。
阶段 ③:确认正文(Checkpoint)
用户确认标题+正文。用户说"正文 OK"或类似确认才继续;用户说"先别配图"就停在这里。
阶段 ④:配图生成
触发:用户说"走"/"配图"/"生图"。
第一步:选 Type + 选 Style
配图开始前,先定 Type(用途),再让用户选 Style,不可擅自定死。Type→Style→尺寸映射见 {baseDir}/references/guizang/type-style-matrix.md(封面 cover / 正文概念图 concept / 信息图 infographic)。Style 提供以下选项(新增风格可随时在 {baseDir}/references/guizang/ 下添加 .md 模板扩展):
| 风格 ID | 中文名 | 适用场景 | 模板文件 |
|---|---|---|---|
| hand-drawn-card | 手绘风知识卡片 | 通用型,概念拆解/流程图/对比 | hand-drawn-card.md |
| swiss-3d | 瑞士编辑风 3D | 专业科技类,数据感强 | visual-style.md |
提问示例:
🎨 配图风格选一套?
- 手绘风知识卡片(推荐,通用百搭)
- 瑞士编辑风 3D(专业科技/数据感)
用户选定后,读取对应的模板文件({baseDir}/references/guizang/<模板文件>),按其中的提示词规范生成。
规范(所有风格通用)
- 简体中文,日常用语
- 标签 2-5 个汉字,水平排列,高对比度
- 每张图右上角带 "潮汐AI" 水印(强制,所有风格统一)
- 不加 logo、watermark(除潮汐AI)、英文标签、装饰 blob
- 图上中文文案须显式写进 prompt(标题 / 标签 / 注释原文),不可只写"图里写个标题"让模型自由发挥
出图前先落盘 prompt(可复现 / 可追溯)
每张要出的图,在调用 API 之前先写一份 prompt 文件:
- 路径:
{日期}/{主题}/待发布/prompts/NN-{用途}.md - 字段:序号 NN / 用途(cover·concept·infographic) / 对应正文章节 / 完整中文 prompt 终稿 / 尺寸 / 选用风格 / 状态(待生成→已生成含URL→已检查)
- 用户可提前 review prompt;重跑可复现;事后可追溯。
出图 API
base URL 已写死:https://sub2api.leefun.top/v1(用户偏好定死,不从 .env 读)。调用走 {baseUrl}/v1/images/generations,Bearer Token 鉴权,模型默认 gpt-image-2。
KEY 从 .env 读 IMAGE_API_KEY。如果 KEY 不存在或不是 sk- 开头,脚本会直接退出并打印:
❌ 没检测到 IMAGE_API_KEY
生图 API base URL 固定为: https://sub2api.leefun.top
KEY 申请地址: https://sub2api.leefun.top
申请步骤:
1) 打开 https://sub2api.leefun.top 注册账号
2) 在「额度/套餐」页选 gpt-image-2 (约 0.5 元/张)
3) 复制 API Key (sk- 开头)
4) 填到 <skill根目录>/.env 的 IMAGE_API_KEY 字段⚠️ 5XX 错误禁止重试(用户硬性约束),脚本直接 sys.exit 报用户。
直接调用 {baseDir}/scripts/image/gen_image.py:
import sys
sys.path.insert(0, "<baseDir>/scripts/image")
from gen_image import generate_image, ensure_key, build_hand_drawn_card_prompt
ensure_key() # 没 key 直接 sys.exit(2) 并打印引导
b64_bytes = generate_image(
prompt=build_hand_drawn_card_prompt("AI 从会聊到能干活"), # 中文 prompt
size="1536x1024",
)
# b64_bytes 是 JPEG/PNG 原始字节,后续用 PIL 压缩到 ≤ 1MB批量生图:准备一个 JSON 清单(每项含 name/prompt/size/out),跑 gen_concepts.py:
python "<baseDir>/scripts/image/gen_concepts.py" products.json --out-dir 待发布/手写调用(不用脚本时):
import os, requests, base64, dotenv
dotenv.load_dotenv(os.path.join("<baseDir>", ".env"))
resp = requests.post(
"https://sub2api.leefun.top/v1/images/generations",
headers={"Authorization": f"Bearer {os.environ['IMAGE_API_KEY']}"},
json={
"model": "gpt-image-2",
"prompt": "<根据所选风格模板填写完整提示词>",
"size": "1536x1024",
"quality": "high",
},
timeout=180,
)
img_bytes = base64.b64decode(resp.json()["data"][0]["b64_json"])常见配图组合(一篇公众号文章)
| 文件名 | 生图尺寸 | 输出尺寸 | 用途 | 视觉结构 |
|---|---|---|---|---|
| cover.jpg | 直出 900x383(2.35:1,API 返回同比例大图≈1922×818)→ 等比缩放至 900×383 | 900×383,JPEG ≤ 1MB | 头条封面 | Hub-and-spoke 或 Data-first |
| concept_*.jpg | 1536×1024(1.9:1) | max edge 1280,质量 82-90 | 正文概念图 | Cycle / Pipeline / 4-mode grid |
生成后
- 封面后处理:封面直出
900x383(已验证 API 接受该尺寸,返回同比例大图≈1922×818),PIL LANCZOS 等比缩放到 900×383(2.35:1),quality≈88 压缩到 ≤ 1MB - 正文图后处理:PIL 压缩 JPEG 质量 82-90,max edge 1280
- 逐张检查:中文标签对不对、位置对不对、有没有多余英文/logo
- 保存到
{日期}/{主题}/待发布/目录 - 进入阶段 ⑤
阶段 ⑤:排版出 HTML(统一主题画廊)
两套引擎的主题合并为一张总表,一步选择——用户说主题 ID 或中文名即可,不可擅自定死。
全部可用主题(合并两引擎)
| 主题 ID | 中文名 | 风格 | 渲染方式 |
|---|---|---|---|
| graphite-minimal | 石墨极简 | 干净克制 | gzh-design 精细拼装 |
| red-white | 红白编辑 | 强对比 | gzh-design 精细拼装 |
| moyu-green | 摸鱼绿 | 清新卡片 | gzh-design 精细拼装 |
| moyu-ticket | 摸鱼票据 | 票据装饰 | gzh-design 精细拼装 |
| olive-journal | 橄榄手记 | 手记感 | gzh-design 精细拼装 |
| zen-whitespace | 留白禅意 | 大留白 | gzh-design 精细拼装 |
| sage-editorial | 鼠尾草杂志 | 清新卡片 | styler 自动渲染 |
| indigo-business | 靛蓝商务 | 稳重商务,适合央国企 | styler 自动渲染 |
| sky-blue | 天蓝科技 | 科技蓝 | styler 自动渲染 |
| mono-black | 墨黑杂志 | 黑白高质感 | styler 自动渲染 |
| morandi | 莫兰迪 | 低饱和柔和 | styler 自动渲染 |
| cream-warmth | 奶油暖色 | 温暖亲和 | styler 自动渲染 |
| ticket-note | 票根笔记 | 票根装饰 | styler 自动渲染 |
| data-infographic | 数据报告 | 报告风 | styler 自动渲染 |
第一步:展示主题画廊供用户选择
💡 上表为内置 14 套主题。若都不满意,Agent 可据偏好/参考图现造新主题并自动登记进本表与画廊(走
{baseDir}/references/themes/theme-generator.md,详见下方「第三步」)。
用户确认正文后,向用户展示画廊总索引(内置 14 套 + 已生成的 AI 现造主题),让用户直观点击查看每一套主题的真实 HTML 演示:
- 画廊总索引路径:
{baseDir}/docs/gallery/index.html(内含 14 套独立主题的直达演示链接与风格卡片) - 独立主题 HTML 演示文件(位于
{baseDir}/docs/gallery/):gzh-graphite-minimal.html— 石墨极简(精细拼装版实装样张)gzh-red-white.html— 红白编辑(精细拼装版实装样张)moyu-green.html— 摸鱼绿(精细拼装版实装样张)moyu-ticket.html— 摸鱼票据(精细拼装版实装样张)gzh-olive-journal.html— 橄榄手记(精细拼装版实装样张)gzh-zen-whitespace.html— 留白禅意(精细拼装版实装样张)indigo-business.html— 靛蓝商务(实装渲染样张)sky-blue.html— 天蓝科技(实装渲染样张)sage-editorial.html— 鼠尾草杂志(实装渲染样张)mono-black.html— 墨黑杂志(实装渲染样张)morandi.html— 莫兰迪(实装渲染样张)cream-warmth.html— 奶油暖色(实装渲染样张)ticket-note.html— 票根笔记(实装渲染样张)data-infographic.html— 数据报告(实装渲染样张)
🛑 必须用
present_files工具,传本地文件路径呈现{baseDir}/docs/gallery/index.html——用户在预览面板点卡片即可逐一全屏查看 14 套真实样张。禁止起localhost/python -m http.server服务(后台进程会被沙箱回收→白屏)、禁止让用户双击file://打开(同目录 iframe 会乱码)、禁止用 iframe 内嵌。画廊已零外部依赖(无 CDN / 无 iframe),直接 present 本地路径即可稳定显示。
第二步:提问 + 推荐
⚠️ 必须让用户选一个排版主题,不可擅自定死。 AI 应根据文章内容主动推荐 1-2 个合适的主题(如科技类→天蓝科技/石墨极简,央国企/政策类→靛蓝商务,生活/随笔→莫兰迪/奶油暖色),同时展示全部可选主题供用户自选。
📐 选一个排版主题?这篇文章是 [文章类型],推荐 [主题中文名]([简短理由])。也可以在画廊里看看其他风格,直接说 ID 或中文名:
第三步:内置 14 套都不满意?AI 现造一套
如果画廊里 14 套都不合心意,或用户主动说「生成一套新主题 / 自定义风格 / 按这个参考图做一套」,走 {baseDir}/references/themes/theme-generator.md 的完整工作流。现造的主题会和内置主题完全同权:
- 收集偏好(一次问全,不逐条追问):主题描述必填(或给参考图/PDF),名称 / 主色 / 背景 / 正文色 / 强调色 / 装饰色 / 字体 / 圆角 / 阴影 / 适用场景可空,由生成提示词自动补全。
- 生成区块库 HTML:用 theme-generator.md 末尾的【生成提示词】+ 偏好,产出 45~75 个区块的完整 HTML,存为
{baseDir}/docs/gallery/theme-{id}.html(整页一次浏览确认风格,不逐块问)。 - 转标准主题库 + 登记:用户确认风格后,转成
{baseDir}/references/themes/theme-{id}.md(补<span leaf="">包裹、补齐五章节:变量表 / 组件 / 骨架 / 配方表 / 映射表),登记进theme-index-gzh.md(或直接进theme-index-styler.md),跑python "{baseDir}/scripts/layout/component_lint.py" .到 0 ERROR,并在docs/gallery/index.html加一张同款卡片。 - 即刻同权:现造主题会出现在上面的合并主题表里,之后排版走下方对应引擎分支,用户直接说「用 XX 主题排这篇」即可。
现造主题默认走 gzh-design 精细拼装引擎(与石墨 / 红白 / 摸鱼同路),渲染走下方 gzh-design 分支;若用户要的是 styler 类风格,同样走此流程,登记进
theme-index-styler.md即可。
渲染 + 校验
用户选定主题后,根据来源引擎执行:
🖋 语义强调原则(两引擎通用):加粗 / 下划线必须基于语义理解,不机械匹配关键词。只对「核心论点、关键结论、工具 / 专有名词首次出现、操作步骤关键动作、重要限定条件」加粗;过渡句、背景铺垫、普通过程描述一律不碰。目的是帮读者抓重点,不是满篇高亮。
gzh-design 类(石墨/红白/摸鱼绿/票据/橄榄/留白 + AI 现造主题):
- 读对应组件库
theme-{标识}.md+common-components-gzh.md - 按骨架顺序逐段拼装组件 HTML
- 关键词加下划线,章节配编号 + 英文标签
- 校验:
python "{baseDir}/scripts/layout/validate_gzh_html.py" "<.html>" - 预览:
python "{baseDir}/scripts/layout/wrap_preview.py" "<.html>"
styler 类(鼠尾草/靛蓝/天蓝/墨黑/莫兰迪/奶油/票根/报告):
- 从初稿.md 剥 YAML frontmatter → _body.md
- 渲染:
python "{baseDir}/scripts/layout/render_markdown.py" "_body.md" -o "_article.html" --theme <主题ID> - 校验:
python "{baseDir}/scripts/layout/validate_wechat_html.py" "_article.html"
python "{baseDir}/scripts/layout/verify_content_fidelity.py" "_body.md" "_article.html"- 预览:
python "{baseDir}/scripts/layout/wrap_preview.py" "_article.html" "_预览.html" --source-md "_body.md"
阶段 ⑥:推送草稿箱
前置条件:
- HTML 文件就绪(图片路径可以是本地的)
- 封面图在
待发布/cover.jpg - 公众号 AppID + AppSecret 已配置
- IP 在公众号后台白名单中
发布脚本(Python 直调微信 API):
# 位置:{baseDir}/scripts/publish/publish_draft.py
# 用法:
python "{baseDir}/scripts/publish/publish_draft.py"
--html "<HTML文件路径>"
--cover "<封面文件路径>"
--title "<文章标题>"
--author "<作者名>"
--app-id "<AppID>"
--app-secret "<AppSecret>"发布流程:
- 获取 access_token(带缓存,7200s 过期)
- 上传封面图为 thumb 类型素材,拿到
thumb_media_id - 扫描 HTML 里的所有图片
src,逐个上传为永久图片素材,替换 HTML 里的 URL 为微信 CDN URL - 调用
/cgi-bin/draft/add创建草稿 - 返回
media_id,去公众号后台 → 草稿箱查看
更新已有草稿(标题/正文微调,不删旧建新)
当草稿已推送到公众号后台后,需要修改标题、正文或封面时,不用删旧建新,直接用 --update 模式更新,media_id 保持不变。
复用封面(只改标题/正文):
python "{baseDir}/scripts/publish/publish_draft.py"
--html "<HTML文件路径>"
--title "<新标题>"
--update
--media-id "<草稿media_id>"
--thumb-media-id "<已有的封面thumb_media_id>"
--app-id "<AppID>"
--app-secret "<AppSecret>"换封面(重新上传封面图):
python "{baseDir}/scripts/publish/publish_draft.py"
--html "<HTML文件路径>"
--title "<新标题>"
--cover "<新封面文件路径>"
--update
--media-id "<草稿media_id>"
--app-id "<AppID>"
--app-secret "<AppSecret>"更新模式新增参数:
| 参数 | 说明 |
|---|---|
--update | 进入更新模式(而非创建新草稿) |
--media-id | 要更新的草稿 media_id(更新模式必填) |
--thumb-media-id | 复用已有的封面图 media_id(与 --cover 二选一) |
--index | 多图文时更新第几篇(默认 0=第一篇) |
更新流程:
- 获取 access_token(带缓存)
- 封面:
--thumb-media-id直接复用,或--cover重新上传 - 扫描 HTML 里的本地图片,逐个上传为永久图片素材并替换 URL
- 调用
/cgi-bin/draft/update更新草稿(media_id 不变) - 去公众号后台 → 草稿箱刷新查看
⚠️ 更新模式下不会自动删除同名草稿(因为是原地更新,不是新建)。
thumb_media_id是微信更新 API 的必填字段,即使只改标题也必须传——用--thumb-media-id复用之前的封面即可。
发布前自检(必做,发布命令前逐项确认):
- 排版阶段的两道校验已通过(
validate_wechat_html.py/verify_content_fidelity.py,或 gzh 类的validate_gzh_html.py),0 ERROR - 预览 HTML 中:标题 ≤64 字、所有
src图片已替换为微信 CDN URL(无本地绝对路径残留)、文末签名无{{占位符}}或他人信息残留 - 若草稿箱已存在同标题旧草稿:发布前先告知用户「将覆盖 / 替换旧草稿」,确认后再发(避免重复草稿堆积)
故障排查:
| 问题 | 解决 |
|---|---|
| 40001 token 失效 | 脚本自动重新获取 |
| 45106 接口废弃 | 用 /draft/add 替代 /material/add_news(已内置) |
| IP 不在白名单 | curl ifconfig.me → 添加到公众号后台 |
| 图片路径带空格 | 重命名文件,确保无空格 |
| 图片上传失败 | 检查文件是否存在、格式是否 jpg/png |
完整工作流示例
场景 A:用户给链接,从洗稿到发布
用户提供 2-4 篇公众号文章链接
→ ① 下载文章,提取正文+图片
→ ② 综合多篇素材洗稿改写,去AI味,面向普通办公人员
→ ③ 用户确认标题+正文
→ ④ 用户说"走"→ 生成封面+概念图(右上角潮汐AI)
→ ⑤ 用户选主题 → 排版出合规 HTML → 双重校验 0 ERROR
→ ⑥ 上传素材+推草稿箱 → 交付 media_id场景 B:用户给主题,从选题到发布
用户说"写一篇关于 XX 的文章"
→ ① AI 搜索相关热门文章,提炼选题
→ ② 用户选定 → AI 撰写初稿 → 洗稿润色
→ ③ 用户确认标题+正文
→ ④ 配图生成
→ ⑤ 排版
→ ⑥ 发布场景 C:只需排版
用户给 Markdown/链接
→ 跳过洗稿,直接进阶段 ⑤ 排版
→ 选主题 → 校验 → 交付工作区目录约定(每篇文章产物的存放结构)
Agent 根据用户给的位置自动建工作区根(不写死路径)。
{工作区根}/
└── {YYYY-MM-DD}/ # 日期外层:一天可装 1 篇或多篇
└── {主题名}/ # 一篇文章一个子目录(中文主题名,如 "AI趋势" / "个人产品复利")
├── 素材/ # 阶段①产物:抓来的原始资料(多个素材堆叠,全部所属该主题)
├── 图片/ # 阶段④产物:skill 生成的封面+概念图
├── prompts/ # 阶段④产物:出图 prompt 落盘(按 P2 整改要求,每图一份)
├── 创作说明.md # 阶段②产物:独立成文件(武硕硬规则,不可塞进初稿.md 末尾)
├── 初稿.md # 阶段②产物:洗稿后的 Markdown(去 AI 味 + 标题候选 + 摘要)
└── 定稿.html # 阶段⑤产物:渲染后的公众号合规 HTML(过双重校验)命名约定:
- 日期:
YYYY-MM-DD(例2026-08-25) - 主题名:中文,简洁,2~8 字(例
AI趋势/个人产品复利/建工AI培训D2) - 图片文件:
{NN}-{用途}.jpg(例01-封面.jpg02-概念图-1.jpg),与prompts/NN-{用途}.md一一对应 - 素材文件:保留原始扩展名(
source-1.html/report.pdf/screenshot.png),文件名带来源标识便于追溯 创作说明.md与初稿.md同级独立,创作说明不可塞进初稿文末
素材与主题的归属(重要):
- 一个主题可以有 0 个、1 个或多个素材(多对 1 归属):例 1 篇主题引 5 个网页素材 + 2 张截图,全堆在该主题的
素材/ - 一个素材只归属一个主题,不跨主题共享——多主题各自建独立的
素材/目录
阶段产物落位(在 6 阶段里的位置):
- 阶段①抓取 → 落到对应主题的
素材/ - 阶段②洗稿 → 产出
初稿.md+创作说明.md(同级) - 阶段③确认 → 无产物(仅 Checkpoint)
- 阶段④配图 → 先写
prompts/,再生成图片/ - 阶段⑤排版 → 读
初稿.md产出定稿.html - 阶段⑥发布 → 读
图片/+定稿.html,推草稿箱
为什么不写在 skill 内:workspace 路径由用户在每次任务时指定,Agent 不预设;这里只规定「工作区里长啥样」,便于所有阶段产物一一对位、不漏不串。
文件命名与目录约定
{baseDir}/
├── SKILL.md ← 本文件
├── scripts/
│ ├── fetch/ ← 搜索/下载
│ │ ├── search_wechat.js
│ │ └── download.js (+ node_modules)
│ ├── rewrite/ ← 洗稿(AI 直接在对话中执行)
│ ├── image/ ← 配图生成
│ ├── layout/ ← 排版引擎
│ │ ├── validate_gzh_html.py ← gzh-design 校验
│ │ ├── validate_wechat_html.py ← styler 校验
│ │ ├── verify_content_fidelity.py ← 原文一致性校验
│ │ ├── render_markdown.py ← styler 渲染
│ │ ├── serve_editor.py ← styler 工作台
│ │ ├── wrap_preview.py ← 带复制按钮的预览壳
│ │ ├── component_lint.py
│ │ ├── extract_docx.py
│ │ ├── build_gallery.py
│ │ ├── original_theme_renderer.py
│ │ ├── theme_profile.py
│ │ └── render_job.py
│ └── publish/ ← 发布
│ ├── publish_draft.py ← Python 直调微信 API
│ ├── install_wenyan.js
│ └── vendor/wenyan-cli-main/ ← wenyan-cli 源码
└── references/
├── themes/ ← 排版主题库
│ ├── theme-index-gzh.md ← gzh-design 主题索引
│ ├── theme-index-styler.md ← styler 主题索引
│ ├── theme-graphite-minimal.md ← 石墨极简(两套)
│ ├── common-components-gzh.md
│ ├── common-components-styler.md
│ └── theme-*.md ← 其他主题
├── guizang/ ← 配图规范
│ ├── visual-style.md
│ ├── prompt-patterns.md
│ ├── chart-beautify.md
│ ├── qa-checklist.md
│ ├── use-cases-and-routing.md
│ └── reference-gathering.md
└── common/ ← 通用参考(可扩展)关键约束(武硕定下的硬规则)
- 正文确认前不准配图:用户说"先别配图"就停到阶段 ③
- 排版主题必须让用户挑:不准擅自定死主题
- 所有图片路径必须绝对路径:
待发布/xxx.jpg格式,不能带空格 - 配图右上角必须带"潮汐AI"
- 发布前必须确认"推草稿箱":不等用户说推就不推
- 技术例子换成办公场景:面向普通办公人员,不用开发腔