Bookskill 管线系统:5 阶段确定性小说生产线的架构与实现

Bookskill 管线系统:5 阶段确定性小说生产线的架构与实现

开篇:什么是 Bookskill?

在 AI 辅助创作的浪潮中,自动化小说生产管线是一个被反复尝试的方向。但大多数方案止步于简单的「用 AI 写一段文字」——质量不可控、风格不稳定、前后矛盾频发。

Bookskill 是一个完全不同的方案。它不是简单的 AI 写作工具,而是一条确定性小说生产管线,由 Python 驱动,每章仅调用 2 次 LLM(Plan + Draft),其余全部由纯 Python 引擎自动完成。它带有 4 道质量门禁(CP1-CP4)、112 维自动审计引擎(零 token 消耗)、10+ 维度的 Truth 一致性检查系统,以及 5 级去 AI 味润色引擎。

本文将全面解析 bookskill 管线系统的功能架构、设计哲学和核心特性。


一、5 阶段确定性管线(5-Phase Deterministic Pipeline)

这是 bookskill 的核心架构。每章的生产流程被拆分为 5 个严格的阶段,依次执行,每个阶段都有明确的输入、输出和质量标准。

Phase1_Plan:章节规划

由 LLM 执行,但输入不是简单的提示词——系统会加载 Truth 数据(角色档案、世界观设定、时间线、道具清单、关系图谱、技术设定等)和上一章的情节摘要,生成结构化的章节规划 JSON。

规划文件包含:章节类型(A/B/C/D 四选一)、场景数量(≥2)、情感弧线、叙事目标(≥5 条)、红线约束、禁止事件清单、伏笔设计、每个场景的时间/地点/角色/核心事件/字数目标/感知焦点/感官锚点/场景进出场等 20+ 个字段。

场景级字段有严格的最小长度要求:scene_entry ≥50 字符、perception_focus ≥200 字符、sensory_anchor ≥50 字符。这些约束在写入阶段就强制满足,避免后期反复修补。

Phase2_Validate:Truth 预检与 CP1

这是第一个门禁阶段,完全由 Python 自动化执行,零 token 消耗。核心功能包括:

  • 角色预检:检查本章出场角色是否在 Truth 档案中已注册,状态是否正确(已故角色不能出场)
  • 世界观预检:检查场景地点是否在 Truth 世界设定中有记录
  • 设定预检:检查本章涉及的技术设定、力量体系设定是否与已有设定一致
  • 红线检查:逐一验证规划中的「不能做的事情」是否在情节设计中体现
  • 写作简报生成:自动汇总 Truth 数据、伏笔状态、角色状态,生成结构化的写作简报 HTML

CP1 门禁标准:11 项 Truth 预检全部通过。

Phase3_Draft:场景级并行起草

由 LLM 执行,但做了关键优化——场景级并行起草。系统将规划中的 N 个场景自动分拆,可以并行调用 LLM 分别起草,再由 Orchestrator 汇聚。每个场景作为独立单元编写,格式为带完整场景信息的 JSON 结构。

同时 CP2 硬性门槛在此阶段检验:
- 全章 CJK 字数 ≥5000
- 对话比 5%-30%(「」内 CJK / 总 CJK)
- 破折号 —— 不超过 2 个
- 零容忍禁用词:仿佛、似乎、好像、深吸一口气、瞳孔骤缩、嘴角勾起、某种、一股
- 零容忍句式:"不是{1,20}而是"

违反了任何一条即退回重写,不允许绕过。

Phase4_Review:112 维审计与 CP3

完全 Python 驱动,零 token 消耗。审计引擎从 12 个组(A-L)共 112 个子维度对章节文本进行评分,满分 1120 分。评分结果精确到小数点后一位。

CP3 门禁标准:总分 ≥878/1120。不达标时系统自动尝试 PolishEngine L2 润色后重审,仍失败则退回 Phase3 重写。

Phase5_Release:加权终审与 HTML 发布

CP4 门禁采用加权公式计算:
``
最终得分 = 审计得分 × 0.40 + Truth 一致性 × 0.25 + 连贯性 × 0.20 + 风格 × 0.15
``

即使 CP3 审计得分接近但未达标,如果 Truth 一致性和连贯性分数高(这是确定性管线的强项),CP4 加权后的总分通常仍能达到 ≥878 的门禁线,体现了「写对比写好更重要」的设计理念。

通过 CP4 后,系统自动生成 1120px 衬线字体的发布版 HTML,包含排版样式、章节信息元数据和可选的阅读器首页刷新功能。


二、112 维审计引擎(112-Dimension Audit Engine)

这是 bookskill 最具技术特色的组件——一个完全纯 Python 实现的、零 token 消耗的、覆盖 12 组共 112 个子维度的文本质量审计系统。

12 个审计组

权重 审计内容 核心指标
A 角色 10 角色名交替频率、动作描写密度、对话风格差异度、角色弧线完整性 角色名/他 比例、动作动词密度、性格特征词频率
B 逻辑 10 时间标记密度、因果链覆盖率、矛盾检测、过渡自然度 时间词频率、因果连词频率、前后矛盾数量
C 情节 8 悬念设计、伏笔呼应、高潮结构、节奏曲线 悬念词频率、转折词频率、章节内部冲突阶梯
D 意象 8 通感使用、比喻密度、氛围描写、象征元素 通感句式数量、比喻频率、环境描写占比
E 语言 10 标点多样性、「的」字密度、句式丰富度、冗余修饰词 句尾标点分布、的/总字数比、平均句长方差
F 体验 10 情感词覆盖、沉浸感描写、细节密度、内心活动 情感词频率(喜怒哀乐悲惊恐)、沉浸类词汇数
G 题材 10 题材特征词密度、题材专属概念使用率 按 7 类题材分别匹配关键词(都市/仙侠/科幻/言情/奇幻/游戏/悬疑)
H 视觉 8 视角清晰度、画面感、远景/特写交替、外形描写 视觉描写占比、视角转换标记、外形相关词
I 行业 6 行业术语密度、专业场景描写、技术准确度 行业词频率(代码/系统/数据/算法等)
J 时代 6 时代标志物使用、年代感、文化背景呈现 时代词频率(微信/抖音/内卷/网约车等)
K AI味 10 禁止句式检测、模糊词密度、套路化描写标记 "不是…而是" 句式数量、或许/也许/可能/大概 频率、套路词(瞳孔骤缩/嘴角勾起/深吸一口气)
L Truth 4 角色名一致性、地名一致性、道具状态、已故角色排除 与 Truth 档案的字符级匹配度、道具状态错误数、已故角色出场次数

每个维度的评分逻辑是预定义的 Python 函数——使用正则表达式、频率统计、比率计算等纯计算手段,不存在任何 LLM 调用的黑盒,结果 100% 确定和可复现。

关键词系统

审计关键词外部配置在 config/audit_keywords.json 中,覆盖 12 组 × 10 维的关键词库。同时配置了 JSON Schema 校验文件确保格式正确。系统支持运行时热加载和缓存失效。

外部化的关键词配置意味着用户可以通过修改 JSON 文件来调整审计标准,无需修改 Python 代码——这为非技术背景的内容创作者提供了定制审计的能力。


三、质量门禁系统(CP1-CP4)

bookskill 的质量门禁不是简单的阈值检查,而是一个带自动回退路径的分级控制系统。

门禁 所在阶段 标准 失败处理
CP1 Phase2_Validate 11 项 Truth 预检通过 回到 Phase1 修正 Plan
CP2 Phase3_Draft ≥5000 CJK + 对话比 5-30% + 零禁用词 重写 Draft
CP3 Phase4_Review 审计得分 ≥878/1120 Polish L2 重审 → 仍失败则回 Phase3
CP4 Phase5_Release 加权综合 ≥878 条件精修后强制发布

每个门禁的失败处理是自动化的,不需要人工介入。系统会自动选择回退路径,执行修复,然后重新提交检查。

门禁的容错机制设计体现了「写对比写好更重要」的工程哲学——在无法达到 S 级质量时,保持 A 级质量并通过缓存 Truth 一致性来弥补,是比无限循环更务实的选择。


四、Truth 一致性系统

Truth 是 bookskill 最具差异性的设计之一。它不是简单的角色档案,而是一个多维度的结构化世界知识库。

10+ Truth 维度

Truth 系统以 JSON 文件存储在项目的 truth/ 目录中,包含:

  • truth_characters.json — 角色档案:姓名、首次出场章节、角色类型、当前状态(存活/死亡/失踪)、别名、性格标签、角色弧线记录
  • truth_world.json — 世界观设定:地理、组织、势力、特殊规则
  • truth_timeline.json — 时间线:每章的时间坐标、标题、情节摘要
  • truth_tech.json — 技术设定:AI 能力树、技术水平、关键技术节点
  • truth_power.json — 力量体系:等级、技能树、增强人分类
  • truth_props.json — 道具清单:重要物品、状态、出场章节
  • truth_plot.json — 情节弧线:大纲、伏笔、伏笔激活状态
  • truth_relationships.json — 关系图谱:角色间关系、亲密度、变化历史
  • truth_concepts.json — 核心概念:定义和引用关系
  • voice_fingerprints.json — 角色声纹:各角色的语言风格参数

Truth 在管线中的使用

Truth 数据在每一个阶段都发挥关键作用:
- Phase1 Plan 阶段:Truth 数据作为上下文注入 LLM 提示词,确保规划符合已有设定
- Phase2 Validate 阶段:对比本章出场角色、地点、道具与 Truth 的一致性
- Phase4 Review 阶段:L 组(Truth)审计检测角色名拼写、道具状态、已故角色等问题
- Phase5 Release 阶段:Truth 一致性作为 CP4 加权公式的 25% 权重

Truth 变更跟踪

管线执行过程中,系统会自动记录本章对 Truth 的变更——新增角色、状态变更、关系变化——输出到 truth_changes 字段。这些变更为后续章节的 Truth 更新提供了依据,实现了跨章的知识积累和一致性维护。


五、润色引擎(PolishEngine)

PolishEngine 是一个纯 Python 5 级去 AI 味检测 + 3 级自动润色系统,无需 LLM 调用。

5 级检测

级别 检测内容 示例
L1 词汇级 禁用词库匹配 仿佛/似乎/好像、某种、一股、不禁
L2 句式级 正则模式匹配 "不是…而是"、连串排比、"的" 字堆叠
L3 语义级 套路化模式识别 "嘴角勾起一抹弧度"、"眼神深邃"
L4 段落级 叙事节奏异常 连续 3 段以上同一句式开端
L5 篇章级 整体结构评估 缺少收尾段落、对话比例异常

3 级自动润色

  • L1 自动替换:禁用词一键替换(仿佛 → 像是,深吸一口气 → 缓缓吸了一口气)
  • L2 句式重构:简化"不是…而是"句式,优化排比结构(潜在风险:可能去除过多叙事内容)
  • L3 深度精修:段落级重写,调整叙事节奏(仅限紧急情况)

注意:PolishEngine 的 L2-L4 深度精修对于写实题材类小说有时会降低审计得分,因为它可能移除叙事性的对话模式。因此推荐的策略是优先使用 L1 替换 + 手动关键词注入,而不是依赖自动润色整体提分。


六、闭环编排系统(Loop Orchestrator)

基于《Loop Engineering 到底是什么?看这一篇就够了》的核心理念,bookskill 管线升级为完整的 Closed Loop 系统,这是使管线能够「无人值守运行」的关键组件。

核心原则

原则 实现方式
把循环体从人换成 Agent LoopOrchestrator 完全接管管线执行,用户仅设定目标
Memory 活在对话之外 迭代历史持久化到 chXX_loop_state.json + 跨章长时记忆
有界目标 以 CP1-CP4 为验收标准,达标 Ship,不达标 Iterate
Self-prompting Agent 根据失败根因自写修正 Prompt
有预算的重试 每阶段 1-3 次,全管线 ≤10 次总重试
Fan-out/Fan-in 场景级并行起草 + 汇聚

迭代记录

每次迭代的完整状态写入 0_runtime/chXX_loop_state.json
- iterations:各阶段迭代历史(尝试次数、状态、时间戳)
- retry_counts:重试计数
- failed_gates:门禁失败详情(哪个维度的哪项检查未通过)
- budget:全局重试预算使用情况
- decisions:自动决策日志(含逃逸触发记录)

逃逸机制

当重试预算耗尽时,系统执行预定义的逃逸策略:
- Phase1 失败 → 简化 Plan 结构(减少场景数)后重试
- Phase3 失败 → 降低字数门槛后重试
- Phase4 失败 → 使用 PolishEngine L3 深度精修后重审

逃逸机制确保管线不会因单章的质量瓶颈而无限循环。


七、语言配置文件系统(Language Profiles)

Bookskill 支持多语言写作场景,通过 config/language_profiles.json 配置不同语言的字数阈值、对话标记符号和句尾标点模式。

可配置参数

参数 作用 默认(zh-CN)
cjk_min_chapter 每章最低 CJK 字数 5000
dialogue_min/max_ratio 对话比范围 5%-30%
dialogue_open/close 对话标记符号 「」
sentence_ends 句尾标点集合 。!?;…

运行时工作方式

系统通过 LanguageProfileManager 单例管理配置的加载和缓存:
``python
from bookskill.pipeline import get_default_profile, set_active_language
zh = get_default_profile() # zh-CN 默认
en = get_profile("en") # English profile
set_active_language("en") # 切换全局语言
``

缺失的字段自动回退到 constants.py 中的硬编码默认值,保证向后兼容。新增配置只需在 language_profiles.json 中添加条目,然后运行 pytest tests/test_language_profiles.py 验证。


八、全书级功能

除了单章管线,bookskill 还提供了多个全书级的功能,支撑长篇小说的宏观管理。

全书审计

pl.run_full_book_audit(start_ch=1, end_ch=30)

跨章节一致性诊断。检查内容:角色名在各章中是否一致、时间线是否有跳跃矛盾、道具状态是否跨章衔接、伏笔是否被妥善回收。

设定协调

pl.run_setting_coordination()

当小说中期的设定发生变更时,自动回溯已写章节中所有可能受影响的场景,标记需要更新的部分。这解决了长篇小说创作中最头痛的问题之一:「前面写的设定和中期的设定冲突了,人工回溯成本极高」。

关系图谱生成

pl.generate_relationship_graph(format="mermaid")
# 或 format="ascii"

自动从 Truth 关系数据中生成角色/势力关系图。支持 Mermaid 格式(可直接嵌入 Markdown 文档渲染)和 ASCII 格式(纯文本环境使用)。

跨章记忆系统

RecurrentGPT 风格的双重记忆架构:
- 短时记忆:最近 3 章的情节摘要和角色状态
- 长时记忆:跨章累积的设定事实和角色变化记录

短时记忆在每个新章节启动时自动加载,长时记忆通过 Truth 变更记录逐步累积。每章执行完成后,系统自动将本章新增的 Truth 变更合并到长时记忆中,后续章节启动时自动加载变更后的完整 Truth 数据。

伏笔跟踪系统

伏笔是长篇小说创作中最难控制的元素之一。Bookskill 的 Truth 系统支持伏笔的生命周期管理:每个伏笔在创建时记录 ID、类型(技术伏笔/人物伏笔/情节伏笔等)、预期回收章节。审计引擎的 C 组(情节)在评分时会检查伏笔是否在合理范围内被提及和使用。全书审计功能则标记出即将达到回收章节但未曾出现的伏笔。

场景插图系统

在每个场景的规划阶段,系统自动生成场景的可视化描述——包含场景布局、角色位置、光线方向、色彩基调等信息的文本描述,可用于后续 AI 图像生成。这是从文本到视觉的桥接设计,目前支持以 ASCII 布局图的形式输出场景的空间关系。

技能系统

5 个可插拔的写作技能模块:节奏控制、对话设计、感官描写、悬念设置、节奏编排。每个技能是一组预定义的写作规则和关键词库,在 Phase1 规划阶段注入 LLM 提示词。


九、协议与契约(Agent Behavior Contract)

Bookskill 为 AI Agent 执行者设定了一套严格的 「铁律」 约束,确保管线执行的稳定性和可预测性。

核心禁止行为

  • 禁止提问:绝对不允许向用户产生「需要继续吗」「要推进吗」「是否确认」等任何形式的确认性问题
  • 禁止暂停:一旦管线启动,不允许中途停下来等待用户
  • 禁止绕过失败:不允许手动修改 review.json 的 passed_cp3 字段欺骗门禁
  • 禁止盲 rerun:任何修复后必须用本地断言验证,确认修好后再提交下一阶段

执行规则

  • 全自动闭环:执行链启动后必须按序执行到终点或不可恢复的异常
  • 读规则再行动:任何 Agent 必须先完整阅读 SKILL.md 全文再开始执行
  • 失败自动恢复:按预定义的回退路径执行
  • 修复→验证→提交:任何修复后,本地断言确认达标再提交

规则优先级

优先级 来源 作用
1(最高) 用户本轮的明文指令 覆盖以下所有规则
2 SKILL.md 的 Agent Behavior Contract Agent 行为准则,不可违反
3 config/pipeline.yaml 管道阶段定义、执行序列、回退路径
4 pipeline/ 下 Python 源码 具体实现逻辑

十、脚本工具链

Bookskill 配备了一套完善的工具脚本,覆盖开发、测试、部署全流程。

脚本 功能
scripts/sync.py 同步主仓库修改到子项目
scripts/verify.py CP2 合规检查(CJK 字数、对话比、禁用词)
scripts/merge_draft.py 合并场景级草稿
scripts/bump_version.py 版本号升级 + git tag
pytest tests/ 运行全量测试套件

测试套件

测试覆盖了 bookskill 的所有核心功能:
- test_audit_keywords.py — 审计关键词加载和校验
- test_audit_groups_gij.py — 题材/行业/时代维度评分
- test_audit_utils_extended.py — 审计工具函数
- test_loop_orchestrator.py — 闭环编排器
- test_language_profiles.py — 语言配置系统
- test_polish_levels.py — 润色引擎各级别检测
- test_release_integration.py — 发布引擎集成测试
- test_e2e.py — 端到端管线测试


十一、题材支持系统

Bookskill 支持 7 种小说题材,每种题材有专属的关键词库和审计标准。

题材 关键词示例 适用场景
都市 urban 手机/微信/公司/地铁/网约车/加班 现实职场、情感
仙侠 xianxia 飞升/道心/机缘/悟道/剑意 修仙传统题材
玄幻 xuanhuan 灵气/修炼/突破/境界/功法 东方玄幻
科幻 scifi 星际/量子/虫洞/机甲/意识上传 硬科幻、赛博朋克
言情 romance 心动/告白/恋爱/重逢/婚姻 都市婚恋、古风言情
奇幻 fantasy 魔法/咒语/龙/精灵/剑与魔法 西方奇幻
游戏 game-lit 副本/技能/装备/等级/经验值 游戏异界、电竞
悬疑 mystery 线索/嫌疑人/调查/推理/密室 侦探推理、犯罪悬疑

题材选择影响 G 组审计的评分标准——都市题材侧重手机/微信等现代生活词汇,仙侠题材侧重修炼/突破等修行词汇。不同题材的关键词库通过 audit_keywords.json 外部配置,支持运行时扩展。

值得注意的是,对于写实题材(如都市职场类),G 组(题材)和 H 组(视觉)、D 组(意象)的天然得分会低于仙侠玄幻类——因为写实题材的视觉画面感和意象密度本就不如幻想题材高。Bookskill 的审计系统对此有预期,不要求所有组都达到高分,而是通过高权重组的补偿来维持总分。实战中,写实题材的 A 组(角色)、B 组(逻辑)、E 组(语言)、K 组(AI味)可以冲高到 80-90 分以上,这些组的权重合计 40 分,足以拉平 D/H/G/J 等低分组的差值。


十二、发布与输出

管线最终输出是一个标准的 1120px 衬线字体 HTML 文件。

发布版 HTML 特点

  • 使用 "Noto Serif SC" / "Source Han Serif SC" 衬线字体
  • 最大宽度 1120px,符合中文阅读的最佳行长
  • 行高 2 倍,字号 17px,针对小说阅读优化的排版
  • 深色/浅色主题支持
  • 每段首行缩进 2 字符(中文出版标准)
  • 包含章节编号、标题、审计得分的元数据
  • 自动生成或刷新阅读器首页(index.html)

阅读器首页

generate_reader.py 脚本生成一个完整的 HTML 阅读器首页,以表格形式列出所有已发布章节,包含章节号、标题、审计得分、CP3/CP4 通过状态、字数。这是全书阅读的入口。

CP4 加权公式详解

final = audit_score × 0.40 + truth_consistency × 0.25 + continuity × 0.20 + style × 0.15
  • audit_score:112 维审计引擎的原始得分(/1120),权重 40%
  • truth_consistency:本章 Truth 变更次数决定的得分——变更越少、一致性越高,权重 25%
  • continuity:连贯性问题数量决定的得分——问题越少、连贯性越高,权重 20%
  • style:E 组(语言)得分 × AUDIT_SCALE_FACTOR,权重 15%

这种加权设计使得审计得分接近但不达标(如 870/1120)的章节,仍然可以通过 Truth 高一致性(通常接近满分)和连贯性高质量通过 CP4。


十三、架构设计原则

回顾 bookskill 的整个设计,可以看到几个核心的架构哲学:

确定性优先

管线的核心原则是「确定的比不确定的好」。只有 Phase1 和 Phase3 使用 LLM(非确定性),其余全部由 Python 实现(可复现、可测试、零 token 成本)。112 维审计引擎没有任何黑盒——每个分数都可以追溯到具体的 Python 函数调用。

质量内建(Quality Built-in)

系统不依赖后置修补,而是在每个阶段强制要求前置质量。Plan 阶段的字段有最小长度要求,写入时就达标;Draft 阶段的硬约束(CJK 字数、禁用词)在同一阶段验证。这种设计避免了最昂贵的「写好再改」模式。

知识外化

Truth 系统将世界设定和角色数据外化为结构化 JSON,使管线中的每个阶段都能引用和检查。语言配置和审计关键词外部化为 JSON 文件,用户无需修改 Python 代码即可定制系统的行为。

有预算的迭代

闭环编排器支持有限次数的自动重试,而不是无限循环。重试预算耗尽时执行逃逸策略——这是工程系统而非学术实验的务实选择:在无法达到完美时,接受足够好。


结语

Bookskill 不是一个通用的 AI 写作工具,而是一条为长篇连续性小说定制的确定性生产线。它将质量控制的工程方法引入创意写作领域——门禁系统保证基线质量、Truth 系统消除一致性悲剧、审计引擎提供客观可量化的反馈、闭环编排器实现无人值守的章节生产。

这套系统最适合的场景:长篇类型小说(都市、科幻、仙侠、悬疑等)、需要严格前后一致性的系列作品、以及追求稳定输出节奏的内容生产。

最大的特色在于它所体现的工程思维——写对比写好更重要,一致性比惊艳更持久。在一个套路一眼就会被识破的时代,能够始终如一地讲好一个没有破绽的故事,本身就是一种稀缺能力。

发表评论