多平台内容创作全流程助手:支持公众号、小红书、知乎、百家号、微博、搜狐、今日头条、企鹅号、简书、豆瓣、大鱼号、36氪。 热点抓取 → 选题 → 框架 → 内容增强 → 写作 → SEO → 视觉AI → 多平台文件导出。 触发关键词: - 公众号/微信:推文、微信文章、微信推文、草稿箱、微信排版 - 小红书:小红书、笔记、小红书图文 - 知乎:知乎、知乎回答、知乎文章 - 百家号:百家号 - 微博:微博、微博长文 - 搜狐:搜狐、搜狐号 - 今日头条:今日头条、头条号 - 企鹅号:企鹅号、企鹅号文章 - 简书:简书 - 豆瓣:豆瓣、豆瓣文章 - 大鱼号:大鱼号 - 36氪:36kr、36氪 - 通用:多平台发布、一键多发、写文章 也覆盖:markdown 转平台格式、学习用户改稿风格、文章数据复盘、风格设置、 主题预览/切换、:::dialogue/:::timeline/:::callout 容器语法。 产出各平台适配文件(Markdown/HTML/Word)+ 配图文件夹,方便手动复制发布。
Resources
7Install
npx skillscat add etoup/writer Install via the SkillsCat registry.
Writer — 多平台内容创作全流程
行为声明
角色:用户的多平台内容编辑 Agent。
支持平台:
| 平台 | 输出格式 | 配图比例 |
|---|---|---|
| 公众号(wechat) | 内联样式 HTML + Word + Markdown | 封面 2.35:1,内文 16:9 |
| 小红书(xiaohongshu) | Markdown(emoji 优化)+ Word | 3:4(最多 9 张) |
| 知乎(zhihu) | Markdown + Word | 16:9(可选 1-3 张) |
| 百家号(baijiahao) | 富文本 HTML + Word | 封面 16:9,内文 2-3 张 |
| 微博(weibo) | Markdown(话题标签)+ Word | 1:1 或 3:4(1-9 张) |
| 搜狐(sohu) | 富文本 HTML + Word | 封面 16:9,内文 2-3 张 |
| 今日头条(toutiao) | 富文本 HTML + Word | 三图封面 16:9/1:1 |
| 企鹅号(qiehao) | 富文本 HTML + Word | 封面 16:9,内文 2-3 张 |
| 简书(jianshu) | Markdown + Word | 16:9(可选) |
| 豆瓣(douban) | Markdown + Word | 16:9(可选) |
| 大鱼号(dayu) | 富文本 HTML + Word | 封面 16:9,内文 2-3 张 |
| 36氪(kr36) | Markdown + Word | 16:9(1-2 张数据图) |
| 哔哩哔哩(bilibili) | 视频脚本 + 专栏 Markdown | 封面 16:9 |
| 抖音(douyin) | 短视频脚本 + 图文文案 | 封面 9:16 |
| Newsletter | HTML 邮件 + Markdown + Word | 内联图片 |
模式:
- 默认全自动——一口气跑完 Step 1-8,不中途停下。只在出错时停。
- 交互模式——用户说"交互模式"/"我要自己选"时,在选题/框架/配图处暂停。
- 单平台模式——用户指定一个平台(如"写篇小红书"),只生成该平台的文件。
- 多平台模式(默认)——用户说"多平台发布"/"一键多发"/不指定平台时,为全部 12 个平台分别生成完全不同的文章和配图(标题不同、角度不同、案例不同、图片不同)。通过 history.yaml 去重,确保同一主题下各平台内容不重复。
降级原则:每一步都有降级方案。Step 1 检测到的降级标记(skip_image_gen)在后续 Step 自动生效,不重复报错。
进度追踪:主管道启动时,用 TaskCreate 为 8 个 Step 创建任务。每开始一个 Step 标记 in_progress,完成后标记 completed。用户可随时看到当前进度。
完成协议:
- DONE — 全流程完成,文件已输出
- DONE_WITH_CONCERNS — 完成但部分步骤降级,列出降级项
- BLOCKED — 关键步骤无法继续(如 Python 依赖缺失且用户拒绝安装)
- NEEDS_CONTEXT — 需要用户提供信息才能继续(如首次设置需要账号名称)
路径约定:本文档中 {skill_dir} 指本 SKILL.md 所在的目录(即 Writer 的根目录)。
回复规范:输出文件列表时,必须使用以下标准格式,确保所有文件都可点击打开:
- 每个文件都必须有完整的
file:///绝对路径链接,使用 Markdown 链接语法[文件名](file:///完整/绝对/路径) - 必须使用表格展示,包含:文件名列(带链接)、功能描述列、打开方式列
- 表格列标题示例:
| 文件 | 功能 | 打开方式 | - "打开方式"列统一写
点击打开 - 不同类别的文件分组展示(如 HTML 清单文件一组,文章原文一组)
示例格式:
| 文件 | 功能 | 打开方式 |
|------|------|---------|
| [`文件名`](file:///完整/路径) | 功能描述 | 点击打开 |回复规范:
- 输出文件清单时,必须使用 Markdown 表格。
- 表格包含三列:文件、功能、打开方式。
- 文件列必须使用
file:///绝对路径链接,确保用户可直接点击打开(例如:[文件.md](file:///path/to/file.md))。 - 打开方式列统一填写 "点击打开"。
- 不同类别的文件(如 HTML 清单、文章原文)应分组展示。
Onboard 例外:Onboard 是交互式的(需要问用户问题),不受"全自动"约束。Onboard 完成后回到全自动管道。
辅助功能(按需加载,不在主管道内):
用户说"验证配置"/"检查配置"/"测试图片" → 执行 Step 1.1b 图片生成验证流程,告知用户结果
用户说"重新设置风格" →
读取: {skill_dir}/references/onboard.md用户说"学习我的修改" →
读取: {skill_dir}/references/learn-edits.md。用户在output/的 markdown 文件中修改后执行。用户说"验证排版"/"检查主题质量" →
python3 {skill_dir}/scripts/theme_quality.py {theme_name},输出主题评分和改进建议用户说"学习排版"/"学排版" →
python3 {skill_dir}/scripts/learn_theme.py <url> --name <name>,用户需提供一个公众号文章 URL 和主题名称。提取完成后提示用户设置style.yaml的theme字段。用户说"学习这篇文章"/"导入范文" + URL →
python3 {skill_dir}/scripts/fetch_article.py <url> -o /tmp/article.md && python3 {skill_dir}/scripts/extract_exemplar.py /tmp/article.md -s <账号名>,从公众号文章 URL 提取正文并导入范文库。支持三级降级(requests → Playwright → 手动 HTML)。用户说"看看文章数据" →
读取: {skill_dir}/references/effect-review.md用户说"检查一下"/"自检"/"这篇文章怎么样" → 对最近一篇生成的文章(或用户指定的文章)执行自检,输出生成报告:
python3 {skill_dir}/scripts/article_diagnose.py {article_path}- Agent 结合诊断结果和 history.yaml 信息,综合解读并翻译为用户可操作的建议
- 按影响度排序问题和建议,最多展示 10 条
- 输出格式:自然语言报告,不输出 JSON 或原始分数
如果用户说"检查一下 --json" → 直接输出
article_diagnose.py --json的完整 JSON用户说"更新"/"更新 Writer"/"升级" → 在
{skill_dir}执行git pull origin main,完成后告知版本变化用户说"看看数据"/"数据报告"/"数据面板" →
python3 {skill_dir}/scripts/data_report.py,生成 HTML 可视化数据报告(发文趋势、平台分布、质量演变、框架使用、热门话题等)用户说"看看数据 --days 30" → 只看最近 30 天数据
用户说"看看数据 --json" → 输出 JSON 格式数据
用户说"公众号复盘"/"微信数据" →
python3 {skill_dir}/scripts/wechat_review.py,生成公众号专属数据复盘报告(标题策略分析、框架效果对比、质量趋势、优化建议)用户说"生成小红书封面"/"小红书封面" →
python3 {skill_dir}/scripts/xhs_cover_gen.py --title "{标题}" --style {风格},生成 3:4 比例封面图(支持 minimalist/bold/gradient/dark/warm 五种风格)用户说"检查版本" →
python3 {skill_dir}/scripts/version_check.py,显示当前版本和更新信息用户说"查看错误"/"错误日志" →
python3 {skill_dir}/scripts/error_logger.py --show,显示最近错误记录
主管道(Step 1-8)
主管道启动时,创建以下 8 个任务用于进度追踪:
TaskCreate: "Step 0: 平台识别"
TaskCreate: "Step 1: 环境 + 配置"
TaskCreate: "Step 2: 选题"
TaskCreate: "Step 3: 框架 + 素材"
TaskCreate: "Step 4: 写作"
TaskCreate: "Step 5: SEO + 验证"
TaskCreate: "Step 6: 视觉 AI"
TaskCreate: "Step 7: 多平台文件导出"
TaskCreate: "Step 8: 收尾"每开始一个 Step → TaskUpdate status=in_progress。完成 → TaskUpdate status=completed。
Step 0: 平台识别
识别用户目标平台,确定输出范围。
平台识别规则:
| 用户触发词 | 目标平台 |
|---|---|
| 公众号、推文、微信文章、微信推文、草稿箱 | |
| 小红书、笔记、小红书图文 | xiaohongshu |
| 知乎、知乎回答、知乎文章 | zhihu |
| 百家号 | baijiahao |
| 微博、微博长文 | |
| 搜狐、搜狐号 | sohu |
| 今日头条、头条号 | toutiao |
| 企鹅号、企鹅号文章 | qiehao |
| 简书 | jianshu |
| 豆瓣、豆瓣文章 | douban |
| 大鱼号 | dayu |
| 36kr、36氪 | kr36 |
| 哔哩哔哩、B站 | bilibili |
| 抖音、短视频 | douyin |
| Newsletter、邮件 | newsletter |
| 多平台发布、一键多发 | all(全部 15 个平台) |
未明确指定平台时:
- 如果触发词包含"公众号/微信/推文"等 → 默认 wechat
- 其他通用触发词(如"写文章")→ 默认 wechat
加载平台参数:
- 读取
style.yaml,提取全局默认参数 - 检查
platform_overrides中是否有目标平台的覆盖配置 - 如果有,用平台覆盖值替换对应字段(tone/word_count/content_style/writing_persona 等)
- 如果没有覆盖,使用全局默认值
多平台模式:
- 标记
multi_platform = true - 对每个平台分别应用 platform_overrides
- 后续步骤中,写作和 SEO 基于全局参数,只在 Step 7 导出时按平台差异化
读取平台规范:
读取: {skill_dir}/platforms/{platform}.md每个平台的规范文件定义了该平台的输出格式、字数、配图要求、排版特性等。
Step 1: 环境 + 配置
1.1 环境检查(静默通过或引导修复):
python3 -c "import markdown, bs4, cssutils, requests, yaml, pygments, PIL, docx" 2>&1| 检查项 | 通过 | 不通过 |
|---|---|---|
config.yaml 存在 |
静默 | 引导创建,或设 skip_image_gen = true |
| Python 依赖 | 静默 | 提供 pip install -r requirements.txt |
image.providers 至少一项有效 |
执行 1.1b 验证 | 设 skip_image_gen = true |
references/exemplars/index.yaml |
静默 | 提示:"范文库为空。如果你有已发布的文章(markdown),可以说**'导入范文'**建立风格库,写出来的文章会更像你。没有也不影响使用。" |
1.1b 图片生成验证(配置变更后首次执行,或用户说"验证配置"时执行):
python3 {skill_dir}/toolkit/image_gen.py --prompt "测试图片:一个简洁的科技风格图标,蓝色调" --output /tmp/writer_test_image.png --size square| 验证结果 | 处理 |
|---|---|
| 成功生成 | 标记 image_gen_verified = true,删除测试图片,静默通过 |
| 火山方舟失败,阿里百炼成功 | 标记 image_gen_verified = true,提示:"火山方舟 key 无效,已自动 fallback 到阿里百炼。" |
| 全部失败 | 设 skip_image_gen = true,提示:"图片生成配置验证失败,请检查 config.yaml 中的 API key。本次将跳过图片生成,只输出图片提示词。" |
1.2 版本检查(静默通过或提醒):
python3 {skill_dir}/scripts/version_check.py --skip-check 2>/dev/null比对本地 {skill_dir}/VERSION 与远程版本:
- 相同 → 静默通过
- 不同 → 提示用户:"Writer 有新版本可用(当前 X → 最新 Y),说「更新」即可升级。"不阻断流程,继续 1.3
- 脚本不可用 → 静默跳过
1.3 加载风格:
检查: {skill_dir}/style.yaml- 存在 → 提取
name、topics、tone、voice、blacklist、theme、cover_style、author、content_style、platform_overrides - 不存在 →
读取: {skill_dir}/references/onboard.md,完成后回到 Step 1
如果用户直接给了选题 → 跳到 Step 3(仍需框架选择和素材采集,不可跳过)。
Step 2: 选题
2.1 热点抓取:
python3 {skill_dir}/scripts/fetch_hotspots.py --limit 30可选参数:
--sources weibo,baidu,36kr— 指定数据源(weibo/toutiao/baidu/douban/36kr/zhihu)--category 科技— 按分类过滤(科技/商业/社会/娱乐)
降级:脚本报错 → WebSearch "今日热点 {topics第一个垂类}"
2.2 历史分析 + SEO:
读取: {skill_dir}/history.yaml(不存在则跳过)python3 {skill_dir}/scripts/seo_keywords.py --json {关键词}历史分析(有 stats 数据时):
- 统计哪种
framework的文章表现最好(阅读量/分享率)→ 推荐框架时加权 - 统计哪种
enhance_strategy的文章表现最好 → 增强策略选择时参考 - 近 7 天已写的关键词降分(去重)
降级:SEO 脚本报错 → LLM 判断;history 无 stats → 跳过效果分析,仅做去重
2.3 生成选题:
读取: {skill_dir}/references/topic-selection.md生成 10 个选题,其中:
- 7-8 个热点选题:基于 2.1 的热点,按 topic-selection.md 规则评分
- 2-3 个常青选题:不依赖热点,从用户的
topics领域生成长尾内容(教程/方法论/经验总结/工具推荐),标注为"常青"。适合 content_style 为干货型/测评型的用户
每个选题含标题、评分、点击率潜力、SEO 友好度、推荐框架、平台适配度。
- 自动模式 → 选最高分
- 交互模式 → 展示全部,等用户选
Step 3: 框架 + 素材
3.1 框架选择:
读取: {skill_dir}/references/frameworks.md7 套框架(痛点/故事/清单/对比/热点解读/纯观点/复盘),自动选推荐指数最高的。
3.2 素材采集 + 内容增强(合并执行,共用搜索结果):
读取: {skill_dir}/references/content-enhance.md根据 3.1 选定的框架类型,一次搜索同时完成素材采集和内容增强:
| 框架 | 搜索策略 | 从结果中提取 |
|---|---|---|
| 热点解读 / 纯观点 | "{关键词} site:mp.weixin.qq.com OR site:36kr.com" + "{关键词} 观点 OR 评论" |
真实素材(数据/引述)+ 已有文章的主流观点(供角度发现) |
| 痛点 / 清单 | "{关键词} 教程 OR 工具 OR 实操" + "{关键词} 数据 报告" |
真实素材 + 具体工具名/步骤/参数(供密度强化) |
| 故事 / 复盘 | "{人物/事件} 采访 OR 专访 OR 细节" + "{关键词} 数据 报告" |
真实素材 + 时间锚/数字锚/对话锚/感官锚(供细节锚定) |
| 对比 | "{方案A} vs {方案B} 评测 OR 体验" + "{方案A OR 方案B} 踩坑 OR 缺点 site:v2ex.com OR site:zhihu.com" |
真实素材 + 真实用户评价和踩坑信息(供真实体感) |
每次搜索 2 轮,从结果中同时提取:
- 素材:5-8 条真实素材(具名来源 + 具体数据/引述/案例)。禁止编造。
- 增强材料:按 content-enhance.md 对应策略的要求提取(角度/密度要点/细节/用户声音)。
两者并入框架大纲,一起传入 Step 4 写作。
降级:WebSearch 不可用 → 用 LLM 训练数据中可验证的公开信息。但需告知用户:"素材采集未能使用 WebSearch,建议在编辑锚点处多加入你自己的内容。"密度强化不依赖搜索,始终执行。
Step 4: 写作
读取: {skill_dir}/references/writing-guide.md
读取: {skill_dir}/playbook.md(如果存在,按 confidence 分级执行)
读取: {skill_dir}/history.yaml(最近 3 篇的 dimensions + closing_type 字段)
读取: {skill_dir}/references/exemplars/index.yaml(如果存在)
读取: {skill_dir}/platforms/{platform}.md(当前目标平台规范)4.1 维度随机化:
从以下维度池随机激活 2-3 个维度,让每篇文章的表达方式不同。如果 history.yaml 有最近 3 篇的 dimensions 字段,避免使用相同组合。
| 维度 | 选项 |
|---|---|
| 叙事视角 | 第一人称亲历 / 旁观者分析 / 对话体 / 自问自答 |
| 时间线 | 正序 / 倒叙 / 插叙 |
| 类比域 | 体育 / 做饭 / 军事 / 恋爱 / 游戏 / 电影 / 建筑 / 医学 |
| 情绪基调 | 克制冷静 / 热血激动 / 讽刺吐槽 / 温暖治愈 / 焦虑警示 |
| 节奏 | 短句密集 / 长叙述慢推 / 长短急切交替 / 慢开头快收尾 |
4.2 加载写作人格:
读取: {skill_dir}/personas/{当前 platform_overrides 的 writing_persona 字段}.yaml
如果没有 platform_overrides 或没有 writing_persona → 读取 style.yaml 的 writing_persona
如果都没有 → 默认 midnight-friend人格文件定义了:语气浓度、数据呈现方式、情绪弧线、段落节奏、不确定性表达模板等。作为写作的硬性约束执行。
优先级:playbook.md(confidence ≥ 5 的规则)> persona > 范文风格 > writing-guide.md。writing-guide 是底线(基础写作规范),范文提供风格示范(句长节奏、情绪表达方式),persona 在此基础上特化风格参数(语气浓度、数据呈现),playbook 中高置信度规则是用户个性化的最终覆盖。playbook 中 confidence < 5 的规则作为软性参考。
4.3 范文风格注入(有 references/exemplars/index.yaml 时执行):
从 index.yaml 筛选 category 匹配当前框架类型的范文,取 top 3。读取对应 .md 文件的片段内容。
在写作 prompt 中注入:
以下是该公众号风格的真实段落示例,模仿其句长节奏、情绪强度和口语化程度:
【开头风格】
{exemplar_1 的开头钩子段}【情绪段风格】
{exemplar_2 的情绪高峰段}【转折风格】
{exemplar_2 或 exemplar_3 的转折/自纠段(如有)}【收尾风格】
{exemplar_3 的收尾段}
Category 映射规则:
| 框架类型 | exemplar category |
|---|---|
| 痛点型 | tech-opinion |
| 故事型 / 复盘型 | story-emotional |
| 清单型 / 对比型 | list-practical |
| 热点解读型 / 纯观点型 | hot-take |
| 其他 | general |
如果匹配到的范文不足 3 篇,用 general category 补足。
Fallback(范文库为空时):读取 {skill_dir}/references/exemplar-seeds.yaml,从每个段落类型中随机选 1 个注入 prompt。种子段落只示范人类写作的结构模式(句长方差、情绪锐度、自我纠正、非总结式收尾),不携带特定风格。注入时使用:
以下是人类写作的结构模式示例,注意模仿其句长节奏和情绪表达方式(不要模仿具体内容或风格):
【开头模式】{seeds.opening_hooks 随机 1 个}
【情绪段模式】{seeds.emotional_peaks 随机 1 个}
【转折模式】{seeds.transitions 随机 1 个}
【收尾模式】{seeds.closings 随机 1 个}
建库命令:python3 {skill_dir}/scripts/extract_exemplar.py article.md
4.4 写文章:
根据目标平台调整字数和风格:
| 平台 | 默认字数 | 风格调整 |
|---|---|---|
| 公众号 | 1500-2500 | 综合型,有深度有可读性 |
| 小红书 | 300-800 | 口语化、emoji、清单式、种草感 |
| 知乎 | 2000-5000 | 专业严谨、数据支撑、逻辑链完整 |
| 百家号 | 1000-2000 | 通俗易懂、适度标题党 |
| 微博 | 140-2000 | 短平快、话题标签、互动引导 |
| 搜狐号 | 1000-2500 | 新闻资讯风格 |
| 今日头条 | 1000-2000 | 通俗、接地气、标题吸引 |
| 企鹅号 | 1000-2000 | 综合媒体风格 |
| 简书 | 1000-3000 | 文艺/深度,支持 Markdown |
| 豆瓣 | 800-2500 | 个人化、有态度、偏文艺 |
| 大鱼号 | 1000-2000 | 综合资讯 |
| 36氪 | 1500-3000 | 商业分析、数据驱动、创投视角 |
写作要求:
- H1 标题 + H2 结构,字数按平台要求
- 素材 + 增强约束:Step 3.2 的素材和增强材料分散嵌入各 H2 段落。增强策略的核心输出(角度/密度要点/细节/用户声音)必须贯穿全文,不只装饰性出现一次
- 写作人格:按 4.2 加载的人格参数写作(数据呈现方式、个人声音浓度、不确定性表达等)
- 收尾方式:persona 的
closing_tendency仅作为倾向参考。根据文章内容和情绪弧线自行判断最自然的收尾方式。如果 history.yaml 中最近 3 篇有closing_type字段,避免使用相同的收尾类型 - 写作规范:writing-guide.md 中的基础规则(禁用词、句长方差、词汇混用等)在初稿阶段生效
- 2-3 个编辑锚点:
<!-- ✏️ 编辑建议:在这里加一句你自己的经历/看法 --> - 可选容器语法:
:::dialogue、:::timeline、:::callout、:::quote(公众号等支持的平台)
保存到 {skill_dir}/output/{date}-{slug}/{platform}.md(作为中间文件,最终导出在 Step 7 完成)
多平台模式(强制规则):
- 每个平台必须独立生成完全不同的文章——标题不同、角度不同、框架不同、案例不同、金句不同、字数不同
- 每个平台必须独立生成完全不同的配图——风格不同、构图不同、提示词不同
- 禁止基于一篇文章做简单的语气/风格调整——必须从零开始为每个平台撰写
- 通过 history.yaml 去重:每生成一篇立即写入 history.yaml,下一篇生成前检查已有文章避免重复
- 各平台文章保存到
{skill_dir}/output/{date}-{slug}/{platform}.md - 各平台配图保存到
{skill_dir}/output/{date}-{slug}/{platform}/
4.5 快速自检(写完后立即执行,减少 Step 5 重写概率):
对初稿做 5 项快速扫描,当场修复,不留到 Step 5:
写作层面:
- 禁用词扫描:检查 writing-guide.md 2.1 的禁用词列表,命中的直接替换
- 句长方差:是否有连续 3 句以上长度接近的段落,有则拆句或加短句
内容层面:
3. 开头钩子:前 3 句是否制造了悬念/冲突/好奇心?如果是平铺直叙的背景介绍,重写开头
4. 增强贯穿:增强策略的核心输出是否只出现在一段?如果是,在其他 H2 中补充
5. 金句检查:全文是否有至少 1 句可独立截图转发的句子?如果没有,在情绪高点处补一句
LLM 自行完成,不需要调用脚本。
Step 5: SEO + 验证
读取: {skill_dir}/references/seo-rules.md5.1 SEO(按平台差异化):
| 平台 | SEO 策略 |
|---|---|
| 公众号 | 3 个备选标题 + 摘要(≤40 字)+ 5 标签 + 关键词密度优化 |
| 小红书 | 标题优化 + 5-10 个话题标签(#关键词#) |
| 知乎 | 标题包含核心搜索词 + 正文自然分布关键词 |
| 微博 | 1-2 个 #话题# 标签嵌入标题和正文 |
| 百家号/头条/搜狐/企鹅/大鱼 | 标题关键词 + 正文关键词密度 2-3% + 3-5 个分类标签 |
| 简书 | 2-4 个标签 + 标题关键词 |
| 豆瓣 | 自然融入关键词,社区推荐为主 |
| 36氪 | 行业关键词 + 标题专业表达 |
5.2 质量验证(两个维度,每项逐一检查):
A. 写作质量(writing-guide.md 基础规则):
| 检查项 | 标准 | 规则 |
|---|---|---|
| 句长方差 | 最短与最长句相差 ≥ 30 字 | 1.1 |
| 词汇温度 | 任意 500 字 ≥ 3 种温度 | 1.2 |
| 段落节奏 | 无连续 2 个相近长度段落 | 1.3 |
| 情绪极性 | 负面情绪 ≥ 2 处,无平铺直叙 | 1.4 |
| 禁用词 | 命中数 = 0 | 2.1 |
| 真实锚定 | 每个 H2 ≥ 1 条真实素材,零编造 | 3.1 |
| 具体性 | 每 500 字 ≥ 2 处具体细节 | 3.2 |
B. 内容质量(基于 Step 3.2 的增强策略检查):
| 检查项 | 标准 | 适用框架 |
|---|---|---|
| 增强贯穿 | 增强策略的核心输出(角度/密度/细节/体感)在全文可见,不只出现在一段 | 所有 |
| 开头钩子 | 前 3 句能制造悬念、冲突或好奇心(不是背景铺垫) | 所有 |
| 金句密度 | 至少 1 处可独立截图转发的句子 | 所有 |
| 操作密度 | 每个 H2 有可操作要点(工具/步骤/参数) | 痛点/清单 |
| 角度锐度 | 核心观点能引发同意或反对,不是"两面都有道理" | 热点解读/纯观点 |
| 场景感 | 至少 2 处有时间/地点/对话等画面细节 | 故事/复盘 |
| 真实声音 | 至少 1 处引用真实用户评价或体验 | 对比 |
不通过 → 定向修复:只替换不达标的具体句子/段落,不动已通过的部分。每轮最多改 3 处,改完立即重新检查该项。2 轮仍不过 → 标注跳过,继续下一项。
5.3 脚本辅助验证(补充 5.2 的逐项检查):
Agent 在 5.2 检查过程中同步完成综合评估(各 H2 之间的语气差异度、信息密度的高低交替、段落间的节奏变化、整体阅读流畅度),产出 0-1 分数。
python3 {skill_dir}/scripts/humanness_score.py {article_path} --json --tier3 {agent_tier3_score}解读 JSON 中 composite_score(0=质量高, 100=问题多):
- < 30 → 通过,继续 Step 6
- 30-50 → 查看
param_scores中最低分的 1-2 项,只修复对应的具体句子(不重写整段),改完重新打分。1 轮即可 - > 50 → 取
param_scores最低的 2-3 项,逐项定向修复(每项只改最相关的 1-2 处),最多 2 轮。仍 > 50 则标记 DONE_WITH_CONCERNS 继续
Step 6: 视觉 AI(与写作同步执行)
重要:Step 6 应在 Step 4 写作完成后立即执行,不要等到 Step 7 导出时才处理图片。文章和配图必须同时产出。
如果 skip_image_gen = true → 只执行 6.1,输出图片提示词供用户参考。
读取: {skill_dir}/references/visual-prompts.md6.1 实体提取:从终稿中提取 3-5 个具体实体(人物、产品名、场景、数据点、行业术语)。后续所有提示词必须包含至少 2 个实体。
6.2 封面/首图生成:根据目标平台生成封面提示词(按 visual-prompts.md),调用 image_gen.py 生成。
6.3 封面验证:
- 交互模式:展示封面,问用户"封面效果如何?"。用户 OK → 继续;不满意 → 调整提示词重新生成。
- 全自动模式:agent 自检——提示词中的实体是否在画面描述中可识别?如果提示词过于泛化(仅含"科技感""未来感"等抽象词,无具体实体),换一组提示词重试 1 次。
6.3b 风格锚定:封面确认后,提取视觉锚点(色板 hex、风格关键词、画面调性),后续所有内文配图的提示词必须引用这组锚点,保证全文视觉一致。
6.4 内文配图:分析文章结构,为每个需要配图的段落选择图片类型(infographic/scene/flowchart/comparison/framework/timeline),使用对应的结构化提示词模板生成配图提示词(按 visual-prompts.md)。批量调用 image_gen.py,将图片路径嵌入 Markdown 文件的对应段落之后。
平台配图规范:
| 平台 | 封面/首图比例 | 配图数量 | 说明 |
|---|---|---|---|
| 公众号 | 2.35:1 | 3-6 张内文 | 封面 + 内文配图 |
| 小红书 | 3:4 | 最多 9 张 | 首图 + 轮播图 |
| 知乎 | 16:9 | 1-3 张 | 可选配图/信息图 |
| 百家号 | 16:9 | 2-3 张 | 封面 + 内文 |
| 微博 | 1:1 或 3:4 | 1-9 张 | 九宫格 |
| 搜狐号 | 16:9 | 2-3 张 | 封面 + 内文 |
| 今日头条 | 16:9 或 1:1 | 3 张(三图模式) | 封面组图 |
| 企鹅号 | 16:9 | 2-3 张 | 封面 + 内文 |
| 简书 | 16:9 | 可选 | 内文配图 |
| 豆瓣 | 16:9 | 可选 | 内文配图 |
| 大鱼号 | 16:9 | 2-3 张 | 封面 + 内文 |
| 36氪 | 16:9 | 1-2 张 | 数据图/配图 |
降级:image_gen.py 支持多 provider 自动 fallback(按 config.yaml 中 providers 列表顺序尝试)。全部失败 → 输出提示词 + 备选图库关键词,继续。
Step 7: 多平台文件导出
根据目标平台,输出以下内容到 {skill_dir}/output/{date}-{slug}/ 目录:
单平台模式:
output/
└── 2026-05-09-ai-agent-trends/
├── {platform}.html # 仅 HTML 平台
├── {platform}.md # 源文件(Markdown)
├── {platform}.docx # Word 文档(通用格式)
└── images/ # 配图文件夹
├── cover_{platform}.png # 封面/首图
└── inner_{n}.png # 内文配图多平台模式:
output/
└── 2026-05-09-ai-agent-trends/
├── wechat.html
├── wechat.md
├── wechat.docx
├── xiaohongshu.md
├── xiaohongshu.docx
├── zhihu.md
├── zhihu.docx
├── baijiahao.html
├── baijiahao.docx
├── weibo.md
├── weibo.docx
├── sohu.html
├── sohu.docx
├── toutiao.html
├── toutiao.docx
├── qiehao.html
├── qiehao.docx
├── jianshu.md
├── jianshu.docx
├── douban.md
├── douban.docx
├── dayu.html
├── dayu.docx
├── kr36.md
├── kr36.docx
└── images/ # 整合配图文件夹
├── cover_wechat.png
├── cover_xiaohongshu_1.png
├── xiaohongshu_2.png
├── ...
└── inner_*.png平台格式映射:
| 平台 | 主格式 | Word | 说明 |
|---|---|---|---|
| 公众号 | 内联样式 HTML | 是 | 保留微信兼容修复(外链转脚注、CJK 空格、暗黑模式等) |
| 小红书 | Markdown(emoji 优化) | 是 | 清单式排版、标签在文末 |
| 知乎 | Markdown | 是 | 知乎原生支持 Markdown |
| 百家号 | 富文本 HTML | 是 | 标准 HTML |
| 微博 | Markdown(话题标签) | 是 | 控制在 2000 字内 |
| 搜狐号 | 富文本 HTML | 是 | 标准 HTML |
| 今日头条 | 富文本 HTML | 是 | 支持三图封面模式 |
| 企鹅号 | 富文本 HTML | 是 | 标准 HTML |
| 简书 | Markdown | 是 | 简书原生支持 |
| 豆瓣 | Markdown | 是 | 标准 Markdown |
| 大鱼号 | 富文本 HTML | 是 | 标准 HTML |
| 36氪 | Markdown | 是 | 商业分析风格 |
导出命令:
# 单平台导出
python3 {skill_dir}/toolkit/cli.py export {markdown} --platform {platform} --output {output_dir} --theme {theme}
# 多平台导出
python3 {skill_dir}/toolkit/cli.py export {markdown} --platform all --output {output_dir} --theme {theme}Converter 自动处理:
- 公众号:CJK 加空格、加粗标点外移、列表转 section、外链转脚注、暗黑模式、容器语法
- 其他平台:标准 HTML/Markdown 转换,无平台特化修复
Word 文档生成:
- 所有平台均生成 .docx 文件
- 内容与主格式一致,保留标题层级、加粗、引用、列表、图片等
- 方便用户离线二次编辑
Step 8: 收尾
8.1 写入历史(导出成功或降级都要写,文件不存在则创建):
# → {skill_dir}/history.yaml
- date: "{日期}"
title: "{标题}"
topic_source: "热点抓取" # 或 "用户指定"
topic_keywords: ["{词1}", "{词2}"]
platforms: ["{平台1}", "{平台2}"] # 本次导出的平台列表
output_dir: "{输出目录路径}" # e.g. output/2026-05-09-ai-agent-trends/
framework: "{框架}"
enhance_strategy: "{增强策略}" # angle_discovery/density_boost/detail_anchoring/real_feel
word_count: {字数}
writing_persona: "{人格名}"
dimensions:
- "{维度}: {选项}"
closing_type: "{收尾类型}" # trailing_off/unanswered/scene_revert/abrupt_stop/anti_conclusion/image
composite_score: {Step 5.3 的 composite_score} # 0=质量高, 100=问题多
writing_config_snapshot: # 本次使用的关键参数(从 writing-config.yaml 提取)
sentence_variance: {值}
paragraph_rhythm: "{值}"
emotional_arc: "{值}"
word_temperature_bias: "{值}"
broken_sentence_rate: {值}
tangent_frequency: "{值}"
style_drift: {值}
negative_emotion_floor: {值}
stats: null8.2 回复用户:
- 最终标题 + 2 备选 + 摘要 + 标签
- 输出文件清单(按平台列出文件路径)
- 编辑建议:"文章有 2-3 个编辑锚点,建议加入你自己的话。你可以在本地 markdown/Word 里改。"
- 手动发布指引(简要提示各平台发布方式)
8.3 后续操作:
| 用户说 | 动作 |
|---|---|
| 润色/缩写/扩写/换语气 | 编辑文章 |
| 封面换暖色调 | 重新生图 |
| 用框架 B 重写 | 回到 Step 4 |
| 换一个选题 | 回到 Step 2.3 |
| 看看有什么主题 | python3 {skill_dir}/toolkit/cli.py gallery |
| 换成 XX 主题 | 重新渲染 |
| 看看文章数据 | 读取: {skill_dir}/references/effect-review.md |
| 学习我的修改 | 读取: {skill_dir}/references/learn-edits.md |
| 学习排版 / 学排版 | python3 {skill_dir}/scripts/learn_theme.py <url> --name <name> |
| 检查一下 / 自检 / 这篇文章怎么样 | 生成报告(生成档案 + 质量检查,见辅助功能) |
| 导入范文 / 建范文库 | python3 {skill_dir}/scripts/extract_exemplar.py article.md |
| 查看范文库 | python3 {skill_dir}/scripts/extract_exemplar.py --list |
| 验证配置 / 检查配置 / 测试图片 | 执行图片生成验证流程 |
Per-Platform 独立生成流程
当用户要求"每个平台写不一样的"或"各平台独立生成"时,执行以下流程。
流程概述
同主题 → 各平台独立文章(标题不同、角度不同、案例不同、金句不同) → 各平台独立配图(风格不同、构图不同) → 导出各平台文件 → 生成HTML清单
Step P1: 确定主题和平台
读取: {skill_dir}/references/frameworks.md
读取: {skill_dir}/platforms/{platform}.md(所有目标平台规范)
读取: {skill_dir}/history.yaml(去重检查)- 确定主题(用户提供或从热点中选取)
- 确定目标平台(用户指定或默认全部)
- 检查 history.yaml 中是否已有相同主题的文章记录
Step P2: 为每个平台独立生成文章
# 调用 platform_writer.py 的 write_for_platforms() 函数
# 或 AI 助手在对话中为每个平台撰写文章去重引擎:
- platform_writer.py 内置去重引擎,读取 history.yaml 检查已使用的标题、框架、收尾方式、维度组合
- 如果检测到重复,自动添加去重指令到 prompt 中
- 每生成一篇文章后立即写入 history.yaml,确保后续平台生成时能去重
文章差异化策略:
- 每个平台使用不同的 temperature(0.6-0.9)
- 每个平台使用不同的框架提示词
- 每个平台遵循各自的字数、风格、结构要求
- 标题、角度、案例、金句完全不同
AI 助手模式(适用于 openclaw/qclaw 等平台):
- Python 脚本检测各平台文章文件不存在时,输出每个平台的写作要求(字数、风格、框架、保存路径)
- AI 助手(当前对话)为每个平台独立撰写文章,保存到指定路径
- 完成后重新运行脚本继续
Step P3: 为每个平台独立生成配图
# 调用 platform_images.py 的 generate_platform_images() 函数配图差异化策略:
- 每个平台使用不同的风格提示词(PLATFORM_IMAGE_STYLES)
- 每个平台使用不同的构图角度(IMAGE_ANGLE_POOL)
- 每个平台使用不同的尺寸和数量(PLATFORM_IMAGE_CONFIGS)
- 从文章内容中提取关键词,生成与文章内容相关的提示词
- 使用 seed 参数确保每个平台的图片提示词不同
Step P4: 导出各平台文件
# 调用 exporter.py 的 export_platform() 函数(每个平台一次)
# 生成 Markdown + HTML + Word 文件
# 图片复制到各平台专属目录Step P5: 生成HTML清单
# 调用 exporter.py 的 generate_usage_guide()、generate_image_gallery_html()、generate_file_preview_html()生成三个HTML清单文件:
- README_文件说明.html — 文件使用说明与发布指引
- 文件清单_可点击预览.html — 各平台文件预览与下载
- 图片清单.html — 配图预览与下载
三个文件之间可互相跳转。
CLI 命令
python3 {skill_dir}/toolkit/cli.py per-platform "文章主题" --platforms wechat,zhihu,xiaohongshu --framework 对比 --output ./output/per-platform-topic输出结构
output/per-platform-topic/
├── wechat.md / .html / .docx # 微信公众号文章(独立内容)
├── wechat/ # 微信公众号专属图片
│ ├── cover_wechat.png
│ └── img_wechat_*.png
├── zhihu.md / .docx # 知乎文章(独立内容)
├── zhihu/ # 知乎专属图片
│ ├── cover_zhihu.png
│ └── img_zhihu_*.png
├── xiaohongshu.md / .docx # 小红书文章(独立内容)
├── xiaohongshu/ # 小红书专属图片
│ ├── cover_xiaohongshu.png
│ └── img_xiaohongshu_*.png
├── README_文件说明.html
├── 文件清单_可点击预览.html
└── 图片清单.html降级处理
- 图片生成失败:输出提示词文件,不阻断流程
- 文本生成失败:跳过该平台,继续下一个
- history.yaml 不存在:跳过历史去重
错误处理
| 步骤 | 降级 |
|---|---|
| 环境检查 | 逐项引导,设降级标记 |
| 图片验证 | 失败则提示用户,设 skip_image_gen |
| 热点抓取 | WebSearch 替代 |
| 选题为空 | 请用户手动给选题 |
| SEO 脚本 | LLM 判断 |
| 素材采集(WebSearch) | LLM 训练数据中可验证的公开信息 |
| 维度随机化 | history 空时跳过去重 |
| Persona 文件不存在 | 回退到 midnight-friend(默认) |
| 范文库为空 | Fallback 到 exemplar-seeds.yaml(通用模式) |
| 去 AI 验证 | 2 轮定向修复不过则跳过该项 |
| 生图失败 | 输出提示词 |
| 文件导出失败 | 输出 Markdown 源文件 |
| 历史写入 | 警告不阻断 |
| 效果数据 | 告知等 24h |
| Playbook 不存在 | 用 writing-guide.md |