精讲:长篇小说 → 书规模小说化细说
定位与产出
把一本长篇小说(100万字级、数十卷)改写成一部书规模的口语化细说:
- 一章对应原著一卷,章数 = 卷数;每章 3,500–4,500 字。
- 总篇幅默认约 10 万字(
--target可调)。 - 文风:第三人称限知(跟随主角)、口语直给、有场景有幽默;最终交付前必须过中文去 AI 味清洗(见
references/humanizer-zh.md)。 - 事实纪律:所有情节点、人名、事件取自该卷的事实碎片(novel-plot-digest 产出的
vol_NN.md拆解碎片,或本流程抽取的卷文本),不编造原著没有的重大情节。
与 novel-plot-digest 的关系:拆解是"骨架+账本"(结构化、三层标注),精讲是"血肉"(可读)。两者可串联:先跑拆解得碎片,再跑精讲成书;若已有碎片,直接从阶段 3 开始。
工作流(9 阶段,第 9 步可选)
阶段 1:抽取按卷切块
若输入是 EPUB 且尚未按卷切块,运行:
python3 scripts/extract_volumes.py <book.epub> --outdir /tmp/<book>/vols
产出 volumes.json(卷→节数/字数)与 vols/vol_NN[_x].txt(≤1600 行/文件,_b 为溢出续篇)。卷边界识别失败时(无"卷"标记)自动按节分桶,兜底可用 --volume-regex 指定。细节与坑见 references/engineering-notes.md。
阶段 2:拆解碎片(可跳过)
已有 novel-plot-digest 的 vol_NN.md 碎片则跳过。没有则先按该 skill 产出碎片;至少要有每卷的:主线、核心事件清单(时间序)、新出场人物、伏笔。碎片是精讲的事实底账,没有碎片的精讲 = 编故事。
阶段 3:并行子代理逐卷成章
每卷派一个 general-purpose 子代理,读该卷碎片,写一章 vol_NN.md(首行 ## 第N章 标题),存到独立工作目录 /tmp/<book>/xishuo/。提示词模板见 references/chapter-prompts.md(T1)。每批 5 个并行;25 卷分 5 轮。第一批起就统一第三人称限知,中途换视角代价大。
写总序(自己做,不派子代理):交代设定、读法、虚构声明,~800–1500 字。
阶段 4:每章补主要人物
每章单派一个子代理(T5),读该章 + 该卷碎片,在章标题行下方、正文首段之前插一段引用块:
## 第N章 标题
> 本卷主要人物:辛月,玉山先生孙女,这一卷嫁给云烨的正妻;窦燕山,窦家新家主,放火烧长安的亡命复仇者,坏就坏在太信酒;……
要点:5–10 人、只收本卷真正有戏的;每人一句“姓名 + 身份/与主角的关系”;允许带书里的梗;沿用去 AI 味规则;只插不改写正文。人物名单以碎片的「新出场人物与势力」为事实来源。
阶段 5:质量修订轮
用 wc -m 实测每章字数(子代理口头回报的字数不可信,通常偏小),修三类问题:
- 过短章(<3,200 字)→ 派 T2 扩写(只加具体场景/细节,不加修辞水分)。
- 视角跑偏章(第一人称混入)→ 派 T3 转第三人称,保持字数。
- 标题风格不齐 → 统一口语化、有梗,但编号连续。
阶段 6:全书去 AI 味
对总序+全部章节逐文件派 T4 清洗(规则见 references/humanizer-zh.md)。预期缩水 20–30%,属正常,下一阶段补回。
阶段 7:扩充回标
对去味后最短的若干章派 T2 再扩(严格沿用去味规则),直到全书总字数达标。原则:先删干净,再扩充;扩充只加具体材料(对话、动作、吐槽、物价天气),不加水分。
阶段 8:组装与验收
python3 scripts/assemble_book.py --prologue <dir>/_prologue.md --chapters-dir <dir> --epilogue <epilogue.md> --out <输出.md>
验收清单(全过才算完):
- [ ] 单一 H1;章节为
## 第N章,N 连续无缺 - [ ]
grep -c '本卷主要人物':等于章数(每章都有人物块) - [ ] 总字数
wc -m达标(默认 ≥10 万) - [ ]
grep -o '——' | wc -l:全书 ≤ 章数×2 - [ ]
grep -oE '不是[^,。]{1,12},[是而]':全书 ≤ 章数 - [ ] 抽 3 章通读:无总结性金句收尾、无三连排比、视角统一
- [ ] 文末注脚:虚构声明 + 指向拆解底账文件
- [ ](若做了阶段 9)附录速查表行数 = 卷数,插在注脚之前,重复执行脚本不会插两遍
最后 present_files 交付。
阶段 9(可选):书末附录「卷间因果链」
成书后可加一节附录,把卷与卷之间的因果摊给读者,插在文末注脚之前:
- 口吻随正文:说书人引言开场(为什么放这张地图),正文三件套——主因果链(5–8 条,每条按卷号串节点,150 字上下)、全卷承上启下速查表(卷 | 上卷留的债 | 这卷干的事 | 给下卷埋的雷 | 书内时间)、时间跨度卡点表。
- 事实来源:拆解底账(novel-plot-digest 成书)或各卷碎片。因果判定口径与拆解一致:底账里甲在乙之前且有关联才写因果,不足处标「待验证」,时间锚点分歧要如实交代、不强行统一。
- 插入用脚本,带幂等检查(附录已存在即终止),插完验收:速查表行数 = 卷数、附录内破折号 0、单一 H1 与章数不变。
- 实操细节与坑见
references/engineering-notes.md§6.7。
硬规则(违反即返工)
- 事实底账优先:每章改写必须以该卷碎片为事实来源;可文学渲染,不得新增原著没有的重大情节。
- 视角从第一批统一:第三人称限知,禁第一人称叙述(角色对话内的"我"不算)。
- 去 AI 味是交付门槛,不是可选项:破折号、"不是X是Y"、金句收尾、三连排比、意义拔高,五项全部清查。
- 先删后扩:去味允许缩水;字数靠"具体材料"补回,不靠修辞灌水。
- 子代理报错先查盘:429 等限流报错时文件可能已落盘,先
ls+wc -m再决定重跑。 - 字数只认
wc -m:子代理回报的"约 Z 字"通常只算汉字,偏小 10–15%。 - 每章必须有「本卷主要人物」:人物名单取自该卷碎片,不用凭印象列;这是长篇小说的阅读抓手,缺章即不算完成。
资源索引
references/chapter-prompts.md:T1 成章 / T2 扩写 / T3 转视角 / T4 去味 / T5 补主要人物,五个子代理提示词模板(带占位符)。references/humanizer-zh.md:中文去 AI 味规则清单、执行顺序、验收 grep。references/engineering-notes.md:并行批次、限流与落盘、字数台账、视角统一、组装验收的实操细节与坑。scripts/extract_volumes.py:EPUB → 按卷切块(stdlib,免安装)。scripts/assemble_book.py:总序+章节+注脚 → 成书(缺章检查、字数统计)。