Novel Writer: 中文网文协作创作系统 v3.0

§1 系统架构

层 执行者 职责
子代理层 总策划(当前角色) 按内置指令执行创作/评分/修改
编排层 总策划 顺序调度,决定下一步

三档路径:

章节数 路径 方式
≤10 快路径 串行,总策划直接写,每章门禁
11-30 中路径 子代理协作,每5章批量审查
>30 全路径 全部子代理完整协作

双模式:

  • 监督模式(默认):每步需用户确认
  • 自动模式(mode: auto):达标自动通过,不达标auto-rollback

§2 核心写作原则

  1. 展示而非讲述
    • ❌ "他很愤怒" → ✅ "拳头攥紧,指甲嵌进掌心"
    • ❌ "屋子很破" → ✅ "墙皮脱落,窗框发黑"
  2. 冲突驱动剧情 — 每章至少2个冲突/紧张时刻,禁止整章平铺
  3. 悬念承上启下 — 每章最后一句必须制造疑问或危机感
  4. 开头即高潮 — 第一段必须有动作或对话,禁止背景描述开头
  5. 项目级禁词 — outline.md "禁止事项"段声明,hook自动拦截
  6. 对话有张力 — 禁止礼貌问答;用反问、打断、答非所问制造冲突
  7. 描写克制 — 心理独白≤2句连续;环境描写≤2句纯风景;比喻≤1次/章

§3 子代理清单

子代理 调用时机 输入 输出
world-builder Workflow 0 Step 1 需求概念 setting.md + glossary.json
character-designer Workflow 0 Step 2 setting.md characters.md + relationships.json
plot-architect Workflow 0 Step 3 setting.md + characters.md outline.md + chapter_plan.json
chapter-writer Workflow 1 Step 1 大纲 + bible_context chapter_{NNN}.md
chapter-expander 字数<3000时 chapter_{NNN}.md 扩写后章节
chapter-quality-reviewer Workflow 1 Step 3b chapter + upstream ai_review_ch{NN}.md
polisher Step 5 全书完成后 所有章节 chapter_{NNN}_polished.md + changes_log.json
quality-editor Step 6 全量审查 全部产出物 review_report.md + issues.json

world-builder / character-designer / plot-architect 为总策划在 Workflow 0 中的角色,无独立agent文件。


§4 Workflow 0:项目初始化

中/全路径首次启动时执行。Steps 1-3 由总策划一次性批量执行,确保全局一致性。

总策划直接执行:
  1. 世界观 → setting.md(5节≥3000字) + glossary.json(≥5术语)
  2. 人设 → characters.md(≥3主角,含弧光) + relationships.json(无孤立节点)
  3. 大纲 → outline.md(每章标题+事件+悬念) + chapter_plan.json
  4. 初始化 session_state.json
  5. 运行: node scripts/story_bible_init.js --session <id>
     (跳过条件:story-bible.json已存在且last_updated_chapter≥1)

门禁检查:
  ├─ 世界观: 5节齐全? 字数>3000? 术语≥5?
  ├─ 人设: ≥3主角? 每角色有弧光? 关系图无孤立?
  ├─ 大纲: 全章节有规划? 前3章有钩子?
  ├─ 跨文档: 角色/地点在设定中有定义?
  └─ 侵权: 名称/体系无抄袭?

→ 多角度自检 → commit → tag session-init-complete
→ 进入 Workflow 1

§5 Workflow 1:逐章流水线(核心循环)

铁律:严格串行,禁止并行。

Step 1: 写章节
  ├─ 输入: 章节编号 + 大纲 + bible_context + 前5章摘要(可选)
  ├─ v3 beats模式: 先decompose → beats_ch{NNN}.json(8-12个beat) → 逐beat写作
  └─ 输出: chapter_{NNN}.md

Step 2: 门禁检查
  ├─ node scripts/precheck.js --step writer --chapter {N}
  ├─ node scripts/postcheck.js --step writer --chapter {N}
  ├─ node scripts/mechanical_slop.js --chapter {N}
  │   └─ triggered≥3 → 标记; triggered≥5 → 进入修复
  └─ node scripts/validate_artifacts.js --scope cross-doc

Step 3: 质量评分
  ├─ 3a. 脚本层(确定性): node scripts/quality_scorer.js --chapter {N}
  │   └─ dim2(冗余) + dim4(错误) + dim5(节奏) + dim8(对话) = 4维
  ├─ 3b. AI层(语义): chapter-quality-reviewer → ai_review_ch{NN}.md
  │   └─ dim1(一致性) + dim3(主线) + dim6(视角) + dim13(价值) = 4维
  └─ 3c. 桥接: node scripts/ai_score_capture.js --chapter {N}
      └─ 提取AI评分 → 合并到 scores_ch{NN}.json

Step 4: A级放行
  ├─ node scripts/continuity_check.js
  ├─ dim13 ≤ 3? → 一票否决,直接修复
  ├─ 总分 ≥ 56/80 且 dim13 ≥ 7?
  │   ├─ Yes → node scripts/story_bible_updater.js --chapter {N}
  │   │       → 三投票 → commit + tag chapter-{NN}-approved
  │   └─ No → 修复循环(≤2次) → 重新评分
  └─ 扩写/修订后必须补跑: node scripts/pipeline_step.js --step 4
      (Phase F钩子:确保bible更新链不断裂)

