Sfoglia il codice sorgente

docs: webnovel-writer gap analysis + version score tracking

Ma 7 mesi fa
parent
commit
69a915a8bd

+ 165 - 0
docs/specs/skill-distribution-proposal.md

@@ -0,0 +1,165 @@
+# Skill Distribution Proposal: 写作方法论的分层注入
+
+## 现状诊断
+
+### 当前架构
+
+```
+architect(LLM)→ planner(纯规则)→ composer(LLM)→ writer(LLM)→ auditor(LLM)
+```
+
+### 各 agent 的 skill 认知
+
+| Agent | 用 LLM? | 知道 skill? | 实际情况 |
+|-------|---------|-------------|---------|
+| **architect** | 是 | 部分 | 有"黄金三章法则""冲突开篇法"(硬编码�� prompt 里),但没有情绪升级、代入感、流水账修法 |
+| **planner** | **否(纯规则引擎)** | 极少 | 只有 mood/scene/title directive(基于 cadence 分析的机械规则),不知道黄金三章、欲望驱动、情绪升级 |
+| **composer** | 是 | 无 | 组装 contextPackage + ruleStack,不注入任何写作方法论 |
+| **writer** | 是 | **全部(4500 tokens)** | 9 个方法论模块全塞在 system prompt 里 |
+| **auditor** | 是 | 部分 | 有"爽点虚化""流水账"审查维度,但不知道"欲望驱动""情绪升级""盐溶于汤" |
+| **reviser** | 是 | 无 | 只有 tiered issues,不知道写作方法论 |
+
+### 核心问题
+
+1. planner 是纯规则引擎,不调 LLM → 不能通过 prompt 注入 skill → 只能硬编码
+2. writer 扛了全部 skill(4500 tokens)→ 注意力分散 → 方法论被 lost in the middle
+3. architect 有一些 skill(黄金三章、冲突开篇)但不完整
+4. auditor 有审查维度但不知道对应的写作技法
+5. 层间没有 skill 传递机制 → planner 不知道黄金三章 → 生成的 goal 不包含"ch1 冲突开场"指令 → writer 的黄金三章规则被 goal 覆盖
+
+## 方案:skill 按职责分层
+
+### 原则
+
+每个 agent 只拿它那个层级能用的 skill。不是"谁都塞全套",是"谁做什么决策就给它什么工具"。
+
+### 层级划分
+
+```
+┌─────────────────────────────────────────────────────────┐
+│ L1: 结构层 skill(architect + planner)                   │
+│     · 决定"故事怎么组织"                                  │
+│     · 黄金开篇(按语言区分):                               │
+│       中文:黄金3章 ch1冲突 ch2金手指 ch3短期目标             │
+│       英文:黄金5章 ch1冲突 ch2金手指 ch3目标                │
+│              ch4第一个大爽点 ch5提升赌注/新势力介入            │
+│     · 情绪波形:压制→释放→更大压制→更大释放                 │
+│     · 节奏控制:连续 2 章高压后必须给呼吸空间               │
+│     · 日常段必须为主线服务(万物皆为"饵")                  │
+│     · 开篇场景限制:最多 1-2 场景、3 角色                  │
+│     · 付费卡点意识(按语言区分):                           │
+│       中文:第15章付费墙,但前3章决定留存                    │
+│       英文:第6-8章付费墙,前5章必须建立强追读动力           │
+├─────────────────────────────────────────────────────────┤
+│ L2: 内容层 skill(writer)                                │
+│     · 决定"每段话怎么写"                                  │
+│     · 动作外化情绪(不写"他感到愤怒")                     │
+│     · 盐溶于汤(价值观通过行为传达)                       │
+│     · 五感描写(视觉/听觉/嗅觉/触觉/味觉)               │
+│     · 具体化/可视化/熟悉感                                │
+│     · 句式控制(少用"虽然但是"/"然而"/"了")               │
+│     · 通过事件立人设(不用外貌描写堆砌)                   │
+│     · 语言区分度(不同角色说话方式不同)                   │
+├─────────────────────────────────────────────────────────┤
+│ L3: 审查层 skill(auditor + reviser)                     │
+│     · 决定"写得好不好"                                    │
+│     · 流水账检测:有没有无冲突的���常流水叙述                │
+│     · 欲望缺口检测:有没有制造读者的情绪缺口               │
+│     · 人设一致性:角色行为是否由"经历+利益+性格"驱动        │
+│     · 爽点密度:本章有没有至少一个读者满足点               │
+│     · 代入感检查:主角困境是否有普遍性共鸣                 │
+│     · AI-tell 检测:已有的确定性检查                       │
+└─────────────────────────────────────────────────────────┘
+```
+
+### 具体实现
+
+#### L1: architect + planner
+
+**architect**(已有 LLM 调用):
+- 当前已有:黄金三章法则、冲突开篇法 → 保留
+- 需新增:情绪波形设计(volume_outline 里应该标注每卷的情绪曲线)
+- 需新增:付费卡点意识(前 6-8 章的 outline 要特别密集)
+
+**planner**(纯规则引擎,不调 LLM):
+- 当前已有:moodDirective(连续高压后降调)、sceneDirective(连续同场景后换场)→ 保留
+- 需新增的**硬编码规则**:
+  ```typescript
+  // 黄金开篇(按语言区分)
+  const goldenLimit = language === "en" ? 5 : 3;
+  if (chapterNumber <= goldenLimit) {
+    intent.mustKeep.push(GOLDEN_CHAPTER_RULES[language][chapterNumber]);
+  }
+
+  // 付费卡点前强化钩子
+  const paywallZone = language === "en" ? [4, 8] : [10, 15];
+  if (chapterNumber >= paywallZone[0] && chapterNumber <= paywallZone[1]) {
+    const msg = language === "en"
+      ? "Paywall approaching — chapter must end with a strong cliffhanger that makes the reader unable to stop"
+      : "本章结尾必须有强悬念钩子,读者即将进入付费区";
+    intent.mustKeep.push(msg);
+  }
+
+  // 日常段服务主线
+  if (cadence.moodPressure?.pressure === "low") {
+    const msg = language === "en"
+      ? "This quiet chapter must still plant a hook or advance a relationship — no pure filler"
+      : "日常段必须埋伏笔或推关系,不可纯填充";
+    intent.softConstraints.push(msg);
+  }
+  ```
+- 关键:planner 不是 LLM,不能"理解" skill → 只能把 skill 翻译成具体的 mustKeep/mustAvoid/directive 规则
+
+#### L2: writer
+
+- 从 system prompt 移除 9 个完整方法论模块(-4500 tokens)
+- 替换为速查卡(~800 tokens)—— 只有规则,不需要例子(因为 L1 已经确保结构正确)
+- 完整方法论写进 style_guide.md(writer 读 style_guide,进入上下文但不占 system prompt 核心位置)
+
+速查卡内容:
+```
+## 写作铁律
+- 情绪用动作外化,不写"他感到愤怒",写"他捏碎了茶杯"
+- 盐溶于汤:价值观通过行为传达
+- 配角有自己的算盘,主角压服聪明人
+- 五感代入:潮湿的短袖黏在后背上、医院消毒水的味
+- 具体化:不写"大城市",写"三环堵了四十分钟的出租车后座"
+- 句式:少用"虽然但是/然而/因此",用角色吐槽替代
+- 禁止:资料卡式介绍角色 / 一次引入超3角色 / 众人齐声惊呼
+- 人设三问:为什么?符合人设?读者突兀?
+```
+
+#### L3: auditor
+
+- 当前审查维度已有:爽点虚化、流水账 → 保留
+- 需新增维度描述(不是新代码,是审稿 prompt 里的维度说明):
+  ```
+  维度 N: 欲望缺口——本章是否制造了读者的情绪缺口(压制后期待释放)?
+  维度 M: 代入感——主角的困境是否有普遍性?读者能否觉得"我也会这么做"?
+  ```
+
+### 改动量估算
+
+| 文件 | 改动 | 大小 |
+|------|------|------|
+| `planner.ts` | 加黄金三章/付费卡点/日常服务主线的硬编码规则 | ~30 行 |
+| `writer-prompts.ts` | 9 个完整模块 → 1 个速查卡函数 | -3500 tokens, +800 tokens |
+| `writer.ts` initBook 路径 | 把完整方法论写入 style_guide.md | ~20 行 |
+| `continuity.ts` | 审稿维度描述加欲望缺口和代入感 | ~10 行 |
+| `architect.ts` | 加情绪波形和付费卡点提示 | ~15 行 |
+
+### 效果预期
+
+| 指标 | 改前 | 改后 |
+|------|------|------|
+| writer system prompt tokens | ~8000 | ~4300(-46%)|
+| planner 黄金三章感知 | ❌ | ✅(硬编码规则)|
+| planner 付费卡点意识 | ❌ | ✅(ch4-8 加强钩子)|
+| auditor 欲望缺口检测 | ❌ | ✅ |
+| skill 跨层传递 | writer 独扛 | 各层各司其职 |
+
+### 风险
+
+1. planner 是纯规则引擎,硬编码规则不如 LLM prompt 灵活 → 但 planner 的决策本来就是结构性的,硬编码更可靠
+2. writer 速查卡可能不如完整版有效 → 但 style_guide 有完整版兜底,只是注意力层级低一些
+3. 改动涉及 4 个 agent → 需要回归测试 → 但每个改动都很小(10-30 行)

