场景/单章写作 SOP(Phase 2 · 写作中)
核心原则(最严格版)
以"场景"为单位走 SOP,不是以"章"为单位。
一个章可能包含 1-4 个场景。每个场景必须:
- 写完后独立走一次 SOP
- 至少两轮独立 agent review
- 改到没有 P0 / P1 为止(只剩 P2 才算收)
为什么是"场景"而不是"章":
- 一章可能跨多个场景(比如"前铺对话"→"后堂布置"→"走到内堂见人"三个场景)
- 每个场景有独立的时间地点人物状态,bug 也按场景分布
- 场景级 review 能更早 catch 问题,修改成本低得多
激活条件
由 novel-writer-workflow-guide 路由激活,当用户:
- 说"开始写 Ch X" / "继续写下一章" / "这一章怎么写"
- 说"改一下 Ch X" / "Review 一遍" / "agent 再审一次"
- 已经在写作期,提交新章节稿 / 新场景稿
可用的 review agent(本地)
首选:general-purpose agent(Agent 工具默认选项)
- 最通用,可以按三个 prompt 模板塑造成逻辑审 / 风格审 / 终审三种角色
- 每次派一个新 agent 实例,互不串场
- 并行派两个做第一轮(逻辑审 + 风格审),串行派一个做第二轮终审
补充:
Exploreagent:适合"读全书找某条线索是否连贯"这种横向扫描(不是每轮都用,跨章一致性检查时用)- 外部 codex(如果用户机器上有):最强的"独立视角"来源,做最后终审最稳
superpowers:code-reviewer、agent-friendly-review:不适合 novel,跳过
派 agent 的硬规则:
- 第一轮的两个 agent 必须是两个独立实例(两次 Agent 调用,不是同一个 agent 看两遍)
- 第二轮的终审 agent 必须是全新实例(不能让第一轮的 agent 继续看)
- 每次派 agent 时,prompt 里明确说"带这些文件读、按这个模板报告",不要让 agent 自由发挥
- 如果用户本地有 codex 或其他外部 review 工具,第二轮优先用外部(独立视角)
核心流程:场景/单章 8 步 SOP
单位是场景(Scene),不是章(Chapter)。每写完一个场景就走一次 SOP。
一个章可能包含 1-4 个场景,比如:
- 场景 A:前铺对话(15 分钟)
- 场景 B:后堂布置物件(10 分钟)
- 场景 C:走到内堂见女主(20 分钟)
每个场景独立走 SOP。收齐 3 个场景之后,再做一次整章级 review(确认场景间衔接)。
跳任何一步都会在后期翻倍成 bug。
步骤 1:读前 1-2 个场景正文
保持语感、细节、人物状态的连续。这步最容易偷懒省掉、但最致命。
- 用 Read 读前 2-3 章的完整正文(不只是钩子)
- 标记本章开始时人物状态(谁在哪、身上带什么、伤情恢复到什么程度)
- 对齐本章时间点(前一章结束在 X 日 Y 时,本章开始应该衔接)
步骤 2:按钩子 plan 写正文
- 从
大纲.md和钩子与反转.md读本章的核心事件 + 章末钩子 - Plan 是路线,写的时候允许小偏
- 严格遵守
宪法.md的硬约束
步骤 3:写完立即 self-review(机械项)
跑脚本扫描以下项,不靠人工数:
import re
t = open('chapter.md').read()
parts = t.split('\n\n', 2)
body = parts[-1] if len(parts) >= 3 else t
checks = [
('字数', len(re.sub(r'\s','',body))),
('破折号', body.count('——')),
('markdown bold', t.count('**')),
('ASCII 双引号', t.count('"')),
('ASCII 单引号', t.count("'")),
('全角引号配对', t.count('"') == t.count('"')),
('禁用姓氏(如林淮)', t.count('林淮')),
('meta Ch N 引用', bool(re.search(r'Ch\s*\d+', t))),
]
对照 宪法.md 的硬约束锁清单(由 novel-consistency-guards 提供),所有违规必改。
步骤 4:按 self-review 结果自己先修一轮
不要跳这一步。 把机械项和自己能看出的内容问题先改掉。
否则下一步 agent 读的是脏稿,浪费 token,也会让 agent 的注意力被机械项分散。
步骤 5:spawn 并行 agent review(内容项)
这时 agent 读的是你自己修过一轮之后的版本,不是脏稿。
按维度分派两个 agent 并行跑:
Agent 1 · 逻辑审
维度:时间线、道具链、人物状态、跨章冲突、能力越界
prompt 带入:
- 宪法.md 的硬约束清单
- 关键时间锚(上一章结束时间、本章时间)
- 已锁设定(姓氏、能力边界、人物关系)
- 本章正文
- 前 2-3 章的关键细节摘要
Agent 2 · 风格审
维度:句式密度、破折号克制、钩子节奏、对话人物性、全知插话检测
prompt 带入:
- 前几章的风格样本(让它感基线)
- 本章正文
- 宪法.md 的风格原则
两个并行跑。取两份报告的交集(两个都报的多半是真 bug)和并集(各自报的看权重)。
步骤 6:按 P0 / P1 分级修(必须改到 0 P0、0 P1)
P0(必修):硬约束违反 / 时间矛盾 / 道具错位 / 跨章冲突。读者一眼看穿。 P1(必修):逻辑可以圆但略勉强 / 细节不够稳 / 口径不统一。 P2(可忽略):风格偏好 / 字数倾向 / 单字瑕疵。
新的硬红线:场景收口的唯一标准是 P0 和 P1 全部为 0。只要还有任何 P1,就不算收。
Agent 经常把 P2 报成 P0/P1,要自己判断权重。 判断后如果确认是 P2,可以跳过;但如果是真 P1,必须修。
用 Edit 定点替换,不用 Write 覆盖整章。
步骤 7:再派一个独立 agent 做"终审"——修到无 P0/P1 才算收
这一步是关键。 派 agent 的三条硬规则见开头"可用的 review agent"一节。
- 不要让刚才那个 agent 再审一次(它会顺着自己上一轮的思路看)
- 派全新 agent 实例,带当前修订后的版本
- prompt 明确写:"这是刚做过一轮修订的版本,请从零读一遍,找新引入的问题和第一轮可能漏掉的项"
- 如果本地有 codex 或其他外部 review 工具,第二轮终审优先用外部
经常能 catch 到:
- 修订过程中引入的新 bug(改一个字破坏了前后呼应)
- 第一轮 agent 漏掉的项(第一轮它看到全稿问题多就漏了一些小的)
- 跨段重复(修一处加了一句,正好和前面已有的一句语义重复)
判断标准(严格):
- 如果第二轮 agent 报出任何 P0 或 P1,继续修、继续派新 agent 审,不要停
- 每一轮修订后必须派新 agent(不能同一个 agent 连审两次)
- 直到某一轮新派的 agent 报告只剩 P2 或**"无发现"**,这个场景才算收
- 实战记录:一个场景可能需要 2-5 轮 review 才能收干净,正常,不要图快
轮次记录(可选但推荐):
## 场景 A · Review 记录
- Round 1(逻辑审 general-purpose):报 P0×3、P1×5 → 修
- Round 1(风格审 general-purpose 并行):报 P0×1、P1×2 → 修
- Round 2(终审 general-purpose 新实例):报 P1×2(两处新引入) → 修
- Round 3(终审 general-purpose 新实例):报 P1×1(口径不统一) → 修
- Round 4(终审 codex 外部):无发现 ✓
步骤 8:修完再跑一次机械扫描
防止修订过程中引入新问题:
- 改字时可能手抖加了破折号
- 复制粘贴可能带入 ASCII 引号
- 新段落意外出现 markdown bold
- 修时序时可能引入新的 meta "Ch N"
跑一次步骤 3 的 Python 脚本,全过才算收。
三个 review prompt 模板
模板 1 · 逻辑审(第一轮 agent 1)
你是严格的网络小说责编。检查本章的逻辑、时间线、道具链、跨章连贯性。
**必读**:
- /path/to/chapters/N.md(本章)
- /path/to/chapters/(N-1).md 和 /path/to/chapters/(N-2).md(前两章,核对连贯)
- /path/to/宪法.md(硬约束)
**重点扫描**:
1. 时间线(本章时间是否衔接前一章 / 内部时间跨度是否合理)
2. 道具链(每件关键物件的位置、状态、是否和前章冲突)
3. 人物状态(伤情、位置、对他人的知晓程度)
4. 能力边界(是否越过宪法定义的金手指边界)
5. 跨章冲突(是否和前文锁定的设定冲突)
**硬约束锁**:
- 主角(如"苏淮")始终姓苏
- 无超自然
- 无 meta "Ch N" 引用
- 中文全角引号
- 无 markdown bold
- 破折号每章 ≤ 7
按 P0 / P1 / P2 分级,每条给行号 + 建议改法。400 字内。
不要重述剧情、不要赞美、不要挑风格问题(那是另一个 agent 的事)。
模板 2 · 风格审(第一轮 agent 2)
你是网络小说频道风控编辑。检查本章的风格、句式、节奏、钩子。
**必读**:
- /path/to/chapters/N.md(本章)
- /path/to/chapters/(N-3).md 到 /path/to/chapters/(N-1).md(前三章作风格基线)
**重点扫描**:
1. 句式密度(是否和前几章一致,有没有突然变散文诗或变网文口水)
2. 破折号使用(数一数本章用了几个,超过 7 必修)
3. 钩子节奏(开头 / 中段 / 结尾的钩子强度是否撑起本章)
4. 对话人物性(每个人说话是否符合人物卡)
5. 全知插话检测(有没有"作者口吻"入侵主角视角)
6. 重复用词密集段落
按 P0 / P1 / P2 分级。400 字内。
不要重述剧情,不要挑逻辑问题(那是另一个 agent 的事)。
模板 3 · 终审(第二轮独立 agent)
你是严格的网络小说责编。本章刚做过一轮修订。
**你的任务**:
从零读修订后的版本,专门找:
1. **新引入的问题**——修订过程中可能破坏了哪些原本对的地方
2. **第一轮可能漏掉的项**——上一个 agent 没看到的细节
**必读**:
- /path/to/chapters/N.md(修订后的本章)
- /path/to/宪法.md
**重点扫查**:
- 修订后的段落和未修订的段落之间是否自洽
- 修订是否造成重复表达
- 修订是否破坏了前后呼应
- 所有硬约束项是否仍然满足
- 是否有修订过程中的误操作(多余字、漏字、错别字)
按 P0 / P1 / P2 分级。300 字内。
如果全部通过,明确说"无发现"。
与姐妹 skill 的关系
- 输入来源:
novel-framework的大纲、钩子矩阵、人物卡、世界观novel-ideation的 constitution
- 主动调用:
- 每一步都引用
novel-consistency-guards的硬约束清单和扫描脚本
- 每一步都引用
- 输出交付:
- 写完的单章稿,进入
chapters/目录 - 修订日志(可选),记录两轮 review 发现的问题
- 写完的单章稿,进入
常见陷阱
跳过步骤 1(读前章)
"我记得主角上一章干了什么"——不行。记忆不可靠。必须 Read。漏读一次,本章就可能写出道具位置错位、时间对不上、人物状态不连贯的问题。
跳过步骤 4(自己先修)
"直接让 agent 看吧"——不行。agent 看脏稿会被机械项分散注意力,而且 agent 报告里会大量 P0 其实是你自己都能修的。浪费 token + 浪费时间。
只做一轮 review
"一轮就够了"——不够。修订过程本身会引入新 bug。必须第二轮独立 agent 审修订后的版本。
盲从 agent 报告
"agent 说 P0 那就改"——不行。agent 经常把风格偏好报成 P0。要自己判断。改前问自己:这是真 bug 还是风格选择?
修订用 Write 整章覆盖
"反正要改很多,覆盖省事"——危险。整章覆盖容易误伤未修订段落(copy-paste 时漏、格式变化、破折号意外增减)。用 Edit 定点替换。
完成标准(这个场景可以收)
硬性条件(全部满足才算收):
- 机械扫描全部通过(字数/破折号/引号/markdown/姓氏/meta 都过)
- 最后一轮独立 agent review 报告 0 P0 + 0 P1
- 最后一轮 agent 必须是新实例(不是修订前看过的那个)
- review 轮次记录齐全(至少 2 轮,必要时 3-5 轮)
软性条件(偏离要有明确理由):
- 字数在目标范围内
- 本场景钩子强度达到预期
如果场景分多个:
- 每个场景独立走 SOP 收到 0 P0/P1
- 整章场景都收齐后,再做一次章级 review,重点查场景间衔接(时间、人物状态、道具位置)
- 章级 review 也要 0 P0/P1 才算整章收
下一章 / 切换到收口
- 写下一章:重新走这 8 步
- 初稿全部完成:主 skill 会问是否切换到
novel-finalization