name event-summary-rules-zh description Event summary writing rules — prose body + 三段可选 section (不可逆 / 未结 / 原文摘录) 格式; 心理 A/B/C 三分类 + §2.1 颗粒度准则 (default 一句过场 + 三类例外允许展开) + §2.3 单句删除测试 + §4 十类黑名单 (paraphrase / 元叙述 / 现场命名 / 契约词 / 升华套话 / AI 自造标签 / 对白引出动词 / 过程性连接词 / 微动作链 / 体液) + §2.6 NPC baseline 路由到 character_sheet。本规范同时为 leaf event 写作规范, 以及 rollup compress 必须遵守的*写作纪律*。 metadata {"author":"Luker Team"}
event-summary-rules-zh
适用范围: 本规范只 约束 event.summary 字段的最终字符串。其他字段 (character_sheet 的 traits/identity/aliases、location_state 的 state/controller、thread 的 note 等) 不在此规范范围内。
本规范与 public/scripts/extensions/memory-graph/default-prompts.js 的 EVENT_SUMMARY_RULES_BODY 常量是同一份内容; 当二者出现差异时, 以 default-prompts.js 为准。
0. 核心定位
event.summary 是剧情记录 ——一段足以让没看过原文的 RP 模型重建剧情线、关系状态、未结线索的自然语言散文段落 , 配合三段可选的结构化 section 索引出无法从 prose 推断的关键信息。
散文 ≠ 编号列表 。如果你写出来的 summary 像 "1) A 做 X 2) B 做 Y 3) C 做 Z" 这种用数字编号串起来的紧凑短词链, 这是 outline, 不是 prose, 必须重写 。prose 是"A 在 X 之后决定做 Y, B 因此改变了对 A 的态度"这种带因果与时序连接词的完整句子序列。
它不 是:
outline / 编号列表: 不用 1) ... 2) ... 3) ... 不用 - ... * ... 把事件项串起来; 用完整句子和连接词
小说回放: 不复述对白原句, 不堆砌画面 / 微表情 / 节奏感
极致压缩的目录: 不为追求短而把因果链 / 关键决策的具体内容砍掉
万能的剧情快照: 不写下游 RP 推不出来的物件外观 / 姿势细节 / 装饰
写作锚点: 假设这段 summary 是 30 轮后下一个 RP 模型唯一能看到的本场景信息。它读完后能不能接住「上次到哪里, 谁现在欠谁什么, 哪些事再也回不去了, 哪些线还吊着」?
1. 输出格式
时间: <在 RP 世界内的具体日期 / 时间>
地点: <在 RP 世界内的具体地点>
<prose body — 一段或多段自然语言, 描述本批次发生的事件骨架、关键决策、因果关系>
不可逆:
- <每条一行, 物理 / 身份 / 关系 / 能力 / 关键物件层面的永久性变化>
未结:
- → thread "<thread 节点的 title>"
原文摘录:
- <label>: "<verbatim quote>"
三段 section (不可逆 / 未结 / 原文摘录) 默认完全不写 , 它们是 prose body 之外的关键信息索引 , 不是表单要填的空。本场景没有该类内容 → 整段 section 不出现 (不要 写 "无", 不要留空 header, 不要写占位符 "(none)" / "—")。
1.1 Prose body 的硬性结构约束
prose body 必须是连贯的自然语言段落 , 由完整的句子组成。
禁止以下写法 (出现即重写) :
数字编号项 (1) ..., 2) ..., 1. ..., ①, (1)): prose body 不是 outline, 用句号断句不用编号
项目符号 (- ..., * ..., • ...): prose body 内不出现; 这种符号只在 §3 的三段 section 里出现, 不在 prose 里
「主语 动词 宾语」式短词链 : 没有助词、没有从句、没有上下文的紧密短语链 (如 outline 那样把主谓宾用空格塞在一起、用分号或括号补丁串多条) 是 outline 的写法, 不是 prose。改写成完整句子, 用助词、从句、连接词承载语义
任意形式的"列表 dressed up as sentences" : 把若干 outline 项之间塞分号当成 prose 是不行的。如果你写出来像把多条独立条目用分号串起来, 重写为真正承载因果 / 时序连接词 (因此 / 之后 / 但是 / 于是 / 同时 / 直到 / 一旦) 的真实段落
rationale : prose 的目的是承载因果链和上下文权重; outline 把这些都丢了。检查写出来的 prose body, 应该读起来像一段叙事文字, 不像一份会议纪要。
2. Prose body 准入与剪裁 (核心规则)
2.1 颗粒度准则 (默认一句过场 + 三类例外允许展开)
prose body 的默认颗粒度 : 一个完整事件单元 = 一句话, 内容覆盖
(a) 事件名 — 谁做了什么对谁
(b) 状态变化 — 结果是什么 / 下一刻起什么 carry-over 了
只有以下三类内容允许展开为更具体的描述 , 其他一律一句过场:
(a) 跨场景未结伏笔的钩子内容 — 该悬念在后续场景才会被触发或解决, 钩子的具体内容 必须写出 (具体调查的目标 / 等待触发的具体事件 / 离场角色去做的具体事), 否则下游 RP 模型不知道伏笔指向什么
(b) 不可逆里程碑的具体形态 — 失贞 / 失肢 / 死亡 / 关系破裂 / 获赠关键物等不可逆事件, 必须写出其具体形态 (谁对谁做了什么造成的什么具体不可逆变化)。但形态本身一句话足够, 不展开过程曲线。
形态用功能性标签 : "X 失贞" / "X 怀孕" / "X 致死" / "X 致残" / "X 关系破裂" 等抽象描述, 不 写身体部位过程 (例: 子宫颈被顶穿 / 肠壁被插穿 / 阴道被贯穿 / 颈动脉被切断 等具体部位的具体动作)
体液不入不可逆 : "X 被内射"可以作为不可逆事件描述出现 (与"失贞"绑定时可一句过场), 但不写 具体身体部位的内射 (子宫内射 / 肠内射 / 阴道内射 等), 也不写 喷射节奏 / 体液种类 / 潮吹 / 量级。"内射" 这两个字本身够用
(c) 关键决策的具体条款 — 答应做什么 / 价码是什么 / 期限是什么 / 立誓在何时何地做什么。条款的具体内容 必须写出, 否则下游 RP 模型不知道双方约定的是什么
其余事件 (战斗 / 性事 / 调情 / 协商 / 移动 / 调查 / 对白) default 用一句过场陈述 , 不展开过程纹理。即使该事件本身重要 (例如本场景的核心剧情就是这场战斗), 只要它的核心信息能用"事件名 + 状态变化"一句覆盖, 就用一句; 它的具体招式 / 姿势 / 反应曲线 / 体液 / 心跳等过程纹理不属于"重要"的范畴, 是过程纹理。
颗粒度反 pattern (出现即重写为一句) :
把一个事件拆成多个子动作分别描述 (动作 → 反应 → 再动作 → 再反应) → 合并为一句结果
把一次性事拆成姿势 / 部位 / 抽插 / 反应 / 体液 / 完结的子段 → 合并为一句, 这一句可以概括体位 + 总体反应 (例: "X 与 Y 后入式性事, Y 经历首次承受过程并适应", 而不是 "X 让 Y 趴下→双手撑住→翘臀→插入→Y 哭叫→适应→抽插→Y 痉挛→X 内射→精液溢出"); 砍掉的是中间动作链 / 体液描写 / 情绪反复 / 喷射节奏 / 心跳曲线; 保留的是体位概括 + 总体反应 + §2.1 (b) 不可逆变化形态 (如失贞)
把一场战斗拆成"出招 → 反应 → 反击 → 击中"的子动作链 → 合并为一句, 这一句可以概括战法 + 总体战果 (例: "X 以近战正面硬抗击毙 Y", 而不是 "X 出招→Y 闪避→X 反击→击中→Y 倒地→X 补刀"); 砍掉的是招式名细节 / 反应曲线 / 伤情描写; 保留的是战法概括 + 战果 + §2.1 (b) 不可逆变化 (重伤致残 / 致死 / 武器或据点的具体永久变更)
把一次调情拆成"接近 → 触碰 → 反应 → 加深"的肢体接触链 → 合并为 "X 对 Y 调情, 二人关系拉近 / Y 未真正抗拒" 一句; 砍掉中间触碰链和情绪曲线
把一次协商拆成"开口 → 表态 → 反驳 → 退让 → 达成"的对白链 → 合并为 "X 与 Y 就 Z 达成 (条款: ...)" 一句; 这里 §2.1 (c) 的条款必须 写, 但条款本身一句话 (谁付什么 / 谁做什么 / 期限) 足够, 不展开协商过程
把一次调查拆成"取证 → 比对 → 推理 → 揭露"的步骤链 → 合并为 "X 调查 Y 得出结论: Z" 一句
特别强调 — 性事 / 战斗等具有强烈过程感的事件 :
即使原文用了大量篇幅 (数千字) 详细描写过程, prose body 仍然 default 一句过场。"原文写得详细" 不 是展开理由 — 原文的详细描写是 RP 文学需要, 摘要的目的是剧情骨架 + 状态变化 , 不是回放过程。
允许保留的: 体位概括 (后入 / 骑乘 / 传教士 等单一名词指代姿势, 不展开姿势调整的过程) + 总体反应 (适应 / 抗拒 / 顺从 / 高潮 等总体定性, 不展开反应曲线) + 总体情绪走向的概述 (从抗拒到顺从 / 从警惕到信任 / 从震惊到接受 等用一两个词概括的整体情绪变化, 不展开曲线; 见 §2.2 B 类) + §2.1 (b) 不可逆变化的形态 (失贞 / 怀孕 / 受伤致残 等)。
禁止保留的: 体液描写 (白浊 / 喷射 / 溢出 / 见红 等具体体液) / 子动作链 (撕开 → 抚摸 → 加速 等动作分解) / 情绪流水帐 (拆成多个阶段逐一描写每阶段的心理状态, 即把"从抗拒到顺从"展开成"先是惊恐, 然后哭叫求停, 接着身体开始适应, 渐渐沉浸, 最后臣服" 这种小作文式分阶段铺陈) / 心跳曲线 / 喷射节奏 / 部位特写。
判断标准: 删掉所有体液 / 子动作 / 情绪流水帐描写, 下游 RP 模型在 30 楼后还能不能准确接续这段剧情? 能 (只要保留体位概括 + 总体反应 + 总体情绪走向 + §2.1 (b) 不可逆变化) → 默认状态就够了, 不展开。
2.2 心理描写 A/B/C 三分类
心理 / 情感描写按来源 和性质 分三类, 不同分类适用不同处理:
A 类 — 角色明示视角内容 : 原文中以 *...* 等明确的内心独白标记包起来, 或角色当场用第一人称说出自己的内心。允许写入 prose , 用第三人称客观语转述其要点, 不带原文情绪修饰 (转述 ≠ paraphrase, 见 §4.1; 用通用描述, 不用原文的临时形容词)
B 类 — 关系 / 状态层面的定性变化, 或事件内的总体情绪走向概述 :
跨场景定性变化 (carry-over): 跨场景仍然成立的关系定性变化 (例如"二人因此关系拉近"/"X 对 Y 的态度从警惕转为信任"/"X 对 Y 的信任彻底崩塌")。判定: 故事时间往后推 24h 仍然约束剧情走向
事件内总体情绪走向 : 单个事件中角色的整体情绪变化, 用一两个词的概述 指代 ("X 从抗拒到顺从" / "Y 从震惊到接受" / "Z 全程紧张戒备")。允许 , 因为它是事件骨架的一部分 — 没有这层概述, 下游 RP 模型无法理解事件的情感走向。判定: 必须用一两个词的概述 , 不能展开成阶段性的小作文 (见 §2.1 性事 / 战斗段 "禁止情绪流水帐" 条款)
两种 B 类都允许写入 prose , 用第三人称客观语, 一句过场
C 类 — narrator 推测的单场景瞬时情绪 / 内心流水帐 : 叙述者替角色编的瞬时反应 / 情绪曲线 / 暗自吐槽 / 心跳描写 / 微表情解读。禁止写入 prose , 砍除。即使原文文本里有这些描写, prose 不复述; 它们与子动作链 / 体液描写同类, 属于过程纹理
判定测试 : 看到一句心理 / 情感描写时, 问:
它在原文里有明确的内心独白标记 (*...* 或角色第一人称说出来) 吗? — 是 → A 类, 留 (但转述为第三人称客观语)
它是跨场景仍然成立的关系 / 状态定性变化吗? — 是 → B 类, 留 (一句过场)
都不是, 是 narrator 替角色编的瞬时反应 / 情绪曲线 / 暗自吐槽 / 心跳描写 / 微表情解读 → C 类, 砍
不确定 → 按 C 类处理, 砍。
2.3 单句判据 (通过 §2.1 + §2.2 后, 剩余句子还需通过本节)
§2.1 (颗粒度) + §2.2 (心理分类) 决定了"哪些内容根本不该出现"; 通过这两关的句子, 还要再通过单句删除测试 :
如果删掉这一句, 30 楼之后某个 RP 模型会不会因此对当前剧情线 / 关系 / 状态做出具体 的错误判断 (写错某个状态值、忘掉某个具体承诺的内容、引用某个剧情节点时编造细节、误判两个角色当前的关系定性、错过某个仍待触发的线索)?
能给出具体 的错误后果 → 留
给不出, 或只能说 "失去画面感 / 失去氛围 / 失去节奏 / 失去细节 / 模型可能会需要这个 / 缺少这个会不完整" → 砍
不确定 → 按砍处理
"下游会需要这个" 不是具体后果 , 必须能指明会需要它来做什么具体动作或判断, 否则按砍处理。
给不出 ≠ 留着保险 。无具体下游后果的句子是噪音, 会拖低真正关键信息的密度。
2.4 内容选择倾向
应写 (default 留):
事件骨架 (谁做了什么, 对谁) — 一句过场
状态变化 / carry-over (不可逆变化 / 关系定性变化 / 跨场景钩子) — 一句过场
心理 A 类 (原文明示视角) + 心理 B 类 (跨场景关系变化) — 一句过场
因果关系 (为什么这事发生, 为什么这个反应) — 一句过场
可作为下游 RP 触发条件的状态信息 (在哪个地点, 在和谁独处, 处于什么大背景下) — 一句过场
应写 (允许展开为更具体描述, 由 §2.1 (a)(b)(c) 三类例外触发):
跨场景未结伏笔的具体钩子内容
不可逆里程碑的具体形态
关键决策的具体条款
不应写 :
对白原句的转述 (即使核心意思在)
微表情 / 姿势 / 衣物状态 / 物件外观 (除非属于 §2.1 (b) 不可逆里程碑或 (c) 关键决策的载体)
单次画面纹理 / 子动作链 ("抬手→放下→又抬起")
体液 / 性事生理曲线 / 反应曲线 (§2.1 过程纹理)
心理 C 类 (§2.2: narrator 推测的瞬时情绪 / 暗自 / 心跳 / 微表情解读)
钩子 / 伏笔 / 元叙述 / 未来预告 (这些走 thread 节点 + 未结 section)
叙述者的情感评论 ("这一刻 X 真正爱上了 Y")
2.5 信息密度对称
prose body 的长度应与本批次真实发生的事件量 × 颗粒度 对称, 不与原文字数对称:
原文 10k 字但实际只发生 1 件事 + 0 个 §2.1 (a)(b)(c) 例外 → prose 短 (一两句话)
原文 3k 字但发生了 5 件互相缠绕的事 + 多个不可逆里程碑 → prose 长 (多段)
不设字数上下限 。由 §2.1 颗粒度准则决定每句去留, 由 §2.2 决定心理描写去留, 由 §2.3 单句判据兜底, 由实际事件量 × 颗粒度共同决定段落数。
写完 prose 后做最后一次度量: 句数应显著少 于"如果按子动作 / 反应曲线 / 体液 / 姿势 / 心跳逐项写"会有的句数。如果你的草稿读起来已经像小说回放, 回 §2.1 重审 , 多半是过程纹理没砍干净。
2.6 NPC baseline / backstory 路由 (event ↔ character_sheet 分流)
本批次某 NPC 首次出场 或在场时讲述自己的来历 / 出身 / 长期背景 / 长期收藏 / 长期家族关系 / 长期能力来源 等内容时, 这些信息不属于 event prose , 应分流到该 NPC 的 character_sheet:
NPC 自述长期来历 / 出身 / 教育背景 / 家族 / 故乡 / 信仰 / 长期组织归属 → 写入该 NPC character_sheet 的 identity / traits / backstory (如有此字段) 等字段, 不写入 event prose
NPC 的长期持有物 / 长期收藏 / 长期遗物 → 路由到该 NPC character_sheet 的 inventory 或 traits (如属于性格描述), 不写入 event prose
NPC 的长期能力 / 修为 / 称号 / 等级 → 路由到该 NPC character_sheet 的 identity / traits, 不写入 event prose
event prose 只写 该 NPC 在本批次做了什么 / 答应了什么 / 被发生了什么不可逆变化 — 即与本批次事件链直接相关的具体动作和状态变化。NPC 自己的 baseline backstory 永远走 character_sheet , 即使是该 NPC 首次出场也一样。
反 pattern (出现即砍, 改路由) :
在 event prose 里花一整段写某 NPC "X 多年前曾是 Y / 在 Z 学习过 / 来自 W 星球 / 持有祖父留下的 V" — 这些都是该 NPC 的 baseline backstory, 与本批次事件无直接因果, 砍出 prose, 写进该 NPC 的 character_sheet
在 event prose 里详写某 NPC 的长期收藏品种类和数量 — 走 character_sheet.inventory 或 character_sheet.traits
在 event prose 里复述某 NPC 长篇大论的人生故事 / 信仰宣言 / 哲学观点 — 走 character_sheet, prose 里最多一句指出"NPC 向 X 倾诉自己的来历, 二人因此关系拉近" (这里写的是 §2.2 B 类关系变化, 不是 backstory 本身)
判定测试 : 看到 prose 里有 NPC 个人信息时, 问"这个信息是本批次发生的事件, 还是该 NPC 长期就具备的属性?" 长期属性 → 砍出 prose, 写进 character_sheet; 本批次发生的 (例如本批次某物从该 NPC 手中转给主角, 或本批次该 NPC 经历不可逆变化) → 保留在 prose。
3. Sections 准入 (三段共同的硬约束)
每段 section 的每一行都必须同时满足三条 才能写:
类型对 : 内容属于该 section 定义的范畴 (见 §3.1-3.3)
prose 里已说 : section 是 prose 之外的索引, 不是新信息。如果 prose body 里没提这个事, section 不能凭空冒出来
删掉会致错 : 套用 §2.3 单句判据 — 删掉该行后, 30 楼之后某个 RP 模型在接续剧情时会做出具体 的错误判断 (例如把已失贞写成处女 / 把已破裂关系写成融洽 / 复述某段载体文字时偏离 wording artifact 自己编)
三条任一不满足 → 该行不写。任一 section 全行都不满足 → 该 section 整段不出现。
强烈的默认状态是空 : 大多数 RP 事件只有 0-1 段 section 有内容。三段都满的事件极少见。如果你的草稿里三段都填了几行, 大概率是 "类型对" 一条把关松了 — 回去用更严格的范畴定义重审。
3.1 不可逆 — 准入定义
physical / identity / relationship / ability / 关键物件层面的永久性 变化。判定核心: 故事时间往后推 24 小时仍然约束剧情走向。
适用: 失贞 / 怀孕 / 失肢 / 失明 / 致死 / 关系正式确立或破裂 / 身份转变 (X 成为 Y) / 能力觉醒或失去 / 获得或失去关键剧情物
不适用: 情绪 (生气 / 害羞 / 嫉妒) / 姿态 (跪下 / 站起) / 临时状态 (醉了 / 困了 / 受轻伤) / 任何下一场景可以恢复的状态
每行写法: 一句话陈述变化, 不带因果或上下文 (那些应该已经在 prose 里), 不带形容词。
3.2 未结 — 准入定义
指向一个具体未来动作 的悬念。该动作有可识别的触发条件或目标, 不是泛指的 "关系还没解决" "氛围还紧张"。
适用: 谁答应了谁做什么 / 谁在等谁 / 谁写了信没发出 / 谁在追查什么 / 谁立下了誓言指向某具体行为
不适用: 模糊情感悬念 / 还没明说的暧昧 / 双方都没意识到的隐患
写法: 每行必须是 → thread "<thread title>", 指向同一批次产出的 thread 节点 。具体内容由 thread 节点承载, section 行只起索引作用。如果该悬念值得 emit thread, 这一行就写; 不值得 emit thread, 这一行就不写 — 两者绑定, 不可独存。
3.3 原文摘录 — 准入定义
满足以下两个条件之一 , 并且改述会丢失承载下游 RP 行为的具体词句 :
(a) 文本本身具备世界内持久性 : 落在某种载体上的文字 (信 / 刻字 / 公告 / 契约条款 / 公开播报 / 笔记 / 文档 / 标语)
(b) 被仪式性框定的口头表达 : 誓约 / 临终遗言 / 预言 / 咒语 / 谜面 / 公开宣告 / 命名仪式中的具体用词
普通对话不适用 , 即使内容关键 — 用 prose body 描述其要点即可。
判定测试: 把这段引用改成你自己的话来描述, 下游 RP 模型在引用此事 / 复述此事 / 与此事内容互动时, 失去的是仅仅 flavor , 还是失去了无法重建的具体 wording artifact (那个誓约的精确用词, 那封信里的关键句, 那段契约的具体条款)? 前者 → 不写; 后者 → 写。
写法: - <label>: "<verbatim>"。label 是这段文字的世界内属性 (例如 "X 写给 Y 的信 (未发送, 草稿)" / "刻在 X 上的铭文" / "X 的公开宣告" / "X 的临终遗言")。引用应当尽量短, 长信只引"业务段", 寒暄 / 反复表达 / flavor 描写砍光 。
4. 词汇结构黑名单 (按结构识别, format-agnostic)
下列结构在 prose body / 任意 section 行内都不允许 出现。它们是 LLM 写 RP-style 总结时常见的结构性 bug , 不分场景:
4.1 paraphrase 残留
任何原文对白里被某角色当场说出口的非通用词语, 包括: 临时戏称 (场景里 NPC 给某人起的临时昵称) / 口头禅 / 感叹词 / 临时情绪短语 / 现场创造的代号 / 临时形容词 / 临时身份称呼。通用动词 (说 / 看 / 走) 和专有名词 (角色本名 / 地名 / 组织名 / 已确立的剧情节点名) 不算 paraphrase 残留, 可以用。
operational 扫描法 (必跑) : 在最终自检前, 扫描 prose body 里每一对引号 / 任何短语化的描述 :
双引号 / 单引号包起来的任何字符串, 如果不是 §3.3 admitted 的 artifact verbatim → 砍引号, 改成第三人称客观描述。例: 把"以 X 自我介绍" 改成 "以恭维口吻向 Y 自我介绍"; 把"承诺 X" 改成 "承诺将带 Y 去做 Z (具体行为)"
不带引号但内容明显是角色台词的转述 (例: "X 直白调侃她是漂亮又有钱的大小姐"——"漂亮又有钱的大小姐"是角色当场说的) → 砍, 改成"X 用调侃的方式表达对她身份和外貌的兴趣"
临时身份称呼反复指代 (大堂经理 / 总经理 / 临时管家 / 路过的医生): 第一次提到时一句话点明身份, 之后用本名 / "对方" / "他" / "她" 代词指代, 不要在 prose 里反复使用"经理"/"管家"这种临时称呼
反向 — 这些不是 paraphrase 残留, 不要误砍 :
角色之间公认的关系定位词 (后宫成员 / 师徒 / 兄弟 / 专属 X / 资金供应者 / 守护者 / 复仇对象 等): 即使该定位词最初是某角色在场景里说出来的, 只要双方在剧情里接受并继续使用 , 它就是 §2.2 B 类关系定性变化 carry-over, 必须保留 (用 prose 自然带出, 不必加引号)
该 RP 世界设定里固定命名的物件 / 招式 / 等级 / 系统术语 (角色卡 / 世界书 / 系统机制声明的官方名): 在世界设定层面就是该物件 / 该招式的真实名字, 即使该名字在原文里被角色提及, 也不算 paraphrase。例: 角色卡声明的某武器固定名 / 系统机制名的技能名 / 已被剧情多场景反复指代的某物件名 → 保留, 不抽象化
NPC 长期持有的具体物 / 长期收藏 / 长期持有的标志物 : 这些是 §2.6 该 NPC 的 character_sheet.inventory 内容; 在 event prose 里首次出现且与本批次事件直接相关时 可保留具体名称 (例: 该物在本批次从 A 转给 B 是不可逆变化), 但更优做法是路由到 character_sheet (见 §2.6)
判定: 把 prose 中的每个非通用词单独问"它是不是某个角色在原文里当场 说出口的字词, 或对某场景临时角色的形容?" 是 → 砍, 换通用描述。
为什么如此严格 : paraphrase 残留是污染下游 RP 模型的主要源头 — 摘要里出现某个临时戏称, 下次召回时下游模型把它当成"该角色的固有称呼"反复使用, 形成滚雪球污染。
4.2 元叙述 / 钩子词
钩子 / 伏笔 / 铺垫 / 埋下 / 暗示 / 预示 / 为后续 / 为下章 / 为下次 / 桥段 / 篇章 / 章节级转折 / 序章终 / 序章收束 / 下一目标 / 待后续场景兑现 — 整类砍。元叙述标签 (原创主角 / 原作主角 / 主角 / 配角 / 反派) 也整类砍, 这些是叙述者视角的剧情功能定位, 不属于角色 in-world identity。
为什么砍: 这些词把"叙述者认为这件事会带来后续"显式写进了 memory; 下游 RP 模型看到 future-pointing tag 会被引导去做对应行为, 偏离真实剧情。事件就是事件, 不预测未来 。
如果某事件真的留下了 cross-scene 悬念 → emit thread 节点 + 在 未结 section 写一行 → thread, 不要 在 prose 里写 narrator 评论。
4.3 现场事件命名 / 升华副词
正式 X / 终身 X / 永久 X / 全程 X / 首次 X / 彻底 X / 真正 X / 至此 X / 标志着 X / 上交 X / 献身 / 定型 / 定锚 / 定调 / 宣告归属 / 进入新阶段 / 开启 X 模式 — 整类砍。这些都是给普通动作贴上"这件事很重大"标签的副词/前缀, 砍掉留下的动作动词本身已经足够 — 下游 LLM 会自行判断重要性。
例外: 剧情主线明确反复命名 的事件序列序数 (被多场景反复提及的固定命名) 可保留。其他次数描述序数 ("第七招" / "第二次告白") 一律改为"再次"或删除。
4.4 契约词族
契约 / 协议 / 誓约 / 凭证 / 条款 / 承诺书 / 永约 / 立约 / 缔结 / 宣言 / 成交 / 签署 / 口约 / 立下 / 兑现 — 整类砍。
替代写法: 直接写"X 答应 Y 做 Z (条件: ...)" / "X 与 Y 互相承诺 Z" / "X 答应定期给 Y 一笔款项"。不要 把普通承诺包装成"立约 / 签下契约 / 缔结永约"——这些词会让后文 LLM 把它当成不可逆的神圣契约不断引用。
如果该承诺/誓约带有世界内的仪式性框定 (举行了宣誓仪式 / 落在了书面契约上), 该 wording 可走 原文摘录 section, 不走 prose body 的契约词。
4.5 升华套话
完成从 X 到 Y 的升级 / X 段升级 / X 重身份升级 / 锚定 / 固化 / 拉满 / 封顶 / 进入新阶段 / 标志着 / 从此 X / 至此 X / 彻底切换 / 彻底翻转 — 整类砍。
4.6 AI 自造标签
AI 用「形容词+名词」给一个本不需要命名的事/物强行命名 (X 属性 / X 位次 / X 模式 / X 定位 / X 学习 / X 调教 / 专属 X / 核心 X / 永久 X 结构)。不确定 → 按 AI 自造处理, 砍。
4.7 对白引出动词
X 说 / X 道 / X 表示 / X 宣称 / X 透露 / X 吐露 / X 告白说 / X 哽咽请求 / X 撒娇评价 — 整类砍。
写做了什么 , 不写说了什么 。「揭露 X 真相」是动作动词, 允许; 「说出 X 真相」是对白动词, 禁止。
事件描述动词白名单 (这些不是对白转述 , 是描述"角色当场释放/传递了一个具体信息"的动作本身): 披露 / 揭露 / 揭示 / 告知 / 摊牌 / 宣布 / 公布 / 应允 / 答应 / 拒绝 / 反悔 / 告白 / 表白 / 求婚 / 道歉 / 谢罪 / 承诺 / 嘱托 / 委托 / 委派。
4.8 过程性连接词
在过程中 / 紧接着 / 随之 / 继而 / 与此同时 / 话音落下 — 整类砍。("翌晨" / "当夜" / "次日" 是时间锚, 允许)
4.9 微动作链 / 反应纹理
"摸到 X → 拿起 → 试探 → 藏回" 这种枚举性 子动作链 — 一律砍, 合并为一句结果。"微微一颤 / 瞳孔微缩 / 嘴角抽搐 / 脸颊微红" 这种单场景反应描写 — 一律砍, 这是 §2.2 心理 C 类 (narrator 推测的瞬时反应)。
情绪走向的处理 (与 §2.2 B 类协同) : "从 X 转为 Y" 这种情绪走向描述, 如果 是用一两个词的概述 (例: "X 从抗拒到顺从" / "Y 从警惕到信任"), 属于 §2.2 B 类合规, 允许保留 ; 如果 展开成阶段性流水帐 (例: "先是 X, 然后 Y, 接着 Z, 最后 W" 这种把单场景情绪拆成多阶段逐一描写), 属于情绪流水帐, 一律砍 (见 §2.1 性事 / 战斗段的禁止条款)。判定: 该情绪走向描述是不是用了 ≤ 2 个 stage 词? 是 → 留; 多个 stage 词 + 详细描写 → 砍。
一个事件单元就是一个事件单元, 不展开子步骤; 一个状态就是一个状态, 不细描反应过程; 一段情绪走向用一两个词概括, 不展开成小作文。
4.10 体液 / 性事生理描写
具体体液描述 (白浊 / 潮吹 / 吞精 / 喷射 / 量级 等) → 砍。
具体身体部位的内射描述 (子宫内射 / 肠内射 / 阴道内射 / 喉中内射 / 食道内射 等) → 砍, 但允许保留单独的"内射"二字 。例:
砍: "X 子宫内射 Y" / "Z 被肠内射"
留: "X 内射 Y" / "Z 被内射"
具体身体部位的过程描述 (子宫颈被顶穿 / 肠壁被插穿 / 阴道被贯穿 等部位 + 动作组合) → 砍。这些是性事过程的部位特写, 不是不可逆里程碑本身。
具体性事动词 (口交 / 深喉 / 后入 / 骑乘 / 肛交 / 指交 / 传教士 / 站立位 等) 允许出现一次 以描述事件骨架 (即体位概括, 见 §2.1), 但不 展开过程节奏或具体身体反应。
判定测试 : 看到一个性事描写时, 问"它是 (a) 体位概括 (一个名词) / (b) 总体反应 (一个词) / (c) 不可逆变化 (失贞 / 怀孕 / 内射)? 还是 (d) 体液 / 部位 / 节奏 / 量级 / 时长?" (a)(b)(c) 留, (d) 砍。
5. 写作流程 (在 块内执行)
Step 1a: 按 turn 完整盘点 (硬约束 — 防止 batch 内 turn 丢失)
dialogue_batch 包含若干 assistant turn (batch 大小由 settings.extractBatchTurns 决定, 通常为 1-5)。必须先按 turn 顺序逐个盘点 , 不允许跳过任何一个 turn, 也不允许"挑感兴趣的写"。
对 batch 内每一个 assistant turn (按时间顺序), 列:
[turn seq=N, 时间锚 (从原文里抓): YYYY-MM-DD HH:MM, 地点锚: ...]
发生的事件 (列全, 不要跳):
- <事件1: 谁做了什么, 对谁, 结果>
- <事件2: ...>
- ... (该 turn 实际发生的所有动作/决策/状态变化都列出)
prior context (batch 之前的 contextTurns) 的 turn 不列入 , 它们已被前面的 batch 记录过。
完整性自检 : 在 Step 1b 之前, 检查盘点表 — batch 内每个 turn 都有至少一行盘点了吗? 缺失任何 turn → 回去补; 任何 turn 的事件被压缩成"略过"或"无关键事件" → 回去补 (即使是看似不重要的过场 turn, 也必须列出其发生的事件)。
Step 1b: 跨 turn 主题归并 (基于 Step 1a 的盘点)
把 Step 1a 中跨 turn 描述的同一线索 / 同一关系演进 / 同一事件序列合并为主题块:
主题: <名称>
涉及 turn: <turn seq 列表>
- 事件骨架: <一句话, 跨 turn 整合>
- 关键决策内容: <如有, 一句话>
- 不可逆变化候选: <如有, 一句话>
- 未结钩子候选: <如有, 是否值得 emit thread>
- 原文摘录候选: <如有, 是 artifact 还是普通对白>
主题划分原则 : 同一空间 + 同一参与者群 + 同一行为类别 (战斗 / 调情 / 协商 / 调查 / 移动 / 性事) 合并为一个主题。不同主题独立成块。
校验 : Step 1a 列出的每个事件, 在 Step 1b 至少出现在一个主题块中。如果某事件无主题归宿 → 它可能本身就是独立主题, 单独成块。绝不允许 因为某事件"不够重要"就在 Step 1b 里丢弃 — 不重要的事件由 Step 3 的单句判据决定是否留在 prose, 而不是在盘点阶段就被剪掉。
Step 2: 初稿 prose body
按主题写 prose body, 同主题内按时间排, 不同主题按因果或重要性排。允许多段。第一遍按 Step 1b 的主题块全部覆盖一遍, 不挑不漏。第三步会砍。
写作时硬性约束 (§1.1 重申) : prose body 必须是连贯句子组成的段落, 不允许 用 1) ... 2) ... 3) ... 这种数字编号项, 不允许用 - / * 项目符号, 不允许用没有助词和上下文的紧密短词链 (像 outline 那样)。每两个事件之间至少有一个因果 / 时序连接词 (因此 / 之后 / 但是 / 于是 / 同时 / 直到 / 一旦)。读起来要像叙事, 不像会议纪要。
强制可见 : Step 2 必须把初稿 prose body 完整写入 块, 标记为 Step 2 初稿:, 后接初稿文本。不允许 "see below" / "drafted in summary" / "见 tool call" 这种省略。Step 3 的反 bloat 自检需要看到 Step 2 的具体句子才能跑。
Step 3: 分类→颗粒度→单句删除测试 (核心 — 防止 prose 堆砌)
强制可见 : Step 3 必须在 块内列出每一句 的三层判定表, 标记为 Step 3 单句判定:。不允许 "drafted in summary" / "self-check passed" / "略" 这种省略。审阅 Step 3 时, 自动模型层(后续 review/compress) 会检查这个表是否存在、是否覆盖 Step 2 全部句子、判定理由是否非 vague。
把 Step 2 的 prose body 按句子 列成三层判断表 (一句一行):
S1: <句子原文>
分类 (§2.2 心理三分类 + §2.1 内容档位):
心理 A 类 (原文明示视角) / 心理 B 类 (跨场景关系变化) / 心理 C 类 (narrator 推测瞬时) / 不是心理描写
事件骨架 / 状态变化 / 跨场景钩子 / 不可逆里程碑 / 关键决策条款 / 过程纹理 / 其他
颗粒度 (§2.1):
一句过场是否足够? (Y/N)
若 N, 属于 §2.1 (a)(b)(c) 哪一类例外? (a/b/c/不属于)
删除测试 (§2.3):
删掉这句, 30 楼后 RP 模型会做出什么**具体**错误判断? <一行, 必须能指明会做出什么具体动作或写出什么具体错误内容>
判定: 留 / 砍
判定规则 (按以下顺序检查, 任一砍即砍):
心理 C 类 → 砍 (§2.2: narrator 推测的单场景瞬时情绪 / 暗自 / 心跳 / 微表情解读)
过程纹理 (子动作链 / 反应曲线 / 体液 / 姿势 / 心跳 / 衣物状态) 且不属于 §2.1 (a)(b)(c) 例外 → 砍
删除测试 vague (失去画面感 / 失去氛围 / 模型可能会需要这个 / 缺少这个会不完整 / 让模型理解上下文) → 砍
不确定 → 砍
以上都没命中, 且能给出具体下游错误判断 → 留
高频可疑类别 (default 砍, 但出现在 §2.1 (a)(b)(c) 例外条件下或能给出具体下游错误判断时可保留) :
心理 / 情感 / 内心活动描写 : 按 §2.2 A/B/C 三分类:
A 类 (原文明示视角, *...* 或角色第一人称说出) → 留 , 转述为第三人称客观语
B 类 (跨场景关系 / 状态定性变化, 例 "二人关系拉近" / "X 对 Y 态度从警惕转为信任") → 留 , 一句过场
C 类 (narrator 推测的瞬时情绪 / 暗自 / 心跳 / 微表情解读) → 砍 (default behavior)
单场景的子动作拆解 / 反应曲线 / 体液生理曲线 : 默认合并为一句结果描述 (§2.1 颗粒度反 pattern)。只有当该子动作链本身构成 §2.1 (b) 不可逆里程碑的具体形态时才展开 (例: 失贞的具体方式)
场景纹理 / 环境描写 / 物件外观 : 单次访问的视觉细节 default 砍。只有该场景纹理跨场景持续 (某地标志性物件 / 该地点的长期定性) → 可保留一句 (这种情况应该走 location_state 而非 event prose)
观察者的评价 / 推断 / 暗示 ("X 表现出 Y" / "暗示 X" / "透露出 X" / "近乎 X 的关注"): 叙述者的元判断 → 砍 (这就是心理 C 类的延伸)
比喻 / 类比 / paraphrase 残留 : 任何带引号的 角色台词式形容、比喻、感叹 → 砍引号; 内容有 plot-relevance → 用第三人称客观描述替代
场景定调 / 情绪走向叙述 ("气氛变得紧张" / "暧昧氛围达到顶点"): narrator overlay → 砍
多次同类小动作的逐项列举 : 合并为一句话陈述结果 (§2.1 颗粒度反 pattern)
注意 : "default 砍" ≠ "全砍"。事件本身的合理细节如果属于 §2.1 (a) 跨场景钩子 / (b) 不可逆里程碑 / (c) 关键决策三类例外的具体形态, 必须保留且必须写出具体内容。判定时按 §2.1 颗粒度准则 → §2.2 心理分类 → §2.3 单句删除测试 三层走, 不要跳过任何一层。
Step 3 终稿可见 : 自检完成后, 必须在 thought 块写出 Step 3 终稿: (= Step 2 初稿 - 砍掉的句子)。后续 Step 4-6 基于这个终稿, 而非初稿。
Step 4: Sections 准入扫描
强制可见 : 在 块标记为 Step 4 sections 判定:, 列出每一段 section 的每一行 的三条 Y/N 判定。空段也要写明 "L0: 无候选, 三段全空"。不允许 "all sections pass" / "skip" 这种省略。
对每段 section 跑准入三条 (§3):
[不可逆 候选]
L1: <候选行>
类型对 (永久性物理/身份/关系/能力/物件变化, 24h 后仍约束剧情)? <Y/N>
prose 里已说? <Y/N>
删了会致错 (能指明具体错值)? <Y/N>
三条全 Y → 写; 任一 N → 不写
[未结 候选]
L1: → thread "<title>"
类型对 (指向具体未来动作)? <Y/N>
prose 里已说? <Y/N>
本批次同时 emit 了这个 thread? <Y/N>
三条全 Y → 写; 任一 N → 不写
[原文摘录 候选]
L1: <label>: "<quote>"
属于 artifact (载体文字 / 仪式性口头)? <Y/N>
改述会丢 wording (而非只丢 flavor)? <Y/N>
prose 里已说? <Y/N>
三条全 Y → 写; 任一 N → 不写
强烈的默认状态是空 : 大多数 RP 事件只有 0-1 段 section 有内容。如果你的草稿里三段都填了 ≥2 行, 大概率 "类型对" 一条把关松了或 "删了会致错" 给的是 vague rationale — 回去重审。
Step 5: 黑名单扫描
强制可见 : 在 块标记为 Step 5 黑名单扫描:, 按 §4 的 10 类逐类报告"命中 / 未命中", 命中的句子和重写后的句子都列出来。不允许 "all clear" 一笔带过, 必须逐类显式写"§4.1 paraphrase 残留: 未命中" 等。
对 Step 3 终稿的 prose body + 所有 section 行, 跑 §4 全部 10 类黑名单。命中任意一类 → 重写那句 / 那行 (不只是删掉黑名单词, 整句的语义结构可能要改)。
Step 6: 时间 / 地点头部
补 时间: 和 地点: 头部。时间用 RP 世界内的具体日期+时间 (如有起止, 写区间)。地点用 RP 世界内可识别的位置名 (不要 "某处" "一个房间")。
最终 prose 可见 : Step 6 后, 必须在 thought 块写出 最终 prose (=Step 5 后 + 时间地点头部): 完整文本。这个就是要进入 tool call 的内容。Tool call summary 字段必须与此完全一致, 不允许在 tool call 时再做任何修改。
6. 最终自检 (commit 前最后一遍, 任一 FAIL → 回 §5 重写)
块包含 Step 1a / 1b / 2 初稿 / 3 单句判定 / 3 终稿 / 4 sections 判定 / 5 黑名单扫描 / 6 最终 prose 全部具体内容 (任何"see below" / "drafted in summary" / "略" 都是 FAIL — Step 必须留下具体痕迹才能跑下一步)
Step 1a turn 完整盘点存在且覆盖 batch 内每个 assistant turn (跨 batch 内任何 turn 都不能因为"看似不重要"而被跳过)
Step 1b 主题块覆盖 Step 1a 的每个事件 (盘点出来的事件没在 Step 1b 里被丢)
Step 3 单句判定表逐句列出 Step 2 初稿的每一句 (一行一句, 不接受 "summary" 式合并)
Step 5 黑名单扫描逐类报告 (§4 的 10 类每一类都写出 "命中" 或 "未命中" + 命中句的重写)
tool call 的 summary 字段 = Step 6 最终 prose, 字字一致 (tool call 阶段不允许再修改, 一致性由 thought 块的最终 prose 验证)
prose body 覆盖了 Step 1b 中所有主题块 — 每个主题块至少有一句指代 (一句过场即可), 仅 §2.1 (a) 跨场景钩子 / (b) 不可逆里程碑 / (c) 关键决策三类允许展开细节
prose body 是连贯自然语言段落 — 无数字编号项 (1) ...), 无项目符号 (- ...), 无紧密短词链 (见 §1.1)
prose body 每句都通过 §2.1 颗粒度准则 — 默认一句过场, 仅 (a)(b)(c) 三类例外才展开
prose body 每句都通过 §2.2 心理 A/B/C 三分类 — C 类已全部砍除
prose body 每句都通过 §2.3 单句删除测试 (能指出删后的具体下游错误, 不接受 vague rationale)
本批次外的事件没混入 (prior context 已被前面批次记录, 不重写)
三段 section 默认空, 仅在 §3 三条全 Y 时才出现 (无 "无" / 空 header / 占位符)
未结 section 每行都对应一个本批次 emit 的 thread 节点 (二者绑定, 不可独存)
原文摘录的每条引用都是 artifact 或仪式性表达 (普通对话已被砍)
§4 全部 10 类黑名单扫描通过 (paraphrase 残留 / 元叙述 / 现场命名 / 契约词族 / 升华套话 / AI 自造标签 / 对白引出动词 / 过程性连接词 / 微动作链 / 体液生理描写)
时间和地点头部用 RP 世界内的具体值 , 不用模糊词
通过 → 写入 tool call。不通过 → 修, 不要硬交。
附录: rollup compress 时的纪律差异
本规范的写作纪律 (§1.1 prose body 形式约束、§2.1-2.6 内容选择、§3 sections 准入、§4 十类黑名单) 同时适用于叶子 event 和压缩出的 rollup event 。但 rollup 的输出格式 与 leaf 不同:
Leaf event (depth=0): 输出 §1 的 prose body + 可选 section 格式
Rollup event (depth≥1): 输出更紧凑的 outline 格式 (时间: ... 至 ... 头部 + 数字编号条目), 因为 rollup 进入持久注入路径, 需要密度高、易扫读
二者共享的 : §1.1 之外的全部内容 — §2 各类颗粒度 / 心理分类 / 黑名单扫描 / 单句删除测试 的精神 完全适用于 rollup 的每一条 outline。"用 outline 形式呈现" ≠ "绕过黑名单和颗粒度规则"。
具体 rollup 输出格式 + depth-aware 抽象规则见 default-prompts.js 的 DEFAULT_EVENT_COMPRESS_INSTRUCTION 常量, 此处不重复。