本文档用于收口写法引擎的 产品职责、模块边界、字段治理、信息架构与自动导演接入方式。
它解决的不是“怎么再加几个写法字段”,而是下面四个问题:
- 在扩展写法引擎时,如何 不弱化 最初的两个核心能力:
- 模仿某一种写法
- 去 AI 味
- 如何避免写法引擎与现有
BookFraming / StoryMode / StoryMacro / Character / World模块重复建设。 - 如何把写法引擎从“一个可选侧边栏工具”收口成“创作主链里的表达执行层”。
- 如何让它接入自动导演,而不接管自动导演已经存在的结构职责。
本文档与既有文档关系如下:
- Style Engine v1:保留其对写法资产、规则注入、检测修复的基础设计。
- Style Engine Prompt Compiler v1:保留其对编译器和 prompt 执行链的设计。
- 本文档:在上述基础上新增 产品收口、职责边界、字段分级、自动导演接入规范。
写法引擎不是“文风配置器”,也不是“纯仿写工具”。
它的最终定位应是:
小说创作系统中的表达执行层。
它负责把用户想要的“读感、文字手感、角色表达方式、反 AI 要求”,转成可执行、可绑定、可检测、可修复的表达合同,并贯穿规划、生成、审校、修复链路。
写法引擎扩展后,下面两个能力仍然必须保留为一级入口,而不是被“更大更全的新定位”吞掉:
-
模仿某一种写法- 价值:把参考文本、拆书结论、已知作品手感转成可迁移的表达资产。
- 用户认知:这是最直接、最有感知的写法能力。
-
去 AI 味- 价值:把模板句、总结腔、均匀句式、解释过量、情绪空转等问题压下去。
- 用户认知:这是最容易理解、最容易证明价值的质量能力。
结论:
- 写法引擎可以变大。
- 但它必须以“保住这两个核心功能”为前提。
- 新增能力应是 扩层,不是 换核。
对内可采用三层模型理解写法引擎:
-
StyleIntent- 用户表达层
- 面向“我想要什么感觉”
- 例如:冷一点、现实一点、对话更狠、不要说教
-
StyleContract- 系统执行层
- 面向“模型应该怎样表达”
- 对应结构化规则、绑定关系、编译后的 prompt blocks
-
StylePatch- 运行时修正层
- 面向“这本书在哪些表达维度上反复跑偏,后续怎么自动拉回”
注意:
StyleIntent / StyleContract / StylePatch是写法引擎内部的分层,不是要再拆出三个独立产品模块。- 产品层仍然应该保持简单入口,而不是暴露内部建模。
BookFraming管:这本书卖给谁,卖点是什么,前 30 章承诺什么。StoryMode管:这本书靠什么推进,读者奖励来自哪里,冲突形式和推进单元是什么。StoryMacro管:这本书的故事骨架、冲突轴、揭示梯度、payoff 与硬约束是什么。Character / World / Canonical State管:事实、设定、身份、关系、世界规则、状态变化。StyleEngine管:这些内容最终 怎么被写出来,读起来是什么感觉,怎样压制 AI 味。
| 模块 | 核心问题 | 应该拥有 | 不应该拥有 |
|---|---|---|---|
| BookFraming | 这本书卖什么 | 目标读者、商业标签、卖点、竞品读感、前 30 章承诺 | 文字表达规则、具体句式约束、反 AI 检测 |
| StoryMode | 这本书怎么推进 | 推进单元、冲突形式、读者奖励、模式红线 | 文本粗粝度、对白攻击性、句式变化 |
| StoryMacro | 故事怎么成立 | premise、主冲突、mystery box、progression loop、payoff、ending constraints | 局部语言风格、去 AI 规则 |
| Character / World | 事实是什么 | 人物身份、关系、设定、世界规则、状态演变 | 文字层表达手感 |
| StyleEngine | 怎么写出来 | 叙事距离、语言手感、对白风格、情绪外显、反 AI 约束、表达检测与修复 | 结构推进主导权、剧情合同、书级市场定位 |
写法引擎可以读取以下模块的结果,用于生成表达合同:
-
BookFraming- 读取“目标读者、卖点、前 30 章承诺”
- 目的:决定语言可读性、解释密度、商业读感强弱
-
StoryMode- 读取“推进节奏、冲突形式、章节奖励”
- 目的:让表达配合推进方式,而不是改变推进方式
-
StoryMacro- 读取“故事骨架、悬念、约束、payoff”
- 目的:避免表达层与结构目标脱节
-
Character / Canonical State- 读取“角色身份、状态、关系变化、禁止泄露信息”
- 目的:约束角色说话方式、情绪外显方式、视角距离
以下内容即使存在于写法资产里,也不应由写法引擎拥有最终决定权:
- 主推进循环
- 核心冲突设计
- 章节结构骨架
- POV 主策略
- 结局硬约束
- 角色事实设定
- 世界事实设定
- 书级商业定位
当多个模块的约束冲突时,建议采用以下优先级:
- 安全规则 / 平台约束
- Canonical State / 世界观事实 / 角色事实
- Book Contract / BookFraming
- StoryMode
- StoryMacro / Planner / Structured Outline
- StyleEngine
- 默认语言习惯 / 模型自由发挥
解释:
- 写法引擎必须服从结构与事实边界。
- 写法引擎的职责是在既定结构内,把表达做对,而不是反向改结构。
对现有写法字段做治理时,遵守以下三条:
-
表达层字段保留- 只要它控制的是“怎么写”,就保留在写法引擎。
-
结构层字段迁出- 只要它控制的是“写什么、怎么推进、怎么收束”,就不该由写法引擎拥有。
-
边界模糊字段先降级- 对于既像结构、又像表达的字段,先降级为软提示,不直接删,也不继续扩写。
以下判断基于当前 shared/types/styleEngine.ts 的字段定义。
| 字段 | 当前问题 | 处理建议 | 最终归属 |
|---|---|---|---|
narrativeRules.progressionMode |
明显触及推进方式,与 StoryMode.profile.progressionUnits、StoryMacro.progression_loop 重叠 |
迁移;在写法引擎内仅保留兼容读取,不再作为新增强规则 |
StoryMode / StoryMacro |
narrativeRules.sceneUnitPattern |
触及场景组织和章节结构,与 planner / structured outline 有重叠 | 降级 为软提示;后续若继续使用,迁入章节规划模板 |
Planner / Structured Outline |
narrativeRules.multiPov |
实质影响叙事主策略,和 novel.narrativePov 职责重叠 |
迁移;写法引擎只允许控制 POV 距离和切换风格,不决定是否多视角 |
Novel Basic Info / StoryMacro |
narrativeRules.looping |
容易变成推进结构约束,而不是表达约束 | 迁移 到 StoryMacro;短期内仅作低权重提示 |
StoryMacro |
narrativeRules.endingStyle |
已接近结局风味和收束逻辑,与 ending_flavor / ending_constraints 重叠 |
迁移;写法层只保留“结尾语气”一类局部表达 |
StoryMacro |
narrativeRules.povSwitchStyle |
一半是结构、一半是表达 | 保留但收窄语义;只表示“切视角时的文字处理方式” |
StyleEngine |
narrativeRules.summary |
属于内部摘要,不是职责冲突 | 保留 |
StyleEngine |
characterRules.allowSelfReflection |
控制角色是否内省,属于表达层,但不能覆盖角色事实 | 保留,且优先级低于角色状态与剧情事实 |
StyleEngine |
characterRules.emotionExpression |
典型表达层字段 | 保留 |
StyleEngine |
characterRules.defenseMechanisms |
容易与角色设定重叠,但作为“文本表现方式”仍可成立 | 保留但收窄语义;仅用于表达倾向,不定义角色本体 |
StyleEngine |
characterRules.facePriority |
影响角色外显方式,仍属于表达层 | 保留 |
StyleEngine |
characterRules.dialogueStyle |
典型表达层字段 | 保留 |
StyleEngine |
languageRules.register |
典型表达层字段 | 保留 |
StyleEngine |
languageRules.roughness |
典型表达层字段 | 保留 |
StyleEngine |
languageRules.allowIncompleteSentences |
典型表达层字段 | 保留 |
StyleEngine |
languageRules.allowSwearing |
典型表达层字段,但需服从平台与角色边界 | 保留 |
StyleEngine |
languageRules.sentenceVariation |
典型表达层字段 | 保留 |
StyleEngine |
languageRules.allowUselessDetails |
影响笔触密度,仍属表达层 | 保留 |
StyleEngine |
languageRules.summary |
内部摘要 | 保留 |
StyleEngine |
rhythmRules.pace |
容易与故事节奏、推进速度混淆 | 保留但重定义 为“文本节奏密度”,不再表达故事推进结构 |
StyleEngine |
rhythmRules.paragraphDensity |
典型表达层字段 | 保留 |
StyleEngine |
rhythmRules.allowFragmentedFlow |
典型表达层字段 | 保留 |
StyleEngine |
rhythmRules.actionOverExplanation |
典型表达层字段 | 保留 |
StyleEngine |
rhythmRules.summary |
内部摘要 | 保留 |
StyleEngine |
建议分三步执行:
先不急着删字段,而是先明确:
-
progressionMode / looping / endingStyle / multiPov- 停止作为新增能力继续扩写
- 在 prompt 编译里降低权重
- 标记为“兼容字段”
-
sceneUnitPattern- 改为“章节书写偏好提示”
- 不作为 planner 的结构输入源
-
rhythmRules.pace- 从“故事节奏”收窄为“文本节奏”
以后新增写法字段时,必须先问一句:
这个字段控制的是表达方式,还是故事结构?
若答案更接近以下任一项,则不应进写法引擎:
- 章节推进单元
- 冲突设计
- payoff 编排
- 结局结构
- 视角制度
- 角色身份事实
当主链稳定后,可逐步做 schema 收口:
- 从
NarrativeRules中迁出结构型字段 - 保留表达型字段
- 为迁移字段提供兼容读逻辑,避免直接破坏旧资产
主要服务对象仍然是:
- 不懂写作术语的新手作者
- 知道自己想要什么“感觉”,但不会拆规则的人
- 会担心 AI 写出来太模板、太平、太解释的人
写法引擎要帮助用户完成的,不是“研究文风”,而是以下三类任务:
我想让它像这种写法我这段稿子 AI 味太重,帮我拉回来我想让整本书保持同一种手感
写法引擎的最终 PRD 定位建议为:
面向小说创作主链的表达控制工作台
它不是孤立页面,而是承担三个层次的功能:
-
资产层- 创建、编辑、沉淀写法资产
-
应用层- 把写法资产绑定到书 / 章 / 单次任务
-
质控层- 检测偏移、修复 AI 味、沉淀 patch
建议最终只保留 3 个一级主入口:
-
模仿一种写法- 输入参考文本 / 拆书结果 / 当前作品片段
- 输出可执行写法资产
-
给这段稿子去 AI 味- 输入当前文本
- 输出检测结果、修正建议和一键改写
-
给这本书选一种手感- 面向整本书
- 推荐、绑定、查看当前命中写法
这三个入口分别对应最重要的三种用户任务,避免首页堆满资产管理概念。
用于管理 StyleProfile:
-
新建写法
- 从一句话描述生成
- 从参考文本提取
- 从拆书生成
- 从模板起步
-
编辑写法
- 查看摘要
- 编辑表达规则
- 选择反 AI 规则
- 试写验证
-
写法来源与适用范围
- 来源文本
- 适用题材
- 标签
用于管理 StyleBinding:
- 绑定到整本书
- 绑定到章节
- 绑定到单次任务
- 查看命中优先级
- 查看当前生效写法摘要
用于管理 AntiAiRule + Detection + Rewrite + Patch:
- 风格检测
- 去 AI 味检测
- 一键修正
- 修正后差异预览
- 将重复修正沉淀为 patch
为了避免“功能做大后用户反而更糊”,建议 UI 表达遵守以下原则:
- 首页只讲用户任务,不讲内部术语
StyleProfile、StyleBinding、CompiledBlocks这类词只在高级区出现- 页面默认呈现:
- 当前书的默认写法
- 当前文本的问题
- 下一步推荐动作
写法引擎的 PRD 中,明确以下内容为非目标:
- 不负责角色设定编辑
- 不负责世界观设定编辑
- 不负责故事骨架设计
- 不负责书级卖点设计
- 不成为“另一个 planner”
自动导演接入写法引擎时,必须遵守:
-
先轻接,后深接- 前半段先接入轻量表达意图,不直接让写法引擎主导结构。
-
结构归导演,表达归写法- 导演负责方向、规划、卷章拆解。
- 写法引擎负责这些产物最终怎么被写出来。
-
前半段摘要注入,后半段全量注入- 自动导演前半段只消费轻量写法摘要。
- 到章节执行和质量修复阶段,再消费全量编译规则。
目标:
- 让写法引擎参与,但不增加新手负担。
建议做法:
-
在自动导演创建页保留一个简单问题:
你想让这本书读起来是什么感觉?
-
可选高级入口:
- 选择已有写法资产
- 从一句话生成临时写法
- 从参考文本提取临时写法
-
如果用户不选:
- 系统允许自动推荐一套默认书级手感
这一阶段只产生 StyleIntent 或轻量 StyleContract Summary,不要求用户先进入完整写法工作台。
目标:
- 让候选方向的表达气质更准,但不改变候选的结构职责。
建议注入内容:
- 目标读感
- 语言粗粝度 / 克制度
- 对话张力倾向
- 解释密度偏好
- 反 AI 高风险项摘要
明确禁止注入:
- progression loop 决策
- 章节单元决策
- 结局结构决策
- 核心冲突设计
目标:
- 让规划期知道“这本书应该呈现怎样的整体读感”。
建议做法:
- 只注入
StyleContract Summary - 作为
tone guardrails / expression guardrails使用 - 不让写法资产替代
StoryMode / StoryMacro
建议接入字段:
- 读感承诺
- 语言密度
- 情绪外显方式
- 对话风格
- 反 AI 守则摘要
目标:
- 进入写法引擎真正强介入阶段。
建议做法:
- 使用完整
CompiledStylePromptBlocks - 继续保留书 / 章 / task 三层 binding 机制
- 生成后立即执行风格检测与去 AI 修正
这一阶段是写法引擎的主战场,也是最不容易与导演冲突的阶段。
目标:
- 让导演恢复链不是“重跑结构”,而是也能识别表达问题。
建议做法:
- 区分结构型失败与表达型失败
- 若是表达型失败:
- 优先走写法检测 / 自动重写 / patch
- 不要把表达问题回退成整段导演重跑
为防止自动导演与写法引擎功能冲突,建议明确以下硬规则:
- 自动导演前半段只读取写法摘要,不读取全量结构型写法字段。
- 写法引擎不能覆盖导演已经确认的结构产物。
- 结构型字段即使残留在旧写法资产中,也不能在导演阶段作为强约束注入。
- 章节 runtime 才是写法引擎全量生效的默认阶段。
- 自动导演 UI 中必须明确展示:
- 当前命中写法
- 当前阶段仅生效的写法摘要
- 何时会在正文阶段启用完整写法约束
建议按以下顺序接入,而不是一次性大改:
- 自动导演入口新增“书级手感”输入
- 候选 / Book Contract / Story Macro 只注入轻量摘要
- 章节执行使用完整写法编译块
- 自动导演执行后自动做风格检测与去 AI 修正
- 将重复表达修正沉淀为
StylePatch - 支持从“当前作品稳定写法”反推生成书级资产
基于当前仓库状态,建议后续实施遵守以下直接指导:
- 保留现有
StyleProfile / StyleBinding / AntiAiRule / Detection / Rewrite主体结构。 - 不把写法引擎改造成“结构规划模块”。
- 新增自动导演接入时,优先增加轻量写法摘要输入,而不是直接把整套
styleProfile深塞到前半段。 - 对
shared/types/styleEngine.ts中的结构越界字段,先做文档级收口与语义降权,再决定代码迁移时机。 - 产品页面上继续保留:
- 模仿写法
- 去 AI 味
- 书级默认写法 这三条最强用户认知入口。
写法引擎的正确扩展方式,不是从“模仿写法 / 去 AI 味”转向另一套全新模块,而是:
- 保住这两个最核心、最直观的能力;
- 把它们纳入“表达执行层”的更完整闭环;
- 严格切断它与
BookFraming / StoryMode / StoryMacro的职责重叠; - 让它在自动导演中 参与表达,不接管结构。
最终应形成这样的判断:
BookFraming决定这本书卖什么;
StoryMode决定这本书怎么推进;
StoryMacro决定故事怎样成立;
StyleEngine决定这一切最终怎样被写成文字,并持续压制 AI 味。