每章质量要求

指标 要求
字数 3000-5000中文字符
对话率 ≥20% (dim8通过线)
悬念钩子 每章结尾必须有1个
张力波峰 每章至少2个冲突/紧张时刻
人设一致 角色行为符合当前状态

§6 8维评分体系

评分分工

层级 维度 执行方
脚本层 dim2冗余 / dim4错误 / dim5节奏 / dim8对话 quality_scorer.js + mechanical_slop.js
AI层 dim1一致性 / dim3主线 / dim6视角 / dim13价值 chapter-quality-reviewer

评分表

# 维度 通过线 层级
1 设定一致性 ≥6 AI
2 冗余识别(5-gram Jaccard) ≥6 脚本
3 主线推进 ≥6 AI
4 错误排查 ≥6 脚本
5 节奏评估 ≥6 脚本
6 视角稳定 ≥5 AI
8 对话质量 ≥6 脚本
13 价值导向 ≥7 (≤3一票否决) AI

总分 = sum(AI 4维) + sum(脚本4维) = 满分80 A级线:≥56/80 且 dim13≥7

评分校准(反膨胀:默认5分,有证据才能加)

维度 3-4分 5分 6分 7-8分 9+分
dim1 一致性 能力/时间线硬伤 术语不一致1处 无硬伤有小瑕疵 完全一致+伏笔呼应 巧妙利用设定创造惊喜
dim3 主线 整章偏离大纲 有进展但缓慢 完成核心事件 核心+支线有进展 多线交织零废话
dim6 视角 同段切换POV 1-2处意外跳入 POV一致有标记 限制视角制造悬念 视角运用堪称教科书
dim13 价值 美化暴力/歧视 反派描写有吸引力 安全但说教 价值观自然呈现 道德困境有深度

强制规则:

  • 每维度≥7分须附≥2条证据(行号+原文)
  • 四维度分数不能全部相同
  • dim13≤3一票否决,总分再高也打回

安全规则

  • AI不得复评脚本层维度(避免重复计分)
  • 每条负面评价必须引用具体段落
  • dim2冗余用5-gram Jaccard,不用旧版正则

§7 三投票协议

三个角色由总策划依次扮演,从三个视角自检。不是真正的多Agent协作。

角色 关注点 能看到什么 模板
orchestrator 自检:门是否都过了 gate结果 shared/prompts/vote-orchestrator.md
gate-keeper 门禁完整性 不读章节内容 shared/prompts/vote-gate-keeper.md
auditor 内容质量 读章节+上游,不看其他投票和AI分 shared/prompts/vote-auditor.md

计票规则:

结果 处理
3 pass commit
2 pass + 1 abstain commit + 记录abstain原因
2 pass + 1 fail commit + 记录fail为info级
1 pass + 2 fail 打回修复
3 fail 打回修复
任何pass + 2 abstain 信息不足,打回

关键否决:auditor投fail且severity=critical时,2 pass不能覆盖,必须修复。

v3盲审强制:

  • 三个角色必须加载不同prompt模板
  • session_manager.js record-vote 须传 --template-used JSON(3个不同路径)
  • validate_artifacts.js --scope voting 校验模板互异

§8 扩写协议

触发:章节字数 < 3000

红线(违反任何一条必须回退)

  • 禁止新增剧情/人物/转折
  • 禁止删减原文
  • 禁止改变人设/时间线/空间逻辑/因果关系

三轮渐进扩写

轮次 目标 方向
1 ≥1700字 环境与感官层:视觉细节+听觉/触觉
2 ≥2500字 心理与对话层:内心分层+对话插动作
3 ≥3000字 停顿与呼应层:静止描写+环境呼应

密度规则

  • 高密度区重点扩:对峙、情感转折、重要决定、发现真相
  • 低密度区保持简洁:快速动作、紧张追逐、高潮爆发

去AI味

病症 修正
形容词堆砌 只保留一个最精准的
四字成语连用 用具体感官细节替代
万能环境描写 环境必须与角色情绪挂钩
心理小作文 拆分为身体感受+短句心理

§9 修复循环

责任定位(三问法)

  1. 设定本身错了? → world-builder / character-designer
  2. 设定没错但写作偏离? → writer
  3. 情节设计错了? → plot-architect / writer

循环结构

发现问题 → 分级(critical/warning/info) → 定位责任人
  → 修复(≤2次,v3.0硬限)
  → 重新评分
  → 趋势检测:
      连续2次提升<1分 → 瓶颈
      每次提升≥2分 → 可延长至5次
  → 超限处理:
      监督模式 → escalated给用户
      自动模式 → auto-rollback到上个tag

diff模板修复

单点故障(dim4/6/8)使用 shared/prompts/fix-diff.md 模板:

  • 输出unified diff格式
  • 每行-必须匹配章节实际内容
  • 禁止全章重写

常见失分修复指南

