# Novel Review

> 合规与一致性审查 — OOC检测算法、剧情矛盾交叉验证、违禁词库、故意错别字反向检查、质量评分量化

- Skill: `cwjdong-design/novel-review` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cwjdong-design/novel-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cwjdong-design/novel-review/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-review

---


# 合规与一致性审查（可执行版）

## 输入
- 本章初稿（来自 novel-draft）
- 人物卡（来自 `02-设定文档/人物库/`，含对话风格字段）
- 伏笔追踪表（来自 `02-设定文档/伏笔追踪表.md`）
- 世界观设定（来自 `02-设定文档/世界观.md`）
- 故事线状态（来自 `02-设定文档/故事线状态.md`）
- 前5章正文（用于交叉验证）

> ⚠️ **第 1 章特殊处理**：无前文章节可比对时，跳过：前文事件交叉验证（§2.3）、时间线交叉验证中的「日期倒退检查」和「跨章时间跳转检查」。仅做独立审查（OOC、违禁词、基本质量），报告中标注「第 1 章 — 无前文可比对」。

---

## 一、OOC检测算法（人物对话语气 vs 人物卡性格匹配）

### 1.1 人物卡对话风格特征向量（从 `## 对话风格` 字段提取）
| 维度 | 取值 | 权重 |
|------|------|------|
| 正式度 | 粗俗(-2) / 随意(-1) / 中性(0) / 正式(+1) / 文雅(+2) | ×1.0 |
| 攻击性 | 温和(-2) ~ 激进(+2) | ×1.0 |
| 话量 | 寡言(-2) / 简练(-1) / 正常(0) / 话多(+1) / 啰嗦(+2) | ×0.8 |
| 情绪化 | 理性(-2) ~ 激动(+2) | ×0.5 |
| 口头禅 | 存在(0.3) / 缺失(0) | ×1.5 |
| 习惯用词 | 匹配(0.3) / 不匹配(-0.5) | ×1.2 |

### 1.2 匹配算法（对本章每个有台词的角色，逐句对话做同样提取）
```
OOC_score = Σ(weightᵢ × |chapter_featureᵢ - card_featureᵢ| / 4)
          + 口头禅惩罚(口头禅出现次数 < 人物卡设定一半 → +0.3)
          + 用语风格惩罚(逐句判断不符合人物卡「对话风格」的比例 > 30% → +0.5)
```

### 1.3 判断阈值
| OOC_score | 级别 | 处理 |
|-----------|------|------|
| 0 — 0.3 | ✅ 正常 | 不报 |
| 0.3 — 0.6 | ⚠️ 轻度OOC | 二级问题，标注「建议检查」，不阻塞 |
| 0.6 — 1.0 | 🔴 中度OOC | 一级问题，标记「建议修改」，阻塞通过 |
| > 1.0 | 🚨 严重OOC | 一级问题，必须修改 |

### 1.4 行为逻辑一致性检查（任一命中即标记 OOC）
- 冷酷型角色突然流泪（除非有前文情绪铺垫）
- 弱角色正面硬刚强敌且无合理策略（除非人物卡标注「冲动型」）
- 聪明型角色犯低级错误且无前文伏笔
- 恋爱线角色突然对第三者产生强烈好感（情感变化必须跨 ≥3 章铺垫）

---

## 一点五、人物一致性检查

### 1.5.1 核心规则
> **杜绝代理擅自创造角色。** 正文中出现的每一个有名字的角色，必须在人物库中有对应注册。

**角色分级体系**：
| 角色级别 | 定义 | 注册要求 |
|---------|------|---------|
| **核心角色** | 有完整剧情线、≥5句台词、影响主线 | 必须有完整人物卡（≥12字段） |
| **次要角色** | 有一定剧情参与度、3-4句台词 | 必须有完整人物卡或简易卡 |
| **路人级角色** | 有名有姓但仅出场1-2句台词/1-2段描写 | ① 人物总表注册一行，或 ② **简易卡**（≥6字段） |

