AI辅助网文创作理论研究笔记(十三):L3/L4——带标签草稿与多技能体系
本文提出了一种L3/L4层级的叙事写作优化方案,核心创新在于: 层级重构: L3从纯指令层转为产出"带标签草稿",采用类似HTML的标签语法包裹正文段落 L4基于标签草稿进行扩展打磨,形成终稿 二者形成"草稿+精修"的接力关系 标签体系: 包含视角、节奏、情绪等六大类标签 通过预处理将简写标签转换为完整提示词要求 比传统JSON指令更直观,提供上下文参照 多
笔记13:L3/L4——带标签草稿与多技能体系
一、L3 和 L4 的重新定位
1.1 旧设计的问题
L1.5 加入后,层级链变为 L1→L1.5→L2→L3→L4。L2 已经产出了精确到功能序列的章纲("第32章:铺垫→阻碍→转折,情绪压抑→爆发"),L3 再做一层纯指令设计就是冗余——说两遍"这里该用外聚焦"没有意义。
L3 应该直接产出带指令标签的草稿正文,L4 根据标签扩展打磨成终稿。
1.2 新定位
L2 输出:章纲(功能序列 + 情绪曲线 + 人物行动元,纯指令)
↓
L3 任务:把章纲翻译成一段带标签的粗略草稿(500-1000字/章)
↓
L4 任务:读取标签草稿,扩展打磨成精修正文
L3 和 L4 不再是"指令层 + 执行层"的串行关系,而是草稿 + 精修的接力关系。
二、L3 带标签草稿
2.1 形态
L3 的输出不是 JSON 指令表,也不是纯正文,而是在一段粗略草稿中嵌入叙事标签。
标签语法:类似 HTML,用 <标签名 属性="值">草稿正文</标签名> 包裹正文段落。以下是 L2 给出第32章的功能序列(铺垫→阻碍→转折)后,L3 产出的草稿:
<视角 type="外聚焦">
<节奏 type="慢速扩述">
拍卖行的灯光昏暗。一个年轻人站在柜台前,衣着洗得发白了。
"就这?"鉴定师老周接过那颗灰扑扑的晶核,两根手指夹着翻了个面。
他嘴角往下撇了撇。"小伙子,我们这儿不收地摊货。"
</节奏>
<情绪 type="压抑积累" 强度="↑">
<限制视野 target="老周" 规则="只写他看到的外表,不揭示晶核真面目">
老周把晶核随手丢在鉴定台上。他的助手——一个扎马尾的姑娘——
凑过来看了一眼,鼻子里轻轻哼了一声。
"下一个——"
</限制视野>
</情绪>
<转折点 name="仪器启动">
鉴定仪器发出一声轻响。老周没在意,挥了挥手示意助理记下"废品"。
但那声音没有停。嗡嗡的震鸣从鉴定台传来,整个台面开始颤抖。
</转折点>
<视角 type="外聚焦→不定内聚焦" 说明="周围人反应">
<节奏 type="扩述→等述">
马尾姑娘的手停在半空。一个路过的客人不小心撞在门框上。
角落里打瞌睡的保安猛地睁开眼睛。
老周慢慢转过身。仪器上的数字在跳。
</节奏>
<情绪 type="爽感-打脸高潮" 强度="↑↑">
<省略 规则="不写老周内心活动,只写外在">
<话语模式 type="短句+动作">
他的手抓住了鉴定台的边缘。指关节发白。然后——仪器爆了。
晶核掉在台面上,还在发光。
"这……这是——"
</话语模式>
</省略>
</情绪>
<情绪 type="满足感-余韵">
<自由间接引语 规则="展示老周内心崩塌,但不直接写'他后悔了'">
老周没有说话。他盯着那颗晶核,像盯着一个刚刚从他眼前走过的鬼。
马尾姑娘的嘴还张着,但她已经忘了她想说什么。
</自由间接引语>
</情绪>
</视角>
2.2 标签类型
| 标签 | 属性 | 作用 |
|---|---|---|
<视角> |
type (外聚焦/内聚焦/不定内聚焦/自由间接引语) |
切换叙事视角 |
<节奏> |
type (扩述/等述/概述/静述) |
拉长或压缩叙事时间 |
<情绪> |
type, 强度 (↑/↑↑) |
情绪目标和强度 |
<话语模式> |
type (短句+动作/大量对话/心理描写/环境烘托) |
句式结构 |
<限制视野> |
target, 规则 |
控制信息量和视角范围 |
<省略> |
规则 |
告知 L4 此处不写什么 |
<自由间接引语> |
规则 |
以叙述者口吻转述人物心理 |
<转折点> |
name |
标记叙事节点 |
2.3 为什么比纯指令好
旧 L3 输出 JSON("场景1:视角=外聚焦,节奏=慢速,字数=300"),AI 拿到表格需要自己想象场景。
带标签草稿给出了上下文——AI 看到的不只是一条抽象指令,而是一段已经用外聚焦角度写好的草稿。它知道"写到这个地方的时候换视角",因为视角标签包裹的就是那段正文。
2.4 标签的预处理
在传给 L4 之前,对标签草稿做一次正则预处理:
输入:L3 草稿(含原始标签 + 正文)
↓
正则匹配所有 <标签名 属性>...</标签名>
↓
替换为 <标签名 属性 提示词要求="使用XXX视角,注意YYY,避免ZZZ">
↓
输出:标注后的草稿 → 传给 L4
原始草稿中的属性(type="外聚焦")是简写,预处理阶段根据标签类型和属性值,从映射表查对应的完整提示词注入到 提示词要求 属性中。L4 读取标签时直接拿到完整约束,不需要查映射表。
例如:
输入: <视角 type="外聚焦">正文</视角>
输出: <视角 type="外聚焦" 提示词要求="只写外部可见的行为和对话,不进入任何人物的内心。叙述者像一个客观的摄像机。">正文</视角>
映射表可以预置默认值,用户也可以自定义每个标签的提示词要求文本。
三、L4 精修正文
3.1 任务
读取 L3 的带标签草稿,执行以下操作:
- 扩展篇幅(500字草稿 → 2000-3000字正文)
- 严格遵守标签中的视角、节奏、话语模式约束
- 标签处精确执行视角切换和节奏变化
- 丰富描写和环境细节
- 保持标签指定的情绪强度
3.2 输出
纯正文文本 + 字数统计。标签已全部消化为文本效果,不在最终输出中出现。
四、L3 与 L4 的多技能体系
4.1 为什么需要多技能
L1/L1.5/L2 都有专家会议(多角色协作),但 L3 和 L4 不同——它们的任务是执行而非决策。不需要多方博弈,需要的是"面对不同情况用不同方法执行"。
目前设计只有单一的 skill。遇到以下场景会出问题:
- 改了三轮还不满意——需要换策略
- AI 写得太飞、太抽象——需要保守生成
- 某段节奏太慢——需要加速模式
- 用户想对比不同风格
L3 和 L4 不应该只有一份 prompt,而应该有多个可切换的 skill。
4.2 L3 的技能
保留默认 skill 文件,但具体 prompt 内容待后续设计:
| 技能 | 定位 | 使用场景 |
|---|---|---|
| 初稿生成 | 首次接收 L2 章纲,产出带标签草稿 | 默认入口 |
| 迭代修正 | 在已有草稿上按用户反馈修改 | 用户不满意,指出具体问题 |
| 换方向重写 | 同一章纲,不同风格/节奏 | 对比不同写法 |
| 保守写作 | 严格控制想象空间 | AI 写得太飞、设定崩了 |
| 加速模式 | 压缩篇幅,加快叙事节奏 | 某章太拖 |
当前仅推进
first_draft(初稿生成)的 prompt 实现,其余 skill 文件作为占位预置,具体 prompt 内容后续讨论。
4.3 L4 的技能
| 技能 | 定位 | 使用场景 |
|---|---|---|
| 初稿扩展 | 接收标签草稿,扩展打磨成精修 | 默认入口 |
| 文风调校 | 保持内容,调整语言风格 | 要"更古龙"或"更网文化" |
| 删改压缩 | 缩短篇幅,保留核心 | 篇幅超了 |
| 描写增强 | 丰富环境、心理、感官细节 | 文太干瘪 |
| 对话打磨 | 专门优化对话部分 | 对话生硬 |
| 保守修复 | 检测不合理设定,逐条修正 | AI 太异想天开 |
| 终稿润色 | 检查错别字、语病、节奏 | 内容满意,最后抛光 |
4.4 技能切换方式
两种模式并存:
手动切换:前端下拉菜单选当前 skill
自动切换:外层编排逻辑检测模式后自动推荐或切换
- 连续 3 次迭代用户还不满意 → 建议"换方向重写"
- 文本中出现大量修饰词和比喻 → 提示"AI 在放飞,切保守模式?"
- 检测到打脸场景 → 自动选"描写增强"或"对话打磨"
外层编排不是独立 Agent,而是在 L3/L4 API 层加轻量判断——当检测到特定模式时自动推荐。
4.5 与 L1/L1.5/L2 的模式差异
| L1/L1.5/L2 | L3/L4 | |
|---|---|---|
| 模式 | 多专家会议(多方博弈) | 多技能切换(工具箱) |
| 原因 | 需要决策 | 需要执行 |
| 类比 | 会议室 | 工具箱 |
五、Skill 的注册与扩展
5.1 设计原则
系统预置几个默认 skill(上文列出的),但 skill 列表不写死。用户可以创建、导入、分享自己的 skill。
5.2 用户创建 Skill
前端 skill 编辑器:填写名称、描述、层级、prompt 模板,保存后自动注册。
┌─────────────────────────────────────────────┐
│ 创建/编辑 Skill │
│ │
│ 名称:[我的打脸专用skill ] │
│ 描述:针对打脸场景优化,短句冷感 │
│ 层级:L4 │
│ │
│ Prompt 模板: │
│ ┌─────────────────────────────────────────┐ │
│ │ 你是一个网文写作助手。当前任务: │ │
│ │ 根据带标签草稿生成精修正文。 │ │
│ │ │ │
│ │ 特殊要求: │ │
│ │ - 打脸场景只用外聚焦,不写人物心理 │ │
│ │ - 句式用短句,每句不超过15字 │ │
│ │ - 对话用古龙式冷感风格 │ │
│ │ ... │ │
│ └─────────────────────────────────────────┘ │
│ │
│ [保存] [取消] │
└─────────────────────────────────────────────┘
5.3 导入与存储
接受 .yaml 格式,拖入即可用。存储位置:data/user/skills/(用户级,跨项目共享)。
data/user/skills/
├── l3/
│ ├── first_draft.yaml ← 系统预置 (builtin: true)
│ ├── conservative_write.yaml ← 系统预置
│ └── my_custom_l3.yaml ← 用户自建
└── l4/
├── first_expand.yaml ← 系统预置
├── final_polish.yaml ← 系统预置
└── imported_dalian.yaml ← 用户导入
5.4 注册机制
# 系统预置:走代码注册表
@register_module("l4_skill")
class ConservativeRepairSkill(BaseL4Skill):
skill_id = "conservative_repair"
skill_name = "保守修复"
builtin = True
# 用户自定义:从 YAML 动态加载
class UserDefinedSkill(BaseL4Skill):
def __init__(self, yaml_path: Path):
data = yaml.safe_load(yaml_path.read_text())
self.skill_id = data["id"]
self.skill_name = data["name"]
self.prompt = data["prompt"]
self.builtin = False
启动时扫描两个来源,合并成完整 skill 列表。
5.5 配置
l3:
default_skill: first_draft
auto_switch: true # L3 技能 prompt 待后续设计,目前仅初稿生成可用
l4:
default_skill: first_expand
auto_switch: true
不需要在配置中枚举所有 skill——系统自动从代码注册表和 data/user/skills/ 扫描。
六、与旧 L3/L4 的迁移
旧设计:MappingCompiler(指令 JSON)+ ConstrainedRenderer(按指令渲染)
新设计:TaggedDraftGenerator(带标签草稿)+ 多 skill 渲染器
旧代码中的 BaseL3Narrative 和 BaseL4Renderer 协议需要更新。MappingCompiler 和 ConstrainedRenderer 可以作为第一批 skill 实现迁移过来,而非直接废弃。
待讨论问题
-
标签语法的模型兼容性:当前方案使用 HTML 式
<标签名>。但<>在训练语料中与代码/HTML 强绑定,MoE 路由可能错误激活代码专家而非写作专家,影响网文类型输出的预测概率分布。替代方向:
- 围栏式:
【视角:外聚焦】正文【/视角】——中文方括号在网文中常见,不易误触,但闭合标签需回写标签名 - 注释式:单独一行
%% 视角切换:外聚焦——像剧本注释,不包裹正文,但失去精确的范围控制 - 分离式:L3 不把标签嵌入正文,而是输出两样东西——纯正文草稿 + 独立的行号→标签映射表。LLM 全程只看到网文文本,标签完全在代码层处理。代价是 L3 需要额外输出映射表,且正文中无法根据标签位置生成更精确的草稿
替代语法对照:
语法 示例 优点 缺点 中文围栏 【视角:外聚焦】正文【/视角】网文语料常见,不易误触 闭合标签需回写标签名 米字围栏 ※外聚焦※正文※/外聚焦※极少误触 看起来奇怪 花括号 {外聚焦}正文{/外聚焦}简洁,网文中罕见 与JSON/模板引擎关联 分节符 §外聚焦§正文§/外聚焦§几乎不出现 Unicode字符,输入不便 注释行 %% 视角切换:外聚焦自然,像剧本注释 无法精确包裹正文范围 最终选型待后续实验验证。
- 围栏式:
-
L4 对标签的遵守程度:L4 是"必须严格遵守标签"还是"标签为建议,L4 有调整权"?如果要求严格,如何验证 L4 确实执行了标签指令?
-
自动切换的准确率:外层编排逻辑检测"AI 在放飞"的准确率能到多少?误切换(该放飞时被切保守)的代价是什么?
-
Skill 市场:是否需要支持在线的 skill 分享/下载?用户创建的 skill 能导出分享吗?
更多推荐


所有评论(0)