# Novel Prep

> 资料整理与前文梳理 — 自动读取设定文档、前文摘要、人物状态、伏笔追踪，输出压缩后的创作上下文（≤2000 tokens）

- Skill: `cwjdong-design/novel-prep` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cwjdong-design/novel-prep`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cwjdong-design/novel-prep/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cwjdong-design (https://skillmd.com/u/cwjdong-design)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cwjdong-design/novel-prep

---


# 资料整理与前文梳理（可执行版）

## 输入
- `书名`（对应 `~/novels/books/<书名>/`）
- `目标章节号 N`（如 42）

## 执行步骤

### 第 1 步：读取设定文档（按优先级，可并行）
读取以下文件（缺失的文件跳过并在输出中标注"⚠️ 文件缺失"）：
1. `02-设定文档/世界观.md` — 提取当前阶段启用的世界观要素
2. `02-设定文档/人物库/` — 读取目标章节出场人物的卡片（与大纲交叉验证确定出场人物）
3. `02-设定文档/伏笔追踪表.md` — 全量读取
4. `02-设定文档/故事线状态.md` — 读取最近 5 条记录

### 第 2 步：读取大纲与前文

> ⚠️ **首次创作模式**：当 `N = 1` 时，本章为开篇第一章，没有前文章节。此时跳过前文读取，上下文仅包含大纲、人物卡和世界观设定。同时增加「作者档案」（`~/.hermes/skills/novel/knowledge/作者设定.md`）和「番茄风格指南」的权重，作为创作的基准参照。

1. `00-大纲细纲/主线大纲.md` — 定位到第 N 章对应段落（±2 章上下文）
2. `00-大纲细纲/章节规划.md` — 提取第 N 章的计划内容
   - **N=1 且占位文本**：第1章核心事件为占位文本时，`novel-main` 已放行，此处从 `00-大纲细纲/主线大纲.md` 提取对应段落作为大纲要点，标注「⚠️ 未填写章节规划，已从主线大纲自动提取」。N>1 的占位场景由 main 前置检查拦截，不会到达此处。
3. （仅 N > 1）读取前文正文，按 N 值分段处理：
   - **N = 2**：仅读取 `第1章.md`（前文不足 3 章，只取可用范围）。如果 `第1章.md` 不存在，标注 ⚠️ 并跳过前文读取。
   - **N = 3**：读取 `第1章.md` 到 `第2章.md`（前文不足 3 章，取全部已有章节）。如果部分文件不存在，只读取存在的文件并在输出中标注 ⚠️。
   -   **N ≥ 6**：读取 `第<N-5>章.md` 到 `第<N-1>章.md`（常规窗口，最近 5 章）。如果部分文件不存在，只读取存在的文件并在输出中标注 ⚠️。
  -   **N = 4 或 N = 5**：读取 `第1章.md` 到 `第<N-1>章.md`（前文不足 5 章，取全部已有章节）。
4. （仅 N = 1）增强上下文：读取 `~/.hermes/skills/novel/knowledge/番茄风格指南.md` 全量内容和 `~/.hermes/skills/novel/knowledge/作者设定.md`，作为开篇风格参照

### 第 3 步：前文关键信息提取
> ⚠️ **首次创作模式**：当 `N = 1` 时，无前文信息。此时各字段标注「开篇章节，无前文」。

从最近 3 章中提取：
- **剧情位置**：故事当前所处的地理位置、时间节点、主线阶段
- **上一章结尾场景**：最后一段的场景描述（30 字）
- **章末钩子**：上一章结尾设置的悬念/反转/危机
- **活跃人物**：最近 3 章中出场且有台词/动作的人物

### 第 4 步：错误库读取（带权重衰减）

读取 `04-错误库/修正记录.md`，按以下规则过滤和排序：

#### 权重衰减公式
```
有效权重 = 初始权重 × 0.7^(距离当前章节的章数)
初始权重: 剧情逻辑错误=5, 人物一致性问题=4, 文笔问题=2, 设定冲突=3
```

#### 过滤规则
1. 只取最近 10 章内的修正记录（`当前章 - 修正章 ≤ 10`）
2. 同类错误（同一类型+同一人物/场景）重复出现 3 次以上 → 权重 ×1.5 提升
3. 按有效权重降序排列，取 Top 5

#### 输出格式
```
| 修正章 | 类型 | 内容摘要 | 有效权重 |
|--------|------|---------|---------|
| 38     | 人物一致性 | 林雪在第38章使用「冰霜术」，但人物卡记录其属性为「火系」| 4.0→2.8 |
```

### 第 5 步：伏笔排序算法
> ⚠️ **首次创作模式**：当 `N = 1` 时，没有伏笔表。此时「待回收伏笔」区块标注「开篇章节，无伏笔」。

#### 排序规则（三级排序）
```
第一级：超期状态   —  超期 > 近期 > 远期
第二级：紧急程度   —  主线伏笔 > 支线伏笔 > 氛围伏笔
第三级：剩餘章數   —  剩余章数越少越靠前
```

#### 分类定义
| 分类 | 判定条件 | 标记 |
|------|---------|------|
| 🚨 超期 | `计划回收章 ≤ 当前章` 且未回收 | 🚨 |
| 🔴 近期 | `1 ≤ 计划回收章 - 当前章 ≤ 5` | 🔴 |
| 🟡 远期 | `计划回收章 - 当前章 > 5` | 🟡 |
| ✅ 已回收 | 已标记回收 | ✅ |

### 第 6 步：上下文压缩算法

#### Token 预算分配（总计 ≤ 2000 tokens）
```
[人物当前状态]    600 tokens  ← 最高优先级，不可裁剪
[待回收伏笔]      500 tokens  ← 次高优先级
[本章大纲要点]    400 tokens  ← 核心输入
[前文关键信息]    300 tokens  ← 可裁剪
[近期修正反馈]    200 tokens  ← 可裁剪，无内容则分配给伏笔
```

#### 压缩策略（按优先级执行）
1. **首先压缩「近期修正反馈」**：如果总 tokens 超限，删减到只保留权重 ≥ 2.0 的记录
2. **其次压缩「前文关键信息」**：只保留上一章结尾场景和章末钩子，删除剧情位置和活跃人物
3. **再次压缩「待回收伏笔」**：只保留 🚨 超期 + 🔴 近期伏笔，删除 🟡 远期（除非其为主线）
4. **最后压缩「本章大纲要点」**：只保留核心事件，删除细节描述
5. **绝不压缩「人物当前状态」** — 这是创作的基础

#### Token 估算规则
- 中文字符数 ÷ 2 ≈ tokens（粗略估计）
- 输出后自检：如果估算 > 2000，再次执行压缩策略

#### 追读率预测

**定位**：在输出创作上下文的同时，基于本章大纲预判读者可能的弃书节点，帮助作者在 plot 和 draft 阶段提前加固薄弱环节。

---

##### 预测原理

读者的弃书行为不是随机的——大部分弃书集中在章节的特定位置。这些位置是注意力自然衰减的节点，需要提前用微钩子或冲突升级来加固。

---

##### 弃书高危节点（5个位置）

| # | 位置 | 弃书原因 | 加固策略 |
|---|------|---------|---------|
| 1 | **第 50-100 字** | 开头太慢/太绕，读者没「抓住」 | 确保首句话用了 §6.3 的模板，前100字内出现反常信息 |
| 2 | **第 300 字附近** | 推荐流预览结束 → 读者判断是否点进正文 | 确保前300字通过了三秒法则（§6.4），有明确的反常信息 |
| 3 | **第 800-1000 字** | 「中段疲劳」——冲突没有升级，节奏太平 | 此处必须有冲突升级或一个新信息的揭示 |
| 4 | **第 1400-1600 字** | 读者开始判断「本章是否值得看完」 | 此处必须有一个微钩子组合（连续2-3个微钩子密集出现），或一个中强度的冲突转折 |
| 5 | **第 1900-2000 字** | 章末钩子太弱，读者不想点开下一章 | 钩子必须是全章最强的悬念，类型不能是微钩子的简单重复 |

---

##### 预测输出格式

```
### 📉 追读率预测