**简易卡 6 字段**：姓名 / 性别 / 年龄（大致段）/ 身份 / 出场场景 / 对话风格（一句话）。模板见 `templates/人物简易卡模板.md`，创作流程见 `novel-character` §七。

### 1.5.2 检测流程
```
输入: 本章正文 + 人物库全部人物卡（含简易卡）+ 人物总表
步骤: ① 提取正文所有出现的人名（对话提及、旁白提及，首见去重）
      ② 提取人物库已注册角色名（文件名/「姓名」字段/人物总表条目）
      ③ 逐个比对，未注册者按级别判定是否达标
```
去重规则：通用称谓（路人、老者、小二、士兵、守卫、侍女等）不算角色名；「师父/师兄」等称号若指代已注册角色不算未注册，若指代独立有台词/行动的角色则需考虑注册。路人级判定：① 有名有姓（非通用称谓）② 台词/动作 ≤2 句 ③ 不推动主线（氛围/功能性出场）。
简易卡验证：字段 6-8 个为简易卡，>8 为完整卡；路人级有简易卡/完整卡/总表一行 → ✅；两者皆无 → ⚠️ 二级「未注册角色(路人级)」。

### 1.5.3 判断阈值
| 检测结果 | 级别 | 处理 |
|---------|------|------|
| 全部角色均已注册 | ✅ 通过 | 不报 |
| 路人级未注册（无总表无简易卡） | ⚠️ 二级 | 补总表一行 / 建简易卡 / 改通用称谓 |
| 1-2 个非路人级未注册（仅1-2句台词） | ⚠️ 二级 | 补注册，或改通用称谓 |
| ≥3 个未注册（任何级别） | 🔴 一级 | 阻塞，回 novel-character / novel-new-book 补卡再审 |
| 1 个未注册但有紧密剧情互动（≥5句/独立行动线/影响主线） | 🔴 一级 | 阻塞，核心角色不能无人物卡 |

### 1.5.4 输出格式（追加在「五、故意错别字区分」之后）
```markdown
### 六、人物一致性
| 序号 | 角色名 | 首次出现位置 | 角色级别 | 人物库状态 | 剧情参与度 | 处理建议 |
|------|--------|-------------|---------|-----------|-----------|---------|
| 1 | 张三 | 第5段 | 核心 | ❌ 未注册 | 5句台词 | 🔴一级：补充完整人物卡 |
| 2 | 李四 | 第12段 | 路人级 | ❌ 未注册(路人级) | 1句台词 | ⚠️二级：建简易卡或总表注册 |
| 3 | 王五 | 第20段 | 路人级 | ✅ 简易卡 | 2句台词 | — |
```
无未注册角色时：`✅ 所有角色均已注册（含简易卡 X 张、人物总表条目 Y 条）`
> 💡 角色级别：`核心`/`次要`/`路人级`；人物库状态：`✅ 完整卡`/`✅ 简易卡`/`✅ 人物总表`/`❌ 未注册`/`❌ 未注册(路人级)`。原 OOC 详情顺延为「七」、剧情矛盾检测顺延为「八」。

---

## 二、剧情矛盾检测算法

### 2.1 时间线交叉验证
```
输入: 本章时间标记 + 前5章时间标记
检查: ① 日期倒退（本章时间 ≤ 前一章） ② 同场景时间推进（每1000字 ≥ 5分钟）
      ③ 跨章跳转 >3天必须有过渡句 ④ 多人视角时间同步（同一时间点不同角色状态不冲突）
阈值: 日期倒退 → 一级阻塞；同场景 <1分钟/1000字 → 二级；跨章跳 >3天无过渡 → 二级
```

### 2.2 人物关系交叉验证
**关系级别**：1 陌生人 / 2 认识 / 3 朋友 / 4 亲密（挚友、恋人、师徒）/ 5 至亲（血亲、生死之交）
```
检查: ① 关系级别突变（如「陌生人→夫妻」同一章内） ② 称呼与关系匹配（仇人称兄道弟）
      ③ 权力关系颠倒（下属命令上级，无合理事件铺垫） ④ 死亡角色意外「复活」
阈值: 关系突变 ≥2级 → 一级阻塞；称呼冲突 → 一级阻塞；权力颠倒无铺垫 → 二级；复活无伏笔 → 一级阻塞
```

