修复排版升级与 workflow 的兼容问题 + 更新 README
兼容修复: - style-template.md 主题列表从 4 → 16,新增 gallery 提示 - writing-guide.md "客户" → "用户"(单用户模式残留措辞) - SKILL.md description 新增主题画廊/容器语法触发词 - SKILL.md Step 4 新增容器语法说明(:::dialogue/timeline/callout/quote) - SKILL.md Step 7 新增 converter 自动修复说明(CJK/脚注/暗黑/列表) - SKILL.md Step 8 新增"看看有什么主题"/"换主题"用户操作 - SKILL.md Onboard 主题选问新增 gallery 命令提示 - wechat-constraints.md 新增第 8 节"WeWrite 自动修复" - README 完整更新:排版引擎章节、16 主题分类表、容器语法示例、gallery 命令 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
2fa0d7fa6d
commit
40bc8a1ceb
5 changed files with 135 additions and 27 deletions
100
README.md
100
README.md
|
|
@ -45,6 +45,66 @@ WeWrite 的写作不是"写完再改",而是从第一句话开始就像人在
|
||||||
|
|
||||||
每篇文章写完后执行 8 项自检,不通过则定向重写。
|
每篇文章写完后执行 8 项自检,不通过则定向重写。
|
||||||
|
|
||||||
|
## 排版引擎
|
||||||
|
|
||||||
|
### 16 个主题
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 浏览器内预览所有主题
|
||||||
|
python3 toolkit/cli.py gallery
|
||||||
|
|
||||||
|
# 列出主题名称
|
||||||
|
python3 toolkit/cli.py themes
|
||||||
|
```
|
||||||
|
|
||||||
|
| 类别 | 主题 |
|
||||||
|
|------|------|
|
||||||
|
| 通用 | `professional-clean`(默认)、`minimal`、`newspaper` |
|
||||||
|
| 科技 | `tech-modern`、`bytedance`、`github` |
|
||||||
|
| 文艺 | `warm-editorial`、`sspai`、`ink`、`elegant-rose` |
|
||||||
|
| 商务 | `bold-navy`、`minimal-gold`、`bold-green` |
|
||||||
|
| 风格 | `bauhaus`、`focus-red`、`midnight` |
|
||||||
|
|
||||||
|
所有主题均支持微信暗黑模式(自动注入 `data-darkmode-*` 属性)。
|
||||||
|
|
||||||
|
### 微信兼容性自动修复
|
||||||
|
|
||||||
|
Converter 自动处理以下微信平台限制,无需手动干预:
|
||||||
|
|
||||||
|
| 问题 | 自动修复 |
|
||||||
|
|------|---------|
|
||||||
|
| 外链被屏蔽 | 转为上标编号脚注 + 文末参考链接 |
|
||||||
|
| 中英混排无间距 | CJK-Latin 边界自动加空格 |
|
||||||
|
| 加粗标点渲染异常 | 标点自动移到 `</strong>` 外 |
|
||||||
|
| 原生列表渲染不稳定 | `<ul>/<ol>` 转为样式化 `<section>` |
|
||||||
|
| 暗黑模式颜色反转 | 注入 `data-darkmode-color/bgcolor` |
|
||||||
|
| `<style>` 被剥离 | 所有 CSS 以内联 `style` 注入 |
|
||||||
|
|
||||||
|
### 容器语法
|
||||||
|
|
||||||
|
适合特定内容类型的富排版块,在 Markdown 中使用 `:::` 语法:
|
||||||
|
|
||||||
|
````markdown
|
||||||
|
:::dialogue
|
||||||
|
你好,请问这个功能怎么用?
|
||||||
|
> 很简单,直接在 Markdown 里写就行。
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::timeline
|
||||||
|
**2024 Q1** 立项启动
|
||||||
|
**2024 Q3** MVP 上线
|
||||||
|
**2025 Q1** 用户突破 10 万
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::callout tip
|
||||||
|
这是一个提示框,支持 tip / warning / info / danger 四种类型。
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::quote
|
||||||
|
好的排版不是让读者注意到设计,而是让读者忘记设计。
|
||||||
|
:::
|
||||||
|
````
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
### 1. 获取代码
|
### 1. 获取代码
|
||||||
|
|
@ -99,7 +159,9 @@ cp config.example.yaml config.yaml
|
||||||
你:写一篇关于 AI Agent 的公众号文章
|
你:写一篇关于 AI Agent 的公众号文章
|
||||||
你:交互模式,写一篇关于效率工具的推文
|
你:交互模式,写一篇关于效率工具的推文
|
||||||
你:帮我润色一下刚才那篇
|
你:帮我润色一下刚才那篇
|
||||||
你:看看最近文章数据怎么样
|
你:看看有什么主题 → 打开主题画廊
|
||||||
|
你:换成 sspai 主题重新排版 → 切换主题
|
||||||
|
你:看看最近文章数据怎么样 → 效果复盘
|
||||||
```
|
```
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
@ -119,13 +181,13 @@ wewrite/
|
||||||
│ └── learn_edits.py # 学习人工修改
|
│ └── learn_edits.py # 学习人工修改
|
||||||
│
|
│
|
||||||
├── toolkit/ # Markdown → 微信工具链
|
├── toolkit/ # Markdown → 微信工具链
|
||||||
│ ├── cli.py # CLI(preview / publish / themes)
|
│ ├── cli.py # CLI(preview / publish / gallery / themes)
|
||||||
│ ├── converter.py # Markdown → 内联样式 HTML
|
│ ├── converter.py # Markdown → 内联样式 HTML + 微信兼容修复
|
||||||
│ ├── theme.py # YAML 主题引擎
|
│ ├── theme.py # YAML 主题引擎
|
||||||
│ ├── publisher.py # 微信草稿箱 API
|
│ ├── publisher.py # 微信草稿箱 API
|
||||||
│ ├── wechat_api.py # access_token / 图片上传
|
│ ├── wechat_api.py # access_token / 图片上传
|
||||||
│ ├── image_gen.py # AI 图片生成(doubao / OpenAI)
|
│ ├── image_gen.py # AI 图片生成(doubao / OpenAI)
|
||||||
│ └── themes/ # 4 套预置排版主题
|
│ └── themes/ # 16 套排版主题(含暗黑模式)
|
||||||
│
|
│
|
||||||
├── references/ # Agent 按需读取的参考文档
|
├── references/ # Agent 按需读取的参考文档
|
||||||
│ ├── writing-guide.md # 写作规范 + 7 层去 AI 痕迹
|
│ ├── writing-guide.md # 写作规范 + 7 层去 AI 痕迹
|
||||||
|
|
@ -133,8 +195,8 @@ wewrite/
|
||||||
│ ├── topic-selection.md # 选题评估规则
|
│ ├── topic-selection.md # 选题评估规则
|
||||||
│ ├── seo-rules.md # 微信 SEO 规则
|
│ ├── seo-rules.md # 微信 SEO 规则
|
||||||
│ ├── visual-prompts.md # 视觉 AI 提示词规范
|
│ ├── visual-prompts.md # 视觉 AI 提示词规范
|
||||||
│ ├── wechat-constraints.md # 微信平台技术限制
|
│ ├── wechat-constraints.md # 微信平台限制 + 自动修复说明
|
||||||
│ └── style-template.md # 风格配置字段说明
|
│ └── style-template.md # 风格配置字段 + 全部主题列表
|
||||||
│
|
│
|
||||||
├── output/ # 生成的文章(运行时产生)
|
├── output/ # 生成的文章(运行时产生)
|
||||||
├── corpus/ # 历史文章语料(可选,用于 Playbook 学习)
|
├── corpus/ # 历史文章语料(可选,用于 Playbook 学习)
|
||||||
|
|
@ -160,22 +222,11 @@ topics:
|
||||||
- "方向1"
|
- "方向1"
|
||||||
- "方向2"
|
- "方向2"
|
||||||
tone: "写作风格描述"
|
tone: "写作风格描述"
|
||||||
theme: "professional-clean" # 排版主题
|
theme: "professional-clean" # 排版主题(16 个可选,运行 gallery 预览)
|
||||||
```
|
```
|
||||||
|
|
||||||
详见 `references/style-template.md`。
|
详见 `references/style-template.md`。
|
||||||
|
|
||||||
## 排版主题
|
|
||||||
|
|
||||||
| 主题 | 风格 |
|
|
||||||
|------|------|
|
|
||||||
| `professional-clean` | 专业简洁(默认) |
|
|
||||||
| `tech-modern` | 科技风(蓝紫渐变) |
|
|
||||||
| `warm-editorial` | 暖色编辑风 |
|
|
||||||
| `minimal` | 极简黑白 |
|
|
||||||
|
|
||||||
预览:`python3 toolkit/cli.py themes`
|
|
||||||
|
|
||||||
## 图片生成
|
## 图片生成
|
||||||
|
|
||||||
通过 `config.yaml` 切换 provider:
|
通过 `config.yaml` 切换 provider:
|
||||||
|
|
@ -201,11 +252,18 @@ WeWrite 能从你的修改中学习写作偏好:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 预览 Markdown → 微信 HTML
|
# 预览 Markdown → 微信 HTML
|
||||||
python3 toolkit/cli.py preview article.md --theme professional-clean
|
python3 toolkit/cli.py preview article.md --theme sspai
|
||||||
|
|
||||||
|
# 浏览器内主题画廊(16 主题并排预览 + 一键复制)
|
||||||
|
python3 toolkit/cli.py gallery
|
||||||
|
python3 toolkit/cli.py gallery article.md # 用自己的文章预览
|
||||||
|
|
||||||
# 发布到微信草稿箱
|
# 发布到微信草稿箱
|
||||||
python3 toolkit/cli.py publish article.md --cover cover.png --title "文章标题"
|
python3 toolkit/cli.py publish article.md --cover cover.png --title "文章标题"
|
||||||
|
|
||||||
|
# 列出所有主题
|
||||||
|
python3 toolkit/cli.py themes
|
||||||
|
|
||||||
# 抓热点
|
# 抓热点
|
||||||
python3 scripts/fetch_hotspots.py --limit 20
|
python3 scripts/fetch_hotspots.py --limit 20
|
||||||
|
|
||||||
|
|
@ -231,13 +289,13 @@ Step 3 选题生成(10 选题 × 评分)
|
||||||
↓
|
↓
|
||||||
Step 3.5 框架选择(5 套骨架)
|
Step 3.5 框架选择(5 套骨架)
|
||||||
↓
|
↓
|
||||||
Step 4 维度随机化 + 文章写作(7 层去 AI 痕迹)
|
Step 4 维度随机化 + 文章写作(7 层去 AI 痕迹 + 可选容器语法)
|
||||||
↓
|
↓
|
||||||
Step 5 SEO 优化 + 去 AI 逐层验证(8 项自检)
|
Step 5 SEO 优化 + 去 AI 逐层验证(8 项自检)
|
||||||
↓
|
↓
|
||||||
Step 6 视觉 AI(封面 + 内文配图)
|
Step 6 视觉 AI(封面 + 内文配图)
|
||||||
↓
|
↓
|
||||||
Step 7 排版推送(降级:本地 HTML)
|
Step 7 排版推送(自动 CJK 修复/外链脚注/暗黑模式,降级:本地 HTML)
|
||||||
↓
|
↓
|
||||||
Step 7.5 写入发布历史
|
Step 7.5 写入发布历史
|
||||||
↓
|
↓
|
||||||
|
|
|
||||||
25
SKILL.md
25
SKILL.md
|
|
@ -3,8 +3,9 @@ name: wewrite
|
||||||
description: |
|
description: |
|
||||||
微信公众号内容全流程助手:热点抓取 → 选题 → 框架 → 写作 → SEO/去AI痕迹 → 视觉AI → 排版推送草稿箱。
|
微信公众号内容全流程助手:热点抓取 → 选题 → 框架 → 写作 → SEO/去AI痕迹 → 视觉AI → 排版推送草稿箱。
|
||||||
触发关键词:公众号、推文、微信文章、微信推文、草稿箱、微信排版、选题、热搜、
|
触发关键词:公众号、推文、微信文章、微信推文、草稿箱、微信排版、选题、热搜、
|
||||||
热点抓取、封面图、配图、写公众号、写一篇。
|
热点抓取、封面图、配图、写公众号、写一篇、主题画廊、排版主题、容器语法。
|
||||||
也覆盖:markdown 转微信格式、学习用户改稿风格、文章数据复盘、风格设置。
|
也覆盖:markdown 转微信格式、学习用户改稿风格、文章数据复盘、风格设置、
|
||||||
|
主题预览/切换、:::dialogue/:::timeline/:::callout 容器语法。
|
||||||
不应被通用的"写文章"、blog、邮件、PPT、抖音/短视频、网站 SEO 触发——
|
不应被通用的"写文章"、blog、邮件、PPT、抖音/短视频、网站 SEO 触发——
|
||||||
需要有公众号/微信等明确上下文。
|
需要有公众号/微信等明确上下文。
|
||||||
---
|
---
|
||||||
|
|
@ -188,6 +189,14 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {从热点标题中提取的3
|
||||||
|
|
||||||
**Playbook 优先**:如果 playbook.md 存在,其中的规则优先于 writing-guide.md 的通用规则。比如 playbook 说"从不用问句结尾"而 writing-guide 建议用反问句,以 playbook 为准。playbook 是用户的个性,writing-guide 是通用底线。
|
**Playbook 优先**:如果 playbook.md 存在,其中的规则优先于 writing-guide.md 的通用规则。比如 playbook 说"从不用问句结尾"而 writing-guide 建议用反问句,以 playbook 为准。playbook 是用户的个性,writing-guide 是通用底线。
|
||||||
|
|
||||||
|
**容器语法**(可选,适合特定内容类型):写作时可以使用以下容器块,converter 会自动渲染为带样式的 HTML:
|
||||||
|
- `:::dialogue` ... `:::` — 对话气泡(适合访谈/问答)
|
||||||
|
- `:::timeline` ... `:::` — 时间线(适合历程/步骤)
|
||||||
|
- `:::callout tip/warning/info/danger` ... `:::` — 提示框(适合重点/警告)
|
||||||
|
- `:::quote` ... `:::` — 拉引语(适合金句展示)
|
||||||
|
|
||||||
|
不是每篇文章都需要容器语法——只在内容形式契合时使用。
|
||||||
|
|
||||||
保存到 `{skill_dir}/output/{date}-{slug}.md`
|
保存到 `{skill_dir}/output/{date}-{slug}.md`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -282,6 +291,14 @@ python3 {skill_dir}/toolkit/image_gen.py \
|
||||||
读取: {skill_dir}/references/wechat-constraints.md(排版时参考微信平台限制)
|
读取: {skill_dir}/references/wechat-constraints.md(排版时参考微信平台限制)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Converter 自动处理**(不需要手动干预,了解即可):
|
||||||
|
- 中英文自动加空格(CJK-Latin spacing)
|
||||||
|
- 加粗标点外移(微信渲染 bug 修复)
|
||||||
|
- `<ul>/<ol>` 转 `<section>`(微信原生列表不稳定)
|
||||||
|
- 外链自动转编号脚注 + 文末参考链接(微信屏蔽外链)
|
||||||
|
- 暗黑模式 `data-darkmode-*` 属性注入
|
||||||
|
- `:::` 容器语法自动渲染
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 {skill_dir}/toolkit/cli.py publish {markdown_path} \
|
python3 {skill_dir}/toolkit/cli.py publish {markdown_path} \
|
||||||
--cover {cover_path} \
|
--cover {cover_path} \
|
||||||
|
|
@ -344,6 +361,8 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown_path} \
|
||||||
- "用框架 B 重写" → 回到 Step 4
|
- "用框架 B 重写" → 回到 Step 4
|
||||||
- "换一个选题" → 回到 Step 3 展示选题列表
|
- "换一个选题" → 回到 Step 3 展示选题列表
|
||||||
- "看看文章数据" / "效果怎么样" → 执行效果复盘(见下方)
|
- "看看文章数据" / "效果怎么样" → 执行效果复盘(见下方)
|
||||||
|
- "看看有什么主题" / "换个主题" → 运行 `python3 {skill_dir}/toolkit/cli.py gallery` 打开主题画廊
|
||||||
|
- "换成 XX 主题" → 用新主题重新渲染当前文章
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -374,7 +393,7 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown_path} \
|
||||||
| 有没有绝对不能出现的词或话题? | `blacklist` | 空 |
|
| 有没有绝对不能出现的词或话题? | `blacklist` | 空 |
|
||||||
| 有没有想参考的公众号? | `reference_accounts` | 空 |
|
| 有没有想参考的公众号? | `reference_accounts` | 空 |
|
||||||
| 署名写什么? | `author` | name 字段值 |
|
| 署名写什么? | `author` | name 字段值 |
|
||||||
| 偏好哪种排版风格? | `theme` | "professional-clean" |
|
| 偏好哪种排版风格?(可运行 `gallery` 命令预览全部 16 个主题) | `theme` | "professional-clean" |
|
||||||
| 封面风格偏好? | `cover_style` | 从 industry 推断 |
|
| 封面风格偏好? | `cover_style` | 从 industry 推断 |
|
||||||
| 有没有固定封面模板? | `cover_template` | 不设置 |
|
| 有没有固定封面模板? | `cover_template` | 不设置 |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,23 @@ author: "署名"
|
||||||
|
|
||||||
## 可用排版主题
|
## 可用排版主题
|
||||||
|
|
||||||
|
运行 `python3 toolkit/cli.py gallery` 可在浏览器中预览所有主题的实际效果。
|
||||||
|
|
||||||
| 主题 | 说明 |
|
| 主题 | 说明 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| professional-clean | 专业简洁(默认,适合大部分企业) |
|
| professional-clean | 专业简洁(默认,适合大部分商业内容) |
|
||||||
| tech-modern | 科技风(蓝紫渐变,适合技术/产品类) |
|
| tech-modern | 科技风(蓝紫渐变,适合技术/产品类) |
|
||||||
| warm-editorial | 暖色编辑风(适合生活/文化类) |
|
| warm-editorial | 暖色编辑风(适合生活/文化类) |
|
||||||
| minimal | 极简黑白(适合文学/严肃内容) |
|
| minimal | 极简黑白(适合文学/严肃内容) |
|
||||||
|
| bytedance | 字节风(品牌蓝,现代大间距) |
|
||||||
|
| sspai | 少数派风(暖白底,红色点缀,清爽文艺) |
|
||||||
|
| newspaper | 报纸风(米黄底,深棕文字,衬线感) |
|
||||||
|
| bauhaus | 包豪斯(黑白为主,红蓝黄色块点缀) |
|
||||||
|
| ink | 水墨风(宣纸底,中文衬线,留白多) |
|
||||||
|
| midnight | 午夜深色(深蓝黑底,蓝色高亮) |
|
||||||
|
| bold-green | 大胆绿(森林绿主色,适合环保/健康) |
|
||||||
|
| bold-navy | 大胆藏青(藏青主色,适合金融/商务) |
|
||||||
|
| elegant-rose | 优雅玫瑰(浅粉底,玫瑰点缀,适合女性/生活) |
|
||||||
|
| minimal-gold | 极简金(金色细线点缀,奢华但克制) |
|
||||||
|
| focus-red | 聚焦红(中国红标题,适合新闻/评论) |
|
||||||
|
| github | GitHub 风(蓝色链接,等宽代码块,开发者友好) |
|
||||||
|
|
|
||||||
|
|
@ -409,7 +409,24 @@ background: linear-gradient(135deg, #7c3aed 0%, #3b82f6 100%);
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. 参考资源
|
## 8. WeWrite 自动修复
|
||||||
|
|
||||||
|
以下微信平台限制已由 converter 自动处理,**无需手动干预**:
|
||||||
|
|
||||||
|
| 限制 | 自动修复 |
|
||||||
|
|------|---------|
|
||||||
|
| 外链被屏蔽 | 自动转为上标编号脚注 + 文末参考链接列表 |
|
||||||
|
| 中英文混排无间距 | CJK-Latin 边界自动插入空格 |
|
||||||
|
| 加粗文本后中文标点渲染异常 | 标点自动移到 `</strong>` 标签外 |
|
||||||
|
| 原生 `<ul>/<ol>` 列表渲染不稳定 | 自动转为 `<section>` + 样式化 bullet/number |
|
||||||
|
| 暗黑模式颜色反转错误 | 自动注入 `data-darkmode-color/bgcolor` 属性 |
|
||||||
|
| `<style>` 标签被剥离 | 所有 CSS 以内联 `style` 属性注入 |
|
||||||
|
|
||||||
|
这些修复在 `converter.py` 的 `convert()` 方法中自动执行,覆盖所有 16 个主题。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 参考资源
|
||||||
|
|
||||||
### 官方文档
|
### 官方文档
|
||||||
- [微信公众平台 - 帮助中心](https://kf.qq.com/product/weixinmp.html)
|
- [微信公众平台 - 帮助中心](https://kf.qq.com/product/weixinmp.html)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
你是这个公众号的主笔。你写的东西要像一个真人编辑写的——有观点、有个性、有瑕疵感。读者点开文章,应该觉得"这人挺懂的",而不是"这是 AI 写的"。
|
你是这个公众号的主笔。你写的东西要像一个真人编辑写的——有观点、有个性、有瑕疵感。读者点开文章,应该觉得"这人挺懂的",而不是"这是 AI 写的"。
|
||||||
|
|
||||||
**规则优先级**:如果客户有 `playbook.md`,其中的规则覆盖本文件的通用规则。playbook 是客户的个性化风格,本文件是通用底线。没有 playbook 时,完全按本文件执行。
|
**规则优先级**:如果用户有 `playbook.md`,其中的规则覆盖本文件的通用规则。playbook 是用户的个性化风格,本文件是通用底线。没有 playbook 时,完全按本文件执行。
|
||||||
|
|
||||||
## 文章结构
|
## 文章结构
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue