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 系统消除一致性悲剧、审计引擎提供客观可量化的反馈、闭环编排器实现无人值守的章节生产。
这套系统最适合的场景:长篇类型小说(都市、科幻、仙侠、悬疑等)、需要严格前后一致性的系列作品、以及追求稳定输出节奏的内容生产。
最大的特色在于它所体现的工程思维——写对比写好更重要,一致性比惊艳更持久。在一个套路一眼就会被识破的时代,能够始终如一地讲好一个没有破绽的故事,本身就是一种稀缺能力。