### 2.3 前文事件交叉验证
```
输入: 本章事件列表 + 故事线状态（含前5章梗概）+ 伏笔追踪表
检查: ① 引用前文未发生的事件（幻觉事件） ② 否定前文已发生事件
      ③ 物品/能力凭空出现（前文未获得，本章直接用） ④ 角色知识不合理
      ⑤ 伏笔回收与铺垫一致（暗示「神秘人」回收成「普通路人」=崩坏）
算法: story_state 摘要做 N-gram overlap（N=5），出现无 overlap 的新事件描述 → 标记；
      伏笔追踪表「回收方式」vs「内容」语义相似度 < 0.3 → 标记崩坏
阈值: 幻觉事件 → 一级；前文否定 → 一级阻塞；凭空获得 → 二级；知识不合理 → 二级；回收崩坏 → 一级
```

---

## 三、违禁词库（番茄平台）

完整词表见 `knowledge/违禁词库.json`（version 3，7 大分类，命中按分类 level 处理：一级=必须修改，二级=影响推荐量）。**审查时逐类检索命中并给出替换建议。** 分类速查：

| 分类（json 键） | 级别 | 一句话说明 |
|------|------|-----------|
| 政治敏感 political | 一级 | 现实政治/领导人/领土/敏感历史 → 架空化（朝廷/皇室/禁军） |
| 色情描写 sexual | 一级 | 敏感部位细节/性暗示/擦边场景 → 一笔带过，仅到牵手拥抱 |
| 暴力血腥 violence | 一级 | 碎尸/内脏/虐杀等过度暴力细节 → 用「击杀」「斩杀」替代 |
| 平台特殊限制 platform_special | 一级 | 真实品牌/地名/人名、未成年恋爱、师生恋、乱伦、自杀吸毒赌博细节 → 不涉及 |
| 系统面板禁用词 system_banned_terms | 一级 | 系统文面板词（宿主、检测到、解锁、阶段等）→ 按书配置面板字段核对 |
| 写作风格 writing_style | 二级 | 书面语/弱动词（然而、此外、充满了、进行了）→ 替换见 novel-draft §1.1 |
| AI签名 ai_signature | 二级 | AI味词汇/句式（值得注意的是、内心深处、时光荏苒）→ 替换见 novel-draft §1.1 |

> ℹ️ 番茄风格禁用词（19条）、禁用句式（novel-draft §1.2）、抽象表达规则均以 `novel-draft` 与 `novel-polish` 词表为唯一维护源，本文件不重复列表。

---

## 四、故意错别字反向检查

### 4.1 故意的（不报）
| 类型 | 示例 | 判断依据 |
|------|------|---------|
| 角色口音/方言 | 「咋地」「啥子」「俺们」 | 匹配人物卡「口头禅」或「出身」字段 |
| 古风用语 | 「本座」「尔等」「便是」 | 匹配世界观设定（古代/仙侠） |
| 网络用语 | 「绝绝子」「栓Q」「YYDS」 | 符合角色年龄/职业设定（现代/年轻角色） |
| 谐音梗 | 「栓Q」「绷不住了」 | 出现在对话中，连续出现 |
| 外号/昵称 | 「狗蛋」「二哈」 | 人物卡/前文已建立 |

### 4.2 真错误要报的
| 类型 | 判断标准 | 阈值 |
|------|---------|------|
| 单一错字 | 拼音输入错误、「在/再」「的/地/得」混淆，且不在对话中 | 1次=二级；同错>3次=一级 |
| 标点混用 | 中英文标点混用，非对话中 | 整章>5处 → 一级 |
| 空格异常 | 中文字间半角空格 | 任一出现 → 二级 |
| 重复字词 | 「他他他」「的的」 | 任一出现 → 一级 |
| 缺字漏字 | 句子明显不通顺 | 每章>2处 → 二级 |
| 人称错乱 | 「他/她」互换，性别不一致（非剧情需要） | 任一出现 → 一级 |