+ 211 - 0
docs/specs/v10-skill-assignment.md

@@ -0,0 +1,211 @@
+# V10 Skill Assignment: 谁拿谁的
+
+## Agent 特性
+
+| Agent | 调 LLM? | 职责 | Skill 注入方式 |
+|-------|---------|------|---------------|
+| **architect** | 是 | 设计 volume_outline/story_bible/book_rules | prompt |
+| **planner** | **否(纯规则引擎)** | 生成 chapterIntent(goal/directives/hooks) | **硬编码 TypeScript** |
+| **composer** | 是 | 组装 contextPackage + ruleStack | prompt(但主要是选择逻辑,skill 需求低) |
+| **writer** | 是 | 写正文 | prompt(速查卡)+ style_guide(完整版) |
+| **auditor** | 是 | 审稿打分 | prompt(审查维度描述) |
+| **reviser** | 是 | 修复章节 | prompt(和 writer 共享内容层 skill) |
+
+## 全部 Skill 清单 + 分配
+
+### S01: 黄金开篇(中文3章/英文5章)
+
+内容:ch1 冲突开场、ch2 亮金手指、ch3 短期目标、[EN: ch4 大爽点、ch5 提升赌注]
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则 | `if chapterNumber <= goldenLimit → mustKeep.push("ch1必须冲突开场/ch2必须亮金手指/...")` |
+| **writer** | ~~system prompt~~ | 不需要了——planner 已经把黄金三章翻译成了具体的 mustKeep 指令 |
+| architect | prompt | volume_outline 设计时标注前3/5章的节奏要求 |
+
+### S02: 付费卡点意识
+
+内容:中文第15章付费墙、英文第6-8章付费墙
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则 | `if chapterNumber in paywallZone → mustKeep.push("本章结尾必须有最强钩子")` |
+| **architect** | prompt | "前6-8章的 outline 节奏要比后面更密集" |
+
+### S03: 情绪波形(压制→释放→更大压制→更大释放)
+
+内容:情绪不能一直高压也不能一直平淡,要有波形
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则(已有) | `moodDirective`: 连续高压后强制降调。**需新增**:连续低压后强制升压 |
+| **architect** | prompt | volume_outline 里标注每卷的情绪曲线走势 |
+| auditor | 审查维度 | "本章情绪是否与前2章形成波形变化" |
+
+### S04: 日常段服务主线(万物皆为"饵")
+
+内容:日常段必须埋伏笔/推关系/建反差,纯填充即流水账
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则 | 如果 cadence 检测到当前是"日常/喘息"类型章 → `softConstraints.push("日常段必须为主线服务")` |
+| **auditor** | 审查维度 | "本章日常段落是否与主线关联(伏笔/关系/反差)" |
+
+### S05: 动作外化情绪 + 去 AI 味
+
+内容:不写"他感到愤怒"写"他捏碎了茶杯"。少用"虽然但是/然而/了"
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | 速查卡 | "情绪用动作外化 / 句式少用转折词 / 减少了字" |
+| **writer** | style_guide | 完整正反例对照表 |
+| **reviser** | prompt | 同 writer 速查卡(修复时也要遵循) |
+| auditor | 审查维度 | AI-tell 检测(已有确定性检查) |
+
+### S06: 盐溶于汤
+
+内容:价值观通过行为传达,不喊口号
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | 速查卡 | "价值观通过行为传达,不喊口号" |
+| **writer** | style_guide | 正反例 |
+
+### S07: 六步走人物心理分析
+
+内容:处境→动机→信息边界→性格过滤→行为选择→情绪外化
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | style_guide | 完整六步(太长不适合速查卡) |
+| **auditor** | 审查维度 | "角色行为是否有逻辑链(动机→选择→后果)" |
+
+### S08: 人设防崩三问
+
+内容:为什么?符合人设?读者突兀?
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | 速查卡 | 三问(精简) |
+| **auditor** | 审查维度 | "角色行为是否由'经历+利益+性格'驱动" |
+
+### S09: 配角 B 面
+
+内容:配角有自己的算盘、语言区分度、拒绝集体反应
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | 速查卡 | "配角有自己算盘 / 不同角色说话方式不同 / 不写众人齐声惊呼" |
+| **writer** | style_guide | 完整构建方法 |
+
+### S10: 读者心理学(期待管理/信息落差/锚定效应)
+
+内容:让读者比角色多知道一点=紧张,少知道一点=好奇
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则 | 当 hook 即将回收时,提前 1-2 章在 mustKeep 里加"制造信息落差" |
+| **writer** | 速查卡 | "信息落差:多知道=紧张,少知道=好奇" |
+
+### S11: 欲望驱动(基础欲望/主动欲望/情绪缺口)
+
+内容:制造情绪缺口→读者期待释放→释放超过预期
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则 | 如果 hook 进入 eligibleResolve → 在前 1 章的 mustKeep 加"加重压制,为下章释放蓄力" |
+| **writer** | 速查卡 | "释放点必须超过读者预期,只满足70%等于失败" |
+| **auditor** | 审查维度 | "本章是否制造了情绪缺口或完成了情绪释放" |
+
+### S12: 强情绪升级法
+
+内容:坏事叠坏事,每层比上一层过分
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | style_guide | 完整的递进示例 |
+| **writer** | 速查卡 | "坏事叠坏事,每层比上一层过分" |
+
+### S13: 代入感技法(自然信息交代/画面代入/共鸣锚点)
+
+内容:具体化/可视化/熟悉感/五感描写
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | 速查卡 | "具体化——不写大城市,写三环堵了四十分钟的出租车后座" |
+| **writer** | style_guide | 完整六大支柱 |
+
+### S14: 场景连续性约束
+
+内容:不得连续2章以上在同一空间类型
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **planner** | 硬编码规则(已有) | `sceneDirective`: 连续同场景后强制换场 |
+
+### S15: 写前自检清单
+
+内容:大纲锚定、利益最大化、冲突发起者、配角诉求、信息越界、章尾钩子
+
+| 给谁 | 怎么给 | 给什么 |
+|------|--------|--------|
+| **writer** | style_guide | 完整清单(在 PRE_WRITE_CHECK 输出时执行) |
+
+## 汇总:每个 Agent 拿到什么
+
+### Architect(prompt 补充)
+- S02: 前6-8章 outline 节奏要更密集
+- S03: volume_outline 标注情绪曲线
+- 已有:黄金三章法则、冲突开篇法
+
+### Planner(硬编码规则)
+- S01: 黄金开篇 → mustKeep(**新增**)
+- S02: 付费卡点 → mustKeep(**新增**)
+- S03: 情绪波形 → moodDirective(已有降调,**需加升压**)
+- S04: 日常服务主线 → softConstraints(**新增**)
+- S10: 信息落差 → mustKeep(**新增**,结合 hook 回收时机)
+- S11: 欲望驱动 → mustKeep(**新增**,hook 回收前加重压制)
+- S14: 场景连续性 → sceneDirective(已有)
+
+### Writer(速查卡 ~800 tokens + style_guide 完整版)
+速查卡:
+- S05: 动作外化 / 句式控制 / 去AI味
+- S06: 盐溶于汤
+- S08: 人设三问
+- S09: 配角有算盘 / 语言区分 / 不齐声惊呼
+- S10: 信息落差
+- S11: 释放超过预期
+- S12: 坏事叠坏事
+- S13: 具体化/五感
+
+style_guide(完整版):
+- S05: 正反例对照表
+- S07: 六步走心理分析
+- S09: 配角完整构建方法
+- S12: 强情绪递进完整示例
+- S13: 代入感六大支柱
+- S15: 写前自检清单
+
+### Auditor(审查维度补充)
+- S03: 情绪波形检查
+- S04: 日常段主线关联检查
+- S07: 角色行为逻辑链检查
+- S08: 人设一致性检查
+- S11: 情绪缺口/释放检查
+- 已有:爽点虚化、流水账、AI-tell
+
+### Reviser(prompt 补充)
+- 速查卡同 writer(修复时也要遵循内容层 skill)
+
+## 改动清单
+
+| 优先级 | 文件 | 改什么 | 行数 |
+|--------|------|--------|------|
+| P0 | planner.ts | S01 黄金开篇 + S02 付费卡点 + S04 日常服务主线硬编码 | ~40 行 |
+| P0 | writer-prompts.ts | 9 个完整模块 → 速查卡函数 | 改写 ~50 行 |
+| P0 | writer.ts initBook | 完整方法论写入 style_guide.md | ~30 行 |
+| P1 | planner.ts | S10 信息落差 + S11 欲望驱动(结合 hook 时机) | ~20 行 |
+| P1 | planner.ts | S03 升压(已有降调,加反向) | ~10 行 |
+| P1 | continuity.ts | S03/S04/S07/S08/S11 审查维度描述 | ~30 行 |
+| P2 | architect.ts | S02/S03 outline 节奏标注 | ~15 行 |
+| P2 | reviser.ts | 速查卡注入 | ~10 行 |

