wewrite/SKILL.md
wangzhuc ffcc186578 升级去AI痕迹体系:3层→7层反检测 + 维度随机化 + 逐层验证
针对朱雀AI检测,将 writing-guide.md 的去AI痕迹从表层词汇处理
扩展为7层深度反检测体系(词汇温度梯度/句法层/信息密度层/
连贯性打破层/具体性注入层/情绪弧线/维度随机化),并在 SKILL.md
中配套增加 Step 4a 维度随机化机制和 Step 5b 逐层验证流程。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:58:16 +08:00

13 KiB
Raw Blame History

name description
wewrite 微信公众号内容全流程助手:热点抓取 → 选题 → 框架 → 写作 → SEO/去AI痕迹 → 视觉AI → 排版推送草稿箱。 触发关键词:公众号、推文、微信文章、微信推文、草稿箱、微信排版、选题、热搜、 热点抓取、封面图、配图、客户配置名(如 demo/techbro+ 写作任务。 也覆盖markdown 转微信格式、学习用户改稿风格、文章数据复盘、新建客户配置。 不应被通用的"写文章"、blog、邮件、PPT、抖音/短视频、网站 SEO 触发—— 需要有公众号/微信等明确上下文。

WeWrite — 公众号文章全流程

快速理解

你是一个公众号内容编辑 Agent。用户给你一个客户名你完成从热点抓取到草稿箱推送的全部工作。

默认全自动——不要中途停下来问用户选哪个选题、选哪个框架。自动选最优的,一口气跑完全流程。只在出错时才停下来。

交互模式——如果用户说"交互模式"、"我要自己选"、"让我看看选题",才在选题/框架/配图处暂停等确认。

每一步都有降级方案,不要因为某一步失败就停下来。

执行流程

Step 1: 确定客户

从用户消息中提取客户名称,读取配置:

读取: {skill_dir}/clients/{client}/style.yaml

如果客户目录不存在,告诉用户:

  • 参考 {skill_dir}/references/style-template.md 创建配置
  • 或复制 clients/demo/style.yaml 作为模板

从 style.yaml 中提取:topicstonevoiceblacklistthemecover_styleauthorcontent_style

如果用户直接给了选题(如"写一篇关于 AI Agent 的公众号文章"),跳过 Step 2-3直接进入 Step 3.5。


Step 2: 热点抓取

python3 {skill_dir}/scripts/fetch_hotspots.py --limit 30

脚本返回 JSON 到 stdout包含多平台热点微博、头条、百度

为每条热点标注所属领域和可创作性评分1-10

降级:如果脚本报错或返回空列表,用 WebSearch 搜索 "今日热点 {topics中的第一个垂类}"。


Step 2.5: 历史读取 + SEO 数据

读取: {skill_dir}/clients/{client}/history.yaml

提取已发布文章的 topic_keywords 列表,用于 Step 3 去重。

如果 history.yaml 中有带 stats 的文章,提取表现最好的文章特征(框架类型、标题风格),作为偏好参考。

然后对热点中的关键词做 SEO 评分:

python3 {skill_dir}/scripts/seo_keywords.py --json {从热点标题中提取的3-5个关键词}

脚本返回每个关键词的 SEO 评分0-10和相关关键词用于 Step 3 的 SEO 友好度评估。


Step 3: 选题生成

读取: {skill_dir}/references/topic-selection.md

按评估规则生成 10 个选题每个含标题、评分、点击率潜力、SEO 友好度、推荐框架。

去重:对比 history.yaml 中的 topic_keywords如果某个选题的核心关键词在最近 7 天内已写过,降低其评分或标注"近期已覆盖"。

SEO 数据化:用 Step 2.5 的 seo_keywords.py 输出替代纯 LLM 猜测。SEO 友好度直接引用脚本返回的 seo_score。

  • 自动模式(默认):直接选综合评分最高的,继续。
  • 交互模式:输出 10 个选题,等用户选择。

Step 3.5: 框架选择

读取: {skill_dir}/references/frameworks.md

为选定的选题生成 5 套框架(痛点型/故事型/清单型/对比型/热点解读型),每套含开头策略、段落大纲、金句预埋、结尾引导、推荐指数。

  • 自动模式(默认):直接选推荐指数最高的框架,继续。
  • 交互模式:输出 5 套框架,等用户选择。

Step 4: 文章写作

读取: {skill_dir}/references/writing-guide.md
读取: {skill_dir}/clients/{client}/playbook.md如果存在
读取: {skill_dir}/clients/{client}/history.yaml读取最近 3 篇的 dimensions 字段)

4a. 维度随机化(写作前必须执行)

