引入上下文片段、固定槽与投影排序,并完善机遇裁定与游玩期 UI。

把创作产物收敛为可挂载片段与 play_slots/context_order,同步修订世界模拟器模块与运行时拼装。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 01:36:32 +08:00
parent 00dfcb6615
commit 94f67fa744
69 changed files with 7786 additions and 1283 deletions

View File

@@ -1,7 +1,8 @@
# 生成规则
> 文档。程序只切割下方 **fence 块**`##` 标题仅供人读。
> 写法说明`docs/world-simulator-modules.md`;范例:`aesthetics-interaction`
> 能文档。程序只切割下方 **fence 块**`##` 标题仅供人读。
> 产物外壳`docs/context-fragment-design.md`;范例:`aesthetics-interaction` / `mechanism`。
> 正文高度自定义描写文案、schema 字段、池条目随对象族而变);外壳与规则键必须严。
## meta
@@ -10,183 +11,254 @@ name: 生成规则
id: generation-rules
artifact: 设计.生成规则
declaration: >
为重要且模型无法仅凭世界基底稳定生成的同类内容,定义可执行的生成规则
严格数据格式与生命周期;可按生成对象反复调用
当某类内容既重要又无法凭基底稳定生成时:为该对象族写出一条可执行规则
(怎么描写/生成 + 产物格式 + 可选多池,池绑 JSON 字段);可按对象反复调用;本步不填最终实例
when: |
上游体验、机制与世界基底已足以判断某类内容:
1. 它对实际游玩非常重要;并且
2. 模型仅凭现有上下文无法稳定产出符合期待、彼此一致且可供下游使用的结果。
两项同时成立时,才为该类对象建立专门生成规则。
上游体验与世界基底已足以判断某类内容同时满足
1. 对游玩重要2. 仅凭现有上下文无法稳定产出合格、一致、可供下游使用的结果。
when_not: |
内容虽重要,但凭世界基底与常识即可稳定生成 → 不调用
内容难生成,但只是装饰、偶尔出现或删掉不影响核心体验 → 不调用
想预先写一个普通人/地/物,且不需要先建立专门格式与生成约束 → 不调用
只需定义变量在游玩中如何更新 → 变量设计与更新规则。
只需定义剧情、章节或世界如何推进 → 交给对应 Worker 或其它推进能力,不借本步泛化。
重要但常识/世界基底已够 → 不建规则
难生成不影响核心体验 → 不建规则
要预写最终记录、且不需专门规则 → 通常不必本步
变量如何增减变量设计与更新规则
剧情如何推进 → 不借本步泛化。
boundary: |
能力:为“一类格式相近的内容”定义生成合同,包括生成依据、字段 schema、
枚举值、数值上下界、约束、随机维度、校验方式与规则生命周期。
生成对象不限于人物,也可为怪物、装备、任务、职业、组织、事件等
具体实例:执行本步中要求预生成的规则,产出符合合同的实际记录;本步不填实例数据
世界蓝图与人文地理:提供可直接依赖的世界基底;本步不重写世界百科
实现机制:说明某类内容为何支撑体验;本步先验证其必要性,再定义怎么生成
变量设计与更新规则:定义游玩期状态如何变化;本步只约束实例生成时的数据类型与初始合法范围。
Worker 规格 / 细化终稿:决定谁在游玩期执行、哪些产物进入常驻上下文;本步只声明所需生命周期。
技能产出的是「规则」本身,一条规则包含:
1应该怎么描写、生成2产物格式——单层 JSON对接表格/旁观者/投影);
3可选多「池」——各挂一个顶层字段供抽取/组装/枚举
具体实例:按规则填最终 records本步不写最终实例池条目≠实例
舞台骨架 / 实现机制:可引用,不重写百科、不重做移除检验
变量*:游玩期状态更新——本步只约束生成时的类型与合法初值范围
feeds: gm
```
## opening
```opening
本轮生成对象已由编排参数钉死见【本步参数】target。请直接谈该类内容
1. 若不做专门规则、只靠世界设定临场写,最怕出现什么不可接受的结果?
2. 更需要:开局先钉一批、游玩中再随机补,还是只在游玩期动态生成?
3. 哪些产物字段需要「池」?(池挂在 JSON 字段上,如气质标签池→`气质`;可多个;没有就说没有)
想到什么写什么;完整规则在正式产物里钉。
```
## task
```task
你正在执行剧本中的「生成规则」步骤。产物写入「设计.生成规则」。
你正在执行「生成规则」。产物必须是 **context-fragment.v1** JSON写入「设计.生成规则」。
本步不是泛用写作建议,也不是“凡是重要就做一张表”。调用目标已由编排期写入【本步参数】(至少含 target禁止再问「这一步生成什么」。
本步写出的最终物是**规则**,不是实例。一条规则必须说清两件事,并可附第三件:
1. **生成与描写**:应该怎么写、怎么生成(步骤、依据、语气/切面、约束)。
2. **产物格式**生成结果必须遵循的可校验格式schema
3. **池**(可选):每个池挂在产物格式里的某个字段(变量)上,供该字段抽取/组装/枚举;
一条规则可多个池;无则 `池: []`。
对象族已由【本步参数】`target` 钉死;禁止再问「这一步生成什么」,禁止顺手扩到其它族。
执行顺序:
1. 读取【本步参数】与依赖产物。`target` 决定本轮唯一生成对象族;不要顺手扩展到其它类别。若缺必填参数,停止产出并提示返回 design-flow 补参。
2. 执行双门槛判断
- 重要性门槛:没有专门生成合同,核心玩法、关键关系、长期一致性或必要数据接口是否会明显受损?
- 不可替代门槛:模型是否无法依靠世界基底、常识和普通提示稳定生成合格结果?
两项有任一不成立,输出“无需专门规则”的判断与理由,不为了完成步骤硬造 schema
3. 两项均成立时,从三种生命周期中选且只选一种(若 params.lifecycle_intent 已给且合理,优先采用;不合理则说明并 askUser
- `runtime_only`:仅游玩期动态生成。规则进入后续上下文,不要求「具体实例」预生成
- `seed_only`:下一步由「具体实例」按规则生成;实例进入后续上下文,规则在完成生成与校验后丢弃
- `seed_and_runtime`:下一步先生成种子实例;实例与规则都进入后续上下文,游玩期仍可按同一规则继续生成
4. 建立真正可执行的数据合同:
- 明确顶层 JSON 形状、单批数量或数量决定方式、每个字段是否必填。
- 每个字段固定类型。至少区分 `string`、`number`、`integer`、`boolean`、`enum`、`array`、`object`;不得只给示例值让下游猜类型。
- `enum` 必须同时给出允许值及各值含义;`number/integer` 必须给上下界,并说明边界含义或单位;`array` 必须定义元素类型与数量范围;`object` 必须继续定义子字段。
- 写清字段间约束、与世界基底的引用关系、禁止项、去重规则和一致性校验。
5. 只有确实需要不可预测性时才定义随机维度;区分“允许变化的字段”和“不能随机破坏的约束”。随机不是省略设计。
6. 若 params.rule_id 已给,优先用作本规则 id否则生成稳定 kebab-case `rule_id`。若已有「设计.生成规则」,按 `rule_id` 增量更新或追加;不得无故重写其它对象的规则。
7. 输出符合 output 的 JSON。规则本身不得夹带实际实例。
1. 读 params 与依赖。缺 `target` → 停止并提示补参。
2. 双门槛:重要性 + 基础上下文不足。任一项不成立 → 结论「无需专门规则」,`rules: []`。
3. 两项成立时生命周期三选一params.lifecycle_intent 合理则采用):
- `runtime_only`:仅游玩期动态生成;不要求「具体实例」。
- `seed_only`:由「具体实例」预生成;规则用完可丢
- `seed_and_runtime`:先种子实例;规则与实例都保留,游玩期仍可按同规则生成。
4. 写满规则三块:生成与描写(可较长)+ 产物格式(**单层 JSON**:每条产物是一层键值,无嵌套对象)+ 池(需要才填;绑顶层字段)
5. 逐字段过筛:每个属性都要能回答「对本对象族是否必要」。冗余字段删掉(如女主规则里的「性别」);对象族必需字段不得漏(如 D&D 怪物的等级、攻击骰)
6. `rule_id`params 已给则用;否则稳定 kebab-case。已有产物按 rule_id 增量
7. 按自评三维打分并填追问;输出 JSON。禁止夹带最终实例 records。
若程序已发默认问题:用户首答在「用户.worker答复」。禁止重复同一开场。只追问会改变必要性、生命周期或 schema 的信息
summary
- 建立规则:`生成规则 · {生成对象} · {仅动态|仅预生成|预生成并动态}`
- 不建立规则:`生成规则 · {生成对象} · 无需专门规则`
若程序已发默认问题:禁止重复开场;在首答上补洞
summary建立 → `生成规则 · {对象} · {仅动态|仅预生成|预生成并动态}`;跳过 → `生成规则 · {对象} · 无需专门规则`。
```
## principles
```principles
1. 双门槛:必须“对游玩重要”且“基础上下文不足以稳定生成”同时成立
2. 反表格冲动:核心玩法是古董拍卖,不代表纯现代背景中的普通古董必须有专门规则;常识足够时直接生成
3. 规则一对象族:怪物与装备若 schema、约束和用途不同分次调用不要做万能内容生成器
4. 格式也是规则:字段名、类型、枚举、上下界、嵌套结构与必填性都必须可校验
5. 生命周期先行:是否预生成、规则最终是否保留,必须在生成实例前决定
6. 规则服务差异:只固定影响体验和接口的字段;不要把所有可描写细节都结构化
7. 可追溯:每项关键约束应能指向世界基底、实现机制、体验禁忌或用户明确要求
8. 不混淆状态更新:好感度可在实例 schema 中规定为有界数字;何时增减、如何结算属于变量设计
1. 整条规则先问必要性:是否值得单独用「生成规则」承接?双门槛不成立则跳过,勿硬造表
2. 一调用一对象族;格式或用途不同则分次编排
3. 规则 = 描写/生成方法 + 产物格式;池是可选附属(可多池),不是必填第三设计
4. 属性逐个过筛:每个字段必须对本对象族有意义;禁塞通用名片字段,也禁漏掉玩法接口字段
5. 产物格式 = **单层 JSON**:一条产物是一层扁平对象;值仅为标量或「标量数组」
禁止嵌套 object、禁止 object 数组。此格式要对齐动态表格列、旁观者→主世界层生成、以及投影取字段
类型/必填/枚举/上下界必须可校验;禁止只给示例让下游猜类型
6. 池绑顶层字段名(如 `气质`、`攻击花招`);一条规则可多池。池条目是该字段材料,不是整条 record
7. 生命周期先行;未定前不假装可执行「具体实例」。
8. 不写变量更新公式、不写剧情推进、不填最终实例。
```
## probe
```probe
askUser 12 点;优先问会改变结论的分叉。禁止重问【本步参数】已钉的 target / rule_id。
12 点。禁止重问 params 已钉的 target / rule_id。
必要性不明:如果不做专门规则、只让模型按世界设定直接生成,最可能出现的不可接受结果是什么?
生命周期不明且 params 未给:这些实例需要每局变化、固定为开局设定,还是固定一批后仍要继续随机补充?
枚举不明:这个字段只能从哪些世界内类别中选择?是否允许“其它”?
数值不明:上下界分别代表什么,生成时是否允许取到边界?
数量不明:需要固定数量,还是由场景/规模决定?允许范围是多少?
若用户的答案证明双门槛不成立,直接建议跳过,不再追问 schema。
优先:整条规则是否必要;某字段该不该进表(冗余 vs 漏接口);单层格式类型/枚举/边界;哪些字段要池。
若双门槛不成立 → 建议跳过,停追问字段与格式。
不追问:最终实例正文、变量增减公式、其它对象族、完整世界百科。
```
## output
```output
{
"brief": "一句话:本轮判断与其服务的核心体验",
"必要性判断": {
"生成对象": "例:重要 NPC / 怪物 / 装备 / 任务 / 职业体系",
"对游玩的重要性": "没有专门规则会具体损失什么",
"基础生成的不足": "现有世界基底为何不足以稳定产出合格结果",
"结论": "建立专门规则|无需专门规则"
},
"rules": [
{
"rule_id": "稳定的英文 kebab-case id",
"对象": "该规则生成什么",
"生命周期": "runtime_only|seed_only|seed_and_runtime",
"上下文策略": {
"预生成实例": true,
"保留规则到游玩期": false,
"保留实例到游玩期": true
},
"生成依据": ["引用的上游产物、世界事实或用户要求"],
"数量": {
"模式": "fixed|range|contextual",
"": 1,
"最小": 1,
"最大": 1,
"决定规则": "contextual 时必填"
},
"输出合同": {
"格式": "JSON",
"顶层": "array",
"schema": {
"字段名": {
"type": "string|number|integer|boolean|enum|array|object",
"required": true,
"description": "字段语义",
"allowed_values": [
{ "value": "枚举值", "meaning": "含义与适用边界" }
],
"minimum": 0,
"maximum": 100,
"items": { "type": "string" },
"min_items": 1,
"max_items": 3,
"properties": {}
"schema": "context-fragment.v1",
"技能": "生成规则",
"brief": "一句话:对象族 + 建立规则|无需专门规则 + 生命周期(若建立)+ 有池|无池",
"mount": ["world-simulator"],
"稳变": "stable",
"正文": {
"本步参数": {
"target": "与 params 一致",
"rule_id": "已钉或本步拟定;跳过时可空字符串",
"lifecycle_intent": "params 原值或空"
},
"必要性判断": {
"生成对象": "本轮对象族",
"对游玩的重要性": "没有专门规则会损失什么",
"基础生成的不足": "现有上下文为何不够;若足够则写清",
"结论": "建立专门规则|无需专门规则"
},
"rules": [
{
"rule_id": "英文 kebab-case",
"对象": "该规则生成什么",
"生命周期": "runtime_only|seed_only|seed_and_runtime",
"上下文策略": {
"预生成实例": true,
"保留规则到游玩期": false,
"保留实例到游玩期": true
},
"数量": {
"模式": "fixed|range|contextual",
"": 1,
"最小": 1,
"最大": 1,
"决定规则": "contextual 时必填,可较长"
},
"生成与描写": {
"依据": ["可较长;引用上游产物或用户要求"],
"方法": ["可较长:生成顺序、如何组装、描写口径、语气/切面、如何用池"],
"硬约束": ["任何产物不得违反"],
"字段间约束": ["例:阵营=A 时权限≥3"],
"变化维度": ["允许随机或变化的部分;无则 []"],
"禁止项": ["不得出现的组合或内容"],
"去重规则": ["同批/跨批"],
"校验": ["类型、枚举、边界、世界与体验一致性;以及是否按方法生成"]
},
"产物格式": {
"格式": "单层JSON",
"批量时": "array of flat object每条记录单层|单条则一个 flat object",
"schema": {
"字段名": {
"type": "string|number|integer|boolean|enum|array",
"required": true,
"description": "语义 + 为何本对象族需要此字段;可较长",
"allowed_values": [
{ "value": "枚举值", "meaning": "含义" }
],
"minimum": 0,
"maximum": 100,
"items": { "type": "string|number|integer|boolean|enum" },
"min_items": 1,
"max_items": 3
}
},
"示例形状": {
"名称": "……",
"等级": 3,
"攻击骰": "2d6+2",
"气质": "阴郁"
}
}
},
"池": [
{
"pool_id": "英文 kebab-case同规则内唯一",
"名称": "人话名",
"绑定字段": "单层 schema 的顶层字段名,例:气质 / 攻击花招",
"用途": "灵感组装|随机抽取|枚举生成|其它",
"说明": "该字段如何用本池;与「生成与描写.方法」如何配合;可较长",
"条目": [
{
"id": "可选稳定 id",
"内容": "材料正文或短标签;结构随池自定义,但同池宜一致",
"权重": 1,
"标签": ["可选分类标签"]
}
],
"抽取或组装规则": "可较长;无特殊则写「均匀随机」或「按方法写入绑定字段」"
}
]
}
],
"增量说明": "相对已有规则新增或修改了什么;首条可写「新建」"
},
"自评": {
"维度": [
{
"名": "必要性",
"分数": 0,
"说明": "整条规则:是否有必要单独用「生成规则」承接该类内容;跳过时理由是否充分"
},
"生成步骤": ["按什么顺序决定字段,如何利用上游依据"],
"硬约束": ["任何实例都不得违反的条件"],
"字段间约束": ["例:阵营=A 时,权限等级不得低于 3"],
"变化维度": ["允许随机或变化的部分;不需要随机则为空"],
"禁止项": ["即使随机抽到也不得出现的组合或内容"],
"去重规则": ["同批及跨批如何避免同质化或重复"],
"校验": ["类型、枚举、边界、世界一致性与体验一致性检查"]
}
],
"增量说明": "相对已有规则新增或修改了什么",
"开放问题": ["仅保留会阻止规则执行的问题"]
{
"名": "属性妥当",
"分数": 0,
"说明": "逐字段:有无冗余(如女主规则的性别)或缺失(如 D&D 怪物缺等级/攻击骰);跳过时写 N/A"
},
{
"名": "格式准确",
"分数": 0,
"说明": "是否严格单层 JSON、类型/必填/枚举/边界可对接动态表格·旁观者生成·投影;跳过时写 N/A"
}
],
"薄弱点": "一句话"
},
"追问": {
"导语": "为钉准生成规则,还需确认:",
"题目": [
{
"问": "…",
"建议选项": ["选项A", "选项B", "其它(请写明)"],
"示例": "可选"
}
]
},
"开放问题": []
}
当结论为「无需专门规则」时,省略 `rules`,并在 `brief` 中说明应直接依赖哪些现有世界基底生成。
schema 中只保留实际字段适用的类型属性:例如非枚举字段不写 `allowed_values`,非数字字段不写 `minimum/maximum`。
```
硬规则(公共三段 + 本技正文):
1. 合法 JSON必含 `schema` / `技能` / `brief` / `正文` / `自评` / `追问`(题目可 `[]`)。
2. **公共三段**:正文=规则主体;自评=必要性/属性妥当/格式准确;追问=导语+建议选项。
3. **正文键固定**本步参数、必要性判断、rules、增量说明。
4. **每条 rule 必含**:生成与描写、产物格式;**池可空数组**。有池时 `绑定字段` 必须是单层 schema 的顶层键。
5. **产物格式强制单层**`schema``type` 不得为 `object``array``items` 不得为 object。禁止 `外貌.发色` 这类嵌套路径。
6. 结论为「无需专门规则」时:`rules` 必须 `[]`。上下文策略布尔须与生命周期一致。
7. 池条目≠最终实例;禁止输出具体实例 `records`、变量更新规则、执行单元列表。
8. `mount` 默认主世界层;**禁止**写 `order`。summary 见 task。
## checklist
```checklist
- [ ] 重要性与基础生成不足是否分别举证,且两项都成立
- [ ] 是否因为“玩法重要”就误给常识足够的内容建表
- [ ] 生命周期是否在三种模式中明确唯一,布尔策略与之相符
- [ ] 每个字段是否有明确类型、必填性和语义
- [ ] enum 是否给全允许值与含义,数字是否给上下界,嵌套类型是否定义完整
- [ ] 是否写清字段间约束、禁止项、去重与校验
- [ ] 是否把实际实例、变量更新规则、剧情推进规则或 Worker 规格混入本步?
- [ ] 是否只覆盖本轮对象族,并保留其它已有 rule_id
- [ ] 含 schema / brief / 正文 / 自评 / 追问
- [ ] 自评为必要性 / 属性妥当 / 格式准确
- [ ] 整条规则必要性有举证?不成立时 rules=[]
- [ ] 建立时:逐字段无冗余无漏接口?产物为单层 JSON 且类型可校验
- [ ] 池:无则 [];有则绑顶层字段、未写成最终实例表
- [ ] 未夹带最终实例、变量公式、其它对象族、百科
```
## examples
```examples
应建立
- 怪物是核心战斗资源,需要每局变化,且世界有独特生态与战斗接口;使用 `runtime_only`,固定属性 schema、生态枚举、数值边界与组合禁忌
- 女主必须承载特定关系体验,直接写人设容易遗漏关键切面;使用 `seed_only`,下一步生成女主后丢弃规则
- 重要 NPC 需要开局已有一批,后续也会随地区开放继续出现;使用 `seed_and_runtime`
不应建立:
- 纯现代都市拍卖玩法中的普通古董;即使古董很重要,只要现实常识与世界基底足以直接生成,就不值得专门维护规则。
- 只在背景里出现一次的路边摊菜单;即使模型可能写得普通,也不影响核心体验。
- D&D 怪物:单层含 名称/等级/攻击骰/……;池可绑 `气质`;自评属性妥当高(未漏战斗接口)
- 女主规则:不设「性别」字段;关系切面进表;池可空
- 事件钩子:池绑顶层 `钩子`;方法写抽 12 条写入该字段
- 普通古董 → 无需专门规则(必要性维度说明跳过理由)。
坏:
- 只写“人物要立体、装备要有趣”,没有 JSON schema 与可校验约束
- 枚举字段写“阵营:字符串”,却不生成允许的阵营项
- 好感度写“0100”又在本步编写每轮加减公式侵入变量更新能力
- 产物写成 `{ "外貌": { "发色": "…" } }` → 非单层,前端表格/投影难对接
- 女主规则塞「性别」;或怪物规则只有「名字+性格」没有等级/攻击骰
- 把写好的 NPC 整份塞进池当最终实例
```