微信公众号写作系统
Purpose
根据用户提供的主题(可选参考URL),自动完成公众号文章写作全流程:多来源检索与证据池整理、初稿生成、自审润色、参考资料整理,并可选自动配图与保存到公众号草稿箱(不提交发布)。
When to Use
用户请求"写一篇关于XXX的公众号文章"
用户请求"生成公众号文章,主题是XXX"
用户需要完整的公众号文章创作流程
用户希望"写完后自动配图"或"写完后发到公众号草稿箱"
Prerequisites
执行前需要确认:
用户已提供文章主题(
topic
)
如有参考文章 URL,可一并提供(
urls
)
若
topic
为纯中文且未提供
slug
,建议补充英文/拼音
kebab-case
目录名;否则会使用 ASCII 降级方案
Workflow
按照以下步骤顺序执行(产物默认落盘到
articles//...
,便于复跑与追溯):
Phase 0: Preflight
目标
:确定可稳定复用的目录与路径规范
操作
:
计算
slug
若用户提供
slug
:直接使用(推荐:英文/拼音kebab-case)
若
topic
含拉丁字母/数字:对其做kebab-case
否则降级:
wechat-article-YYYYMMDD
创建目录:
articles//
articles//sources/
规范:Markdown图片引用必须使用相对路径与
/
分隔符
Step 1: 素材搜集
目标
:搜集与主题相关的素材,并整理为可追溯的证据池
操作
:
若用户提供
urls
:并行使用
webfetch
获取内容,提取要点,并记录URL与可获得的发布日期
若用户未提供
urls
:并行使用
WebSearch
做多来源检索(建议覆盖:官方文档 / X(Twitter) / Reddit / 技术论坛 / 微信公众号 / 工程实践)
official/authority:官方文档、标准/规范、权威媒体解读
community:X(Twitter)、Reddit、论坛/讨论
practice:GitHub issues、工程博客、案例复盘
推荐并行 query 模板(按需组合,尽量加年份/时间范围以强调近期):
{topic} official documentation
/
{topic} release notes 2025 2026
{topic} site:x.com
/
{topic} site:twitter.com
{topic} site:reddit.com
/
{topic} site:reddit.com/r/
{topic} site:github.com issues
/
{topic} site:github.com discussions
{topic} site:stackoverflow.com
/
{topic} site:news.ycombinator.com
{topic} site:mp.weixin.qq.com
(公众号)
{topic} 实战 复盘 踩坑 2025 2026
(中文工程实践)
合并去重,按可信度分级(high/medium/low),形成证据池,落盘:
articles//sources/evidence.md
工具映射
:
本流程中的“搜索”使用:
WebSearch
本流程中的“抓取网页内容”使用:
webfetch
关于 WebSearch(实现说明)
:
优先使用运行环境自带的
WebSearch
工具。
若当前环境没有可用的
WebSearch
:用
webfetch
抓取公开搜索结果页(SERP),从结果中提取 URL 列表后再并行
webfetch
正文内容。
证据池条目格式(每条必须包含)
:
title
url
published_at(可得则写)
source_type(official/community/practice)
key_takeaways(3-6条要点,尽量可直接改写成正文素材)
confidence(high/medium/low)
停止条件(建议)
:
候选来源 8-12 条,其中 medium/high >= 5 条
常见失败处理(新增)
:
X/Reddit 登录墙或无法抓取正文:
优先选择可公开访问的镜像/引用(二手报道需标注
confidence=low/medium
),或改抓同一观点的博客/论坛转载;
若必须引用原帖:只使用 WebSearch 结果摘要 + 其他独立来源佐证,不编造细节。
SERP 抓取/解析失败(无 WebSearch 回退路径时):
改用“站内检索”策略:直接用
webfetch
抓官方站点的搜索/博客索引页或 GitHub 搜索页;
仍无法覆盖时:向用户要 3-5 个关键 URL 或指定信息源清单。
去重与可信度:
同一事实至少 2 个独立来源佐证;
官方/一手文档优先标
high
;社区讨论若无落地细节或无交叉验证标
low
。
输出
:
sources_path
(证据池路径)
Step 2: 初稿生成
目标
:基于素材生成公众号文章初稿
写作要求
:
标题
:吸引眼球,可使用以下技巧
数字型:
5个方法让你...
提问型:
为什么...?
对比型:
A与B的区别...
悬念型:
你不知道的...
开头
(前3-5行):
提出痛点或引发共鸣
设置悬念或提出问题
明确文章价值
正文结构
:
使用小标题分段(## 或 ###)
每段200-300字
包含案例、数据支撑
使用列表增强可读性
结尾
:
总结核心观点
引导互动(点赞、在看、评论)
可添加金句或行动呼吁
字数要求
:1500-2500字
可追溯性要求(新增硬约束)
:
关键事实/数据/结论必须能在证据池中找到支撑
文章末尾必须追加
参考资料/来源
(5-10条链接,尽量带日期)
输出
:Markdown 格式初稿,保存到:
articles//article.md
Step 3: 智能审稿
目标
:从四个维度审稿,发现问题
审稿维度
:
维度
检查要点
权重
逻辑
论点清晰、论据充分、推理合理
30%
表达
语言流畅、无AI痕迹、口语化适度
25%
数据
数据准确、案例恰当、引用规范
25%
结构
标题吸引、段落分明、首尾呼应
20%
新增硬检查
:
可追溯性:关键论断是否能在证据池中找到支撑
标题一致性:标题承诺是否在正文明确兑现
审稿操作
:
逐段检查逻辑连贯性
标记AI痕迹词汇(如"综上所述"、"不难看出"等)
验证数据和案例的准确性
检查结构和节奏
评分标准
:
90-100分:优秀,可直接发布
80-89分:良好,小幅优化即可
70-79分:合格,需要修改
70分以下:需要重写
输出
:审稿报告(包含问题和修改建议),建议保存到:
articles//sources/review.md
Step 4: 润色打磨
目标
:修复问题,提升文章质量
润色操作
:
去除AI痕迹
替换词汇:
综上所述
→
总的来说
总而言之
→
说到底
由此可见
→
所以说
不难看出
→
我们能发现
众所周知
→
大家都知道
避免过于书面化的表达
增强口语化
适当添加:
其实
、
说实话
、
不得不说
使用短句,避免长难句
加入过渡词,增强流畅度
优化节奏
长短句结合
适当使用感叹句、反问句
控制段落长度(建议不超过5行)
修复审稿问题
根据审稿报告逐项修复
补充缺失的数据或案例
调整不合理的结构
输出
:最终文章
强制要求(新增)
:
最终文章必须保留或补齐
参考资料/来源
参考资料建议保留 5-10 条,按
official
/
community
/
practice
分组更佳
Step 5: 保存与输出
操作
:
创建输出目录(如果不存在):
articles//
保存文章:
articles//article.md
输出执行摘要:
article_path
sources_path
字数统计
审稿评分
Step 6: 自动配图(可选,调用 zhy-article-illustrator)
触发条件
:
with_illustrations=true
目标
:为文章生成统一风格的高完成度配图,并产出插图版文章
默认策略
:
article_path
:使用
articles//article.md
slug
:复用当前文章 slug
density
:
illustration_density
(默认 balanced)
upload
:
illustration_upload
(默认 false)
aspect_ratio
:
illustration_aspect_ratio
(默认 16:9)
prompt_profile
:
illustration_prompt_profile
(默认 nano-banana)
text_language
:
illustration_text_language
(默认 zh-CN)
english_terms_whitelist
:
illustration_english_terms_whitelist
(默认空)
image_provider
:
illustration_image_provider
(默认 xiaomi)
image_model
:
illustration_image_model
(默认 gemini-3.1-flash-image-preview)
image_size
:
illustration_image_size
(默认 1K)
image_base_url
:
illustration_image_base_url
(默认 Xiaomi 接口地址,也支持 Gemini 原生代理)
执行方式
:
优先调用
zhy-article-illustrator
的一键流程脚本:
node
<
zhy-article-illustrator
/scripts/illustrate-article.ts
\
--article
articles/
<
slug
/article.md
\
--slug
<
slug
\
--density
<
illustration_density
\
--aspect-ratio
<
illustration_aspect_ratio
\
--prompt-profile
<
illustration_prompt_profile
\
--text-language
<
illustration_text_language
\
--image-provider
<
illustration_image_provider
\
--image-model
<
illustration_image_model
\
[
--image-size
<
illustration_image_size
]
\
[
--image-base-url
<
illustration_image_base_url
]
\
[
--upload
]
若
illustration_english_terms_whitelist
非空,则为每个术语追加
--term
,例如:
--term
Playwright
--term
Chromium
--term
Firefox
--term
WebKit
默认沿用新版配图策略:
先生成文章级
visual-bible.md
再生成
outline.md
与
prompts/
默认图片内文字为简体中文,仅白名单术语保留英文
同一篇文章内所有图片共享统一风格体系
写作技能在集成时应遵循以下字段映射:
article_path -> --article
slug -> --slug
illustration_density -> --density
illustration_aspect_ratio -> --aspect-ratio
illustration_prompt_profile -> --prompt-profile
illustration_text_language -> --text-language
illustration_image_provider -> --image-provider
illustration_image_model -> --image-model
illustration_image_size -> --image-size
illustration_image_base_url -> --image-base-url
illustration_upload=true -> --upload
输出
:
illustrated_article_path
:
articles//article.illustrated.md
illustrations_dir
:
articles//illustrations//
articles//illustrations//visual-bible.md
articles//illustrations//outline.md
articles//illustrations//prompts/
失败处理
:单张失败可重试一次;仍失败则记录并继续,最终输出失败清单。若部分图片失败,也应保留
article.illustrated.md
,并插入图片占位注释。
Step 7: HTML 主题样式输出(可选,调用 zhy-markdown2wechat)
触发条件
:
with_html_theme=true
目标
:使用
zhy-markdown2wechat
技能将 Markdown 转换为带微信内联样式的 HTML
操作
:
选择输入文件:
若
with_illustrations=true
且
articles//article.illustrated.md
存在,则使用该文件
否则使用
articles//article.md
将选中的 Markdown 文件记为
调用
zhy-markdown2wechat
技能,执行转换脚本:
node
<
zhy-markdown2wechat
/scripts/convert.js
\
<
input_markdown
\
<
zhy-markdown2wechat
/resources/themes/default.css
\
articles/
<
slug
/article.zhy.html
脚本零依赖(纯 Node.js),无需
npm install
,自动在临时目录处理后清理
输出包含
容器与完整内联 CSS 样式
如需换肤,可将第二个参数替换为
resources/themes/
下的其他主题文件(
apple.css
/
blue.css
/
dark.css
/
green.css
/
notion.css
/
vibrant.css
)
表示当前环境中该技能的安装目录,运行时应以实际路径为准
输入文件示例:
若存在插图版文章:
=articles//article.illustrated.md
若不存在插图版文章:
=articles//article.md
输出
:
html_article_path
(
articles//article.zhy.html
)
失败处理
:记录错误并在执行摘要中注明原因,跳过该步骤并继续后续流程
Step 8: 保存到公众号草稿箱(可选,调用 zhy-wechat-publish)
触发条件
:
post_to_wechat=true
默认行为
:通过微信官方 API 保存到草稿箱,不做最终发布提交
前置条件
:
zhy-wechat-publish
技能目录下的
.env
已配置
WECHAT_APP_ID
与
WECHAT_APP_SECRET
运行机器的公网 IP 已加入微信公众号后台 IP 白名单
若要自动生成封面,发布技能依赖的生图环境也必须可用(由
zhy-article-illustrator
提供)
调用方式
:
正文必须是带内联样式的 HTML 文件
优先使用 Step 7 生成的
article.zhy.html
;若不存在则跳过本步骤(或先补执行 Step 7)
默认推荐的稳定入口是直接调用
wechat_draft.js
:
node
<
zhy-wechat-publish
>
/scripts/wechat_draft.js
\
--title
"文章标题"
\
--file
"articles//article.zhy.html"
\
[
--author
"作者"
]
\
[
--digest
"摘要"
]
\
[
--thumb
"封面media_id"
]
\
[
--source-url
"原文链接"
]
\
[
--need-open-comment
"1"
]
\
[
--only-fans-can-comment
"1"
]
若希望自动生成封面并发布,也可调用:
node
<
zhy-wechat-publish
>
/scripts/publish_with_cover.js
\
--article
"articles//article.md"
\
--html
"articles//article.zhy.html"
\
[
--title
"文章标题"
]
\
[
--author
"作者"
]
\
[
--source-url
"原文链接"
]
\
[
--need-open-comment
"1"
]
\
[
--only-fans-can-comment
"1"
]
表示当前环境中该技能的安装目录,运行时应以实际路径为准
wechat_draft.js
未提供
--thumb
时会自动读取
.env
中的
WECHAT_DEFAULT_THUMB_MEDIA_ID
publish_with_cover.js
会自动从文章中提取标题/摘要、生成单张 16:9 封面、上传封面,并将返回的
media_id
作为
thumb_media_id
发布脚本会在上传前自动展开 HTML 中的
var(--xxx)
样式变量,避免微信草稿箱丢失颜色与边框样式
发布脚本会在上传前自动将正文中的图片上传到微信正文图片接口,并将
替换为微信返回的图片 URL
发布脚本会在上传前将原生列表结构降级为“普通段落 + 圆点/编号”,以兼容微信草稿箱再次进入编辑模式时的列表解析问题
注意
:
脚本零依赖(纯 Node.js >= 16),无需
npm install
使用
publish_with_cover.js
时,需要本机可用
bun
,因为封面生成会复用现有生图脚本
草稿保存后不会自动提交发布,需人工在公众号后台确认
标题长度不得超过 64 字符
若当前环境没有可用生图配置,优先改用
wechat_draft.js
直接上传 HTML,避免自动封面步骤失败
成功标准
:输出
上传草稿成功! 草稿 MEDIA_ID: xxx
失败排障清单
:
错误信息
原因与处理
[40013] invalid appid
AppID 错误,检查发布技能目录下的
.env
[40164] invalid ip
当前 IP 未加白名单,将报错中的 IP 加入公众号后台
[40007] invalid media_id
封面图 ID 无效,使用
upload_image.js
重新上传获取
缺少 Xiaomi/Gemini/OpenAI API Key
自动封面生成依赖的生图环境未配置,检查
zhy-article-illustrator
相关
.env
article.zhy.html
不存在
Step 7 未执行或失败,检查
with_html_theme=true
标题过长
控制标题 <= 64 字符
Data Flow
用户输入(topic, urls?, slug?, search_count?, time_range_days?, ...)
↓
Preflight(确定slug与目录)
↓
素材搜集(WebSearch + webfetch → evidence.md)
↓
初稿生成(article.md)
↓
智能审稿(含可追溯性/标题一致性)
↓
润色打磨(强制References)
↓
自动配图(article.illustrated.md + illustrations/)
↓
HTML 主题样式输出(zhy-markdown2wechat → article.zhy.html)
↓
保存到草稿箱(不提交发布)
Error Handling
异常情况
处理方式
搜索无结果
提示用户提供更多信息或参考URL
参考文章无法访问
跳过该URL,继续处理其他素材
初稿质量过低
重新生成或提示用户提供更多素材
审稿评分<70
建议用户检查主题是否合适
配图失败
输出失败清单;可选择补图后再发布
HTML 转换失败
记录错误并跳过该步骤(Step 7),继续后续流程
发布到草稿箱失败
输出排障清单(AppID/IP白名单/封面media_id/标题长度)
Example Usage
输入
:
topic: "如何提高工作效率"
urls: ["https://mp.weixin.qq.com/xxx"]
search_count: 5
with_illustrations: true
with_html_theme: true
post_to_wechat: true
执行流程
:
搜索"如何提高工作效率"相关文章
获取用户提供的参考文章内容
生成初稿(约1500-2500字)
审稿评分:85分
润色优化后保存
输出
:
article_path: articles/how-to-improve-work-efficiency/article.md
sources_path: articles/how-to-improve-work-efficiency/sources/evidence.md
illustrated_article_path: articles/how-to-improve-work-efficiency/article.illustrated.md
illustrations_dir: articles/how-to-improve-work-efficiency/illustrations/how-to-improve-work-efficiency/
html_article_path: articles/how-to-improve-work-efficiency/article.zhy.html
word_count: 2150
review_score: 92
wechat_draft_status: success
Notes
文章风格应符合公众号调性:轻松、有用、有共鸣
避免敏感内容和过度营销
保持原创性,不要直接复制素材内容