| 高危节点 | 位置 | 本章风险 | 加固建议 |
|---------|------|---------|---------|
| 开头抓人 | 50-100字 | 🟢低/🟡中/🔴高 | （具体建议） |
| 预览结束 | 300字 | 🟢低/🟡中/🔴高 | （具体建议） |
| 中段疲劳 | 800-1000字 | 🟢低/🟡中/🔴高 | （具体建议） |
| 收尾判断 | 1400-1600字 | 🟢低/🟡中/🔴高 | （具体建议） |
| 章末钩子 | 2400-2500字 | 🟢低/🟡中/🔴高 | （具体建议） |

> 📊 本章预估追读率：[X]% （基于大纲节点数量、冲突类型和钩子类型综合评估）
```

---

##### 风险评估规则

| 风险等级 | 判定条件 |
|---------|---------|
| 🟢 低 | 该节点对应的大纲位置有明确的冲突/信息增量/情绪波动 |
| 🟡 中 | 该节点对应的大纲位置以过渡/铺垫/日常为主，缺乏冲突张力 |
| 🔴 高 | 该节点对应的大纲位置有连续200字以上的纯描写/纯设定说明/无冲突内容 |

---

##### 追读率估算公式

```
预估追读率 = 基础值 × 修正系数

基础值：
  - 第1章：40%（新书天然低，读者还没建立信任）
  - 第2-3章：55%（黄金三章期间，正在建立信任）
  - 第4-10章：70%（已追读的读者粘性较高）
  - 第11章及以后：80%（核心读者群，主要看钩子强度）