### 4.3 检测算法
```
for 每个句子:
  在对话段内（引号内）:
    - 匹配人物卡口头禅/方言/网络用语/谐音梗 → 跳过
    - 「的/地/得」「在/再」混用 → 视为口语化，交由 OOC（§1）判定；
      若角色为知识分子/高冷型 → 标记为 OOC 问题
  不在对话中（叙述段）:
    - 「的/地/得」「在/再」混用 → 一律真错误，按 §4.2 阈值处理
    - 检查中英文标点混用、基本错字、重复字词正则 r'([\u4e00-\u9fff])\1{2,}'
→ 输出区分「对话内口语变体（由OOC判定）」和「叙述段真错误」两类
```

---

## 五、质量评分量化标准

### 5.1 评分维度与权重
| 维度 | 权重 | 满分 |
|------|------|------|
| 对话自然度 | 20% | 5分 |
| 节奏把控 | 20% | 5分 |
| 钩子吸引力 | 15% | 5分 |
| 信息增量 | 15% | 5分 |
| 文笔流畅度 | 10% | 5分 |
| 番茄平台适配 | 10% | 5分 |
| OOC控制 | 10% | 5分 |

### 5.2 各项评分细则（5→1）
**对话自然度**：5 每角色风格明显不同、与人物卡100%一致、无模板感 ｜ 4 主要角色有区分度、次要略同质 ｜ 3 差异不明显但自然 ｜ 2 多角色语气雷同 ｜ 1 像叙述、缺口语感或严重OOC
**节奏把控**：5 开场300字切入+中段推进+末段高潮+钩子，张弛有度 ｜ 4 框架完整、某段略拖沓（如开场超50字）｜ 3 有明显拖沓/过快段但整体可读 ｜ 2 连续两段节奏问题（如中段无冲突推进）｜ 1 全章平铺直叙或节奏极度混乱
**钩子吸引力**：5 明确悬念/反转/新危机，立刻想看下一章 ｜ 4 有悬念但不够强烈，或老套但有效 ｜ 3 存在但吸引力一般（如「突然……」「就在这时……」）｜ 2 钩子模糊，不清楚下章发生什么 ｜ 1 无钩子或完全无吸引力（如「他不知道未来会怎样」）
**信息增量**：5 推进≥2条信息线（主线+新伏笔+世界观+新角色）｜ 4 推进1条且信息量充足 ｜ 3 推进1条但信息量不足 ｜ 2 少量增量，主要功能是过渡 ｜ 1 纯过渡章，无剧情推进
**文笔流畅度**：5 无错别字、无标点混乱、句式有变化、段落≤5行、无禁用词 ｜ 4 ≤2个二级问题 ｜ 3 3-5个二级或1个一级 ｜ 2 6-10个二级或2-3个一级 ｜ 1 >10个二级或>3个一级
**番茄平台适配**：5 字数2000—2800（目标2350）、对话≥38%、无违禁词/禁用句式、段落≤5行、有效内容达标 ｜ 4 字数偏差≤50字或对话35-39% ｜ 3 偏差50-150字或对话30-34%或≤2个禁用句式 ｜ 2 偏差>1500字或对话<30%或≥3个禁用句式 ｜ 1 字数严重不符或多禁用句式/违禁词命中
**OOC控制**：5 所有角色 OOC_score ≤0.2 ｜ 4 仅1个角色 0.2-0.3 ｜ 3 1个角色 0.3-0.5 或 ≥2个 0.2-0.3 ｜ 2 1个角色>0.5 或 ≥3个 0.3-0.5 ｜ 1 ≥2个角色>0.5

### 5.3 综合评分计算
```
综合分 = 对话×0.20 + 节奏×0.20 + 钩子×0.15 + 信息增量×0.15
       + 文笔×0.10 + 平台适配×0.10 + OOC×0.10
```

