1
0

narrative-intelligence-roadmap-2026-06-10.md 11 KB

叙事智能升级路线图(2026-06-10)

状态(2026-06-11 归档): 本路线图已被 v7 story repo 规格吸收,作为独立计划取消。条目归宿:M1-1 被否决(v7 spec §13,信息差/+时间线在场列取代 witnesses 投影);M1-2 → 承诺派生指标(§5)+ 句式体检;M1-3 → 风格宪法否决入宪(§6.1);M1-4 → 记忆层卷摘要(§4.6);M2-1 → 体检事务(§9);M2-2 → 三镜头评审(§8);M3-1 → 卷复盘伏笔机会扫描(§9);M2-3/M3-2/M3-3 随冻结令搁置。本文"不做清单"中的"禁全自动"已被 spec 0.5 撤销(§8.1),以 spec 为准。见 docs/architecture/story-repo-spec-2026-06-10.md

来源:2026-06-10 全项目审查 + 「AI 写长篇网文系统」架构讨论。 前置依赖:docs/superpowers/plans/2026-06-10-audit-fix-plan.md(修复计划)完成 Phase 0/1 后启动本路线图;两者改同一批模块,不要并行。

设计原则(讨论共识)

  1. 状态分三层:事实状态(已有:event log + projection + contract)、叙事状态(张力/信息差/爽点节奏——当前最大空白)、文体状态(口癖/声音/漂移——第二空白)。本路线图主攻后两层。
  2. 能机检的不用模型:节奏规则做成"写完后的度量"而非"写作时的指导";确定性脚本量出指标,超阈值才打回。
  3. 重脚本、轻模型:每次模型调用前由确定性代码把上下文压到最小最准;token 成本是真实作者的硬约束。
  4. 作者品味是唯一不可再生资源:高杠杆决策点(大纲拍板、弧光转折、伏笔埋收)永远留给人;系统从否决中学习而不是要求作者重复纠正。

M1 近期(修复计划完成后立即可做,纯增量)

M1-1 角色知识边界(信息差管理)

动机:悬念 = 作者已知/读者已知/角色已知三个集合的差。AI 两类隐蔽错误——泄密(角色说出不该知道的事)和废笔(向读者复述已知信息)——现有 review 维度抓不住。

设计

  • event log 已是事件事实源,为 story_event_schema 增加可选字段 witnesses: [entity_id](哪些角色在场/得知)。data-agent 提取事件时顺带标注,无标注默认"仅在场角色"。
  • 新增投影 knowledge_projection_writer:按角色累积"已知事件集",落 index.db 新表 entity_knowledge(entity_id, event_id, learned_chapter)
  • prewrite 阶段(write_gates/prewrite.py 或 context pack 新 section knowledge_boundaries)注入:本章在场角色各自不知道的关键事件 top-N(按与本章大纲的实体重叠筛选)。
  • review 新增机检维度 info_leak:扫描本章对白/内心戏中出现的实体与事件关键词,比对说话角色的已知集,疑似泄密列为 warning(不自动 blocking——误报率先观察一个月)。

落点story_event_schema.py、新 knowledge_projection_writer.pyevent_projection_router.py 注册、context_manager.py 新 section、review_pipeline.py 新检查器。 验收:构造"角色 A 不在场的密谋事件"测试项目,A 的对白引用该事件时 review 报 info_leak。

M1-2 叙事节奏度量脚本化(写后量化,不是写前说教)

动机:爽点密度/钩子强度目前是 SKILL 里的指导性文字,模型打折执行;chapter_reading_power 表已有 hook_type/hook_strength 数据但没人消费成硬门禁。

设计

  • 新增 pacing_metrics.py:输入章号,输出确定性指标——距上次主线推进章数(strand_tracker)、距上次 strong hook 章数、本章爽点事件数(event log 中 payoff 类事件)、连续过渡章计数。
  • write_gates/postcommit.py 增加软门禁:连续 N 章(默认 3)无 strong hook 或主线停滞超过配置阈值 → commit 通过但输出醒目"节奏债"警告并写入 chase_debt(表已存在,复用)。
  • webnovel-review SKILL 把"节奏检查"从模型评审项改为:先读 pacing_metrics 输出,模型只解释数字、不重新估计数字。

落点:新 data_modules/pacing_metrics.pywrite_gates/postcommit.py、review SKILL Step 调整、dashboard PacingPage 直接展示该指标(前端已有页面骨架)。 验收:构造连续 4 章 weak hook 的测试数据,postcommit 输出节奏债警告。

M1-3 Override 泛化(从否决中学规则)

动机:作者连续改掉同类表达,系统应学到风格规则,而不是等第四次。override ledger 与 project-memory add-pattern 机制都已存在,缺的是连接。

设计

  • override_ledger_service.py 新增 summarize_recurring(min_count=3):按 override 的 category/target 聚类,输出"同类否决 ≥3 次"的候选规则。
  • webnovel-review SKILL 收尾步骤加一条指令:调用上述命令,存在候选时向作者展示"检测到你多次否决 X,是否固化为风格规则?",确认后写入 project_memory.json 的 patterns(已有 add-pattern 命令),后续 context pack 的 preferences section 自动携带。

落点override_ledger_service.py、review SKILL、无新存储。 验收:3 条同类 override 后 summarize_recurring 返回聚类项。

M1-4 分层摘要(卷级中间层)

动机:现有 recent_summaries(近 3 章全文摘要)+ story_skeleton(间隔采样)之间缺"卷级摘要",写 800 章时中距离剧情(50-200 章前)的召回靠 RAG 撞运气。

设计

  • 卷完结时(update_master_outline 或 plan skill 的卷复盘步骤)生成 .webnovel/summaries/volume_NN.md(500 字内:主线推进、关系变化、未回收伏笔清单)。
  • context_manager._build_pack 的 core 增加 volume_summaries:当前卷之前的全部卷摘要(每卷 500 字,30 卷也只有 1.5 万字,且随距离可再截断)。

落点:plan SKILL 卷复盘步骤、context_manager.pysummary_projection_writer.py 不动(卷摘要由 skill 流程产出而非投影)。 验收:构造含 volume_01.md 的项目,context pack 出现 volume_summaries section。


M2 中期(M1 验证后)

M2-1 文体指纹与漂移检测

动机:千章尺度的声音漂移无法靠上下文策略根治(逐章累积、每步都在容差内),只能靠周期性度量校准。style_sampler.py 已有采样底子。

设计

  • style_sampler 扩展 fingerprint 子命令:对指定章节区间计算——句长分布(均值/方差/分位)、对白占比、高频口癖词 top-20(按角色分组)、段落长度分布、标点密度。结果存 index.db 新表 style_fingerprints(range_start, range_end, metrics_json)
  • 基线 = 第 1-30 章(或作者指定的"手感最好的区间");每 50 章自动对比最新窗口 vs 基线,KL 散度/简单百分比偏移超阈值 → doctor 与 dashboard 报警,并输出具体漂移项("主角对白平均句长 +40%")。
  • 主角/核心配角的口癖词表进 context pack 的 voice_contract section(写前注入),漂移报警时由作者决定校准方向(回拉 or 接受演化并更新基线)。

验收:人工构造前后文风差异明显的两批章节,fingerprint diff 报告捕捉到句长与口癖偏移。

M2-2 评审人格拆分

动机:同一模型写+评共享盲区;单一 reviewer 的注意力平均分配等于都不深。