+ 94 - 0
docs/specs/webnovel-writer-gap-analysis-stars.md

@@ -0,0 +1,94 @@
+# InkOS vs webnovel-writer 星级差距总览
+
+## 维度评级
+
+| 维度 | webnovel-writer | InkOS | 差距说明 |
+|------|:-:|:-:|---|
+| outline 粒度 | ★★★★★ | ★★☆ | 每章16字段 vs 卷级描述 |
+| 写前 brief | ★★★★★ | ★★☆ | 3层8面板执行包 vs 一句goal |
+| Anti-AI | ★★★★★ | ★★☆ | 7层200+词+改写算法+阻断 vs 确定性检测+提示 |
+| 审稿深度 | ★★★★★ | ★★★☆ | 6独立checker vs 1个auditor(但InkOS有33维度) |
+| 伏笔管理 | ★★★★ | ★★★★ | 差距小(两者都有紧迫度排序) |
+| 节奏控制 | ★★★★★ | ★★☆ | Strand Weave+时间系统 vs cadence mood分析 |
+| 状态管理 | ★★★★ | ★★★★ | 差距小(两者都有持久化状态) |
+| 实体管理 | ★★★★★ | ★★☆ | 置信度实体提取 vs 无 |
+| 题材 Profile | ★★★★★ | ★★★ | 12+题材定制参数+反套路库 vs 基础genre profile |
+| 自动化程度 | ★★☆ | ★★★★★ | 半自动(Claude Code触发) vs 全自动pipeline |
+| 多模型支持 | ★☆ | ★★★★★ | 绑死Claude vs 任意LLM |
+| Hook 调度 | ★★★ | ★★★★★ | 简单紧迫度排序 vs lifecycle-aware timing profile |
+| 导入/续写 | ☆ | ★★★★★ | 无 vs continuation/series/fanfic 三模式 |
+
+## 版本演进分数追踪
+
+### 断崖残局(玄幻生存)
+| 版本 | 分数 | 核心问题 |
+|------|------|----------|
+| v6 | 92 | 基线最高 |
+| v8 | 83.5 | 多门槛veto压掉修复 |
+| v9r2 | 89.5 | 评分循环生效 |
+| v9r3 | 90.5 | 控制层泄漏拉低到84(sanitize前) |
+| v9 final | 84 | H001/"前几章"/"金手指"泄漏 |
+| v10 | 72 | "第一章"/"小爽点"新型泄漏(mustKeep污染) |
+
+### 旧城暗号(都市悬疑)
+| 版本 | 分数 | 核心问题 |
+|------|------|----------|
+| v6 | 92 | 基线 |
+| v8 | 76.5 | 最大跌幅 |
+| v9r2 | 91 | 恢复 |
+| v9r3 | 93 | 历史最高(sanitize前) |
+| v9 final | 90 | ch5 有H-code泄漏 |
+| v10 | 91 | 追读性9/10,接近可上架 |
+
+### 斗破同人(同人)
+| 版本 | 分数 | 核心问题 |
+|------|------|----------|
+| v8 | 73 | 基线 |
+| v9r2 | 81 | 提升 |
+| v9r3 | 82.5 | 微升 |
+| v9 final | 82 | 节奏慢(退婚跨3章) |
+| v10 | 78 | 更慢(5章1个beat),缺beat decomposition |
+
+### 三体续写(续写模式)
+| 版本 | 分数 | 核心问题 |
+|------|------|----------|
+| v8 | 56 | 会议室死循环 |
+| v9 final | 85 | 大幅提升,偏家庭日常 |
+
+### 三体系列(系列模式)
+| 版本 | 分数 | 核心问题 |
+|------|------|----------|
+| v8 | 82 | 重述原著 |
+| v9r3 (bug) | 69.4 | planner锚错到卷一 |
+| v9 final | 90 | planner fix后outline全部落地 |
+| v10 | 92 | 历史最高,钟绍林象棋场景最佳 |
+
+## 关键根因追踪
+
+### 问题1: 控制层泄漏
+- v9: H001/H002/"前几章"/"金手指" → 修了narrative-control sanitize
+- v10: "第一章"/"这一章"/"小爽点" → 根因:mustKeep槽被方法论污染
+- 根本修法:craft rules 从 mustKeep 拆出去,planner 做语义编译
+
+### 问题2: 节奏慢/beat稀疏
+- 根因:系统缺少"volume outline → chapter beats"的中间层
+- architect 给粗事件 → planner 原样传 → writer 在同一事件里打转
+- 根本修法:planner 调 LLM 做 beat decomposition
+
+### 问题3: AI味
+- 根因:Anti-AI 只在写前给提示(教育),不在写后审+阻断(执法)
+- webnovel-writer 方案:独立 polish 步骤,7层审查,pass/fail 阻断
+- 根本修法:加独立 anti-AI polish 步骤
+
+### 问题4: 写作方法论注入
+- v9之前:governed mode 下9个方法论模块全部跳过
+- v10:改成 craft card(800 tokens)+ style_guide 完整版
+- 仍有问题:planner 的 skill 注入(injectStructuralSkills)混进 mustKeep 导致泄漏
+- 根本修法:planner LLM 化,skill 编译成具体剧情指令
+
+### 问题5: planner 太薄
+- 现状:纯规则引擎,不调 LLM,只做 outline 匹配 + 数组 push
+- 做不了:beat decomposition、craft brief 编译、标题生成
+- webnovel-writer 方案:Context Agent(LLM)组装 3 层执行包
+- AI_NovelGenerator 方案:chapter_blueprint(LLM)每章元数据
+- 根本修法:planner 变成 LLM agent