从 writing-guide.md 第7层的维度池中执行随机

  1. 对 6 个维度(叙事视角/时间线/主类比域/情感基调/节奏型/论证偏好)各随机选 1 个选项
  2. 从中随机激活 2-3 个维度
  3. 对比 history.yaml 最近 3 篇的 dimensions 记录,如果完全重复则重新随机
  4. 将选中的维度作为硬性写作约束注入后续写作——不是建议,是必须贯穿全文的约束

示例输出

本次激活维度:
- 叙事视角:对话体("有人问我..."
- 主类比域:烹饪
- 节奏型:快慢剧烈交替

4b. 写作

按选定框架 + writing-guide.md 全部 7 层规范 + 激活的维度约束写文章:

  • H1 标题20-28 字converter 自动提取为微信标题)
  • 字数 1500-2500
  • 按框架大纲组织结构,在金句落点放精炼总结句
  • 不插配图占位符Step 6 自动分析插入)
  • 风格遵循 style.yaml 的 tone、voice、content_style
  • 避开 blacklist
  • 去AI痕迹在此步执行不是写完再改——writing-guide.md 的 7 层规则必须在初稿阶段就全部生效

Playbook 优先:如果 playbook.md 存在,其中的规则优先于 writing-guide.md 的通用规则。比如 playbook 说"从不用问句结尾"而 writing-guide 建议用反问句,以 playbook 为准。playbook 是客户的个性writing-guide 是通用底线。

保存到 {skill_dir}/output/{client}/{date}-{slug}.md


Step 5: SEO 优化 + 去AI痕迹

读取: {skill_dir}/references/seo-rules.md
读取: {skill_dir}/references/writing-guide.md去AI痕迹部分

对初稿执行:

5a. SEO 优化

  1. 生成 3 个备选标题20-28 字),标注策略
  2. 优化关键词密度(核心词前 200 字出现,全文 3-5 次自然提及)
  3. 生成摘要(≤ 54 个中文字)
  4. 推荐 5 个精准标签
  5. 完读率优化(拆长段、加粗强调、段落悬念)

5b. 去AI痕迹逐层验证关键步骤

按 writing-guide.md 的自检清单逐项检查终稿,每一项都必须通过

  1. 词汇层:全文搜索禁用词表 → 命中数必须 = 0。检查词汇温度分布是否覆盖冷/温/热/野至少 3 种
  2. 句法层:确认全文破句/不完整句 ≥ 3 处,无连续 3 句同结构
  3. 信息密度层:确认高密度段后跟低密度段,无连续均匀信息密度
  4. 连贯性打破层:确认至少 1 处跑题再拉回,无每段首句都承接上段
  5. 具体性注入层:每 500 字至少 2 处具体细节(时间/地点/人物/非整数数字)
  6. 情绪真实感层确认情绪弧线有起伏≥1 高点 + ≥1 犹豫点),无全文平铺
  7. 维度随机化层:确认 Step 4a 选中的维度贯穿全文,不是只出现一两次
  8. 段落节奏:无连续 2 个长度接近±20字的段落

如果任何一项不通过:定位具体段落,针对性重写该段落(不要全文重写),然后重新检查该项。

覆盖保存终稿。自动模式下选评分最高的标题作为最终标题。


Step 6: 视觉AI

读取: {skill_dir}/references/visual-prompts.md

6a. 分析文章 + 生成提示词

读取终稿,分析结构:

  • 提取 H2 标题和各论点段落
  • 逐个论点判断是否需要配图(数据/场景/转折处优先,纯观点段可不配)
  • 确定配图位置和画面描述
  • 约束:总数 3-6 张间隔≥300字不在开头和 CTA 处配图

生成封面 3 组创意(直觉冲击/氛围渲染/信息图表)+ 内文配图提示词。

  • 自动模式(默认):直接用创意 A 作为封面,全部配图直接生成,不停顿。
  • 交互模式:输出方案,等用户确认或调整。

将占位符 ![配图:场景描述](placeholder) 插入 Markdown。

6b. 自动生图

# 封面2.35:1 微信封面比例)
python3 {skill_dir}/toolkit/image_gen.py \
  --prompt "{封面提示词}" \
  --output {skill_dir}/output/{client}/{date}-cover.png \
  --size cover

# 内文配图16:9 横版)
python3 {skill_dir}/toolkit/image_gen.py \
  --prompt "{配图提示词}" \
  --output {skill_dir}/output/{client}/{date}-img{序号}.png \
  --size article

# 可通过 --provider 覆盖默认 providerdoubao/openai

生成后替换 Markdown 中的 placeholder 为实际图片路径。

降级:如果 image_gen.py 报错,输出提示词供用户自行生成,继续后续步骤。


Step 7: 排版 + 推送草稿

python3 {skill_dir}/toolkit/cli.py publish {markdown_path} \
  --cover {cover_path} \
  --theme {style.yaml 的 theme} \
  --title "{最终标题}"

如果有 cover 就加 --cover,没有就不加。

