笔记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 实现迁移过来,而非直接废弃。


待讨论问题

  1. 标签语法的模型兼容性:当前方案使用 HTML 式 <标签名>。但 <> 在训练语料中与代码/HTML 强绑定,MoE 路由可能错误激活代码专家而非写作专家,影响网文类型输出的预测概率分布。

    替代方向:

    • 围栏式【视角:外聚焦】正文【/视角】——中文方括号在网文中常见,不易误触,但闭合标签需回写标签名
    • 注释式:单独一行 %% 视角切换:外聚焦 ——像剧本注释,不包裹正文,但失去精确的范围控制
    • 分离式:L3 不把标签嵌入正文,而是输出两样东西——纯正文草稿 + 独立的行号→标签映射表。LLM 全程只看到网文文本,标签完全在代码层处理。代价是 L3 需要额外输出映射表,且正文中无法根据标签位置生成更精确的草稿

    替代语法对照:

    语法 示例 优点 缺点
    中文围栏 【视角:外聚焦】正文【/视角】 网文语料常见,不易误触 闭合标签需回写标签名
    米字围栏 ※外聚焦※正文※/外聚焦※ 极少误触 看起来奇怪
    花括号 {外聚焦}正文{/外聚焦} 简洁,网文中罕见 与JSON/模板引擎关联
    分节符 §外聚焦§正文§/外聚焦§ 几乎不出现 Unicode字符,输入不便
    注释行 %% 视角切换:外聚焦 自然,像剧本注释 无法精确包裹正文范围

    最终选型待后续实验验证。

  2. L4 对标签的遵守程度:L4 是"必须严格遵守标签"还是"标签为建议,L4 有调整权"?如果要求严格,如何验证 L4 确实执行了标签指令?

  3. 自动切换的准确率:外层编排逻辑检测"AI 在放飞"的准确率能到多少?误切换(该放飞时被切保守)的代价是什么?

  4. Skill 市场:是否需要支持在线的 skill 分享/下载?用户创建的 skill 能导出分享吗?


创建时间:2026-04-30 状态:方案讨论中,工作流画布见笔记14,消息系统见笔记15

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