+ 99 - 0
docs/specs/webnovel-writer-gap-analysis.md

@@ -0,0 +1,99 @@
+# InkOS vs webnovel-writer 差距分析
+
+> 参考项目:https://github.com/lingfengQAQ/webnovel-writer
+> 本地副本:/Users/majunxian/Desktop/PyProject/webnovel-writer
+
+## 核心差距(按优先级)
+
+### G1: outline 粒度(最大差距)
+- **他们**:每章 16 字段(目标/阻力/代价/时间锚/爽点类型/Strand/钩子类型/反派层级/视角/关键实体/章末开放问题...)
+- **我们**:卷级事件描述("第13-17章:红岸残响"),不到章
+- **影响**:斗破5章只推一个beat、三体全是会议
+- **修法**:planner 调 LLM 做 chapter beat decomposition
+
+### G2: 写前 brief(Context Agent)
+- **他们**:3 层 8 面板的"创作执行包"
+  - Layer 1: 任务简报(核心任务/接前章/出场人物状态/场景约束/时间约束/风格指导/伏笔紧迫度/读者牵引)
+  - Layer 2: 上下文契约(冲突一句话/开场类型/情绪节奏/信息密度)
+  - Layer 3: 直接写作提示(章内节拍:开场→推进→反转→钩子)
+- **我们**:chapterIntent(一句 goal + mustKeep 数组 + hookAgenda)
+- **修法**:planner LLM 输出结构化 chapter brief
+
+### G3: Anti-AI(写完后独立审+阻断)
+- **他们**:7 层逐段检查,200+ 词 blocklist,改写算法,`anti_ai_force_check: pass/fail` 阻断
+  - L1: 10 类高危词(总结词/枚举词/学术腔/逻辑连接/直接情绪/动作套话/环境套话/叙事废话/抽象词/机械开头)
+  - L2: 句式规则(禁3段式/禁连续同结构/禁列表叙述)
+  - L3: 形容词副词限制(一名词前≤2形容词/每300字≤4程度副词)
+  - L4: 四字成语限制(每500字≤3个/不连续/必须服务叙事)
+  - L5: 对话去AI(禁说明书式/对话必须有意图/允许犹豫打断反问)
+  - L6: 段落结构(单句段25-45%/段落20-100字/场景转换用动作)
+  - L7: 标点节奏(不连续省略号感叹号/每段≤1个/4逗号以上必须拆)
+  - 改写算法:抽象情绪→生理反应+意图+动作 / 结论句→事实+代价+决定 / 3+解释→混对话动作反问
+- **我们**:analyzeAITells 确定性检测(5个高疲劳词)+ craft card 提示,不阻断
+- **修法**:加独立 polish 步骤,从 webnovel-writer 的 polish-guide.md 抽取规则
+
+### G4: Strand Weave 节奏配比
+- **他们**:Quest 55-65% / Fire 20-30% / Constellation 10-20%,最大连续/缺席限制,30章模板
+- **我们**:cadence mood/scene 分析(只检测连续同类型,不做配比规划)
+- **修法**:在 planner 加 strand 追踪,plan 阶段分配每章 strand 类型
+
+### G5: 时间系统
+- **他们**:时间锚点 + 倒计时系统("末世第3天")+ 与上章时差 + 章内时间跨度
+- **我们**:无
+- **修法**:可选功能,在特定题材启用
+
+### G6: 实体管理
+- **他们**:AI 实体提取 + 置信度评分(>0.8自动/0.5-0.8警告/<0.5人审)+ 场景分块 + 向量索引
+- **我们**:memory.db fact history(较简单)
+- **修法**:可选增强,非核心
+
+### G7: 题材 Profile 深度
+- **他们**:每题材有定制参数(钩子偏好/爽点密度/微兑现配置/节奏红线/约束豁免)+ 反套路库 + 反派类型库
+- **我们**:genre profile 有基础字段(satisfactionTypes/chapterTypes/fatigueWords),但没有钩子偏好和反套路库
+- **修法**:扩展 genre profile + 从 webnovel-writer 移植反套路库
+
+### G8: 债务系统(Override Contract)
+- **他们**:过渡章无法满足爽点要求时签"欠条",约定几章内补偿,10%/章利息
+- **我们**:无
+- **修法**:可选,优先级低
+
+## 我们的独有优势(他们没有的)
+
+1. **Hook lifecycle-aware 调度**:按 payoffTiming(immediate/near-term/mid-arc/slow-burn/endgame)差异化调度
+2. **评分循环取最高分**:3 轮 assess→revise→assess,自动选最佳版本
+3. **Continuation/Series 导入模式**:支持从已有作品续写/新时空生成
+4. **多模型支持**:不绑死 Claude,可对接 OpenAI/DeepSeek/Qwen
+5. **全自动 pipeline**:一条命令走完,不需要人在 loop 里
+6. **narrative-control sanitize**:控制层泄漏的系统性防护(虽然还没完美)
+
+## 修复优先级
+
+| 优先级 | 差距 | 改动 | 预期效果 |
+|--------|------|------|----------|
+| P0 | G1+G2 | planner 调 LLM 做 beat decomposition + chapter brief | 解决节奏慢 + mustKeep 污染 |
+| P0 | G3 | 独立 anti-AI polish 步骤 | 解决 AI 味 |
+| P1 | G4 | Strand Weave 节奏配比 | 章节类型多样性 |
+| P1 | G7 | 题材 profile 扩展 + 反套路库 | 番茄商业化 |
+| P2 | G5 | 时间系统 | 时间逻辑一致性 |
+| P2 | G6 | 实体管理增强 | 长篇连续性 |
+| P3 | G8 | 债务系统 | 节奏弹性 |
+
+## 关键文件参考(webnovel-writer 本地)
+
+| 功能 | 文件 |
+|------|------|
+| Context Agent 执行包 | `webnovel-writer/agents/context-agent.md` |
+| Anti-AI 7 层 | `webnovel-writer/skills/webnovel-write/references/polish-guide.md` |
+| Strand Weave | `webnovel-writer/references/shared/strand-weave-pattern.md` |
+| 爽点指南 | `webnovel-writer/references/shared/cool-points-guide.md` |
+| 每章大纲规划 | `webnovel-writer/skills/webnovel-plan/references/outlining/chapter-planning.md` |
+| 题材 Profile | `webnovel-writer/references/genre-profiles.md` |
+| 题材套路库 | `webnovel-writer/skills/webnovel-init/references/genre-tropes.md` |
+| 反套路规则 | `webnovel-writer/skills/webnovel-init/references/creativity/anti-trope-*.md` |
+| 审查器输出格式 | `webnovel-writer/references/checker-output-schema.md` |
+| 上下文契约 | `webnovel-writer/references/context-contract-v2.md` |
+| 战斗场景写法 | `webnovel-writer/skills/webnovel-write/references/writing/combat-scenes.md` |
+| 对话写法 | `webnovel-writer/skills/webnovel-write/references/writing/dialogue-writing.md` |
+| 情绪心理写法 | `webnovel-writer/skills/webnovel-write/references/writing/emotion-psychology.md` |
+| 场景描写 | `webnovel-writer/skills/webnovel-write/references/writing/scene-description.md` |
+| 钩子/爽点类型库 | `webnovel-writer/skills/webnovel-write/references/writing/genre-hook-payoff-library.md` |