| name | Write-Router |
| description | 写作流水线唯一调度中心。接收用户写作意图 → 内容类型检测与判断 → 段落预分配 → 调度Core/Combat/Romance/NSFW处理 → 结果拼合 → 调度长篇专项(伏笔/回忆) → 调度成品输出校验(落盘)。减轻Core路由压力,让各写作技能专注本职工作。当用户表达写作意图时触发:写正文、写章节、润色、写战斗、写言情、写NSFW等。 |
Write-Router — 写作流水线路由调度中心
此技能是写作系统的唯一调度中心,负责接收用户写作意图,完成内容检测、段落预分配、技能调度、结果整合、以及后续流水线(伏笔→校验→落盘)的全流程编排。
核心定位
- 唯一调度入口:所有正文类技能(Core/Combat/Romance/NSFW)统一由此技能接收和分发——用户不直接调用,创建阶段技能也不直接调用,均由 Write-Router 代为调度
- 判断与预分配:在文本进入任何写作技能之前,先完成内容类型检测和段落分割——哪些段落是一般叙事、哪些是战斗、哪些是 NSFW,提前判定并分组
- 解放 Core:Core 不再承担检测/分割/调度/整合职责,只做一件事——接收文本+上下文,按规范库(
body/Core/norms/ 注册表驱动)优化后返回
- 流水线编排:Core/Special → 整合 → Long(伏笔/回忆)→ Proofreading(校验+落盘),全流程由此技能驱动
- 双模式调度:全文写作流水线(标准模式,步骤 0-9)+ 创建阶段文本加工(轻量模式,步骤 L0-L3)。轻量模式仅做文本类型确认和 Core 调度,不执行段落分配、专项检测、长篇处理或成品校验
调度源
此技能接收两个调度源的请求:
调度源 A:用户直接触发(标准模式)
当用户表达以下意图时,主技能将路由到此技能处理,执行完整流水线(步骤 0-9):
- "润色这段文字"、"优化写作"、"帮我改一下这段"
- "写正文"、"开始写正文"、"写章节"、"写这一段"
- "改写"、"润色"、"优化一下"、"帮我看看这段"
- "写一场战斗"、"写打斗场景"、"优化这段打斗"
- "写 NSFW 内容"、"写成人内容"、"写床戏"
- "继续写"、"往下写"、"接着写"
- 用户在对话中提供待写入的正文内容
- 任何表达"对文本进行优化/润色/创作"的表述
调度源 B:创建阶段技能调度(轻量模式)
创建人物、设定编辑、剧情编辑、快速创建、提示词增强五个技能在产出供人阅读的文本后,将文本传入此技能进行加工。此调度源通过数据包中 mode: "creation_phase" 标识。执行轻量处理分支(步骤 L0-L3),仅调度 Core,不执行段落分配、专项检测、长篇处理或成品校验。
关联文件
| 文件 | 位置 | 用途 | 读写 |
|---|
写作配置.json | 大纲/ | 润色模式 + 角色语气(角色级语气配置),传递给 Core/Special | 只读 |
项目信息.json | 大纲/ | 内容分级 + 分卷信息 + NSFW 偏好 + 伏笔数据 | 只读 |
主要角色.md / 次要角色.md / 龙套角色.md | 大纲/人物/(或分卷子目录) | 传递给各技能的角色上下文 | 只读 |
设定.md | 大纲/设定/ | 世界观约束,传递给各技能 | 只读 |
术语表.json | 大纲/ | 核心术语定义 + 禁用混指词——组装 context.glossary 随数据包分发 | 只读 |
Prompt.md | 大纲/剧情/ | 预生成的写作提示词,零提示词时读取 | 只读 |
type-detection.json | data/ | 内容类型检测数据(快速路由关键词 + 三级/四级扫描命中词表与条件枚举) | 只读 |
packet-schemas.json | data/ | 分发协议规格(7 个协议字段定义/必填/返回结构,机器规格) | 只读 |
chapter-tension-guide.json | data/ | 阶段张力与章节分类指引(tension_levels L1-L5 + chapter_types 7 类,机器规格) | 只读 |
加载策略(规格数据)
data/packet-schemas.json、data/chapter-tension-guide.json 为机器规格:首次调度本技能时完整读取一次(同会话仅此一次),读取后按工作记忆执行,后续调度不重复读取
- 仅当规格数据变更(版本升级)或新会话首次调度时重新读取
执行模式
标准模式(用户直接触发):进入计划模式(EnterPlanMode),列出处理步骤后执行。
标准模式(由主技能调度):跳过计划模式,直接按步骤 0-9 执行。
轻量模式(由创建技能调度):跳过计划模式,直接按轻量步骤 L0-L3 执行。此模式处理速度快、开销小,不涉及用户交互。
步骤 0:零提示词检测与 Prompt.md 读取
仅当用户未提供正文/提示词内容时执行(如"写第3章""写正文"但无任何剧情描述或写作方向)。
- 从用户消息中提取章节号(如"第3章")
- 分卷感知章号定位:读取
项目信息.json → volumes:
- 分卷多文件模式 → 根据
volumes.list[].chapter_range 匹配章号所属卷
- 不分卷/单文件 → 跳过卷号推算
- Prompt.md 定位:
大纲/剧情/Prompt.md。分卷与不分卷共用同一文件——提示词增强技能统一写入此路径,不按卷拆分子目录
- 若 Prompt.md 存在 → 查找目标章的
prompt_text:
- 命中 → 提取完整提示词,跳过步骤 2(上下文预读取,Prompt.md 已含完整上下文),直接进入步骤 3(内容类型检测)
- 未命中 → 询问用户:是否调度「提示词增强」先生成提示词(提示词增强产出提示词后将回写 Prompt.md 或直传 Write-Router 继续写作)
- 若 Prompt.md 不存在 → 同上,询问用户是否先生成提示词
由提示词增强技能调用时(提示词增强步骤 5.1 → 用户确认执行 → 传入 Write-Router):收到的数据包中已包含完整提示词,跳过此步骤,直接进入步骤 1。「提示词增强 → Write-Router」的调度方向是单向的——Write-Router 执行写作后不再回呼提示词增强。
步骤 1:路由类型判定(快速路由)
在上下文读取和内容扫描之前,先检查用户意图是否已明确指定文本类型——如果用户说"写床戏",不需要再扫描文本中是否有性词汇。
1.1 用户意图关键词匹配
读取 data/type-detection.json → quick_route 组,扫描用户输入消息匹配路由类型关键词(各类型关键词表见数据文件,命中即全文标记为该类型):
| 命中 | 路由类型 | 后续动作 |
|---|
命中 quick_route.nsfw 任一词 | nsfw | 跳过步骤 2 全类型扫描,全文标记为 NSFW |
命中 quick_route.combat 任一词 | combat | 跳过步骤 2 全类型扫描,全文标记为 combat |
命中 quick_route.romance 任一词 | romance | 跳过步骤 2 全类型扫描,全文标记为 romance |
| 未命中("润色""优化""改写""继续写"等无明确类型指向) | 无命中 | 正常进入步骤 2 多类型扫描 |
关键词仅匹配用户意图表达,不匹配待处理的正文内容。 快速路由判断的是"用户想干什么",步骤 2 判断的是"文本里有什么"。
1.2 快速路由命中时
命中后设置路由标签 route_type,步骤 3(内容类型检测)和步骤 4(段落预分配)跳过——全文作为一个段落组直接打包到目标技能。步骤 2(上下文按需预读取)按命中类型读取对应子集。
1.3 快速路由未命中时
正常进入步骤 2,执行完整的多类型逐段扫描。
步骤 2:上下文按需预读取
根据路由类型按需拉取上下文——后续各技能不再重复读取。快速路由命中时只读目标技能所需的文件子集,多类型扫描时全量读取。
2.1 读取矩阵(按路由类型)
按路由类型读取对应字段子集——人物字段列直接引用 templates/character.schema.json 的字段名,设定列引用 templates/settings.schema.json 的板块,杜绝模糊描述:
| 路由类型 | 项目信息.json | 写作配置.json | 人物字段(character.schema 字段名) | 设定.md(settings.schema 板块) | NSFW 偏好 |
|---|
general(全 Core) | ✓ 基础字段 | ✓ 正文轨道 | 人物性格、人物简介、人物基本关系 | 世界观-场景相关分类 | — |
combat | ✓ 基础字段 | ✓ 正文轨道 | 人物性格、人物简介、人物能力(战斗/魔力) | 世界观-战斗相关分类 | — |
romance | ✓ 基础字段 | ✓ 正文轨道 | 人物性格、人物简介、人物基本关系、人物语气 | 世界观约束 | — |
nsfw | ✓ 含 NSFW 偏好 | ✓ 正文轨道 | 人物性格、人物简介、XP、三维、性特征、人物X能力 | — | ✓ |
| 混合类型(无命中/多类型) | ✓ 全部字段 | ✓ 正文轨道 | 全部三类角色全字段 | 全部 | ✓ 如涉及 |
基础字段 = content_rating + volumes(所有类型均读)。
facts 事实约束块:按本矩阵读取的角色字段值(≤6 字段/角色),组装为 context.facts 随数据包分发给写作技能(见步骤 4.4 与步骤 5)——写作技能不再自行读取角色文件,OOC 约束前移至写作前。facts 不含隐藏设定(伏笔,正文包不携带以防提前泄底)。
glossary 术语约束块:若 大纲/术语表.json 存在且 terms 非空,读取其 terms 数组,组装为 context.glossary({术语: {定义, 禁用词[]}})随数据包分发——写正文时遇禁用混指词自动纠偏。术语表为空或文件不存在时省略该字段。
2.2 写作配置确认
仅当待处理内容为正文类且将写入 正文/ 文件夹时执行。
读取写作配置后,向用户展示当前有效配置(不分卷时展示全局,分卷时展示卷覆盖)。询问策略:
- 本会话首次写作 / 配置刚被变更过 → 询问是否沿用(用户选择调整时更新
写作配置.json,通过成品输出校验落盘)
- 本会话已确认过配置 → 静默沿用,不重复询问(懒人友好:能用默认值的不让你选;用户可随时说"改润色模式""切换润色"触发调整)
2.3 阶段张力与章节分类(双结构,B)
张力分两层:阶段级事件烈度(tension_level L1-L5,传导为背景)+ 章节级内容分类(chapter_type 7 类,阶段内二次规划)。两者解耦独立判断——张力只指导事件安排(内容层),不挂钩写作参数(句子节奏/信息密度/换气频率/篇幅)。数据见 data/chapter-tension-guide.json。
① 阶段张力判断(context.tension_level):读取当前章所属阶段(卷/篇)的张力信息——
- 剧情大纲阶段标题旁已标注
〔L1-L5〕 → 直接读取
- 未标注 → 按该阶段阶段目标/描述,对照
chapter-tension-guide.json → tension_levels 的事件烈度特征判断(LLM 判断)
- 无大纲或无法定位阶段 → 省略该字段
② 章节分类判断(context.chapter_type):按以下来源依次判断当前章内容分类(7 类:daily/transition/mainline/combat/romance/climax/wrapup,定义见数据文件 chapter_types):
- 用户明示——用户消息中直接说明了本章内容("写日常""大战前夜""写一场战斗")
- Prompt.md——该章
prompt_text 的剧情描述(如多为交战描写 → combat)
- 剧情大纲——当前章所属阶段的阶段目标/章节要点描述
- 步骤 3 检测结果回填——来源 1-3 均无法确定时,等步骤 3 内容检测完成后按检测结果定类(大量 combat 段落 →
combat;大量 romance 段落 → romance;无专项内容 → mainline 或 daily)
判断规则:tension_level 是阶段级背景(本阶段整体事件烈度),chapter_type 是章节级指引(本章内容规划)——任何阶段内都可出现任何章节分类(如 L4 阶段中的日常章/收束章),张力等级不因章节分类改变,章节分类也不被张力等级强制。
分发:两字段随数据包分发至 Core/四专项(字段定义见 packet-schemas.json 各协议)。各写作技能按 chapter_type 查 chapter-tension-guide.json → chapter_types 对应分类的 events/conflict_scale/info_release/foreshadow 作为事件安排建议(软引导——参考建议,不拦截不强制)。
步骤 3:内容类型检测与判断(判断功能)
此步骤仅在快速路由未命中时执行。快速路由已命中时跳过——全文类型已知。
待处理文本按以下优先级逐级扫描:
3.1 NSFW 内容检测(三级扫描)
读取 data/type-detection.json → detections.nsfw(命中词表与条件枚举见数据文件)。检测到以下任一条件时,标记为 NSFW 专项内容:
一级 — 显性性词汇(直接命中):
文本中出现 level1_direct.keywords 中的性器官直称、性行为动词、性相关体液词汇(含同义词/代称),直接判定为 NSFW。
二级 — 性场景描写(场景命中):
命中 level2_scenes 任一场景类型——床戏/亲密接触(接吻以上尺度)、自慰(性器官触碰)、性暗示(脱衣/抚摸/喘息呻吟等前戏边缘行为)、情色幻想。
三级 — 语境渗透(语境命中):
满足 level3_contexts 任一语境条件——连续性挑逗/性暗示对话(≥3轮)、角色互动以性吸引力为核心驱动力(勾引/诱惑)、用户已明确指示当前章为 NSFW 章节。
不触发条件(命中 not_triggered 任一 → 不触发):
仅身体部位词(胸/腿/臀)且上下文为正常描写;接吻描写无进一步身体接触暗示;医学/生理卫生语境下的器官名称。
3.2 战斗内容检测(四级扫描)
读取 data/type-detection.json → detections.combat(动词词表与条件枚举见数据文件)。检测到以下任一条件时,标记为战斗专项内容:
一级 — 兵器/攻击动词命中(直接命中):
文本中出现明确的攻击性动作描写——level1_direct.weapon_verbs(兵器格斗)+ hand_verbs(徒手格斗)+ ability_verbs(超能力攻击)+ gun_verbs(枪械)——且该动作有明确的攻击目标(人),直接判定为战斗内容。
二级 — 攻防交替(场景命中):
命中 level2_scenes 任一场景类型——对峙后肢体/兵器/能力冲突、格挡闪避招架+反击往复、比试/切磋/决斗(即使点到为止)、追杀/逃亡中的直接对抗(非单纯逃跑)。
三级 — 伤势描写+攻击意图(语境命中):
满足 level3_contexts 任一语境条件——伤势描写为主且来源为人与人的直接对抗、战斗后的状态评估/战果确认。
四级 — 战斗准备/收束(边界命中):
命中 level4_boundary 任一——对峙/蓄势描写(拔剑、摆开架势、气息对峙)、战斗后的收剑/离去/沉默。
不触发条件(命中 not_triggered 任一 → 不触发):
单纯武器描述/兵器鉴赏(无攻击动作和目标);练功/独自修炼(无对手);体育竞技非格斗类;军队/大规模战争描写(百人以上);暗杀/偷袭一击致命(无往复攻防);魔兽/怪物狩猎(非人与人)。
3.3 言情内容检测(三级扫描)
读取 data/type-detection.json → detections.romance(关键词表与条件枚举见数据文件)。检测到以下任一条件时,标记为言情专项内容:
一级 — 情感互动关键词命中(直接命中):
文本中出现明确的情感互动关键词——level1_direct.confession(表白类,用于表达情感而非日常客套)+ ambiguous(暧昧类)+ emotion_state(情感状态类)——且该关键词发生在角色之间的情感互动语境中,直接判定为言情。
二级 — 浪漫互动场景(场景命中):
命中 level2_scenes 任一场景类型——浪漫含义肢体接触(牵手/拥抱/靠肩/整理头发衣领/擦眼泪)、表白/确认关系(不论结果)、约会(日常活动但以情感互动为核心)、争吵后和好/冷战情感对峙、思念/触景生情的独处段落(情感指向特定的人)。
三级 — 单方情感体验(语境命中):
满足 level3_contexts 任一语境条件——内心独白以对另一角色情感为核心、行为动机明确由对另一人的情感驱动、回忆与另一角色的过往互动(带情感色彩:怀念/遗憾/甜蜜)。
不触发条件(命中 not_triggered 任一 → 不触发):
日常社交礼仪客套用语;纯友谊/兄弟情/战友情(无浪漫暗示);家人之间的关怀(父母/子女/手足);NSFW 性场景(由 3.1 三级扫描优先捕获,由 NSFW 处理);角色对非人类对象的情感;职业关系层面的欣赏/钦佩/信任(无浪漫暗示)。
3.4 内容类型判定结果
扫描完成后,按段落标记类型:
| 标签 | 含义 | 目标技能 |
|---|
general | 一般叙事/对话/描写 | Core(基础写作辅助) |
nsfw | NSFW 成人内容 | NSFW 专项写作 |
combat | 战斗对决内容 | 战斗描写专项 |
romance | 言情/恋爱内容 | 言情写作专项 |
步骤 4:段落预分配(预分配功能)
在检测完成的基础上,将全文按段落拆分为独立的任务单元,标注每段的类型和边界,然后按类型分组打包——各写作技能接收到的是"已经分好的、只属于自己的那部分文本"。
快速路由命中或全篇仅一种类型时:跳过段落分割与分组——全文作为一个段落组直接打包到目标技能,零分配开销。
4.1 段落分割
以段落为单位遍历全文,为每个段落打上类型标签(general / nsfw / combat / romance)。
角色标注:分割同时将段落文本与角色文件中的角色名(主要/次要角色条目标题)匹配——命中 → 该段落标记 involved_characters;段落组级 involved_characters = 组内各段落命中角色名的并集。facts 块按此名单提取字段。
4.2 边界合并
两个同类型的段落组之间如果仅隔 ≤2 个 general 段落,合并为同一段落组(避免因一句环境换气把同一场戏拆成两段)。
4.3 生成分配清单
[内部] 段落分配清单
段落组 1(L1-L3):general → Core
段落组 2(L4-L12):combat → 战斗描写专项
段落组 3(L13-L14):general → Core
段落组 4(L15-L22):romance → 言情写作专项
段落组 5(L23-L28):nsfw → NSFW 专项写作
段落组 6(L29-L31):general → Core
4.4 打包数据并分发
为每个段落组生成数据包,附加上下文信息(前后各一段非同类文本供语境参考),然后按目标技能并行/串行分发。
facts 组装:按步骤 2.1 字段化矩阵 + 段落组 involved_characters,从角色文件提取各角色命名字段值(≤6 字段/角色),组装为数据包 context.facts——各写作技能直接使用,不再自行读取角色文件。不含隐藏设定。
glossary 组装:若步骤 2 已读取术语表,将 context.glossary 随数据包分发至各写作技能(Core/Combat/Romance/NSFW)——遇禁用混指词自动纠偏。
步骤 5:调度写作技能处理
5.1 分发到 Core(一般段落)
将所有标记为 general 的段落组打包,按 data/packet-schemas.json → protocols.to_core 字段定义组装数据包(字段名/必填/说明以规格数据为准),传递至 Core。
Core 返回:{ "processed_text", "changes_summary" }(同规格数据 returns)
5.2 分发到战斗描写专项
将所有标记为 combat 的段落组打包,按 data/packet-schemas.json → protocols.to_combat 字段定义组装数据包,传递至战斗描写专项。
战斗技能返回:{ "processed_text", "combat_type", "exempted_norms", "key_changes", "combat_notes" }(同规格数据 returns)
5.3 分发到 NSFW 专项写作
将所有标记为 nsfw 的段落组打包,按 data/packet-schemas.json → protocols.to_nsfw 字段定义组装数据包,传递至 NSFW 技能。
NSFW 技能返回:{ "processed_text", "nsfw_tier_used", "sexy_value", "exempted_norms", "key_changes", "ooc_warnings" }(同规格数据 returns)
5.4 分发到言情写作专项
将所有标记为 romance 的段落组打包,按 data/packet-schemas.json → protocols.to_romance 字段定义组装数据包,传递至言情写作专项。
言情技能返回:{ "processed_text", "romance_type", "exempted_norms", "key_changes", "romance_notes" }(同规格数据 returns)
步骤 6:结果整合
所有分发的技能返回结果后,Write-Router 执行整合。
6.1 段落拼合
按步骤 4.3 的分配清单,将各技能返回的 processed_text 按原位置拼回全文中。
6.2 豁免收集
收集所有专项技能返回的 exempted_norms,取并集。此并集将传递给成品输出校验,告知哪些规范已被专项技能覆盖。
6.3 专项元数据汇总
收集所有专项返回的元数据(combat_type、nsfw_tier_used、sexy_value、romance_type、key_changes、ooc_warnings、combat_notes、romance_notes),汇总为最终输出的元数据段。
6.4 全文一致性过检
对拼合后的全文做过检——确保专项段落与一般段落在整体节奏、换气频率上协调,不出现断层。
如有 ooc_warnings,向用户展示并确认。
步骤 7:调度长篇专项(伏笔/剧情回忆)
整合完成后,检查是否需要伏笔管理或剧情回忆:
- 伏笔检测:如战斗/言情/NSFW/一般段落中用户标注了伏笔提示,或文本中存在暗示后续发展的关键信息(隐藏实力、未展露的招式、遗留的伤势、暗恋未说出口、关系阶段变化等)→ 自动调度「长篇专项」进行伏笔登记。检测到的线索按 foreshadowing 数据格式直接产出:
{第N章}_{≤50字关键意思}_{待回收}(如 第3章_主角隐藏魔力天赋_待回收),避免自由文本二次转换
- 剧情回忆:如用户提及前文章节事件、或文本中涉及需要回溯的跨章线索 → 调度「长篇专项」进行情节回忆
传递数据包:
{
"trigger_type": "{foreshadowing / recall / both}",
"chapter": "{当前章号}",
"volume": "{当前卷号或 null}",
"hints": ["{检测到的伏笔提示或回忆需求}"]
}
长篇专项处理完成后返回确认信息。
步骤 8:调度成品输出校验(落盘)
流水线最后一步,自动调用「成品输出校验」技能。按 data/packet-schemas.json → protocols.to_proofreading 字段定义组装完整数据包(metadata 含 combat/romance/nsfw/foreshadowing 四键,无则 null)。
校验技能执行:CPS.json 标点扫描 → Core 结构扫描(根据 exempted_norms 跳过)→ 通过则落盘 / 不通过则修正后重检。
步骤 9:输出最终成品
返回经校验通过的优化后文本,附带:
- 操作摘要(Write-Router 调度了哪些技能)
- 专项技能元数据(combat 的
combat_type + romance 的 romance_type + NSFW 的 nsfw_tier_used / sexy_value)
- 长篇专项结果(伏笔登记数 / 剧情回忆摘要)
- 校验摘要(标点修正数 / 结构通过项)
轻量模式:创建阶段文本加工
此模式是标准流水线的极简分支。创建阶段技能(创建人物/设定编辑/剧情编辑/快速创建)产出的大纲类文本,不直接调用 Core,而是传入 Write-Router,由 Write-Router 以轻量模式完成文本类型确认和 Core 调度后返回。
触发条件
当 Write-Router 接收到的数据包中 mode 字段为 "creation_phase" 时,自动进入此轻量分支。
跳过步骤
此模式下以下标准流水线步骤全部跳过:
| 跳过步骤 | 步骤名称 | 跳过原因 |
|---|
| 步骤 0 | 零提示词检测 | 创建阶段不需要提示词,文本已由创建技能产出 |
| 步骤 1 | 路由类型判定 | 创建阶段不涉及正文类型路由 |
| 步骤 2 | 上下文按需预读取 | 创建技能已自行完成上下文读取和写作配置获取 |
| 步骤 3 | 内容类型检测(NSFW/Combat/Romance) | 大纲文本不存在连续的性/战斗/言情描写段落 |
| 步骤 4 | 段落预分配 | 每次仅传入单个字段文本,无需段落分割与分组 |
| 步骤 5.2/5.3/5.4 | Combat/Romance/NSFW 专项调度 | 大纲文本不涉及专项写作场景 |
| 步骤 6 | 结果整合 | 仅 Core 一个技能被调度,无需拼合 |
| 步骤 7 | 长篇专项(伏笔/回忆) | 大纲文本不涉及跨章节伏笔或情节回忆 |
| 步骤 8 | 成品输出校验(落盘) | 创建技能在接收 Core 结果后自行调度成品校验落盘 |
步骤 L0:入口分流
Write-Router 接收到数据包后,首先检查 mode 字段:
mode 为 "creation_phase" → 进入轻量处理分支(步骤 L1-L3)
mode 不存在或为其他值 → 进入标准流水线(步骤 0-9)
- 若
mode 缺失但 context.content_type 为 "大纲文本" 且 context.source_skill 为已注册的创建技能名称 → 推断为轻量模式(记录警告,建议后续调用显式传入 mode)
步骤 L1:文本类型确认
- 检查
context.content_type 是否为 "大纲文本"
- field_name 合法性校验:
context.field_name 必须命中 templates/index.json → protocols.field_name 枚举(人物语气/梗概/阶段目标/剧情要点/世界观-{分类名}/对外简介/个人描述/核心设定-*/次要设定-{分类名})或 templates/character.schema.json → x_notes.core_polish_fields(人物性格/人物简介/人物语气/身形特点/龙套角色描述等)
- 命中 → 透传
field_name 给 Core(Core 按 norms/index.json → field_standards 应用字段级加工标准)
- 未命中 → 记录警告并修正为最接近的协议字段名;无法确定时省略
field_name(Core 按普通大纲文本处理)
- 确定目标技能为 Core,跳过所有专项检测
与标准步骤 3 的关键区别:标准步骤 3 执行 NSFW 三级扫描 + 战斗四级扫描 + 言情三级扫描,对全文逐段分析类型。轻量模式仅读取 content_type 与 field_name 字段做确认——不做任何文本内容扫描。
步骤 L2:调度 Core 加工
将数据包原样转发至 Core(基础写作辅助)——转发格式 = 入口数据包除去 mode 字段(字段定义见 data/packet-schemas.json → protocols.lightweight_in)。
Core 按大纲文本规范(规范 1.5:大纲类文本特殊处理 + 规范 1.6:破折号禁令 + 规范 5:降重率酌情,及 field_name 对应字段标准)加工后返回:{ "processed_text", "changes_summary" }。
此步骤不涉及 Combat/Romance/NSFW 调度,不执行并行调用。
步骤 L3:返回结果
将 Core 返回的结果直接透传给调用方创建技能:
{
"processed_text": "{加工后文本}",
"changes_summary": "{调整摘要}"
}
Write-Router 在此环节的角色是调度透传——不修改数据包内容,不在 Core 结果上做二次加工、整合或校验。创建技能接收到结果后,继续其自身流程(如将加工后文本拼入角色条目、展示给用户确认、调度成品校验落盘等)。
轻量模式数据包速查
创建技能 → Write-Router:
{ mode:"creation_phase", text, context:{source_skill, content_type:"大纲文本", field_name}, polish_mode, polish_config }
Write-Router → Core:
{ text, context:{source_skill, content_type:"大纲文本", field_name}, polish_mode, polish_config }
(与创建技能传入的数据包除去 mode 字段后完全一致)
Core → Write-Router:
{ processed_text, changes_summary }
Write-Router → 创建技能:
{ processed_text, changes_summary }
(与 Core 返回完全一致)
流水线总览
用户提示词
│
▼
Write-Router(此技能)
│
├── 步骤 0:零提示词检测 → 必要时调度提示词增强
├── 步骤 1:路由类型判定 ← 快速路由
│ 用户关键词命中 → 跳过步骤 3+4,直接打包到目标技能
├── 步骤 2:上下文按需预读取(按路由类型读取子集)
├── 步骤 3:内容类型检测与判断 ← 判断功能
│ NSFW三级扫描 + 战斗四级扫描(快速路由命中时跳过)
├── 步骤 4:段落预分配 ← 预分配功能
│ 段落分割 → 边界合并 → 生成分配清单(单类型时跳过)
├── 步骤 5:分发到各写作技能
│ ├── general 段落 → Core(基础写作辅助)
│ ├── combat 段落 → 战斗描写专项
│ ├── romance 段落 → 言情写作专项
│ └── nsfw 段落 → NSFW 专项写作
├── 步骤 6:结果整合(拼合+豁免收集+一致性过检)
├── 步骤 7:→ 长篇专项(伏笔登记/剧情回忆)
└── 步骤 8:→ 成品输出校验(标点+结构→落盘)
│
▼
最终成品(校验通过,已落盘)
轻量模式流水线:
创建技能(数据包 mode:"creation_phase")
│
▼
Write-Router(此技能)
├── 步骤 L0:入口分流(识别 mode)
├── 步骤 L1:文本类型确认(大纲文本 → Core)
├── 步骤 L2:调度 Core 加工(透传数据包)
└── 步骤 L3:返回结果给调用方
│
▼
创建技能(接收 processed_text → 继续自身流程 → 自行调度成品校验 → 落盘)
调度协议速查
全部调度协议(7 个协议:to_core / to_combat / to_nsfw / to_romance / to_long / to_proofreading / lightweight_in 的字段定义、必填、返回结构)见 data/packet-schemas.json——机器规格,首次调度完整读取一次,之后按工作记忆执行。
注意事项
- 唯一调度入口:所有正文类技能(Core/Combat/Romance/NSFW)的文本加工调度必须经过此技能——包括正文写作流水线(标准模式)和创建阶段文本加工(轻量模式)。不允许绕开 Write-Router 直接调用 Core/Combat/Romance/NSFW 进行文本处理。例外:Combat/Romance/NSFW 可被用户直接触发进行只读分析(分析战斗写法/分析情感描写/NSFW配置)——此类触发不涉及文本加工和落盘。创建阶段技能(创建人物/设定编辑/剧情编辑/快速创建/提示词增强)产出的文本,通过轻量模式(
mode: "creation_phase")传入 Write-Router,由 Write-Router 调度 Core 加工后返回
- 判断优先于处理:内容检测和段落预分配在调用任何写作技能之前完成——各写作技能收到的已是"已分类、已分组"的文本
- Core 已解放:Core 不再承担检测/分割/调度/整合职责,只做纯文本优化。Write-Router 不要将这些职责再传回 Core
- 并行与串行:Core/Combat/Romance/NSFW 之间无依赖关系(各处理各自的段落组)→ 可并行调用。长篇专项和成品输出校验依赖整合结果 → 必须串行
- 专项技能之间的段落重叠:同一段落不可能同时属于两个专项——NSFW 检测优先级高于战斗检测。如某段落同时命中 NSFW 和 combat,按 NSFW 处理(NSFW 场景中的肢体冲突属于情色语境,不属于对决)
- 始终以 Markdown 格式输出文本内容