修正系数（可叠加）：
  × 0.85  如果本大纲中：核心事件不够具体（"修炼""聊天"等模糊描述）
  × 0.80  如果本大纲中：没有明确标注任何冲突类型
  × 0.75  如果本大纲中：章末钩子描述是"平淡过渡"或缺乏具体悬念
  × 1.10  如果本大纲中：有明确的反转/悬念钩子（加分项）
  × 1.05  如果本大纲中：包含一个此前未揭示的世界观信息（加分项）

最终追读率 = 基础值 × 所有修正系数的乘积，保留整数
```

> 📌 **使用注意**：追读率预测是预判工具，不是评判标准。如果预测值偏低（<50%），建议在 plot 阶段重新设计冲突节点，或在 draft 阶段增加微钩子密度来补救。

```markdown
## 创作上下文 — 第 N 章

### 📊 Token 预算（预估 XXX tokens / 2000）

### 👤 人物当前状态
| 人物 | 身份 | 当前位置 | 修为/状态 | 情感状态 | 最近变化（章号） |
|------|------|---------|----------|---------|----------------|
| 林夜 | 主角 | 青云城 | 筑基后期 | 困惑→警惕 | 第41章获得神秘玉简 |
| 苏婉 | 女主 | 青云城 | 筑基中期 | 欣喜→担忧 | 第40章与林夜关系升温 |

### 🎯 待回收伏笔（优先级排序）
| 优先级 | ID | 内容 | 铺垫章 | 计划回收 | 剩余 | 状态 |
|--------|-----|------|--------|---------|------|------|
| 1 | V03 | 苏婉的真实身份暗示 | 20 | 38 | 已超4章 | 🚨 超期 |
| 2 | V07 | 神秘玉简中封存的力量与林夜血脉共鸣 | 35 | 42 | 0（本章） | 🚨 超期 |
| 3 | V10 | 青云城地下禁制的异动 | 39 | 50 | 8 | 🟡 远期 |

> **排序说明**：以上按「超期 > 近期 > 远期」排序。两个 🚨 超期伏笔之间，按「剩余章数越小越靠前」排列。注意：**计划回收章 = 当前章（剩余 0）也属于 🚨 超期**，因为"立即应回收而未回收"即为超期。

### 📋 本章大纲要点
（从章节规划提取，保持原文）
> 第 N 章大纲内容...

### 📖 前文关键信息
- **上一章结尾**：（30 字场景描述）
- **章末钩子**：（上一章的悬念/转折）
- **剧情位置**：（地点 / 时间 / 主线阶段）

### ⚠️ 近期修正反馈
| 修正章 | 类型 | 内容 | 有效权重 |
|--------|------|------|---------|
| ... | ... | ... | ... |
```

## 正例 & 反例

### ✅ 正例：上下文压缩正确
```
人物状态共 800 字（≈400 tokens），待回收伏笔 600 字（≈300 tokens），
大纲 500 字（≈250 tokens），前文信息 400 字（≈200 tokens），
修正反馈 200 字（≈100 tokens）
总计 ≈1250 tokens，在 2000 以内 → 不压缩，完整输出
```

### ✅ 正例：超预算时正确压缩
```
总计 ≈2400 tokens，超预算 400 tokens
→ 第 1 步：修正反馈裁剪到 100 字（只保留权重≥2.0）→ 省 50 tokens
→ 第 2 步：前文信息只保留钩子和结尾 → 省 150 tokens
→ 第 3 步：伏笔删除 2 条远期非主线 → 省 200 tokens
→ 最终 ≈2000 tokens ✅
```

### ❌ 反例：错误地压缩了人物状态
```
不应该发生：总计 ≈2100 tokens，直接删除了 2 个人物 → ❌
正确做法：人物状态不可裁剪，从其他区块压缩
```

### ❌ 反例：伏笔排序错误
```
不应该发生：V10(远期) 排在 V03(超期) 之前 → ❌
正确：超期伏笔永远排在近期和远期之前；计划回收章 = 当前章（剩余 0）也是超期。
```

### ✅ 正例：错误库权重计算
```
第 38 章的错误（距离第 42 章=4 章），初始权重 4：
有效权重 = 4 × 0.7^4 = 4 × 0.2401 = 0.96
→ 权重小于 1.0，除非重复出现 3 次以上，否则不纳入
```

### ❌ 反例：错误库包含了过期错误
```
不应该发生：第 15 章的修正记录被纳入第 42 章的上下文 → ❌
正确：距离 > 10 章的错误记录自动过滤
```

## 自检清单
- [ ] 所有读取的文件路径存在性已检查
- [ ] 伏笔排序：超期在前，近期在中，远期在后
- [ ] Token 预算已估算并标注
- [ ] 人物状态始终完整（未被裁剪）
- [ ] 错误库已按权重衰减过滤
- [ ] 输出中缺失文件已标注 ⚠️
- [ ] 大纲要点与目标章节匹配