### 5.4 综合评级
| 综合分 | 评级 | 含义 |
|--------|------|------|
| 4.5 ~ 5.0 | ⭐⭐⭐⭐⭐ | 可直接发布 |
| 3.5 ~ 4.4 | ⭐⭐⭐⭐ | 建议发布，小修即可 |
| 2.5 ~ 3.4 | ⭐⭐⭐ | 需修改后发布 |
| 1.5 ~ 2.4 | ⭐⭐ | 需大幅修改，建议重写部分段落 |
| 1.0 ~ 1.4 | ⭐ | 建议重写本章 |

---

## 输出格式

```markdown
## 📋 审查报告 — 第 X 章「章节标题」

### 一、总体结论
✅ 通过 / ⚠️ 不通过

### 系统面板合规检查
- 被动原则：无「检测到」「建议」「任务」「预警」「解锁」「第二阶段」
- 结算公式：结算基数 × 系数 × 结算比例（具体值见 `02-设定文档/书配置.md`，±5% 容差）
- 时间约束：结算仅凌晨 00:00
- 出场频率：每章 ≥1 次
- 面板字段：从 `02-设定文档/书配置.md` 的系统面板字段读取，核对一致性

### 问题清单

### 二、质量评分
| 维度 | 得分 | 权重 |
|------|------|------|
| 对话自然度 | ⭐/5 | 20% |
| 节奏把控 | ⭐/5 | 20% |
| 钩子吸引力 | ⭐/5 | 15% |
| 信息增量 | ⭐/5 | 15% |
| 文笔流畅度 | ⭐/5 | 10% |
| 番茄平台适配 | ⭐/5 | 10% |
| OOC控制 | ⭐/5 | 10% |

### 三、问题清单
| 序号 | 级别 | 类型 | 位置 | 问题描述 | 修改建议 |
|------|------|------|------|---------|---------|
| 1 | 🔴一级 | OOC | 第3段 第2句 | 冷傲师尊语气过于轻佻(OOC=0.72) | 将「卧槽」改为人物卡设定的文雅措辞 |
| 2 | ⚠️二级 | 错字 | 第7段 | 「的」应为「地」 | 修改 |

### 四、违禁词/禁用词命中
（列表 或 ✅ 未发现）

### 五、故意错别字区分
- 对话内口语变体（由OOC判定）：N 处
- 叙述段真错误（要报）：N 处

### 六、人物一致性
（见 §1.5.4 格式）

### 七、OOC 详情
| 角色 | OOC_score | 级别 | 具体问题 |
|------|-----------|------|---------|
| XXX | 0.72 | 🔴中度 | 语气偏离人物卡设定... |

### 八、剧情矛盾检测
（列表 或 ✅ 无矛盾）
```

---

## 有效内容双门槛审查（硬性，与字数分开验收）

> 字数达标（2000—2800）不等于审查通过。审查必须把字数达标和有效内容达标分开验收。

### 1. 密度门槛
- 每500字至少发生一次局势变化、信息增量、利益变化或冲突升级
- 连续150字无信息增量或局势变化，标记为疑似死水段（level=2 提示）
- 同一事实原则上单章只陈述一次；同一意象原则上不超过2次

### 2. 爽点兑现门槛
- 爽点或打脸兑现后，数字收益、群众反应、反派损失至少出现2项（三选二）

### 3. 章末钩子门槛
- 纯背影、夜色、看海、灯光或抒情收束不算章末行动钩子

### 4. 注水阻塞
- 命中实质注水（环境凑字、机械动作填充、静态等待、回忆复述、重复确认）判为一级阻塞问题，必须修改

---

## 注意事项
- 不修改正文，只输出审查意见；修改由 novel-polish 子技能执行
- 通过标准：所有一级问题(OOC/剧情矛盾/违禁词/注水)必须为 0
- 二级问题(对话占比/钩子/禁用句式/死水段/重复意象)不阻塞，但记录在报告中
- 综合评分仅供作者参考，不作为自动决策依据

