统一开场白须含字面玩家占位并收紧转述配方。

保证开场产物可在游玩时再替换为当前用户角色。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-14 01:15:35 +08:00
co-authored by Cursor
parent 3ee81a69fa
commit 51ff139454
6 changed files with 80 additions and 60 deletions
@@ -143,7 +143,7 @@ modules:
name: 开场白与开场变量 name: 开场白与开场变量
closer: true closer: true
declaration: >- declaration: >-
创作终节点:写出 1~多条开场白并钉同真相初值; 创作终节点:写出 1~多条开场白(正文须含字面 @玩家)并钉同真相初值;
选定后程序落库、结束创作并保存定稿 选定后程序落库、结束创作并保存定稿
artifact: 设计.开场白与开场变量 artifact: 设计.开场白与开场变量
@@ -12,7 +12,7 @@ name: 开场白与开场变量
id: opening-setup id: opening-setup
artifact: 设计.开场白与开场变量 artifact: 设计.开场白与开场变量
declaration: > declaration: >
创作终节点:写出 1~多条开场白并钉同真相初值;选定后落库、结束创作并保存定稿 创作终节点:写出 1~多条开场白(须含字面 @玩家)并钉同真相初值;选定后落库、结束创作并保存定稿
when: | when: |
收成链已齐(至少体验契约可引用,且「细化终稿」已产出或可立即收成运行规格),需要可开玩的第一段剧情与同真相初值。 收成链已齐(至少体验契约可引用,且「细化终稿」已产出或可立即收成运行规格),需要可开玩的第一段剧情与同真相初值。
排在收成之后作最后一步。用户要进游玩但还没有第一屏 → 排。 排在收成之后作最后一步。用户要进游玩但还没有第一屏 → 排。
@@ -42,20 +42,25 @@ feeds: narrator
## task ## task
```task ```task
你正在执行「开场白与开场变量」。这是**创作最后一步**。产物必须是 **context-fragment.v1** JSON,写入「设计.开场白与开场变量」。 你正在执行「开场白与开场变量」。这是创作最后一步。产物必须是 **context-fragment.v1** JSON,写入「设计.开场白与开场变量」。
主产物是 **1~多条开场剧情**(用户第一屏),不是填表工具。用户将选定其中一条;选定后程序结束创作并保存。 主产物:1~3 条可开玩开场白(选定后落库结束创作)。开场须服从叙事指南、正文组成可见块序、监控栏(若有)、变量真值。
必须遵循:叙事指南与故事推进、正文组成(可见块序、隐藏段若开场就要写)、监控栏字段(若启用)、变量真值名单。
**用户角色占位(产物规格,不是可选项):**
- `开场白全文`、`开场白候选`、有字的 `开场可见块.内容` 里,凡指称用户扮演角色,第三人称点名处必须写字面量 `@玩家`(六个字符:`@` + `玩家`)。
- 每条候选全文至少出现一次 `@玩家`。禁止写死具体姓名(如林晚、阿泽);禁止用「用户」「主角」顶名字位。
- 「你」可与 `@玩家` 并用;若全文只有「你」、零个 `@玩家`,视为不合格,改写后再交。
- 进游玩时程序把 `@玩家` 换成当前用户角色名;创作稿必须保留字面 `@玩家`。
执行顺序: 执行顺序:
1. 读依赖:worker 集/美学/叙事/正文组成/监控栏/变量设计/舞台与实例。 1. 读依赖:worker 集/美学/叙事/正文组成/监控栏/变量设计/舞台与实例。
2. 写出 **1~3 条**可开玩的开场白候选(角度/第一拍可不同,设定必须同一真相)。推荐那条写入 `开场白全文`,全部写入 `开场白候选`。 2. 写 1~3 条开场候选(同真相、第一拍可不同)→ `开场白全文` + `开场白候选`(含 `@玩家`)。
3. 按正文组成的可见块写出开场各块内容(至少正文块);隐藏段仅当开场即需声明初值变更时使用(通常初值走「开场变量」字段,隐藏段可空)。 3. 按正文组成可见块填 `开场可见块`;隐藏段通常空。
4. 钉开场变量:与开场事实同一真相;能从设定推断的填上;冲突则以开场叙述为准并改表。 4. 钉开场变量(与开场同真相;冲突以叙述为准)。
5. 若有监控栏:给出开场时监控栏展示快照(短)。 5. 若有监控栏:开场快照(短)。
6. 自评 + 追问;输出 JSON。 6. 交稿前自检:全文搜索确认每条候选含 `@玩家`;再自评 + 追问;输出 JSON。
禁止:先问卷填表再糊开场;禁止开场与初值打架;禁止重写 Worker 集;禁止只交空壳等下一节点。 缺上游契约时:能写则按已有材料写开场并标开放问题;不能成立第一拍则追问 1~2 点,勿交空壳。
summary:`开场白与开场变量 · …`(点题场景)。 summary:`开场白与开场变量 · …`(点题场景)。
``` ```
@@ -63,18 +68,19 @@ summary:`开场白与开场变量 · …`(点题场景)。
## principles ## principles
```principles ```principles
1. 开场为主,表为配套:表服务「这一刻世界是什么样」。 1. 开场为主,表为配套。
2. 遵守版式:用户看见的结构按正文组成;文风按叙事指南;笔墨焦点同样适用。 2. 版式跟正文组成;文风跟叙事指南。
3. 同真相:开场写身无分文 → 资产真值不得很富。 3. 同真相:开场与开场变量一致。
4. 可行动:第一拍结束要有「接下来能做什么」的空间,非说明书。 4. 可行动:第一拍结束有下一步空间。
5. 短:可读完、愿意进游玩;不是第一章全文。 5. 短:愿点进游玩,非第一章。
6. 隐藏真值/未解锁映射档不得剧透进可见开场。 6. 不剧透隐藏档。
7. 用户角色名位 = 字面 `@玩家`(见 task 规格);不合格则改写。
``` ```
## probe ## probe
```probe ```probe
开场地点/冲突不清;某真值开场值推不出;版式块是否都要在开场出现(有的块首轮可空)。一次 1~2 点。 开场地点/冲突不清;某真值开场值推不出;版式块是否都要在开场出现;候选是否漏写 `@玩家`。一次 1~2 点。
``` ```
## output ## output
@@ -93,14 +99,14 @@ summary:`开场白与开场变量 · …`(点题场景)。
"开场可见块": [ "开场可见块": [
{ {
"块id": "与正文组成.visible块一致", "块id": "与正文组成.visible块一致",
"内容": "该块开场文本;可空块写空字符串并说明为何首轮空" "内容": "该块开场文本;点名用户角色写 @玩家"
} }
], ],
"开场白全文": "推荐那条:按块序拼好的用户可见开场(主阅读件)", "开场白全文": "例:清晨,@玩家推开宿舍门,走廊里只有冷风。……",
"开场白候选": [ "开场白候选": [
"推荐那条(与开场白全文相同)", "推荐那条(与开场白全文相同;必含 @玩家)",
"可选第二条:同一真相、不同第一拍/角度", "可选第二条(必含 @玩家)",
"可选第三条" "可选第三条(必含 @玩家)"
], ],
"开场变量": [ "开场变量": [
{ {
@@ -139,6 +145,11 @@ summary:`开场白与开场变量 · …`(点题场景)。
"名": "可开玩", "名": "可开玩",
"分数": 8, "分数": 8,
"说明": "是否短、可感、有下一步行动空间" "说明": "是否短、可感、有下一步行动空间"
},
{
"名": "玩家占位",
"分数": 8,
"说明": "每条候选是否含字面 @玩家、无写死姓名"
} }
], ],
"薄弱点": "一句话" "薄弱点": "一句话"
@@ -158,23 +169,25 @@ summary:`开场白与开场变量 · …`(点题场景)。
``` ```
硬规则: 硬规则:
1. context-fragment.v1;自评契约符合/同真相/可开玩。 1. context-fragment.v1;自评含「玩家占位」。
2. `开场白全文` 与 `开场变量` 必填;`开场白候选` 1~3 条(含推荐);监控栏快照无监控栏则为 `[]`。 2. `开场白全文` 与 `开场变量` 必填;`开场白候选` 1~3 条;监控栏无则为 `[]`。
3. 不输出完整 worker 集;不发明新真值名(须来自变量设计,若无变量设计则可极少数字段并标明临时)。 3. 每条开场候选正文必须含字面 `@玩家`;不发明新真值名。
4. summary:`开场白与开场变量 · {brief 缩略}`。 4. summary:`开场白与开场变量 · {brief 缩略}`。
## checklist ## checklist
```checklist ```checklist
- [ ] 写出 1~3 条开场候选,推荐条与 `开场白全文` 一致? - [ ] 1~3 条候选,推荐条 = `开场白全文`?
- [ ] 开场遵循正文组成块序与叙事口径? - [ ] 每条候选全文可搜到 `@玩家`?无写死姓名?
- [ ] 变量与开场同真相?可行动空间清楚? - [ ] 版式与叙事口径?变量同真相?有行动空间?
- [ ] 未剧透隐藏档?未写成第一章全文? - [ ] 未剧透隐藏档、未写成第一章?
``` ```
## examples ## examples
```examples ```examples
好:末日醒来缺水——开场正文写干渴与门外声响;口粮=1、威胁=邻层异响;监控栏短显示;无姓名性别栏。 好:「冷风灌进来时,@玩家还握着空水瓶。」(有字面 @玩家)
坏:先填完 20 个表字段再写两句「你醒了」;开场说破产表里却有百万资产。 好:「你(@玩家)站在闸机前,票夹是空的。」(你 + @玩家)
坏:全文只有「你推开门」——零个 `@玩家`。
坏:「林晚推开门」——写死姓名。
``` ```
@@ -5,7 +5,7 @@
recipes: recipes:
- id: 数据化跑团体验 - id: 数据化跑团体验
name: 数据化跑团体验 name: 数据化跑团体验
declaration: 回合互动跑团;跨轮数值真值 + 分档映射投影(带数值) declaration: AIRP / 交互式小说;设定为主,可选跨轮真值与分档映射
- id: 文本生成器 - id: 文本生成器
name: 文本生成器 name: 文本生成器
declaration: 创作收范例与模仿面;开玩后主世界出正文、转述出文风/壳 declaration: 创作收范例与模仿面;开玩后主世界出正文、转述出文风/壳
@@ -1,28 +1,34 @@
# 数据化跑团体验 · Boss 直聘进料配方 # 数据化跑团体验 · Boss 直聘进料配方
# 注入转述总助手「本局配方」;不种节点 DAG。 # 注入转述总助手「本局配方」;不种节点 DAG。
# 名字带「数据化」,内核仍是 AIRP / 交互式小说。
# 各能力何时落盘 → 系统提示【能力 · 何时落盘】(modules meta);本配方只给顺序骨架。
when: >- when: >-
用户要回合制角色扮演 / 沉浸推演,且体验靠跨轮数值或阶段推进 用户要回合制角色扮演、沉浸推演或交互式小说(AIRP / IF);
(好感、资源、章节、地点、任务阶段等);按值换态度、大纲或场景文案 在普通设定之外,还可能需要跨轮记住少量状态,或按阈值换态度/大纲/场景文案
core: >- core: >-
把用户原话收成可开玩规格:设定类 insert;跨轮状态 declare_variable; 理论上总是先设计美学纲领与体验核心,用来锚定「用户会在意什么」;
阈值→文案 declare_map。作用对象是本局黑板;开玩后由主世界层读投影与真值写正文。 再按需用核心规则(实现机制)钉下那套特殊故事设计;然后才往外兑现舞台、
默认只开主世界层,原文即终稿。 叙事、真值、映射、版式与开场。作用对象是本局黑板;开玩后主世界层读投影与
真值写正文,默认只开主世界层、原文即终稿。
具体某一刀能不能落:对照【能力 · 何时落盘】的何时用 / 何时不用;本配方不重复罗列。
process: process:
- 先钉站位、每轮看什么、体验核与禁忌 → insert 用户.需求 / 设计.美学 / 设计.世界设定 等(order 偏小)。缺一句关键承诺就问一句;勿问卷。 - 每轮先对照【能力 · 何时落盘】与已有产物:只推进「何时用」已成立的一刀;条件含糊或未到 → 短确认或问挡住的 1 点,不批量 insert / declare。
- 必须跨轮记住的状态 → declare_variable(key、type、initial、user_visible)。只立承重字段;性格/态度长文不立成可写变量。 - 【骨架序 · 1】美学纲领与体验核心(能力表里通常总是先做)→ insert 设计.美学纲领与交互范式。模糊则细化;不确定则询问。未锚定前不建议下游。
- 有「到某值换一套文案」→ declare_map(field 对准真值;bands 写区间或精确值 + content;target_tag 用 上下文.* 或 大纲.*)。缺分档细节就问档位边界与每档要点,再落盘。 - 【骨架序 · 2】实现机制(仅当能力「何时用」成立:有拿掉就换骨架的变造法则)→ insert 设计.实现机制。何时不用成立则跳过,不追问要不要加规则。
- 需要版式 → insert 设计.正文组成;要第一幕 → 按该格式 insert 设计.开场白。用户本轮只谈数值则只做 D,不硬塞开场白。 - 【骨架序 · 3+】其余能力(舞台、生成规则、叙事、变量、回复呈现、正文组成、开场白…)各自对照何时用再落;变量走 declare_variable / declare_map。一次一两刀。
- 材料只够本配方就只做本配方;聊完一轮用自然语言短确认 + 建议下一刀补什么。 - 聊完一轮:短确认本轮落了什么 + 建议「条件已近」的下一刀(勿推荐尚未满足何时用的能力)。
principles: principles:
- 承重才立真值;派生文案 = f(真值),只走映射投影。 - 锚定优先:美学不定稳,不做下游;完善设定时不要忘掉核心体验。
- 分档正文写在 declare_map 的 bands.content;缺则问清后再 declare,不要用 insert 把整张分档表塞进设定散文。 - 何时落盘以能力 meta 为准;配方顺序是骨架,不是许可抢跑。
- 默认无独立叙事转述、无旁观;用户点名要文风层或程序盯表时再议。 - 正推:美学卡上用户会在意的部分 → 缺口 → 再落对应产物;换核就换补什么。
- 保留用户原意;规格只走 toolcall,聊天只确认与建议。 - 承重才立真值;派生文案 = f(真值),只走映射。真值是兑现体验的加层,不是主戏。
- 默认无独立叙事转述、无旁观;用户点名再议。
- 保留用户原意;规格只走 toolcall。
brief: 数据化跑团:设定 + 真值 + 分档映射 → 可开玩 brief: 美学锚定 → 按需机制 → 对照能力何时落盘再兑现;可选真值+映射
steps: [] steps: []
@@ -21,5 +21,5 @@ suggested_outputs:
- 运行.初始变量 - 运行.初始变量
- 变量.当前 - 变量.当前
prompt_excerpt: | prompt_excerpt: |
若有设计.开场白与开场变量:落库开场白全文与开场变量,遵守正文组成版式。 若有设计.开场白与开场变量:落库开场白全文与开场变量,遵守正文组成版式;保留字面 @玩家。
若无:现写开场,表与开场同真相。禁止先填表再糊开场。 若无:现写开场(正文须含 @玩家),表与开场同真相。禁止先填表再糊开场。
@@ -42,11 +42,11 @@ contextSegments:
创作末尾兜底(DAG **没有**「开场白与开场变量」时才需要本 worker)。 创作末尾兜底(DAG **没有**「开场白与开场变量」时才需要本 worker)。
规格已定。优先读取 **`设计.开场白与开场变量`**: 规格已定。优先读取 **`设计.开场白与开场变量`**:
- 若已有且可用:把其中「开场白全文」写入 `输出.开场白`,把「开场变量」写成 `运行.初始变量` / `变量.当前`(表格式);可微调不可另起炉灶。 - 若已有且可用:把其中「开场白全文」写入 `输出.开场白`,把「开场变量」写成 `运行.初始变量` / `变量.当前`(表格式);可微调不可另起炉灶。微调时仍须保留字面 `@玩家`。
- 若无:再站在 Worker 集 + 正文组成 + 叙事指南 + 变量设计上现写开场,并钉同真相初值。 - 若无:再站在 Worker 集 + 正文组成 + 叙事指南 + 变量设计上现写开场,并钉同真相初值。
```text ```text
主产物:输出.开场白(用户读的第一幕;须符合正文组成版式) 主产物:输出.开场白(用户读的第一幕;须符合正文组成版式;须含字面 @玩家)
辅产物:运行.初始变量 / 变量.当前(与开场同一真相) 辅产物:运行.初始变量 / 变量.当前(与开场同一真相)
``` ```
@@ -57,7 +57,7 @@ contextSegments:
你是开场落库者(兼必要时的开场作者): 你是开场落库者(兼必要时的开场作者):
1. 先读 `设计.开场白与开场变量`(若有),再读 Worker 集 / 定稿摘要 / 用户需求 1. 先读 `设计.开场白与开场变量`(若有),再读 Worker 集 / 定稿摘要 / 用户需求
2. **落库或写出开场白**:遵守叙事指南与正文组成(块序、监控栏、隐藏段约定) 2. **落库或写出开场白**:遵守叙事指南与正文组成;用户角色名位写字面 `@玩家`
3. **落表**:初值与开场事实一致;能推断则推断 3. **落表**:初值与开场事实一致;能推断则推断
## 重心(务必遵守) ## 重心(务必遵守)
@@ -65,16 +65,17 @@ contextSegments:
```text ```text
结合前面的世界 + 故事 + 表结构 → 写开场白 结合前面的世界 + 故事 + 表结构 → 写开场白
表是开场的配套落地,服务「这一刻世界是什么样」 表是开场的配套落地,服务「这一刻世界是什么样」
禁止:先当问卷填完表,再随便糊一段开场 开场正文必须含字面 @玩家(至少一处);禁止写死姓名;禁止全文只有「你」而零个 @玩家
禁止:开场与表互相打架(开场写身无分文,表里资产却很多) 不合格则改写后再写入 输出.开场白
``` ```
## 开场白怎么写 ## 开场白怎么写
- 扎根已定设定:地点、规则、人物关系、核心前提(如「不会被感染」)都要在场或可感,不要另起炉灶 - 扎根已定设定:地点、规则、人物关系、核心前提都要在场或可感
- 遵守 `narrative_guide` 与 `input_protocol`;隐藏表字段不要剧透进开场 - 遵守 narrative_guide 与 input_protocol;隐藏表字段不要剧透
- 第一拍就要有「接下来用户能做什么」的空间,不要说明书/设定集口吻 - 第一拍要有「接下来能做什么」的空间
- 长度以可读完、愿意点进游玩为准;不要写成第一章全文 - 长度以可读完、愿点进游玩为准
- **用户角色占位**:第三人称点名处写 `@玩家`;「你」可并用;交稿前确认正文含 `@玩家`。例:`冷风里,@玩家握着空瓶。`
## 表(辅,与开场同真相) ## 表(辅,与开场同真相)
@@ -131,7 +132,7 @@ contextSegments:
```json ```json
{ {
"outputs": { "outputs": {
"输出.开场白": "……(主产物,完整可读)", "输出.开场白": "……须含字面 @玩家……",
"运行.初始变量": "{ ... rows ... }", "运行.初始变量": "{ ... rows ... }",
"变量.当前": "{ ... 与初始一致 ... }" "变量.当前": "{ ... 与初始一致 ... }"
}, },