设计

  • reviewer agent 改为按"镜头"多次调用(不增加 agent 数量,改 prompt 参数化):--lens reader(毒舌白嫖读者:只回答爽不爽、第几段想划走、会不会弃)、--lens editor(结构与商业性)、--lens fact(只比对事实,输入为机检结果+contract)。
  • 镜头裁决规则:fact 镜头由脚本结果主导(模型只解释);reader 镜头产出不进 blocking,只进 reading_power/弃书风险标注;editor 镜头维持现有 blocking 语义。
  • review SKILL 流程改为:机检 → 三镜头并行 → 汇总(明确"文笔好坏"不在任何镜头职责内,防止模型口味自我强化)。

验收:同一测试章三镜头输出可区分(reader 镜头不含结构术语,editor 镜头不含"这段不够爽"类表述)。

M2-3 Token 成本预算线

动机:multi-agent 是拿 token 换确定性,写百万字的成本会劝退真实作者;context 减负重构(refactor/context-minimal-flow 分支)已在做单次调用瘦身,缺总量视角。

设计

  • run_ledger 已记录每次 SubagentRun,扩展记录 prompt/output 字符数(近似 token);quality_trend_report 增加"每章成本"曲线。
  • 设定每章字符预算(config 项,默认宽松),超预算章在报告中标黄并列出最大头的调用——给作者看见"钱花在哪",不做硬限制。
  • 对照实验钩子:同一章纲跑 --profile minimal/full 两种 context 模板(TEMPLATE_WEIGHTS 已支持多模板),review 分数与成本一起入库,用数据决定默认模板瘦到什么程度。

验收:quality_trend_report 输出含每章成本列与超预算标记。


M3 实验(高风险高回报,单独立项验证)

M3-1 长线伏笔机会扫描

动机:AI 不会自己起意"这里埋个 300 章后才响的雷";目前伏笔全部依赖大纲显式声明。这是开放问题,谁解了谁有护城河。

设计草图:plan skill 的卷规划步骤新增"机会扫描":输入 = 未回收伏笔清单 + 总纲远期节点 + 本卷章纲;让模型提议 3-5 个"本卷可顺手埋、N 卷后回收"的候选(必须引用总纲的具体远期节点作为回收点,防止悬空),作者勾选后写入 plot_threads.foreshadowing(带 target_chapter)。人选 AI 提,不全自动。

验证标准:连续两卷使用后,作者采纳率 ≥1/卷 才值得保留;否则砍掉。

M3-2 读者模拟器(弃书点预测)

设计草图:reader 镜头(M2-2)的延伸——按"白嫖党/老书虫/女频读者"等画像参数化,对每章输出 0-100 弃书风险与触发段落。先只做趋势可视化(dashboard 已有 reading-power 页),积累 100+ 章人工对照后再决定是否进入门禁。明确定位:参考信号,永不 blocking。

M3-3 review 评分与真实数据对齐(远期)

若作者发书,把章节追读/留存数据(手动导入 CSV 即可)与 review 分数、pacing_metrics 做相关性分析(quality_trend_report 扩展)。哪个内部指标与真实留存相关性最高,哪个就升权——让质量闭环最终锚定在读者行为而不是模型口味上。


不做清单(明确否决,避免回潮)

  • ❌ 全文向量化作为事实召回主路径(语义相似 ≠ 叙事相关;向量只服务文风/场景参考)。
  • ❌ 让模型自由评"文笔好坏"(口味自我强化,全书越来越 AI 味)。
  • ❌ 全自动无人值守写作模式(作者品味流失 = 系统失去校准源)。
  • ❌ 增加新的常驻 agent(现有 4 个职责已清晰;新能力优先做成脚本或现有 agent 的参数化镜头)。

里程碑顺序与依赖

修复计划 Phase 0/1 ──> M1-1 知识边界 ──> M2-2 评审人格(fact镜头吃M1-1产出)
                  ├──> M1-2 节奏度量 ──> M2-3 成本预算线(共用run_ledger/报告)
                  ├──> M1-3 Override泛化
                  └──> M1-4 卷级摘要 ──> M2-1 文体指纹(共用采样基建)
M3 全部独立立项,任一 M2 完成后可启动