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