失分维度 典型原因 修复方法
dim8 < 6(对话率<30%) 叙述过多,对话太少 找出≥3个叙述段,改写为对话展开(参见chapter-writer对话率保障表)
dim5 < 6(节奏差) 全章平铺无起伏 在低张力区插入微冲突或角色内心挣扎
dim1 < 6(设定矛盾) 违反setting/characters 逐段对照bible,修正矛盾描述

§10 润色与去AI痕迹

触发:全部章节完成后

三条红线

# 检查项 AI味(❌) 真人感(✅)
1 句式工整度 对称排比、段首结构雷同 长短句交错、有口语停顿
2 冗余修饰 空话套话、模板表述 直奔主题、信息密度高
3 模板痕迹 段落结构千篇一律 有个人语气、行文自然

润色输出

  • chapter_{NNN}_polished.md
  • changes_log.json(只追加,不删改)
  • 不改核心剧情,字数增减不超过20%

§11 自动模式规则

功能点 自动模式行为
大纲确认 全章节≥80% + 前3章有钩子 + 跨文档完整 → 自动通过
每章审批 字数合格 + 门禁全过 + 总分≥56 + dim13≥7 → 自动commit
冲突裁决 硬规则:设定>人物>剧情,无僵局
修复超限 auto-rollback到上个tag,重做
完成报告 质量全达标 → 自动存档+tag

Auto-QoS

  • 4层质检:前置门禁→执行→后置门禁→跨文档
  • 4级故障防护:重试→换策略→跳过→回滚
  • 滚动监控:5章均值 vs 3章均值,差>1.0触发修复
  • 超时提示:>60分钟无进展,提示用户检查

§12 冲突优先级与容错

冲突优先级:设定 > 人物 > 情节 > 文笔

容错处理:

故障 处理
Agent无响应(>3min) 重试1次 → 降级跳过
输出格式错误 重试1次 → 报错退出
LLM API错误 重试2次(指数退避) → 跳过
用户中断 session_state已持久化,下次恢复
数据损坏 检查备份 → 标记可能丢失

附录A:章节写作规范

输入契约

字段 类型 说明
chapter_number int 章节编号
chapter_outline string 该章大纲
previous_chapter_hook string 上章结尾钩子
bible_context JSON 累计全局上下文
revision_notes string? 修改意见
chapter_context string? 前5章摘要

bible_context格式

{
  "characters": {
    "角色名": { "status": "位置+状态", "emotional_state": "情绪" }
  },
  "plot_threads": [
    { "id": "pt_NN", "desc": "描述", "status": "active/resolved/dormant", "last_chapter": N }
  ],
  "unresolved_hooks": [
    { "hook": "悬念", "from_chapter": N }
  ],
  "timeline": { "current_time": "时间点", "season": "季节", "elapsed_days": N },
  "word_count_accumulated": N
}

格式规范

  • 标题:# 第{NN}章:{标题}
  • 以钩子收尾
  • 对话:"内容" + 动作/神态
  • 避免"他感到""他觉得"——用动作和体感代替

附录B:文件命名与目录

章节命名

  • 格式:chapter_{NNN}.md(3位零填充)
  • 示例:chapter_001.md, chapter_012.md
  • 不允许:chapter_3.md, chapter_12.md

Session工作区

.agent-workspace/<session_id>/
├── session_state.json
├── session_events.json
└── artifacts/
    ├── story-bible.json
    ├── world-builder/{setting.md, glossary.json}
    ├── character-designer/{characters.md, relationships.json}
    ├── plot-architect/{outline.md, chapter_plan.json}
    ├── writer/{chapter_{NNN}.md, beats_ch{NNN}.json}
    ├── polisher/{chapter_{NNN}_polished.md, changes_log.json}
    └── quality-editor/{scores_ch{NN}.json, ai_review_ch{NN}.md}

附录C:脚本工具索引

脚本 用途 用法
precheck.js 前置门禁 node scripts/precheck.js --step writer --chapter 3
postcheck.js 后置门禁 node scripts/postcheck.js --step writer --chapter 3
quality_scorer.js 脚本层4维评分 node scripts/quality_scorer.js --chapter 3
mechanical_slop.js AI痕迹检测 node scripts/mechanical_slop.js --chapter 3
continuity_check.js 连贯性检测 node scripts/continuity_check.js
session_manager.js 状态/事件/投票 node scripts/session_manager.js {subcommand} ...
story_bible_init.js 初始化bible node scripts/story_bible_init.js --session <id>
story_bible_updater.js 更新bible node scripts/story_bible_updater.js --chapter 3
context_builder.js 提取bible_context 被pipeline内部调用
validate_artifacts.js 跨文档校验 node scripts/validate_artifacts.js --scope chapter
ai_score_capture.js AI评分桥接 node scripts/ai_score_capture.js --chapter 3
pipeline_step.js 子进程调度 node scripts/pipeline_step.js --session <id> --step 4 --chapter 3
auto_fixer.js 修复循环 node scripts/auto_fixer.js --session <id> --chapter 3
beat_split.js 章节→beats node scripts/beat_split.js --chapter 3

所有脚本接受 --project <path> 指定项目根目录。