Skill · 小说并行创作器(Novel Parallel Writer)v5.5.1
> 定位:用户授权后,本工具自动执行长篇小说续写 / 系列创作的并行创作流水线
> 来源 SOP:docs/SOP_<项目名>.md(v3.0)
> 触发词:「写小说」「续写」「帮我写 XX 章」「长篇创作」「批量写章节」
v5.5.1 修复:修复 nwp/review/_shared_patterns.py 中 AI_REPLACEMENTS 3 处非 raw 字符串含 \s 触发 SyntaxWarning(改为 raw 字符串,替换行为不变)
v5.2.0 优化(来源:《雾中山志》AIGC去AI化4轮优化复盘 2026-08-25):①ai_patterns.py 新增5类AI特征词库(转折句式_不是A是B / 三连排比 / 格言点题 / 精确数字 / 清单体)+ 结构级检测(比喻同质化、固定格式引导词)+ 人工锚点识别;②新增 nwp/review/report_driven.py 检测报告驱动优化闭环(解析朱雀报告 → 按占比×AIGC排序 → 10条改写自检清单);③新增 Phase 2.9.5「AIGC检测驱动优化」环节;④子Agent模板新增「AI腔规避约束」;⑤修复 quick.py bug;⑥新增复盘文档 docs/复盘_AIGC去AI化优化_2026-08-25.md
v5.0.1 优化:①新增 nwp/review/quick.py 快速检查集(字数+AI味+POV三项,~2min),Phase 2.9 快速版直接调用;②新增断点续传设计章 + nwp resume CLI占位(.nwp/state.json 结构设计,等先生大型项目中断场景激活);③review/init.py 导出 quick_check / quick_report
v5.0.0 新增:nwp/review/ 审查模块独立包(ai_patterns / dialogue / fixer / foreshadow / pov_check / quality / rewriter / scoring / thresholds · 九模块);nwp/core/context.py 新增上下文管理
v4.4.0 优化(来源:元宝核验·先生2026-08-12确认):①删除冗余 scripts/ 目录,统一走 nwp/ 包;②Phase 2.9 逐章审核默认快速版(~2min),批量完成后使用完整版(10-15min);③SKILL.md 中 scripts/*.py 引用全量替换为 nwp.* 模块路径;④新增 gate_mode 配置(strict/auto/off);⑤新增角色名拼写一致性校验模块(nwp.core.embed.validate_character_names)
v4.3.0 新增:子Agent 完成验证门控(强制):派发即生效「逐章 python 统计 CJK 真实字数,落目标 ±10% 才回复完成,回复附真实字数;主会话独立复检,虚报/未改回退重派」;来源:2026-08-12《地球Online》卷一全量重写+返修复盘 E1–E7
> v4.2.0 新增:字数预估校准机制(来自2026-08-12《血契倒计时》字数偏低复盘:CJK体感2×偏差根因+超写/beat清单/正则计数/落盘自检/校准触发回路);创作禁区扩展覆盖小节自指;小节制格式(不分章以小节区分)正式支持;落盘格式优化(标题行仅「标题」、文末禁「钩子/预告」元标注块)
> v4.1.0 新增:可修改自行创建原文;泛化抓取(先生授权后联网搜索URL,无需手动提供);章节标题字数不限(贴合核心内容即可)
> v4.0.1 新增:通用注释规范(术语/代码统一注释;典故仅标生僻;首次出现触发;annotation_style 锁定)
v4.0.0 新增:章节标题生成函数(动词+名词,2-4字);批次参数可配置(批次大小/并发上限);子Agent任务模板更新
v4.0.0 新增:Phase 1.5 轻量路径(先生「跳过/快速」时启用,快速确认≤3轮)
v3.9.0 新增·v4.4.0 优化:阅读核验模块 Phase 2.9(读者+编辑双角度,先读者后编辑,量化阈值阻断机制;逐章审核默认快速版,批量完成后使用完整版)
v3.8.0 新增:字数弹性机制(自适应膨胀/压缩 + 重新划分章节 + 自动平衡 + 其他更优解),先生确认后执行
v3.7.0 新增:精准修改模块(Phase 2.7 单章定点修复 + Phase 2.8 全卷同类问题批量清理),来源:2026-08-07《归零秘境》章节自指清理实战
v3.6.0 新增:卷级章节规划(Phase 1.6)+ 四层一致性校验(Phase 2.6)+ 配角消失预警 + 伏笔分级预警 + ERRORS.md 失败记录
> v3.5.1 新增:补齐 TRACE 参考标准(FAQ / 反模式 / 能力边界 / 快速入门 / 隐私说明)
> v3.5.0 新增:模块化重构,新建 nwp/ 包(core/extract + core/embed + crawler/ + cli.py)
> v3.2.0 新增:数据输入层(上传原文自动提取)+ 三层锚定一致性约束
快速入门
场景 A:有原文续写(推荐)
用户:帮我续写《盗墓笔记》后续,原文我上传
工具:自动提取章节/人物/文风 → Phase 1.5 人格精炼 → 您确认角色卡/世界观 → 并行续写 → 双版本交付
场景 B:从0创作
用户:帮我写一部修仙小说,世界观我口述
工具:Phase 1.5 您口述设定 → 自动建模角色卡/世界观 → 并行创作 → 双版本交付
场景 C:网络搜索泛化抓取
用户:帮我找《XX小说》的原文
工具:联网搜索 → 找到目标URL → BFS自动发现章节 → 批量抓取 → 清洗 → 合并 → 进入场景 A 流程
可复制开场白
- 「帮我续写《十日终焉》后日谈,原文我上传」
- 「我想创作一部悬疑小说,世界观我口述,你帮我建模」
- 「帮我找《XX小说》的原文续写」
能力边界
✅ 擅长(典型场景)
- 有原文续写:用户上传原文或提供 URL → 自动提取 → 人格精炼 → 并行续写
- 从0创作长篇:用户口述世界观/角色 → Phase 1.5 手动建模 → 并行创作
- 多角色复杂叙事:人格精炼支持多角色档案,子Agent统一注入
- 系列化创作:项目记忆复用(同 IP 多部曲)
- 文风一致性保障:三层校验(世界观/大纲/文风嵌入)
- 自行创建原文的修改:可对NPW自行创建的章节进行修改(不限次数)
⚠️ 需先生授权/配合
- 泛化抓取:先生授权后自动联网搜索目标小说,无需手动提供URL;版权责任由先生承担
- embedding 校验:需安装 sentence-transformers(否则降级到统计指标)
- 迅雷下载桥接:需安装 thunder_bridge 依赖
- 批量抓取:建议启用 checkpoint 断点续传(避免中途失败重跑)
❌ 超范围
- 多语言创作:仅中文场景
- 实时协作编辑:不支持多人同时编辑同一项目
- 自动化发布:仅生成文档并存于本地工作区,绝不自动发布到任何平台(📌 2026-08-12 指令锁定)
核心能力
- 启动确认(阶段0):用户指令 → 确认篇幅/审核方式/授权模式/交付格式
- 架构搭建(阶段1):自动建目录结构、写分析文件、制定续写框架
- 【内置融合】数据输入层(阶段1.2):用户上传原文 或 联网自动搜索 → BFS 自动发现章节 → 批量抓取 → 自动提取章节/人物/文风 → 低置信度确认 → 生成分析文件
- 【核心】人格精炼(阶段1.5):提取/分析/固化管理书中核心角色性格、语言、行为模式 + 自动抽硬规则 →
world_view.yaml - 并行创作(阶段2):主会话产出关键奇数章 + 5个子Agent同步批量产出(注入人物卡/伏笔/世界观)
- 【v3.6.0 升级】四层一致性校验(阶段2.6):世界观YAML硬规则 + 大纲节点偏离 + 文风指标对比 + 九维度章节审查(快速/完整两档)
- 【v3.7.0 新增】精准修改(阶段2.7):单章定点修复,扫描定位 → 例外判定 → 先生确认 → 修复 → 回扫验证
- 【v3.7.0 新增】批量修改(阶段2.8):全卷同类问题批量清理,扫描分类 → 先生确认例外 → 批量修复 → 零残留验证
- 双版本交付(阶段3):强制同时生成 .docx + .txt,桌面COPY交付
- 三合一归档(阶段4):CLOSURE.md + 双版本桌面备份 + 内部记忆更新 + 项目记忆文件复用
执行流程
Phase 0 · 启动确认
用户下达创作指令后,快速确认:
| 问题 | 选项(默认加粗) |
|---|---|
| 篇幅 | 短篇 / 中篇 / 长篇 |
| 审核方式 | 逐章审核 / 批量产出 |
| 授权模式 | 独立完成 / 用户提供方向 / 用户全程把控 |
| 交付格式 | docx + txt 双版本 / 其他 |
| 原文来源 | 用户上传文件 / 无原文(从0创作) / 联网自动搜索(授权后执行) |
> 若用户未明确 → 按中篇 + 独立完成 + 双版本交付处理
Phase 1 · 架构搭建
自动创建项目目录:
projects/<项目名>/
├── README.md # 项目总览(用户可看)
├── 分析/ # 参考资料(数据输入层产出)
│ ├── 01_原作大纲.md
│ ├── 02_行文风格.md
│ ├── 03_角色档案.md # ← 人格精炼产出位置
│ ├── world_view.yaml # ← v3.2.0 世界观硬规则(自动抽+用户确认)
│ ├── foreshadow.json # ← v3.2.0 伏笔追踪(v3.6.0 扩展:characters配角追踪 + alert_level分级预警)
│ ├── errors.md # ← v3.6.0 新增:失败记录(角色穿帮/设定矛盾/节奏失控等)
│ └── 提取_*.json # ← v3.2.0 数据输入层原始提取
├── 续写/ # 正文产出
│ └── <卷名>/
│ └── Chapter_XX_标题.md
└── 素材/
用户选择方向(A/B/C)后,制定续写框架:
- 卷结构(每卷10章)
- 每卷核心事件
- 悬念链设计
- 结局走向
Phase 1.2 · 数据输入层(v3.4.1 内置融合 · 无需外部依赖 · v4.1.0 泛化抓取)
> 版权安全:先生授权后自动联网搜索目标小说并抓取,版权责任由先生承担。
选项 A:用户上传文件
用户上传原文后,运行提取脚本自动结构化:
python "skills\novel-parallel-writer\scripts\extract.py" "<原文路径>" --out "<项目目录>\分析"
选项 B:联网自动搜索抓取(v4.1.0 泛化 · 先生授权后执行)
先生授权后,自动联网搜索目标小说 → 发现URL → BFS自动发现章节 → 批量抓取 → 清洗 → 合并为 .txt → 进入提取分析。
典型工作流:
先生授权:帮我找《XX小说》的原文
↓
联网搜索(web_search) ← 自动搜索目标小说目录页URL
↓
找到URL → 验证可用性
↓
bfs_scrape(url) ← 自动发现全部章节链接(BFS深度爬取)
↓
batch_scrape(links, output.txt) ← 批量抓取 + 断点续传 + 正文清洗
↓
进入 extract.py 提取
↓
Phase 1.5 人格精炼
内置抓取 API(来自 crawler-assistant v1.6.0):
from crawler_core import bfs_scrape, batch_scrape, scrape, BFSConfig
# BFS 自动发现章节(零手动配置)
config = BFSConfig(max_depth=2, max_total=1000)
result = bfs_scrape('https://example.com/book/1234/', config=config)
links = result['links'] # 去重后的章节 URL 列表
print(f"发现 {len(links)} 个章节,耗时 {result['stats']['elapsed']}s")
# 批量抓取(断点续传 + 正文清洗 + 速率控制)
batch_scrape(
links=links,
output_path='books/小说名_整理版.txt',
checkpoint_path='books/小说名.checkpoint',
header='《小说名》\n作者:XXX\n',
chunk_strategy='by_size',
chunk_size=50,
)
# 返回: {total, success, failed, elapsed, output_size, chunks_count}
# 单页抓取(快速测试)
data = scrape('https://example.com/chapter/1.html')
print(data['title'], data['content'][:100])
版权安全:先生授权抓取 → 版权责任由先生承担。
提取产出(低置信度标记 confidence: low):
| 产出文件 | 内容 | 低置信度触发 |
|---------|------|------------|
| 提取_章节结构.json | 章节索引 + 段落定位 | 章节号断裂 / 非标准标题格式 |
| 提取_人物候选.json | 高频人名候选列表 | 人名与常用词混淆 / 长度异常 |
| 提取_文风指纹.json | 平均句长 / 对话占比 / 修辞密度 / 视角稳定性 | 样本过短(<3章) |
用户确认或修正低置信度条目后,转为正式分析文件(01_原作大纲 / 02_行文风格 / 03_角色档案)。
无原文(从0创作)时跳过本阶段,Phase 1.5 改由用户口述设定。
Phase 1.5 · 人格精炼(核心板块 · v4.0 轻量路径)
> 目的:在正文创作前,对原文核心角色进行性格、语言、行为模式的系统性提炼
> 输出:分析/03_角色档案.md + 分析/world_view.yaml(硬规则),供所有创作Agent统一遵循
路径选择
| 路径 | 触发条件 | 产出 |
|---|---|---|
| 标准路径 | 默认 | 完整角色卡(MBTI/语言风格/对话示例/禁区清单),先生逐条确认 |
| 轻量路径 | 先生明确说「跳过」或「快速」 | 精简版(性格底色1句 + 语言风格1句 + 核心禁区≤3条),先生快速确认(≤3轮对话) |
> ⚠️ 默认走标准路径;仅先生明确指示「跳过/快速」时启用轻量路径
步骤 1:角色扫描
- 读取原文(或用户提供的参考资料),提取所有主要角色
- 识别核心角色(出现频次≥5次)、次要角色(3–4次)、背景角色(1–2次)
步骤 2:人格建模(每个核心角色)
逐个角色填写(基于 templates/character_card.json 模板):
### <角色名>
- **原型/定位**:<在原文中的人物定位>
- **性格底色**:<MBTI或关键词描述,如:INTJ,外冷内热,城府深>
- **核心动机**:<内心驱动力,如:复仇/守护/探索/权力>
- **性格矛盾**:<人物的内在冲突,如:理性与情感的撕裂>
- **行为模式**:<惯常反应,如:危机中先沉默再行动>
- **语言风格**:
- 语气:<如:简洁冷峻/话痨调侃/文绉绉>
- 口癖:<如:口头禅/习惯用词>
- 句式特点:<如:短句为主/爱用比喻/偶尔文雅>
- **对话示例**:
> 「<原文原句>」——场景:<原文场景>
- **肢体语言**:<如:紧张时摸下巴/思考时眯眼>
- **人际关系**:<与谁亲近/与谁对立/边界感>
- **成长弧线**:<角色在本篇中的可能走向>
步骤 3:角色关系矩阵
| 角色A | 角色B | 关系 | 典型互动 |
|---|---|---|---|
| 张起灵 | 吴邪 | 生死之交 | 沉默守护,吴邪话多时偶尔应一声 |
步骤 4:禁区清单 + 世界观硬规则(v3.2.0 增强)
基于人格分析与原文,列出禁止出现的表达 + 不可违背的设定边界,写入 world_view.yaml:
| 角色 | 禁止 | 原因 |
|---|---|---|
| 张起灵 | 大量内心独白 | 原文人设沉默寡言 |
| 吴邪 | 过于冷酷的决策 | 原文人设心软善良 |
world_view.yaml 结构(基于 templates/world_view.yaml):
power_system: <力量体系上限,如:发丘指仅限3次/日>
geography: <地理势力边界>
timeline: <时间线锚点>
hard_rules:
- id: R1
desc: <不可违背的设定,如:青铜门后不可坐实>
severity: blocking # blocking=硬拦截提示 / warn=软提示
步骤 5:角色别名表生成(v4.4.0 新增 · P1-3)
> 目的:为每个角色生成别名表,用于并行创作时子Agent统一书写规范,防止角色名拼写不一致(如「张起灵」vs「张起靈」)。
> 产出:分析/角色别名表.json(Phase 1.5 副产品)
格式:
[
{"name": "张起灵", "aliases": ["小哥", "张宗主", "闷油瓶"]},
{"name": "吴邪", "aliases": ["吴老板", "天真"]}
]
生成规则:
1. 提取原文所有角色名变体(人名/昵称/称号)
2. 确认规范写法(以角色卡 character_name 为准)
3. 填入 aliases(限原文已出现的变体,不凭空创造)
4. 注入子Agent任务模板(创作时用规范名+别名约束书写)
5. 落盘后校验:运行 python -m nwp.cli validate-chars <角色别名表.json> 扫描全文
注入子Agent任务模板(新增行):
## 角色名书写规范(强制·v4.4.0新增)
- 规范名:[角色名]
- 允许变体:[别名列表]
- 禁止:自创未登记的昵称或别名
步骤 6:伏笔追踪初始化(v3.2.0 新增 · v3.6.0 扩展)
基于 templates/foreshadow.json,扫描原文识别「未解释异常」自动入库:
- 异常标记:未解答的疑问 / 突兀的物件 / 矛盾陈述
- 配角消失预警(v3.6.0 新增):首次出场后每章更新 last_appear_chapter,消失超过15章 → 黄色预警
- 伏笔分级预警(v3.6.0 新增):按未回收章数分级 → mild(≤20章)/ warning(21-40章)/ critical(>40章)
- 续写时监控回收:每章结束检查伏笔状态(pending / buried / resolved)
步骤 7:用户确认
- 将
03_角色档案.md+角色别名表.json+world_view.yaml+foreshadow.json呈现给用户审阅 - 用户可修改/补充/删除任何条目
- 用户确认后才进入 Phase 1.6(用户可跳过此板块说「直接写」)
步骤 8:先生风格样本采集(v5.1.0 新增 · Few-shot 注入准备)
> 目的:先生提供原创作品,建立个人写作指纹库,Phase 2.2 子Agent 直接继承先生文风,而非通用AI腔调。
> 触发条件:先生授权续写/创作时自动触发(若 corpus 表已有样本则跳过)。
> 先生需提供:5-10篇最能代表自己风格的原创作品(任意体裁,txt/md/docx均可)。
执行流程:
1. 先生提供文件路径(或粘贴文本片段)
2. 小夏调用 crawler_db.corpus_add() 逐篇入库(style_tags 由小夏分析赋值,quality 先生评定)
3. 入库完成后调用 corpus_top(n=3) 验证拉取
4. 报告采集结果(篇数/总字数/风格标签)
风格标签自动分析(入库时执行):
| 标签 | 含义 | 识别依据 |
|------|------|---------|
| narrative | 叙事为主 | 动宾结构密集,场景切换频繁 |
| dialogue | 对话为主 | 引号内容占正文 >40% |
| descriptive | 描写为主 | 形容词密度高,长句占比 >60% |
| emotional | 情感为主 | 心理词/感叹句密度高 |
注入 Phase 2.2 子Agent(SKILL.md 内嵌模板,见 Phase 2.2 章节)
Phase 1.6 · 标杆技法解构(v5.1.1 新增 · CLI参数驱动)
> 目的:从先生风格指纹库中匹配标杆作品,解构其四维技法(叙事/人物/对话/结构),输出结构化参考报告注入后续子Agent,降低AI味
> 触发:--benchmark-tech=auto(默认)| =local(仅库内)| =off(禁用)
> 复用:corpus表(已有6篇)+ extract.py(extract_benchmark_tech())+ embed.py(类型匹配)
> 前置输入:Phase 0 项目类型标签 + Phase 1.3 世界观标签
执行流程
Step 1 · 库内匹配(corpus_top 按标签过滤)
| 条件 | 动作 |
|---|---|
| 匹配≥3篇且质量≥0.85 | 直接进入Step 2 |
| 匹配<3篇 | 提示先生是否联网补采(先生授权后再采) |
=local 模式 |
强制只用库内,不联网 |
=off 模式 |
跳过,直接进入 Phase 1.7 |
Step 2 · 四维技法解构(extract_benchmark_tech())
对每篇标杆作品输出:
| 维度 | 分析内容 | 关键指标 |
|---|---|---|
| 叙事技法 | 节奏/爽点密度/场景切换/悬疑铺设 | rhythm_score(句长方差)/ suspense_density / short_density |
| 人物技法 | 主视角/性格塑造/行动vs内心 | action_ratio / dialogue_ratio / trait_ratio |
| 对话技法 | 口语密度/信息密度/问答节奏 | colloq_density / short_dialogue_ratio / info_density |
| 结构技法 | 钩子密度/世界观规则渗透 | hook_density / world_rule_density_per_1k |
Step 3 · 报告输出
- 写入
分析/标杆技法报告.json - CLI输出摘要:
nwp benchmark-tech <项目目录> - 供 Phase 2.2 子Agent persona 注入
四维输出格式
{
"benchmark": [
{
"source": "十日终焉",
"quality": 0.87,
"tags": ["悬疑","逃生","群像"],
"narrative_tech": {
"rhythm_score": 0.52,
"short_density": 0.18,
"suspense_density": 0.12,
"narrator_type": "第三人称/上帝视角",
"assessment": "短句密集,快节奏推进,悬疑铺设频繁"
},
"character_tech": {
"action_ratio": 0.45,
"dialogue_density": 0.32,
"trait_style": "行动/语言体现",
"assessment": "行动塑造为主(行动比0.45,对话比0.32)"
},
"dialogue_tech": {
"colloquial_density": 0.06,
"short_dialogue_ratio": 0.38,
"info_density": 0.35,
"assessment": "短对话为主,节奏快,信息密度高"
},
"structure_tech": {
"hook_density_last_10p": 0.7,
"world_rule_density_per_1k": 0.3,
"assessment": "强钩子(悬念结尾密集),结构平实"
},
"raw_samples": {
"narrative_sample": "「完整引用体现叙事技法的原文片段」",
"dialogue_sample": "「完整引用体现对话技法的原文片段」",
"character_sample": "「完整引用体现人物塑造的原文片段」"
}
}
],
"summary": "「四维综合摘要:叙事/人物/对话/结构各维度强弱评估」"
}
CLI 用法
# Phase 1.6 自动执行(推荐)
npw new <项目名> --benchmark-tech=auto
# 仅用库内标杆(先生6篇风格样本已有)
npw new <项目名> --benchmark-tech=local
# 禁用标杆采集(短篇≤3章)
npw new <项目名> --benchmark-tech=off
# 单独运行解构(先生已有项目后补采)
python -m nwp.cli benchmark-tech "projects/归零秘境/分析"
# 查看标杆报告
python -m nwp.cli benchmark-tech "projects/归零秘境/分析" --json
Phase 1.7 衔接
Phase 1.6 完成后,进入卷级章节规划(Phase 1.7,原 Phase 1.6)。
Phase 1.7 · 卷级章节规划(v3.6.0 新增,原 Phase 1.6)
> 目的:每卷开始前制定详细章节分解表,防止长篇剧情写偏
> 来源:参考 Fiction Crafter 卷级规划模板
> 触发:Phase 1.5 用户确认后执行;用户说「直接写」时跳过
执行时机
| 场景 | 是否执行 |
|---|---|
| 第一卷开始 | ✅ 执行 |
| 新卷开始 | ✅ 执行 |
| 用户说「直接写」 | ❌ 跳过 |
| 从0创作(无原文) | ✅ 执行 |
执行流程
- 读取模板:加载
templates/volume_plan.md - 规划本卷:按模板填写章节分解表(核心任务/爽点类型/情绪曲线/预估字数)
- 爽点分布检查:确保每1-2章有打脸,每3-5章有突破,每8-12章有大高潮
- 风险点识别:识别剧情/节奏/角色/伏笔四类风险,制定预防措施
- 用户确认:呈现规划表,用户可修改/确认
- 固化存储:确认后写入
续写/<卷名>/章节规划.md
章节规划表核心字段
| 字段 | 说明 | 示例 |
|---|---|---|
| 核心任务 | 本章要完成的具体目标 | 主角在拍卖会碾压赵天罡 |
| 爽点类型 | 打脸/突破/获宝/逆转/身份揭秘 | 打脸 |
| 情绪曲线 | 低开高走/层层递进/反转爆发/过山车 | 低开高走 |
| 预估字数 | 2500-3500字/章 | 3000 |
与前卷衔接检查(第二卷起)
| 衔接项 | 检查内容 |
|---|---|
| 主角状态 | 等级/地位与前卷结尾一致 |
| 待解决矛盾 | 前卷遗留矛盾有解决方案 |
| 未回收伏笔 | 有明确的伏笔回收计划 |
与 Phase 2 的联动
- Phase 1.6 章节分解表 → 指导子Agent任务模板中每章具体要求
- Phase 2.6 审查层 → 对照章节分解表评估完成度
- 章节规划随创作推进更新(新增角色/地点/伏笔回收实时记录)
Phase 2 · 并行创作
分工矩阵:
| 执行者 | 产出内容 |
|---|---|
| 主会话 | 奇数关键章(Ch01/Ch10/Ch20/Ch30/Ch40 等) |
| 子Agent A–E | 每批5章并行(最大5并发) |
关键参数:
- 最佳批次:5章/批
- 子Agent并发上限:5个
- 主会话产出比:~35%
- 每章字数基准:中篇2500–3500字 / 长篇3000–4000字
字数弹性机制(v3.8.0 新增)
> 后续如出现字数与预设不符,根据故事叙事,经先生确认后可做调整。
| 调整类型 | 触发条件 | 先生确认 | 执行方式 |
|---|---|---|---|
| 自适应膨胀 | 叙事高潮/复杂场景需要,字数超出预设上限 | 是 | 单章上限放宽 |
| 自适应压缩 | 场景过渡/信息交代,字数低于预设下限 | 是 | 单章下限收紧 |
| 重新划分章节 | 内容结构与预设章节边界不匹配 | 是 | 合并相邻章节 或 拆分超长章节 |
| 自动平衡 | 某章超纲→后续章自动压缩补差 | 是 | 多章联动,字数归零后恢复基准 |
| 其他更优解 | 先生提出其他调整方案 | 是 | 按先生方案执行 |
弹性区间默认值:基准±20%(例:基准3000字,区间2400–3600字)
执行规则:
1. 子Agent在创作时若预判字数将超出区间,先完成叙事,不中途截断
2. 完成后标记「字数异常:超X字 / 不足X字」,等待先生确认调整方向
3. 先生确认后,按类型执行对应调整(膨胀/压缩/合并/拆分/平衡)
4. 调整后重新回扫,验证字数落在新区间内
字数预估校准(v4.2.0 新增)
> 来源:2026-08-12《血契倒计时》15小节全文创作复盘
> 问题:CJK 字数体感校准失效,初稿实际字数约为名义目标的 0.5–0.65 倍(偏差约 2×),13 个批次首轮全部不达标、反复补写
> 定位:字数弹性机制(v3.8.0)处理「写完后偏差的调整」,本机制处理「动笔前/动笔中的预防」,二者互补
根因(按权重)
- CJK 体感校准失效(主因):每 beat(一个动作/一个镜头)实际仅 60–130 字,1000 字需 12–18 个 beat,初稿常只铺 6–9 个
- 简报式写作本能冲突:SOUL「结论先行、简洁」的简报习惯与小说「展开、留白、体感」需求反向,本能压缩
- 字数计量误导:早期用 write 返回字节数(≈CJK×3)当字数,虚高约 3×,后统一 Python
[一-鿿]正则计数 - 弹性区间假安全感:按中心值(如 1000)构思,实际只达 50–65%
- edit 原子回滚:oldText 引号/换行不匹配 → 整组 edit 失败,单章耗 2–3 次重做,挤占字数预算
对策(动笔前/中执行)
- 首轮超写:内部目标 = 名义目标 × 1.5(名义常规 1000 → 内部 1400–1600;名义加量 1500 → 内部 1900–2100)
- 列 beat 清单:动笔前先列 beat(常规≥16 / 加量≥24,每 beat 60–90 字),逐一打勾,不足则补 beat 而非注水拉长句
- 写完立即计数:用 Python
len(re.findall(r'[\u4e00-\u9fff]', text))核验,禁依赖 write 字节数 - 不达标优先加 beat:补实质性情节/体感段落,禁注水(重复形容词、无意义环境描摹)
- edit 前必读原文:取精确 oldText;中文标点(引号 U+201C/201D、全角逗号、破折号)敏感,优先用 edit 工具而非脚本
落盘前强制自检(每章/每批)
- [ ] CJK 字数落入目标区间(用正则计数,非字节数)
- [ ] 正文 0 处章节/小节自指(标题行仅
# 「标题」,不含章号/小节号;正文内禁用) - [ ] 文末无「钩子:」「预告:」等元标注块(正文以情节自然收尾)
- [ ] Phase 2.9 双角度核验通过(读者≥4 / 编辑⚠️≤1)
- [ ] 主会话脚本复检子Agent产出真实字数(CJK 正则计数,目标 ±10% 达标,非字节数/非自估)
校准触发(反馈回路)
> 若连续两批首轮字数 < 目标×0.7,强制启用超写目标(×1.5),不再按中心值构思;直至连续两批达标后恢复基准
子Agent 完成验证门控(v4.3.0 新增 · 强制)
> 来源:2026-08-12《地球Online》卷一全量重写+返修复盘(E1–E7)
> 铁律:子Agent「回报完成」不可信,必须以主会话脚本复检真实文件字数为准
配置选项(v4.4.0 新增 · 默认 strict)
| 模式 | 适用场景 | 说明 |
|---|---|---|
| strict(默认) | 长篇(>10章) | 全量±10%门控,逐章验字,当前年行为 |
| auto(推荐) | 通用 | ≤3章→off,4-10章→quick(±15%),>10章→strict |
| off | 短篇(≤3章) | 关闭门控,子Agent自报即收 |
> Phase 0 启动确认时先生可指定 gate_mode;未指定则默认 strict
强制规则(派发即生效)
- 逐章验字:子Agent 每章写完/改完,立即用 Python 统计 CJK 真实字数(剔除 frontmatter 正则
r'^---\n.*?\n---\n'),真实字数落目标 ±10% 才允许回复「完成」 - 不达标继续调整:未达 ±10% 区间的章节,子Agent 必须继续扩充/压缩,不得回复完成
- 回复附真实字数:子Agent 完成回复须逐章列出真实字数(CJK 正则计数,非自估、非字节数),供主会话复核
- 主会话复检:主会话收到「完成」回报后,必须独立运行字数统计脚本复检真实文件,确认 100% 达标方视为批次收工;对虚报(文件未改/字数虚高)一律回退重派
派发指令模板(强制内置)
> 你完成每一章后,必须立即用 Python len(re.findall(r'[\u4e00-\u9fff]', text)) 统计 CJK 真实字数(剔除文件头 frontmatter),真实字数需落入目标 ±10% 区间方可视为该章完成;全部章节达标后,回复中逐章列出真实字数。未完成前不得回复「完成」。
> 你每写满约 500 字,必须运行 python -m nwp.cli scan <本章.md> --target <目标字数> 自检一次;若报告「拒绝落盘」(R8 命中或违规≥3 处),立即就地修复对应段落(删除 R8 禁用语、改写章号自指、移除元标注块、拆解 AI 腔排比),修复后再继续,禁止带病落盘。
> 收到 TERMINATE 类指令即为最高优先级硬规则:一旦主会话发来含「TERMINATE」「停止」「终止」「回滚」字样的指令,立即无条件停笔退出,丢弃未完成内容,不得抗辩、不得继续写、不得回复「完成」。若本地已有章节草稿,保持原状等待主会话接管,绝不自行覆盖或回写最终文件。
Phase 2.1.5 · 失控熔断与实时监控(v5.3.0 新增 · 强制)
> 来源:2026-08-26《赛博龙虾》幕1 后半批(Ch6–Ch10)续写复盘
> 问题:Ch6 子Agent 失控运行 33 分钟、文件膨胀至 8178 CJK(目标 2.3×),主会话 sessions_send 终止指令未强制生效,子Agent 完成事件延迟 4h40m 才推送并覆盖主会话稳定版本,最终 audit_all 检出 R8 禁用语回潮。
> 根因:无自动监控(靠人工 33 分钟才干预)+ 终止指令建议性不可强制作废 + R8 违规落盘后才检测 + 主会话与子Agent 同写一文件后写覆盖。
> 原则:Python 模块只做「判定 + 状态持久化 + 输出行动建议」,真正的 sessions_send 终止/主会话接管由主会话按本流程执行(OpenClaw 平台不可能让 Python 调用 AI 工具)。
五大机制
| 机制 | 模块 | 触发 | 主会话动作 |
|---|---|---|---|
| 2.1 失控熔断 | nwp/core/circuit_breaker.py |
满足任一:CJK > 目标×1.8 / 时长 > 同批基准×2.0 / R8≥3 | 发 TERMINATE + 快照回滚 + 接管 |
| 2.2 实时违规扫描 | nwp/review/realtime_scanner.py |
子Agent 每 500 字或落盘前;R8 / 章号自指 / 元标注钩子 / 强 AI 腔(三连排比·格言点题·不是A是B·清单体·精确数字·AI特色句式) | 重度(≥3 处或 R8)拒绝落盘要求修复 |
| 2.3 版本快照 | nwp/core/snapshot_manager.py |
子Agent 启动前 | 保留最近 3 个,失控可回滚 |
| 2.4 心跳账本 | nwp/core/status_tracker.py |
子Agent 每 60s/500 字写状态 JSON | 主会话轮询聚合,无 OpenClaw 主动心跳下模拟 |
| 2.5 平台时效约定 | nwp/core/subagent_monitor.py |
事件超 30 分钟未推送视为僵尸 | 主动 sessions_send 查询状态 |
主会话强制流程(每批派发即执行)
- 启动前快照:对每个子Agent 章节
python -m nwp.cli snapshot create <chapter.md>生成基线 - 注册账本:
python -m nwp.cli subagent register <session_id> <chapter> --chapter-path <abs> --snapshot-path <snap> --target-cjk <N> [--baseline <s>] - 启动监控线程(60s 轮询):
python -m nwp.cli monitor check,任一子Agent 返回TERMINATE_AND_ROLLBACK→ 主会话立即sessions_send(session_id, terminate_text)并nwp snapshot rollback接管重写 - 完成即复检:子Agent 回报完成 → 主会话先跑
nwp scan <chapter.md> --target <N>与字数统计,R8=0 且字数落 ±10% 方收工(沿用 v4.3.0 强制门控,strict 默认)
熔断三条件(满足任一即触发)
current_cjk > target_cjk × 1.8(默认 tolerance)elapsed_seconds > baseline_duration × 2.0(同批 ≥2 子Agent 时 baseline 取同批正常完成者均值;无基准不触发时长条件)r8_count ≥ 3(默认阈值)
CLI 速查
nwp snapshot create <chapter.md> # 创建基线快照
nwp snapshot rollback <chapter.md> # 回滚到最近快照
nwp subagent register <sid> <chap> ... # 登记子Agent
nwp subagent status # 列出账本
nwp scan <chapter.md> --target 3500 # 实时违规扫描(--json 给主会话读取)
nwp circuit --elapsed 1980 --cjk 6300 --r8 3 --baseline 540 # 熔断判定
nwp monitor check # 全量聚合 + 行动建议
子Agent任务模板(自动注入参数,含角色档案 + world_view.yaml + foreshadow.json 引用):
你是<作品类型>续写作家。请为项目「<项目名>」续写Chapter <X>–<Y>,共<N>章。
## 角色档案(必须严格遵循)
<粘贴03_角色档案.md的核心内容>
## 世界观硬规则(必须遵循,来自 world_view.yaml)
<粘贴 hard_rules 列表,blocking 项严禁违反>
## 伏笔追踪(来自 foreshadow.json)
<当前 pending/buried 伏笔列表,本章需回收的标注 resolved>
## 创作规则
1. <叙事视角要求>
2. <字数要求>
3. <开头要求>
4. <结尾要求(悬念钩子)>
5. <叙事手法要求>
6. <人物语言要求——引用角色档案>
7. <世界观关联要求——引用 world_view.yaml>
8. <禁止出现——引用禁区清单>
## 创作禁区(强制)
1. **禁止章节/小节自指**:正文不得出现「第X章」「小节X」「第X章描述」等语句;文件标题行仅写 `# 「标题」`(章节/小节序号仅存于文件名,不写入标题行)。用情节/场景本身完成回忆,如「陈夜想起苏棠在集结点的采访」而非「想起第3章苏棠采访」
2. 违反上述规则 → 重写为情节还原后方可落盘
3. **禁止文末元标注块**:正文结尾不得添加「**钩子**:」「**预告**:」等创作说明式标注;悬念靠情节本身营造,删除此类标注块后方可落盘
4. **落盘自检(强制 · v5.3.0)**:你每写满约 500 字,必须运行 `python -m nwp.cli scan <本章.md> --target <目标字数>` 自检一次;若报告「拒绝落盘」(R8 命中或违规≥3 处),立即就地修复对应段落(删除 R8 禁用语、改写章号自指、移除元标注块、拆解 AI 腔排比),修复后再继续,禁止带病落盘。
5. **TERMINATE 硬规则(最高优先级 · v5.3.0)**:收到主会话含「TERMINATE」「停止」「终止」「回滚」字样的指令,立即无条件停笔退出,丢弃未完成内容,不得抗辩、不得继续写、不得回复「完成」;若本地已有草稿,保持原状等待主会话接管,绝不自行覆盖或回写最终文件。
## 通用注释规范(v4.0.1 新增)
> 正文出现专业术语/代码/典故时,做通用注释避免读者理解障碍
#### 规则
| 维度 | 规则 |
|------|------|
| **形式** | 括号内或文末均可,同一小说内统一;在 `world_view.yaml` 中锁定 `annotation_style: inline` 或 `footnote` |
| **深度** | 一句话定性 |
| **类型** | 术语/代码统一处理;典故仅标注生僻(常见典故如「刻舟求剑」不标注) |
| **触发** | 首次出现时注释;后续同词不重复 |
#### 注释写法
术语:归零矿区(平行时空裂隙,位于可可西里-羌塘交界)
代码:sync_rate = 79 # 人体与裂隙的同步百分比
生僻典故:羚羊挂角(宋·严羽《沧浪诗话》,喻意境超脱)
常见典故:刻舟求剑(不标注)
#### world_view.yaml 模板新增字段
```yaml
meta:
annotation_style: inline # inline=括号内注释 / footnote=文末脚注
AI腔规避约束(v5.2.0 新增 · 来源:《雾中山志》去AI化复盘):
> 写作时从源头规避以下AI特征模式(写完自查,命中即改):
- 「不是A,是B」转折句式:全章 ≤1 次,禁止"不是X。是Y。"跨句排比
- 三连排比(没有X,没有Y,没有Z 恰好三项):禁止,改参差句式
- 固定格式收尾(每段同以"XX记录:"结尾):禁止
- 过度精确数字(零点三秒/四步见方/共计七次):删30%,用日影/天色/动作代替
- 格言式点题短句(每段结尾升华):每章最多1句
- 同一喻体重复(如"像留声机"出现多次):全文同喻体只留1个
- 推理链条过于顺滑(毫无停顿得出结论):加入主角的卡壳/怀疑/自我修正
- 段落长度全部相近:连续3段同长度必须调整
- 每千字至少1处身体感受/私语(冷、饿、手抖、记不清)——打破冷静叙述口吻
- 禁AI元信息(如"依据XX改写""以下是");数字逐行排列的工整排版改为叙述
自查方法:写完调用 AIProfiler().scan(),AI痕迹分 <6 必须返修。
批次参数(v4.0 新增)
> 子Agent并发上限可配置,先生指定后生效
| 参数 | 默认值 | 说明 |
|---|---|---|
| 批次大小 | 5章/批 | 先生指定后调整 |
| 并发上限 | 5个 | 先生指定后调整;受底层资源限制,系统层自动校验 |
章节标题生成函数(v4.1.0 更新)
> 子Agent创作时必须使用本章生成标题,贴合章节核心内容,字数不限
命名规则
格式:`# 「标题」`——标题用「」包裹,不含章节/小节序号(序号仅存于文件名 `第XXX章_标题.md` / `小节XX_标题.md`)
原则:简洁有力,突出本章核心动作或核心对象
禁止:章节标注(如「第X章」字样)
| 正确示例 | 错误示例 | 原因 |
|---|---|---|
| 折门 / 父亲 / 漫长的等待 / 数到十 | 第一章:集结 / 第1章 集结 | 禁止章节标注 |
生成逻辑
1. 取本章核心动作或核心事件
2. 贴合核心内容生成标题
3. 字数不限,能准确表达本章核心即可
子Agent注入
## 输出规范
- 章节标题:贴合章节核心内容,字数不限
- 文件名格式:第XXX章_标题.md
格式选项:章 / 小节(v4.2.0 新增)
> 项目可选用「章」或「小节」作为叙事单元,二者均在 NPW 全流程受支持
| 维度 | 章格式 | 小节格式 |
|---|---|---|
| 单元命名 | 第XXX章 | 小节XX |
| 文件命名 | 第XXX章_标题.md | 小节XX_标题.md |
| 标题行 | # 「标题」(序号仅存文件名 第XXX章_标题.md) |
# 「标题」(序号仅存文件名 小节XX_标题.md) |
| 自指禁区 | 正文禁「第X章」(标题行仅 「标题」,不含章号) |
正文禁「小节X」(标题行仅 「标题」,不含小节号) |
| 适用场景 | 标准长篇/卷章结构 | 短篇/不分章、以小节区分节奏 |
> 小节格式下,标题生成函数、创作禁区、字数校准、Phase 2.9 核验全部沿用,仅单元称谓由「章」换「小节」
子Agent任务模板(v4.1.0 更新)
你是<作品类型>续写作家。请为项目「<项目名>」续写Chapter <X>–<Y>,共<N>章。
## 风格参考(v5.1.0 新增 · 来自先生写作指纹库 · Few-shot注入)
> 若 corpus 表无样本则跳过此节;若有,从 `nwp.corpus_top(n=3)` 拉取后替换下方内容
**先生文风特点(voice_profile 提炼)**:
<voice_profile 内容:sentence_rhythm / pov_distance / dialogue_tags / imagery_domains / never_do / distinctive_patterns>
**先生风格样本(Top-3 高质量段落,直接学习此写法)**:
> 样本1(来源:<source_ref>,质量:<quality>):
> <content 片段,300-500字>
> 样本2(来源:<source_ref>,质量:<quality>):
> <content 片段,300-500字>
> 样本3(来源:<source_ref>,质量:<quality>):
> <content 片段,300-500字>
## 标杆技法参考(v5.1.1 新增 · 来自 Phase 1.6 标杆技法解构 · 降低AI味)
> 若 Phase 1.6 跳过(`--benchmark-tech=off`)则跳过此节;否则从 `分析/标杆技法报告.json` 读取后替换下方内容
**叙事技法约束**:
<从 benchmark_report.json 提取 narrative_tech.assessment,如:"短句密集,快节奏推进,悬疑铺设频繁">
- 句长方差目标:<narrative_tech.rhythm_score>
- 悬疑密度参考:<narrative_tech.suspense_density>
- 原文叙事片段(学习节奏感):
<benchmark_report.raw_samples.narrative_sample>
**人物塑造约束**:
<从 benchmark_report.json 提取 character_tech.assessment>
- 行动/内心比参考:<character_tech.action_ratio> / <character_tech.inner_ratio>
- 性格塑造方式:<character_tech.trait_style>
- 原文人物片段(学习行动塑造):
<benchmark_report.raw_samples.character_sample>
**对话技法约束**:
<从 benchmark_report.json 提取 dialogue_tech.assessment>
- 口语密度参考:<dialogue_tech.colloquial_density>
- 短对话比例参考:<dialogue_tech.short_dialogue_ratio>
- 信息密度参考:<dialogue_tech.info_density>
- 原文对话片段(学习对话节奏):
<benchmark_report.raw_samples.dialogue_sample>
**结构技法约束**:
- 钩子密度参考:<structure_tech.hook_density_last_10p>(每10段结尾悬念比例)
- 世界观规则渗透:<structure_tech.world_rule_density_per_1k>(/千字)
## 批次参数
- 批次大小:<N>章/批(先生指定)
- 并发上限:<M>个(先生指定)
## 角色档案(必须严格遵循)
<粘贴03_角色档案.md的核心内容>
## 世界观硬规则(必须遵循,来自 world_view.yaml)
<粘贴 hard_rules 列表,blocking 项严禁违反>
## 伏笔追踪(来自 foreshadow.json)
<当前 pending/buried 伏笔列表,本章需回收的标注 resolved>
## 章节标题生成规则(必须使用)
- 格式:`# 「标题」`——标题用「」包裹,不含章节/小节序号(序号仅存于文件名)
- 原则:简洁有力,突出核心动作或核心事件
- 禁止:章节标注(禁止「第X章」等字样)
## 创作规则
1. <叙事视角要求>
2. <字数要求(基准±20%,弹性机制)>
3. <开头要求>
4. <结尾要求(悬念钩子)>
5. <叙事手法要求>
6. <人物语言要求——引用角色档案>
7. <世界观关联要求——引用 world_view.yaml>
8. <禁止出现——引用禁区清单>
## 创作禁区(强制)
1. **禁止章节自指**:正文不得出现「第X章」「第X章描述」等语句(文件标题行仅 `# 「标题」`,不含章号)
2. 违反上述规则 → 重写为情节还原后方可落盘
3. **禁止文末元标注块**:正文结尾不得添加「**钩子**:」「**预告**:」等创作说明式标注;悬念靠情节本身营造,删除此类标注块后方可落盘
## 每章具体要求
### Chapter <X> · <标题>
- 场景:<场景描述>
- 核心:<核心事件>
- 必须有:<强制要素>
- 结尾要求:以情节自然收尾并留悬念(禁止另起「**钩子**:」标注块):<悬念>
...(N章)
## 输出规范
- 文件保存路径:<续写目录>\
- 文件名格式:第XXX章_标题.md
- 章节标题:贴合章节核心内容,字数不限
- 文件头格式:标准头部(可选);**正文以情节自然收尾,文末禁止添加「钩子」「预告」等元标注块**
请直接开始创作。每完成一章,立即用 Python `len(re.findall(r'[\u4e00-\u9fff]', text))` 统计 CJK 真实字数(剔除文件头 frontmatter),真实字数需落入目标 ±10% 区间方可视为该章完成;全部章节达标后,回复中逐章列出真实字数,未完成前不得回复「完成」。
Phase 2.5.5 · 记忆宫殿上下文管理(v5.0.0 新增 · P1-1)
> 来源:2026-08-13 NPW 创作模块迭代;参考 novel-multi-agents 记忆宫殿架构
概念:在现有 L1 世界观 + L2 角色档案基础上,新增 L3 章节摘要 + L4 跨卷上下文链。生成新章节前,自动召回近期章节核心事件/角色状态/待延续悬念。
存储:projects/<项目>/分析/上下文链.json
使用时机:
- 章节写完后 → ContextKeeper.add_chapter_summary() 自动提取摘要并更新上下文链
- 生成新章节前 → ContextKeeper.get_context_for() 召回相关上下文注入子 Agent
四层架构:
| 层级 | 内容 | 已有状态 |
|------|------|---------|
| L1 世界观 | world_view.yaml | ✅ 已有 |
| L2 角色档案 | 03_角色档案.md + 角色快照 | ✅ 已有 |
| L3 章节摘要 | 本章核心事件/伏笔回收/角色状态变化 | 🆕 新增 |
| L4 跨卷上下文 | 跨卷引用链/待呼应前文列表 | 🆕 新增 |
核心 API(nwp/core/context.py):
from nwp.core.context import ContextKeeper
# 初始化(从 JSON 加载已有上下文)
ck = ContextKeeper.init("projects/归零秘境/分析")
# 章节写完后 → 自动提取摘要
ck.add_chapter_summary(
chapter_path="projects/归零秘境/续写/第一卷/Ch012_折门.md",
chapter_num=12,
chapter_title="折门",
text=...,
foreshadow_fp="projects/归零秘境/分析/foreshadow.json"
)
# 生成新章节前 → 查询上下文
ctx = ck.get_context_for(next_chapter_num=13, max_summaries=5)
print(ctx["context_text"]) # 格式化字符串,可直接注入 prompt
子 Agent 注入示例(在派发 prompt 中追加):
## 近期上下文
{ck.get_context_for(next_chapter_num=13)["context_text"]}
## 角色当前状态
{ck.get_context_for(next_chapter_num=13)["character_states"]}
CLI 命令:
# 初始化(Phase 1.5 完成后执行)
python -m nwp.cli context init --project-dir "projects/归零秘境/分析"
# 章节写完后记录摘要
python -m nwp.cli context add --chapter "projects/归零秘境/续写/第一卷/Ch012.md" --resolved F1 F3
# 生成新章节前查询上下文
python -m nwp.cli context context --chapter "projects/归零秘境/续写/第一卷/Ch012.md" --next-chapter 13
# 打印上下文链报告
python -m nwp.cli context report --project-dir "projects/归零秘境/分析"
Phase 2.5.8 · 质量飞轮检验(v5.0.0 新增 · P1-2)
> 来源:2026-08-13 NPW 创作模块迭代;参考 QSPBU-LONG/novel-multi-agents QualityGuard
概念:在现有字数门控(v4.3.0)基础上,增加内容质量闭环。初稿 → 5 维质量评估 → 未达标打回重写 → 通过后进入下一章。
质量维度(各 0-10 分):
| 维度 | 权重 | 通过门槛 | 说明 |
|------|------|---------|------|
| D1 字数 | 20% | ≥ 6.0 | 已有(继承 v4.3.0 ±10% 门控)|
| D2 角色一致性 | 25% | ≥ 6.0 | 台词/行为与角色设定一致 |
| D3 伏笔呼应 | 20% | — | 本章是否回收/新建伏笔 |
| D4 叙事节奏 | 20% | — | 长段/节奏失衡/结尾仓促 |
| D5 AI 味去除 | 15% | — | 典型 AI 短语/句式重复 |
通过条件:加权总分 ≥ 7.0 且 D1 ≥ 6.0 且 D2 ≥ 6.0
核心 API(nwp/review/quality.py):
from nwp.review.quality import QualityWheel
qw = QualityWheel(
draft_path="projects/归零秘境/续写/第一卷/Ch012.md",
target_word_count=4500,
chars_file="projects/归零秘境/分析/character_card.json",
foreshadow_fp="projects/归零秘境/分析/foreshadow.json"
)
result = qw.check()
print(result.pass_) # True / False
print(result.total_score) # 加权总分
print(result.issues) # 问题列表
print(result.suggestions) # 修改建议
# 子Agent 自检用(仅返回 bool)
if not qw.quality_pass():
# 打回重写...
质量飞轮集成到子 Agent 流程(Phase 2 派发指令追加):
## 质量门控(v5.0.0)
完成章节后,执行:
python -m nwp.cli quality "{chapter_path}" --target {word_target} --chars-file "{chars_file}" --foreshadow "{foreshadow_fp}"
结果判定:
- pass=True → 交付章节,附真实字数
- pass=False → 按 suggestions 修改,重新检验
CLI 命令:
python -m nwp.cli quality "projects/归零秘境/续写/第一卷/Ch012.md" --target 4500 --chars-file "projects/归零秘境/分析/character_card.json" --foreshadow "projects/归零秘境/分析/foreshadow.json"
与字数门控(v4.3.0)的关系:两者互补,字数门控保证量,质量飞轮保证质。子 Agent 自检时先跑字数统计(通过后才跑质量飞轮,避免浪费 token)。
Phase 2.6 · 四层一致性校验(v3.2.0 新增 · v3.6.0 升级)
> 续写每批完成后执行。校验结果作为风险提示反馈用户,不自动拦截合理创作(避免过度工程化误杀)。
第一层 · 世界观锚定:
- 扫描续写文本是否违反 world_view.yaml 的 blocking 硬规则
- 命中 → 标记 ⚠️ 世界观冲突:<rule_id> 提示
第二层 · 大纲对齐:
- 比对续写节点与续写框架的卷结构 / 悬念链
- 偏离 → 标记 ⚠️ 节点偏离:<预期节点> vs <实际内容>,建议回退或调整
第三层 · 连贯性校验(文风嵌入):
- 对比续写文本与文风指纹 sample_texts 基线的 nn embedding 余弦相似度(768 维向量,embed.py 驱动)
- 阈值默认 0.70,低于触发 ⚠️ 提示(不硬拦截)
- 长文本自动分段:> 1024 字滑动窗口分块 → 平均池化 → 单向量(防止 OOM)
- 命中 → 标记 ⚠️ 文风漂移:最低相似度 X < 阈值 0.70
- 降级路径:nn 不可用时自动回退 stat(统计指标)
- 核心依赖:embedding 引擎(需额外部署)
第四层 · 九维度章节审查(v3.6.0 新增 · 来自 Fiction Crafter):
审查粒度分两档,用户可选择:
| 维度 | 快速(3维度,约3分钟) | 完整(9维度,约10分钟) |
|---|---|---|
| 核心达成度 | ✅ 章节核心任务是否完成 | ✅ 章节核心任务是否完成 |
| 有效信息量 | ✅ 有效信息占比≥60% | ✅ 有效信息占比 + 节奏评估 |
| 穿帮检测 | ✅ 硬性穿帮(角色死亡/地名错误/时间线矛盾) | ✅ 硬性穿帮 + 软性穿帮(配角消失>15章/能力突变/性格偏差) |
| 角色成长 | - | ✅ 角色心理/行为是否有变化 |
| 套路重复 | - | ✅ 与前5章对比,相似度>80%预警 |
| 伏笔预警 | - | ✅ pending伏笔+alert_level(mild/warning/critical) |
| 情绪曲线 | - | ✅ 对照章节规划的情绪曲线评估 |
| 期待感 | - | ✅ 结尾钩子是否有效 |
| 审查趋势 | - | ✅ 穿帮数/节奏失控次数历史趋势 |
审查输出模板:
## 章节审查报告 · Chapter <X>
**审查时间**: ISO-8601
**审查粒度**: 快速 | 完整
| 维度 | 评级 | 说明 |
|------|------|------|
| 核心达成度 | 优秀/良好/需调整/需重写 | ... |
| 有效信息量 | ... | ... |
| 穿帮检测 | ✅ 无穿帮 | ... |
**综合评级**: 优秀(8-9分)/ 良好(6-7分)/ 需调整(4-5分)/ 需重写(<4分)
**优化建议**: ...
历史趋势追踪(完整审查):自动追加至 分析/errors.md,穿帮数/节奏失控次数趋势分析。
与 CLOSURE.md 联动:审查趋势 → 写入 CLOSURE.md 伏笔收束率章节。
Phase 2.7 · 精准修改(单章定点修复 · v3.7.0 新增)
> 适用于:先生明确指出某章节的具体问题(如「修改第X章,去掉XX引用」)
> 来源:2026-08-07《归零秘境》章节自指清理实战
执行流程
| 步骤 | 操作 | 产出 |
|---|---|---|
| ① 定位 | 读取目标章节,定位问题句子 | 问题段落 + 行号 |
| ② 判断 | 确认修改方案(替代写法 / 删除 / 改写) | 决策记录 |
| ③ 例外判定 | 逐句区分情节性引用 vs 规则性违规 | 例外清单 + 规则类清单 |
| ④ 先生确认 | 呈现例外清单,先生确认保留/修复 | 确认指令(「是」或「全部修复」) |
| ⑤ 修改 | 执行 edit,修复全部规则类问题 | 修改后文件 |
| ⑥ 回扫 | 全文扫描同类问题,报告残留数 | 修改报告 |
触发方式
先生:修改第30章,把「第X章」的引用去掉
工具:
1. 定位 Chapter_030_*.md
2. 扫描全章「XX章」模式 → 逐句判断(情节性?)
3. 呈现例外清单 → 先生确认
4. 先生回复「是」→ 执行修复
5. 回扫验证 → 报告残留数(应为0)
例外判定标准(来源实战规则)
| 类型 | 示例 | 判断标准 | 处理 |
|---|---|---|---|
| 章节标注 | 「详见第3章」「正如第5章所述」 | 直接引用章节编号 | ❌ 必须修复 |
| 情节性引用 | 「陈夜想起苏棠在集结点的采访」(无章号) | 用情节/场景完成回忆 | ✅ 保留 |
| 回忆触发 | 顾晚L痕联想(文中已改写为隐含引用) | 隐含历史信息 | ✅ 保留 |
| 物品关联 | 沈砚秋口袋照片(隔37年物件) | 非语言性叙述 | ✅ 保留 |
> 判断原则:无章号不构成章节自指;情节性引用的核心是「用场景说话」而非「标注来源」
修改报告模板
## 精准修改报告 · Chapter <X>
**文件**: <路径>
**修改时间**: ISO-8601
**规则**: <先生指定规则>
| # | 行号 | 原句 | 类型 | 结果 |
|---|------|------|------|------|
| 1 | L45 | 「详见第3章描述」| 规则类 | ✅ 已修复 |
| 2 | L67 | 「正如第5章所述」| 规则类 | ✅ 已修复 |
| 3 | L89 | 顾晚L痕联想 | 例外(先生确认)| ✅ 保留 |
**同类问题回扫**: ✅ 全章无同类残留
**先生确认**: ISO-8601
Phase 2.8 · 批量修改(全卷同类问题批量清理 · v3.7.0 新增)
> 适用于:先生要求对已完成的全部章节进行同类问题修复(如「批量清理全书的第X章引用」)
> 来源:2026-08-07《归零秘境》1-32章66处章节自指违规,一次性批量修复
执行流程
| 步骤 | 操作 | 产出 |
|---|---|---|
| ① 扫描 | 全卷扫描,建立问题清单 | 扫描报告(位置+原句+类型) |
| ② 分类 | 规则类 + 例外类 分组呈现 | 两份清单 |
| ③ 先生确认 | 呈现例外清单,先生逐条确认保留/修复 | 确认指令 |
| ④ 批量修复 | 对规则类执行全部修复(并行) | 修改后文件(批量) |
| ⑤ 回扫验证 | 全卷再扫,报告残留数(应为0) | 验证报告 |
| ⑥ 沉淀 | 追加至 分析/errors.md 修改记录 |
errors.md 更新 |
触发方式
先生:批量清理全书的「第X章」引用
工具:
1. 全卷扫描 → 发现 N 处违规
2. 例外判定 → M 处情节性引用待先生确认
3. 先生回复「是」→ 批量修复 N-M 处
4. 回扫验证 → 报告残留数(应为0)
5. errors.md 沉淀
批量修改报告模板
## 批量修改报告 · <项目> <卷>
**扫描范围**: <卷目录>/Ch01–Ch<N>
**扫描时间**: ISO-8601
**规则**: <先生指定规则>
### 扫描结果
| 类型 | 数量 | 说明 |
|------|------|------|
| 规则类(必须修复)| 64 | 章节标注类引用 |
| 例外类(待先生确认)| 2 | 情节性引用 |
### 例外清单(先生确认)
| # | 章节 | 位置 | 内容 | 保留理由 |
|---|------|------|------|---------|
| 1 | Ch30 | L45 | 顾晚L痕联想 | 情节性引用,非章节标注 |
| 2 | Ch32 | L78 | 沈砚秋口袋照片 | 隐含历史信息,非章节标注 |
先生回复「是」后执行批量修复。
### 批量修复结果
| 操作 | 数量 | 状态 |
|------|------|------|
| 已修复 | 64 | ✅ |
| 保留(先生确认)| 2 | ✅ |
### 回扫验证
**扫描范围**: Ch01–Ch<36>
**残留数**: 0 ✅
Phase 2.9 · 阅读核验(双角度 · v3.9.0 新增)
> 定位:成品验收层,写作完成后、交先生审核前执行
> 来源:2026-08-11 创作后置核验需求
> 执行顺序:先读者后编辑(不好看,编辑再严也没用)
粒度与触发
| 粒度 | 耗时 | 执行时机 |
|---|---|---|
| 快速版(默认) | ~2分钟 | 逐章审核时默认;先生无感知 |
| 完整版 | 10-15分钟 | 批量完成后使用;交先生审核前 |
执行顺序
读者视角(6项)
↓
读者 ≥4项 ✅ → 进入编辑视角(快速版/完整版均适用)
读者 <4项 ✅ → 结论:需调整(阻断编辑视角)
↓
编辑视角(5项)
↓
编辑出现 ⚠️ ≥2项 → 强制返修
编辑出现 ⚠️ ≤1项 → 可落盘
↓
综合结论
↓
「需调整」→ 阻断提交先生,先生确认后才可落盘
「可落盘」→ 提交先生审核
粒度选择规则(v4.4.0 新增)
| 场景 | 默认粒度 | 说明 |
|---|---|---|
| 逐章审核 | 快速版 | ~2分钟/章,先生无感知 |
| 批量产出 | 完整版 | 10-15分钟/批次,提交先生前必做 |
| 先生明确要求 | 按先生指定 | 先生说「完整审核」则用完整版 |
> ⚠️ 批量完成后必须使用完整版,不可降级为快速版(批量交付质量需完整验收)
快速版实现(v5.0.1 新增):
> nwp.review.quick.quick_check(chapter_path, chars_file=None, word_target=4000)
> 三项检查:字数合规(±10%)+ AI味评分 + POV一致性;约2分钟完成
> 角色别名表存在时自动增加角色名拼写校验
> Phase 2.9 快速版可直接调用此函数,无需逐项手写
读者视角(6项)
| 检查项 | 核心问题 |
|---|---|
| 阅读流畅性 | 句段衔接是否断裂?节奏是否拖沓? |
| 悬念有效性 | 章节钩子是否有效?读者是否想继续? |
| 角色代入感 | 读者是否与角色共情?内心独白是否可信? |
| 情绪共鸣 | 关键场景是否有情感重量? |
| 信息接收 | 读者能否无障碍接收核心信息?无歧义? |
| 节奏感知 | 张弛是否得当?信息密度是否合适? |
编辑视角(5项)
| 检查项 | 核心问题 |
|---|---|
| 世界观一致性 | 是否符合 world_view.yaml 硬规则? |
| 伏笔合规 | foreshadow.json 待回收伏笔是否被正确推进?新增伏笔是否登记? |
| 角色行为合理性 | 角色行动是否符合性格档案?是否有突兀决策? |
| 叙事效率 | 信息密度是否足够?是否有冗余段落? |
| 章节完成度 | 章节核心任务是否完成?悬念是否闭环或有效延伸? |
与 Phase 2.6 衔接
> Phase 2.6 九维度是「生产质检」,Phase 2.9 是「成品验收」
2.9 报告引用 2.6 数据,避免重复审查:
- 引用伏笔回收率(foreshadow.json pending/resolved 状态)
- 引用穿帮数(Phase 2.6 硬性穿帮检测结果)
- 引用文风漂移标记(Phase 2.6 第三层余弦相似度)
报告格式
快速版报告(先生无感知,存内部记录):
读者:流畅✅ 悬念✅ 代入⚠️(具体问题)
编辑:伏笔✅ 一致性⚠️(具体问题)
结论:微调后落盘 / 需先生确认
完整版报告(提交先生前):
## 核验报告 · 第X章
**审查时间**: ISO-8601
**审查粒度**: 完整
### 读者视角
| 检查项 | 评级 | 说明 |
|--------|------|------|
| 阅读流畅性 | ✅/⚠️ | ... |
| 悬念有效性 | ✅/⚠️ | ... |
| 角色代入感 | ✅/⚠️ | ... |
| 情绪共鸣 | ✅/⚠️ | ... |
| 信息接收 | ✅/⚠️ | ... |
| 节奏感知 | ✅/⚠️ | ... |
**读者通过**:是(≥4项✅)/ 否
### 编辑视角
| 检查项 | 评级 | 说明 |
|--------|------|------|
| 世界观一致性 | ✅/⚠️ | ... |
| 伏笔合规 | ✅/⚠️ | ... |
| 角色行为合理性 | ✅/⚠️ | ... |
| 叙事效率 | ✅/⚠️ | ... |
| 章节完成度 | ✅/⚠️ | ... |
**编辑通过**:是(⚠️≤1项)/ 否(⚠️≥2项,强制返修)
### 引用 Phase 2.6 数据
- 伏笔回收率:X/Y(X resolved / Y total)
- 穿帮检测:X 项硬性穿帮
- 文风相似度:X.XX(阈值 0.70)
### 综合结论
**可落盘** / **需调整**(列出具体修改建议)
快速版报告(自检,先生无感知):
读者:流畅✅ 悬念✅ 代入⚠️(具体问题)
编辑:伏笔✅ 一致性⚠️(具体问题)
结论:微调后落盘 / 需先生确认
量化阈值
| 阈值 | 含义 | 后果 |
|---|---|---|
| 读者 ≥4项 ✅ | 读者视角通过 | 进入编辑视角 |
| 读者 <4项 ✅ | 读者视角未通过 | 结论:需调整,阻断编辑视角 |
| 编辑 ⚠️ ≥2项 | 编辑视角未通过 | 强制返修,不提交先生 |
| 编辑 ⚠️ ≤1项 | 编辑视角通过 | 可落盘 |
| 综合结论「需调整」 | 综合未通过 | 阻断提交先生,先生确认后才可落盘 |
执行规则
- 先生无感知:快速版核验不主动展示,先生不问不说
- 完整版必出:每批次完成后必须执行,结果随章节一起提交
- 阻断机制:需调整则阻断,先生确认后才能落盘
- 返修记录:返修内容追加至
分析/errors.md - 引用 2.6:完整版报告必须引用 Phase 2.6 数据,不重复审查
Phase 2.9.5 · AIGC检测驱动优化(v5.2.0 新增 · 可选环节)
> 定位:用户持有外部AIGC检测报告(朱雀等)时启用;无报告可跳过,用本地快速检查替代
> 来源:《雾中山志》AIGC去AI化4轮优化复盘(2026-08-25)——78.62% AI特征 → 0% 的方法论固化
> 核心闭环:检测报告 → 解析片段 → 优先级排序 → 定向改写 → 复测验证
触发条件
| 场景 | 动作 |
|---|---|
| 用户上传AIGC检测报告(朱雀/其他) | 执行完整闭环 |
| 用户未提供报告,但要求"去AI化/降AI味" | 用 segment_local_stats 本地分片近似定位 |
| 无报告且无要求 | 跳过(Phase 2.9 的 AI味评分已覆盖基础检查) |
执行步骤
- 解析报告:粘贴检测报告「片段解析」表至
parse_detect_report(report_text)
python from nwp.review.report_driven import parse_detect_report, prioritize, optimize_checklist segs = parse_detect_report(report_text) # 支持 "4 片段4 51.15% 8989 0.7803" 格式 - 优先级排序:
prioritize(segs)按 占比×AIGC值 降序——先改收益最大的片段(实战中占51%的片段优先) - 定位改写:根据报告内容摘引的关键词,用
locate_segment(text, keyword)映射到正文位置 - 定向改写:对高优片段套用
optimize_checklist()十项清单逐句体检 - 复测验证:改完重新检测,看趋势不看单次绝对值(检测器分段有 ±5% 随机波动)
内置工具(v5.2.0)
| 函数 | 作用 |
|---|---|
parse_detect_report(text) |
解析朱雀报告片段表 → Segment列表 |
prioritize(segments) |
按占比×AIGC排序,输出优化优先级 |
locate_segment(text, keyword) |
报告摘引关键词 → 正文行号定位 |
optimize_checklist() |
10条去AI化改写自检清单 |
segment_local_stats(text, n=8) |
无报告时的本地分片近似定位 |
核心经验(来自实战,必读)
- 八大AI特征模式:不是A是B转折句(最致命)/ 三连排比 / 固定格式收尾 / 过度精确数字 / 格言点题 / 比喻同质化 / 推理顺滑 / 段落同构
- 人工锚点策略:检测为人工的段落(对话密集/动作具体/感官细节)几乎不动,其他段落向锚点靠拢(
AIProfiler.scan()返回anchors) - 元信息必删:"依据XX检测报告改写"这类说明直接暴露AI痕迹(实测片段AIGC=0.99)
- 私语注入:每千字至少1处身体感受/自我怀疑(打寒噤、手发凉、记不清),打破冷静记录口吻
- 平台期认知:句子级改写可把确定性AI特征压到0%,但疑似AI(65-70%)是平台期,继续压需结构性调整且收益递减——若平台只卡"AI特征"指标,0%即通过
Phase 3 · 双版本交付(强制)
| 交付物 | 桌面路径 | 检查 |
|---|---|---|
| Word文档 | Desktop/<作品名>.docx |
□ |
| 纯文本 | Desktop/<作品名>.txt |
□ |
docx 结构:
封面页 → PageBreak
目录页 → PageBreak
第一卷(卷名 → Ch01–Ch10 → PageBreak)
第二卷 ...
txt 规范:
- UTF-8 无BOM
- 章节间 ===== 分隔线
- 禁止 emoji 文件标记
输出路径:先用工作区 → 复制到桌面(绕过中文路径写入失败)
Phase 4 · 三合一归档
| 步骤 | 操作 |
|---|---|
| ① CLOSURE.md | 项目总览 + 卷结构 + 创作模式 + 文件清单 + 决策记录 |
| ② 双版本桌面COPY | docx + txt 均已交付(Phase 3 完成) |
| ③ 内部记忆 | 记录作品名 / 字数规模 / 授权模式 / 经验教训 |
| ④ 项目记忆复用 | world_view.yaml / 03_角色档案.md / foreshadow.json 留存,同 IP 续写时直接加载(迭代记忆) |
CLOSURE.md 标准结构
# 项目归档报告 · <项目名>
## 项目概况(名称/目录/时长/字数/状态/交付物)
## 卷结构(表格:卷/目录/章数/字数/说明)
## 角色档案摘要(人格精炼板块产出)
## 世界观硬规则(world_view.yaml 摘要)
## 伏笔收束率(foreshadow.json:resolved/total)
## 创作模式(分工矩阵/并行模式/关键节奏)
## 核心叙事线索(悬念链)
## 经验沉淀(决策记录表格)
## 归档文件清单(按类别)
复盘检查清单
| # | 检查项 |
|---|---|
| 1 | 总纲 Step 1 上下文准备(读日志 + 跨会话检索同类项目) |
| 2 | 总纲 Step 2 基本信息登记(作品名/字数/授权模式) |
| 3 | Phase 1.2 数据输入层(联网自动搜索 或 上传原文)→ 提取 + 低置信度确认 |
| 4 | Phase 1.5 人格精炼 → 角色档案 + world_view.yaml + foreshadow.json + 用户确认 |
| 5 | Phase 1.6 卷级章节规划(可选,用户说「直接写」时跳过)→ 章节分解表 + 爽点分布 + 风险点 + 用户确认 |
| 6 | Phase 2.6 四层一致性校验(世界观/大纲/文风/审查层,可选粒度) |
| 7 | Phase 2.7 精准修改(先生指出单章问题 → 例外判定 → 先生确认 → 修复 → 回扫验证) |
| 8 | Phase 2.9 阅读核验(读者视角→编辑视角,量化阈值阻断,可选粒度) |
| 9 | 总纲 Step 3 错误归因(用户纠正时执行 → errors.md 记录) |
| 10 | 总纲 Step 4 经验沉淀 → 内部记忆 |
| 11 | 归档三合一(CLOSURE + 双版本桌面 + 内部记忆更新 + 项目记忆复用) |
内置抓取工具(独立维护版本)
> 来源:novel-parallel-writer 内置 crawler(独立管理,与 crawler-assistant 完全解耦)
> 位置:nwp/crawler/(v3.4.0 模块化)
核心接口速查
| 函数 | 用途 | 备注 |
|---|---|---|
bfs_scrape(url, config) |
BFS 自动发现章节链接 | 零手动配置,直接传目录页 URL |
batch_scrape(links, path, ...) |
批量抓取唯一入口 | 断点续传 + 正文清洗 + 速率控制 |
scrape(url) |
单页抓取 | 快速测试用 |
scrape_to_db(url) |
抓取并入 SQLite FTS5 | 需 crawler_db |
llm_extract(url, content, types) |
LLM 结构化提取 | entities/keywords/summary |
extract_entities(text) |
实体抽取(人物/地名/作品) | regex 本地,零依赖 |
add_task(url) |
唤起迅雷下载 | 需 thunder_bridge |
BFSConfig 参数
| 参数 | 默认值 | 说明 |
|---|---|---|
max_depth |
2 | 最大爬取深度(避免太深) |
max_total |
1000 | 全局 URL 上限(防止失控) |
max_per_page |
100 | 单页最大提取链接数 |
rate_limit |
True | 自适应速率限制 |
domain |
自动 | 限制爬取的域名 |
url_pattern |
None | URL 白名单正则 |
exclude_dirs |
[] | 排除的目录关键字 |
batch_scrape 关键参数
| 参数 | 说明 |
|---|---|
output_path |
输出 .txt 路径 |
checkpoint_path |
断点文件(默认 output_path + .checkpoint) |
header |
文件头内容 |
chunk_strategy |
by_id(默认)或 by_size(按 chunk_size 分块) |
chunk_size |
by_size 模式每块 URL 数(默认 50) |
llm_extract_types |
可选:['entities','keywords'],写入 .llm.jsonl 旁路文件 |
content_min_len |
正文最小字数阈值(默认 200) |
依赖 Skill / 工具
| 工具 | 用途 |
|---|---|
| 子Agent 调用 | 子Agent并行创作 |
| docx 生成 | .docx 文档生成 |
| 复盘总纲 | Step 1–4 基础框架 |
| 跨会话检索 | 上下文准备阶段检索 |
| 内部日志 | 今日日志读取 |
nwp.core.extract |
v3.2.1 新增 sample_texts,数据输入层提取(.txt/.md/.docx) |
nwp.core.embed |
v3.2.1 新增,文风一致性检验(nn embedding);Phase 2.5 第三层核心 |
nwp.crawler.crawler_core |
v3.4.1 新增(内置抓取:bfs_scrape / batch_scrape / scrape 等) |
nwp.crawler.crawler_db |
v3.4.1 新增(数据持久层:SQLite FTS5 / 断点记录) |
nwp.crawler.thunder_bridge |
v3.4.1 新增(迅雷下载唤起) |
nwp.core.embed.validate_character_names |
v4.4.0 新增(角色名拼写一致性校验;Phase 1.5 生成别名表→子Agent注入→落盘后校验) |
templates/ |
v3.6.0,world_view.yaml / character_card.json / foreshadow.json(v3.6.0扩展)/ volume_plan.md(v3.6.0新增)/ errors_template.md(v3.6.0新增) |
关键参数速查
| 参数 | 推荐值 |
|---|---|
| 最佳批次大小 | 5章/批 |
| 子Agent并发上限 | 5个 |
| 主会话产出比 | ~35%(关键奇数章) |
| 每章字数基准 | 中篇2500–3500字 / 长篇3000–4000字 |
| 弹性区间 | 基准±20%(默认) |
| 字数异常处理 | 先生确认后执行四种调整之一 |
| 交付版本 | docx + txt 双版本(必须同时) |
| 输出路径策略 | 工作区 → 复制到桌面 |
| 人格精炼 | Phase 1.5 完成后,用户确认后才进入Phase 1.6 |
| 卷级规划 | Phase 1.6 可选,用户说「直接写」时跳过 |
| 数据输入层 | 有原文时 Phase 1.2 自动提取;联网搜索时自动抓取后提取;低置信度用户确认 |
| 四层校验 | Phase 2.6 提示不硬拦截(审查层可选粒度) |
创作禁区(强制 · 不可违背)
| 规则 | 说明 | 违规处理 |
|---|---|---|
| 禁止正文章节自指 | 正文内不得出现「第X章」「第X章描述」等章节指代语句 | 违反 → 重写为情节/场景还原 |
| 禁止占位符坐标 | 正文不得出现「××」「北纬××」「海拔 +9999m」等未填写的数值占位符 | 违反 → 按场景填入真实设定或改为仪器损坏的乱码描写 |
| 替代写法·正常场景 | 地表/可测区域 → 填入 world_view.yaml 确立的真实地理坐标(经纬度/海拔) | 示例:填入 E87°15′ N35°42′ 海拔5400m |
| 替代写法·裂隙场景 | 裂隙内部/核心区域 → 改为仪器损坏/数据乱码的视觉描写 | 示例:「对应点:N ——′——′ E ——′——′ 海拔 + ——」(数据损坏,无意义) |
| 审核同步执行 | 写作时 + 审核时双重检查 | 子Agent创作时同步注入此规则 |
技术约束(已核查)
- 文风余弦相似度:v3.2.1 集成 embedding 引擎(nn 路径依赖 sentence-transformers);stat 零依赖回退路径保留;长文本自动分段保护
- docx 提取依赖 python-docx:环境需
pip install python-docx,extract.py 自动调用 - 自动提取准确性:章节/人物识别可能误判,全部低置信度条目标记
confidence: low,用户确认兜底 - 内置抓取:httpx / parsel / aiohttp 必须;embedding 引擎可选(未装 llm_extract 降级)
- 断点续传:checkpoint 文件与 .txt 同目录,失败重跑自动跳过已完成章节
更新记录
| 日期 | 版本 | 变更内容 |
|---|---|---|
| 2026-08-27 | v5.4.0 | 第三方审核模块(TPR):①新增 nwp/third_party_review/ 包(ReaderScorer/EditorScorer/AuditorScorer 三层 + ThirdPartyReport 统一报告);②Reader视角:代入感/可读性/悬念/情感节奏;③Editor视角:叙事节奏/对话质量/伏笔呼应/结构完整性/角色一致性;④Auditor视角:朱雀三层架构量化(Burstiness/判断句密度/词汇丰富度/伏笔回收/宏观叙事骨架)+文学性豁免(方案A固定规则);⑤综合评分:Reader×35%+Editor×35%+Auditor×30%,通过阈值≥7.0且Auditor≥6.0;⑥CLI新增5子命令:review-third-party/review-reader/review-editor/review-auditor/human-score,支持--json/--markdown输出;⑦nwp/__init__.py 版本同步为5.4.0;⑧reader.py/editor.py 编码问题修复(中文直写替代\uXXXX转义) |
| 2026-08-26 | v5.3.0 | 失控熔断与实时监控(来源:《赛博龙虾》幕1 Ch6 子Agent失控复盘):①新增 nwp/core/circuit_breaker.py(失控熔断判定:CJK>目标×1.8 / 时长>同批基准×2.0 / R8≥3,满足任一即触发 TERMINATE_AND_ROLLBACK);②新增 nwp/review/realtime_scanner.py(实时违规扫描:R8禁用语/章号自指/元标注钩子/强AI腔,重度≥3处或R8拒绝落盘,子Agent每500字自检);③新增 nwp/core/snapshot_manager.py(版本快照 create/rollback,保留最近3个);④新增 nwp/core/status_tracker.py(心跳账本 .nwp/subagent_state.json);⑤新增 nwp/core/subagent_monitor.py(监控编排器,60s轮询聚合+行动建议);⑥CLI新增 snapshot/subagent/scan/circuit/monitor 子命令;⑦SKILL.md 新增 Phase 2.1.5 熔断章节,派发指令模板新增500字自检+TERMINATE硬规则;⑧stdlib 单元测试 25 例全通过 |
| 2026-08-25 | v5.2.0 | AIGC去AI化优化闭环(来源:《雾中山志》4轮优化复盘):①ai_patterns.py 新增5类AI特征词库(转折句式_不是A是B/三连排比/格言点题/精确数字/清单体)+结构级检测(比喻同质化、固定格式引导词)+人工锚点识别(_detect_anchors);②新增 report_driven.py(parse_detect_report/prioritize/locate_segment/optimize_checklist/segment_local_stats);③SKILL.md 新增 Phase 2.9.5「AIGC检测驱动优化」;④子Agent模板新增「AI腔规避约束」(写作源头预防);⑤修复 quick.py 的 ai_result["score"]→["ai_score"] bug;⑥新增 docs/复盘_AIGC去AI化优化_2026-08-25.md |
| 2026-08-21 | v5.1.1 | 标杆技法自适应采集(来源:单元01复盘经验 + 元宝优化方案):①extract.py 新增 extract_benchmark_tech() 函数(四维解构:叙事/人物/对话/结构,含样本片段提取);②SKILL.md 新增 Phase 1.6「标杆技法解构」(--benchmark-tech=auto/local/off 三档参数驱动);③Phase 2.2 子Agent模板新增「标杆技法参考」节(narrative/character/dialogue/structure四维约束注入);④CLI新增 benchmark-tech 子命令(python -m nwp.cli benchmark-tech <项目目录>);⑤Phase 1.7=原Phase 1.6(卷级规划),Phase编号顺延 |
| 2026-08-14 | v5.0.2 | 朱雀AIGC检测应对:①ai_patterns.py 新增「判断句」检测类;②新增 fix_ai_patterns() + humanize() 定点修复(非随机改写);③gate_mode=off 新增「突发性注入」说明;④nwp humanize CLI子命令 |
| 2026-08-13 | v5.0.1 | Review并行化 + 断点续传设计:①新增 nwp/review/quick.py 快速检查集;②新增断点续传设计章(.nwp/state.json);③nwp resume CLI占位;④review/__init__.py 导出 quick_check/quick_report |
| 2026-08-12 | v4.2.0 | 落盘格式优化(NPW优化指令):①标题行由 # 第XXX章「标题」/# 小节XX「标题」 改为 # 「标题」(章节/小节序号仅存于文件名,不写入标题行);②文末禁止添加「钩子:」「预告:」等元标注块,正文以情节自然收尾 |
| 2026-08-12 | v4.1.0 | 能力边界调整:①删除「不支持改写/重写原文」禁区,改为可修改自行创建的原文;②抓取泛化,先生授权后自动联网搜索URL,无需手动提供;③章节标题字数不限,贴合核心内容即可;④明确「仅存本地,不做自动发布」指令锁定 |
| 2026-08-07 | v3.7.0 | 新增创作禁区泛化规则:禁止占位符坐标(经纬度/海拔未填数值);地表→填真实设定,裂隙→数据乱码描写 |
| 2026-08-01 | v3.4.1 | crawler-assistant v1.6.0 代码级融合(已回退至 v3.5.0 独立维护版本) |
| 2026-08-01 | v3.4.0 | 彻底解耦:移除 scripts/crawler/ 全部代码 |
| 2026-08-01 | v3.3.1 | 修正发布:补传 --changelog 参数 |
| 2026-08-01 | v3.3.0 | Phase 1.2 新增选项 B(网页 URL);代码级融合 crawler-assistant(已回退) |
| 2026-07-24 | v3.2.1 | 集成 embedding 引擎:Phase 2.5 第三层改用 nn embedding 余弦相似度(extract.py 文风指纹含 sample_texts 基线样本 + embed.py 文风检验脚本 + 长文本自动分段保护);stat 回退路径保留 |
| 2026-07-23 | v3.2.0 | 融入数据输入层(Phase 1.2 上传原文自动提取)+ 三层锚定一致性约束(Phase 2.5 世界观/大纲/连贯性)+ world_view.yaml/foreshadow.json 模板 + 子Agent注入增强;文风对齐改用统计指标(embedding 不可用) |
| 2026-07-20 | v3.1 | 新增 Phase 1.5「人格精炼」板块,角色档案含MBTI/语言风格/对话示例/禁区清单,用户确认后才进入正文创作 |
来源:docs/SOP<项目名>.md v3.0_
创建依据:长篇小说续写项目 + 重构为专用SOP + 人格精炼板块
迭代依据:数据输入层 + 三层锚定方案 + 可行性评估(embedding 约束)
v5.0.0 迭代依据:2026-08-13 NPW创作模块迭代·第一批(记忆宫殿+质量飞轮)
v3.4.1 迭代依据:crawler-assistant v1.6.0 代码级融合,Phase 1.2 内置抓取,零外部依赖
隐私与脱敏说明
- 原文数据:用户上传、主动提供 URL 抓取或授权联网搜索,版权责任由用户承担
- 项目记忆:world_view.yaml / 角色档案 / 伏笔仅存本地,不上传云端
- 敏感内容:若原文含真实人名/地名,建议在 Phase 1.5 确认时替换为虚构名称
- 输出脱敏:交付文档中不包含用户个人信息(除非用户主动写入正文)
- 存储策略:📌 2026-08-12 指令锁定——所有产出仅存本地工作区与桌面,绝不自动发布到任何平台
FAQ · 常见问题
Q1:我没有原文,能从0创作吗?
可以。Phase 1.2 跳过数据输入层,Phase 1.5 改由您口述设定(世界观/角色/文风)。
Q2:我想抓取网络小说原文,怎么操作?
Phase 1.2 选项 B:您授权后,自动联网搜索目标小说目录页 URL → BFS 自动发现章节 → 批量抓取 → 清洗 → 合并为 .txt → 进入提取分析。无需手动提供URL。
Q3:三层一致性校验会拦截我的创作吗?
不会。校验结果仅作风险提示反馈您,不自动拦截合理创作(避免过度工程化误杀)。
Q4:续写中途可以调整世界观设定吗?
可以。修改 分析/world_view.yaml 后,新批次子Agent会注入更新后的规则。
Q5:交付格式有哪些?
强制同时生成 .docx + .txt 双版本,自动复制到桌面。
Q6:人格精炼阶段我不想细看,能直接写吗?
可以。说「直接写」跳过确认,但角色档案仍会自动生成供子Agent使用。
Q7:低置信度标记是什么意思?
自动提取章节/人物/文风时,若样本不足、格式异常或与常用词混淆,会标记 confidence: low,需您确认或修正。
Q8:embedding 引擎未安装怎么办?
Phase 2.5 第三层校验自动回退到统计指标(零依赖),不影响核心功能。
Q9:NPW自己写的章节可以修改吗?
可以。NPW自行创建的章节可随时修改(不限次数),直接调用 Phase 2.7 精准修改或 Phase 2.8 批量修改。
断点续传设计(v5.0.1 设计章 · 待激活)
> 定位:大型项目(>20章)中断后无需从头跑,直接从断点恢复
> 来源:地球Online卷一类大型项目实战痛点
> 当前状态:设计章 + nwp resume CLI占位;先生下次遇到大型项目中断场景时激活实现
断点文件位置
<项目根目录>/.nwp/state.json
状态结构设计
{
"project_id": "earth_online_vol1",
"version": "5.0.1",
"current_phase": "2.3",
"completed_phases": ["0", "1.1", "1.2", "1.3", "1.4", "1.5", "2.1", "2.2"],
"gate_mode": "strict",
"chars_file": "分析/角色别名表.json",
"subagents": {
"batch_3": {
"status": "running",
"completed_chapters": ["ch_15", "ch_16", "ch_17"],
"pending_chapters": ["ch_18", "ch_19", "ch_20"],
"checkpoint": "2026-08-13T10:30:00Z"
}
},
"foreshadow_snapshot": {},
"word_count_log": []
}
触发时机
| 时机 | 动作 |
|---|---|
| 每 Phase 完成 | 写入 current_phase + completed_phases |
| 子Agent完成每章 | 追加 subagents.*.completed_chapters |
| 中断检测(会话结束前) | 写入 checkpoint 时间戳 |
python -m nwp.cli resume <项目目录> |
读取 state.json 并报告状态 |
激活条件
先生下次在大型项目(>20章)创作中途断开时,系统自动检测 .nwp/state.json 并提示「检测到未完成项目,是否从断点继续?」——先生回复「继续」后激活断点续传逻辑。
CLI占位命令
python -m nwp.cli resume <项目根目录>
> 当前输出状态报告;先生确认激活场景后,补充自动恢复逻辑
更多参考
- 深度 FAQ:
eferences/faq-deep.md(18 题,覆盖边缘场景) - 反模式说明:
eferences/anti-patterns.md(8 类常见错误 + 对比) - 使用示例:
eferences/examples.md(场景 A/B/C 完整示例)
更新记录(v4.0.0)
| 日期 | 版本 | 变更内容 |
|---|---|---|
| 2026-08-13 | v5.0.1 | Review并行化 + 断点续传设计:①新增 nwp/review/quick.py 快速检查集(字数+AI味+POV,~2min),Phase 2.9 快速版直接调用;②新增断点续传设计章(.nwp/state.json 结构 + 触发时机 + 激活条件);③nwp resume CLI占位;④review/init.py 导出 quick_check/quick_report |
| 2026-08-13 | v5.0.0 | P1 创作模块迭代(第一批):①新增 nwp/core/context.py 记忆宫殿上下文管理器(L1世界观/L2角色快照/L3章节摘要/L4跨卷上下文);②新增 nwp/review/quality.py 质量飞轮引擎(5维评分:字数/角色一致性/伏笔呼应/节奏/AI味,总分≥7.0通过);参考 novel-multi-agents QualityGuard + webnovel-writer RAG;来源:2026-08-13 搜索分析报告 |
| 2026-08-12 | v4.4.0 | P0 修复 + P1 优化(来源:元宝核验):①删除冗余 scripts/ 目录统一走 nwp/ 包;②Phase 2.9 粒度分层(快速版~2min逐章/完整版10-15min批量后);③SKILL.md scripts/*.py 全量替换为 nwp.* 模块路径;④新增 gate_mode 配置(strict/auto/off);⑤新增角色名拼写一致性校验(nwp.core.embed.validate_character_names + validate-chars 子命令 + Phase 1.5 别名表生成);⑥新增 nwp/__main__.py 双入口 |
| 2026-08-12 | v4.3.0 | 子Agent 完成验证门控(强制):派发即生效「逐章 python 统计 CJK 真实字数,落目标 ±10% 才回复完成,附真实字数;主会话独立复检,虚报回退重派」;来源《地球Online》卷一重写复盘 E1–E7 |
| 2026-08-12 | v4.2.0 | 字数预估校准机制 + 小节格式支持 + 落盘标题行优化(仅「标题」)+ 文末禁「钩子/预告」元标注块 |
| 2026-08-12 | v4.1.0 | 能力边界调整:可改自创原文 / 泛化抓取(授权后联网搜索,无需手动 URL)/ 章节标题字数不限 |
| 2026-08-11 | v4.0.1 | 通用注释规范:术语/代码首次出现注释,典故仅标生僻;一句话定性;world_view.yaml 新增 annotation_style 字段 |
| 2026-08-07 | v3.7.0 | 精准修改模块(不发版):新增 Phase 2.7 精准修改(单章定点修复)+ Phase 2.8 批量修改(全卷同类问题批量清理);来源:2026-08-07《归零秘境》1-32章66处章节自指违规清理实战复盘;核心经验:批量扫描优先+例外先生确认+修改后回扫验证+errors.md沉淀;插入至 Phase 2.6→3 之间 |
| 2026-08-05 | v3.6.0 | Fiction Crafter 参考借鉴:新增 Phase 1.6 卷级章节规划 + Phase 2.6 四层校验(+九维度审查,快速/完整两档)+ foreshadow.json扩展(characters配角追踪+alert_level分级预警)+ errors.md失败记录模板;目录结构新增errors.md;复盘检查清单新增Phase 1.6/2.6 |
| 2026-08-02 | v3.5.1 | 补齐 TRACE 参考标准:快速入门 + 能力边界三分类 + FAQ(8题)+ 隐私说明 + references/ 三文档(faq-deep/anti-patterns/examples) |
更新检查
联网比对本地版本与 SkillHub 已发布版本:
python3 scripts/update_check.py
退出码 10 = 有新版本可用,0 = 已最新。
```