Files
writing-agent/docs/play-dm-auditor.md
T
chenmoranzhiandCursor 6b4156fd0f Reorder play pipeline: gm first, auditor last.
Main world layer runs before narrator and deferred maintenance. Round-scoped settlement/maintain tags are archived at turn start so prior auditor table merges feed the next gm read.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-25 00:42:56 +08:00

3.3 KiB
Raw Blame History

主世界层 与 旁观维护:怎么配合

用白话说明「DM」和「副 LLM(旁观)」谁先谁后、谁干什么。
实现上当前管线是:主世界层 →(可选角色视角)→ 转述 → 旁观维护。

1. 先说清楚两个角色

称呼 槽 干什么 不干什么
主世界层(DM) gm 读设定与当前状态,对本轮玩家行动做裁决;可提议改变量 不负责长文文风;不靠「再想一遍」修表
旁观维护(副 LLM) auditor 查漏补缺:表缺字段、该不该按生成规则补一条实例;多数轮空操作 不当作者写正文;不替代裁决

转述只吃裁决包写用户可见文字——与「俩人怎么配合」无关。

2. 你提到的两种做法

做法甲:DM 先提要求 → 副 LLM 交作业 → DM 再过一遍

DM:「按怪物规则补 1 个」→ 旁观生成 → DM 再裁决一次
  • 优点:DM 始终握笔。
  • 缺点:同一回合容易 3 次模型调用,贵、慢;旁观一不小心变成「小作者」。

做法乙:DM 先交齐裁决 → 把结果和要求交给副 LLM → 副 LLM 用工具改表

DM 出裁决包(含变量变更)→ 旁观只动表/触发生成 → 程序合并,不再开一轮 DM
  • 优点:叙事权威仍在 DM;旁观像库管/校对,适合工具改表。
  • 缺点:若裁决里已经写错事实,旁观「修表」救不了叙事,只能修状态。

3. 本仓库采用的(推荐)

采用做法乙:主世界层先拍板 → 转述 → 旁观在回合末改表(合并结果供下一轮主世界层读取)。

每轮:
  1. 主世界层:读上一轮合并后的 变量.当前 + 设定 + 历史 + 用户输入
     → 出 settlement 裁决包(可含 variable_changes;可经 harness 调机遇工具)
  2. 程序:合并裁决中的 variable_changes → 变量.当前(边沿副作用照常)
  3. 叙事转述(若启用):只读裁决包写用户可见正文
  4. 旁观维护:读本轮裁决 + 合同 + 表
     → 多数轮:空 maintain
     → 少数轮:table_ops / need_generate
  5. 程序:合并旁观 table_ops → 变量.当前(**下一轮**主世界层才读到)

要点:

  1. 不要默认「旁观先扫再让 DM 裁决」(旧顺序已废弃)。
  2. 不要默认「DM 写完再让旁观润色全文」(贵,且旁观会抢笔)。
  3. 不要默认「旁观先写一大段设定再交给 DM」(旁观变作者)。
  4. 生成规则给旁观:只要合同(有哪些 rule、格式、何时该生成),不要整本描写范文。
  5. 真要「按规则生成实例」:旁观点 need_generate.rule_id,由程序/既定生成通路落表,而不是旁观写小说。

4. 和「生成规则要不要给副 LLM」的关系

问题本质不是「塞不塞那一份文档」,而是:

  • 旁观要不要能说「该按某条规则补东西」?→ 要,就得看见规则目录/格式。
  • 旁观要不要会写角色描写?→ 不要,所以描写长文不必进旁观上下文。

5. 一句话

主世界层断事;转述说话;旁观在回合末对表,改表给下一轮。
交互上优先「一次裁决 + 延后轻维护」,不优先「来回多轮 LLM 传话」。