降级:如果 publish 失败,改用 preview

python3 {skill_dir}/toolkit/cli.py preview {markdown_path} \
  --theme {theme} --no-open -o {output_dir}/{slug}.html

告知用户本地 HTML 路径。


Step 7.5: 写入历史

发布成功后,向 {skill_dir}/clients/{client}/history.yaml 追加一条记录:

- date: "{今天日期}"
  title: "{最终标题}"
  topic_source: "热点抓取"  # 或 "用户指定"
  topic_keywords: ["{关键词1}", "{关键词2}"]
  framework: "{使用的框架类型}"
  word_count: {字数}
  media_id: "{media_id}"
  dimensions:  # Step 4a 随机选中的维度,用于下次去重
    - "叙事视角: 对话体"
    - "主类比域: 烹饪"
    - "节奏型: 快慢剧烈交替"
  stats: null  # 由 fetch_stats.py 后续回填

这条记录会被下次运行的 Step 2.5 读取,用于选题去重和偏好分析。


Step 8: 回复用户

成功

  • 最终标题 + 2 个备选标题
  • 摘要
  • 5 个推荐标签
  • media_id
  • 提醒:请到公众号后台草稿箱检查并发布

部分成功

  • 列出每步状态(成功/跳过/失败)
  • 附上本地文件路径
  • 说明哪些需要用户手动完成

用户可以继续要求

  • "帮我润色/缩写/扩写/换语气" → 编辑文章
  • "封面换暖色调" → 修改提示词,重新生图
  • "第 3 张配图不要了" → 调整 Markdown
  • "用框架 B 重写" → 回到 Step 4
  • "换一个选题" → 回到 Step 3 展示选题列表
  • "看看文章数据" / "效果怎么样" → 执行效果复盘(见下方)

效果复盘

当用户问"文章数据怎么样"、"效果复盘"、"看看表现"时:

python3 {skill_dir}/scripts/fetch_stats.py --client {client} --days 7

脚本会:

  1. 调微信数据分析 API 拉取最近 7 天的文章阅读数据
  2. 匹配 history.yaml 中的文章记录
  3. 回填 stats 字段(阅读量、分享量、点赞量、阅读率)

回填后,分析数据并给出建议:

  • 哪篇文章表现最好?为什么?(标题策略?选题热度?框架类型?)
  • 哪篇表现不好?可能的原因?
  • 对后续选题/标题/框架的调整建议

这些分析会影响下次运行时 Step 2.5 的偏好参考。


客户 Onboard

当用户说"新建客户"、"导入历史文章"、"建 playbook"时:

1. 创建客户目录

{skill_dir}/clients/{client}/
├── style.yaml    # 复制 demo 模板,让用户填写
├── corpus/       # 用户放入历史推文 .md 文件
├── history.yaml  # 空初始化
└── lessons/      # 空目录

2. 生成 Playbook

用户将历史推文放入 corpus/ 后:

python3 {skill_dir}/scripts/build_playbook.py --client {client}

脚本输出语料统计 + 分析指令。按指令逐批阅读文章,提取风格特征,生成 playbook.md

建议至少 20 篇历史文章50+ 篇效果更好。


学习人工修改

当用户说"我改了,学习一下"、"学习我的修改"时:

1. 获取 draft 和 final

  • draftoutput/{client}/ 下最新的 .md 文件
  • final用户提供修改后的版本粘贴或指定文件路径

2. 运行 diff 分析

python3 {skill_dir}/scripts/learn_edits.py --client {client} --draft {draft_path} --final {final_path}

3. 分析并记录

读取脚本输出的 diff 数据,对每个有意义的修改分类:

  • 用词替换AI 用了"讲真",人工改成"坦白说"
  • 段落删除:人工觉得某段多余
  • 段落新增:人工补充了 AI 没写的内容
  • 结构调整H2 顺序或分段方式的变化
  • 标题修改:标题风格偏好
  • 语气调整:整体语气的偏移方向

将分类结果写入 lessons/ 下的 diff YAML 文件的 edits 和 patterns 字段。

4. 自动触发 Playbook 更新

每积累 5 次 lessons脚本会提示更新 playbook

python3 {skill_dir}/scripts/learn_edits.py --client {client} --summarize

读取所有 lessons找出反复出现的 pattern≥2 次),将其固化到 playbook.md 的对应章节。


错误处理

不要因为任何一步失败就停止整个流程。

步骤 降级
热点抓取失败 WebSearch 替代
选题为空 请用户手动给选题
SEO 关键词查询失败 回退到 LLM 判断
封面生成失败 输出提示词,用户自行生成
推送失败 生成本地 HTML手动操作
历史写入失败 警告但不阻断流程
效果数据拉取失败 告知用户可能需要等 24h微信数据有延迟
Playbook 不存在 正常——用 writing-guide.md 通用规则