修复 7 个闭环审查问题

#1 HIGH: 用户给选题时跳到 Step 4 → 改为跳到 Step 3(保留素材采集)
#2 MEDIUM: writing-guide.md "Step 3.75" → "Step 3b"(2处)
#3 MEDIUM: history.yaml 新增 writing_persona 字段记录
#4 MEDIUM: 声明优先级 playbook > persona > writing-guide
#5 LOW: onboard.md 新增 tone → persona 自动映射表
#6 LOW: 错误处理表新增 persona 文件不存在的降级
#7 LOW: 错误处理表新增 WebSearch 降级

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
wangzhuc 2026-03-29 01:05:05 +08:00
parent d87897288d
commit b80baa4c73
3 changed files with 16 additions and 4 deletions

View file

@ -70,7 +70,7 @@ python3 -c "import markdown, bs4, cssutils, requests, yaml, pygments, PIL" 2>&1
- 存在 → 提取 `name`、`topics`、`tone`、`voice`、`blacklist`、`theme`、`cover_style`、`author`、`content_style`
- 不存在 → `读取: {skill_dir}/references/onboard.md`,完成后回到 Step 1
如果用户直接给了选题 → 跳到 Step 4
如果用户直接给了选题 → 跳到 Step 3仍需框架选择和素材采集不可跳过
---
@ -153,6 +153,8 @@ WebSearch: "{选题关键词} 数据 报告 2025 2026"
人格文件定义了:语气浓度、数据呈现方式、情绪弧线、段落节奏、不确定性表达模板等。作为 Step 4c 的硬性约束执行。
**优先级**playbook.md > persona > writing-guide.md。writing-guide 是底线禁用词等persona 在此基础上特化风格参数playbook 是用户个性化的最终覆盖。
**4c. 写文章**
- H1 标题20-28 字) + H2 结构1500-2500 字
- 真实素材锚定Step 3b 的素材分散嵌入各 H2 段落
@ -240,6 +242,7 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown} --theme {theme} --no-open
framework: "{框架}"
word_count: {字数}
media_id: "{id}" # 降级时 null
writing_persona: "{人格名}"
dimensions:
- "{维度}: {选项}"
stats: null
@ -274,7 +277,9 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown} --theme {theme} --no-open
| 热点抓取 | WebSearch 替代 |
| 选题为空 | 请用户手动给选题 |
| SEO 脚本 | LLM 判断 |
| 素材采集WebSearch | LLM 训练数据中可验证的公开信息 |
| 维度随机化 | history 空时跳过去重 |
| Persona 文件不存在 | 回退到 midnight-friend默认 |
| 去 AI 验证 | 3 次重写不过则跳过该项 |
| 生图失败 | 输出提示词 |
| 推送失败 | 本地 HTML |

View file

@ -25,7 +25,14 @@
| 有没有绝对不能出现的词或话题? | `blacklist` | 空 |
| 有没有想参考的公众号? | `reference_accounts` | 空 |
| 署名写什么? | `author` | name 字段值 |
| 偏好哪种写作人格? | `writing_persona` | 从 tone 推断(见下表) |
| 偏好哪种写作人格? | `writing_persona` | 从 tone 推断(见映射) |
**tone → persona 自动映射**(用户不选时的默认推断):
- 轻松/有趣/朋友/聊天 → `midnight-friend`
- 温暖/共鸣/故事/治愈 → `warm-editor`
- 专业/分析/深度/行业 → `industry-observer`
- 犀利/锐评/观点/新闻 → `sharp-journalist`
- 严谨/数据/研究/财经 → `cold-analyst`
| 偏好哪种排版风格?(可运行 `gallery` 命令预览全部 16 个主题) | `theme` | "professional-clean" |
| 封面风格偏好? | `cover_style` | 从 industry 推断 |
| 有没有固定封面模板? | `cover_template` | 不设置 |

View file

@ -31,7 +31,7 @@
**总原则**:不是"写完再修",而是"从第一句话开始就像人在写"。每一层的规则都必须在初稿阶段就执行,不是后期润色。
**最重要的一条**(优先级高于以下所有层):**文章必须建立在真实的外部信息源之上。** Step 3.75 采集的真实数据、真实引述、真实案例是文章的骨架。不是"看起来像引用"的编造而是实际存在的、可验证的外部信息。AI 检测器能区分"LLM 在高概率 token 上编造的假细节"和"人类消化真实信息后的重组"——后者的 token 概率分布会出现 LLM 不会自然产生的"意外"模式。写完后自检:文章中每个 H2 段落是否至少锚定了 1 条来自 Step 3.75 的真实素材?如果某个段落完全是 LLM 自由生成,没有任何外部信息锚点,那个段落大概率会被检出。
**最重要的一条**(优先级高于以下所有层):**文章必须建立在真实的外部信息源之上。** Step 3b 采集的真实数据、真实引述、真实案例是文章的骨架。不是"看起来像引用"的编造而是实际存在的、可验证的外部信息。AI 检测器能区分"LLM 在高概率 token 上编造的假细节"和"人类消化真实信息后的重组"——后者的 token 概率分布会出现 LLM 不会自然产生的"意外"模式。写完后自检:文章中每个 H2 段落是否至少锚定了 1 条来自 Step 3b 的真实素材?如果某个段落完全是 LLM 自由生成,没有任何外部信息锚点,那个段落大概率会被检出。
---
@ -221,7 +221,7 @@ AI 天然倾向抽象泛化。人类文章充满具体的、甚至无关紧要
写完全文后,逐项检查:
- [ ] **真实信息锚定**:每个 H2 段落至少锚定 1 条来自 Step 3.75 的真实素材(具名来源 + 可验证数据)。没有任何一个段落是纯 LLM 自由生成
- [ ] **真实信息锚定**:每个 H2 段落至少锚定 1 条来自 Step 3b 的真实素材(具名来源 + 可验证数据)。没有任何一个段落是纯 LLM 自由生成
- [ ] **零编造**:文中所有数据、引述、案例都有真实来源,没有虚构
- [ ] 全文搜索禁用词表,命中数 = 0
- [ ] 抽查任意连续 500 字,至少包含冷/温/热/野四种温度中的 3 种