可存档文字冒险 (ym-text-adventure-save)
主持带存档读档的文字冒险游戏:开局锁定世界观与规则,保证玩到一半不会前后设定打架,可随时读档回到上次进度,也能回溯到上一个选择重选。
何时使用
- 用户说「来个文字冒险」「玩个剧情游戏」「读档继续」「回到上一个选择」「来个互动故事」时
- 用户想玩一段有分支、能存档继续、或中途反悔重选的故事
- 用户主动说「存档」「读档」「回到上一步」时
运行前提
- 依赖:无第三方依赖,纯对话流程
- 不联网、不读取本地业务文件(存档文件由本技能写入/读取,属运行产物)
- 局内状态优先存在会话上下文;可选写入技能目录下
saves/的 JSON 存档(slot1~slot3),便于关掉后再开继续
输入契约
| 项 | 必需 | 说明 |
|---|---|---|
| 题材偏好 | 可选 | 科幻 / 武侠 / 悬疑 / 日常 / 自制;默认由技能提供候选让用户挑 |
| 篇幅 | 可选 | 短(10 分钟内)/ 中(20~30 分钟);默认中等 |
| 风格 | 可选 | 轻松 / 紧张 / 烧脑;默认悬疑轻松向 |
| 主角设定 | 可选 | 用户可指定身份;不指定则默认一个中性主角 |
缺失处理:
- 未指定题材/篇幅/风格 → 默认「中等篇幅、悬疑轻松向」,开局第一句告知所选设定,并说明可一句话改
- 题材模糊(如「随便来一个」)→ 给出 3 个候选题材让用户选,不擅自定死
- 用户说「读档」但无任何存档 → 提示「没有可用存档」,询问是否重新开始一局
执行步骤
- 开局锁定(顺序不可颠倒,任一步未完成不得进入推进阶段):
- a. 先在内部写定并固化:世界观 3 条(世界形态、时代、特殊法则)、核心规则 3 条(能/不能做什么、失败或死亡判定)、关键 NPC 2~3 个(身份、立场、初始位置)、关键地点 2~3 个、结局条件 2~3 个(达成即收束)。存档 JSON 结构见references/save-json.md。
- b. 把上述设定连同「开局情境」「当前位置」「已发生事件」「持有物」「NPC 关系」一次性固化进本次会话状态(及saves/存档),之后任何情况下都不允许修改——包括用户要求「改个设定」「我觉得应该能飞」时。
- c. 只向用户展示世界观简介(1~2 句)+ 开局情境(100~150 字),绝不展示后续剧情、关键 NPC 的隐藏信息、或任一结局。 - 每轮推进(结构固定): 情境描写 100~150 字 → 给出 3 个明确选项 A/B/C → 等待用户选择。允许用户输入自定义行动,自定义行动按
references/edge-actions.md的四类处理判定后再推进。 - 用户自定义行动处理: 与已锁定规则冲突 → 说明「做不到,因为…(引用具体规则)」并给 1~2 个可行替代;信息不足无法判定 → 先追问必要细节再推进;会导致剧情崩坏(如亲手杀死唯一线索 NPC 且无补救线)→ 说明该行动会破坏故事并拒绝,给替代;可行且与规则一致 → 直接推进并记入存档。
- 存档机制: 每轮推进后立即更新当前存档槽(默认 slot1,用户可指定 slot2/slot3)。存档内容见
references/save-json.md。用户说「存档」即保存当前槽;说「读档」即读取并恢复到该槽最后状态;说「回到上一步」即回溯到上一个决策点。 - 回溯: 用户回到上一个决策点时,该决策点之后分支产生的所有事件、持有物变化、NPC 关系变化一律作废,并明确告知「你已回到 XX 选择之前,之后发生的事不计入」。不得保留被废弃分支的痕迹。
- 结局: 任一结局条件达成即收束,给出结局正文 + 关键选择复盘(哪个选择导致了什么)+ 其余未走到的结局提示(只点名称不剧透内容)。收束后询问是否重开新局。
- 硬性约束: 不得中途改变已锁定设定;不得提前泄露后续剧情或结局;不得在用户未选择时替用户决定行动;不生成涉及自残方法、犯罪手法教学、或真实未结案件的内容(命中即替换为安全虚构情境并重开)。
输出格式
每轮恒定结构:
【情境】100~150 字描写
【选项】A. … B. … C. …
【状态】位置:… 持有物:… 关系:…
存档/读档/回溯单独成段说明结果;结局段单独给出正文 + 复盘 + 其他结局提示。模板见 templates/turn-template.md。
能力边界
- 本地
saves/存档文件防不住用户主动打开查看剧透;若启用存档文件,必须在开局说明里提示「存档是本地 JSON,好奇可自查但会破坏体验」 - 不做多人联机、不生成图片/音频、不保证剧情节奏符合所有人口味
- 不替用户决定行动;用户长期不选择时只提示「等你决定」,不擅自推进
常见坑
- 被用户带偏改设定 — 现象:用户说「那我能直接瞬移到王宫吧」,模型顺口答应并改写世界规则。原因:逐轮生成式回答容易漂移,未把规则锁死。规避:开局三步固化状态,自定义行动一律先回查核心规则,冲突的答「做不到,因为规则 X」。
- 提前剧透结局 — 现象:为「激励」用户,顺嘴说出「你最后会发现自己是克隆人」。原因:没区分「展示」与「暗示」。规避:只展示世界观简介与当前情境,结局条件与隐藏剧情一律不提。
- 回溯后残留旧分支 — 现象:用户回到上一步重选后,之前分支里「丢了一件道具」仍被记作已丢。原因:没清废分支状态。规避:回溯时整段作废该决策点之后的事件与状态变更,并明确告知用户。
- 用自定义行动偷偷扩设定 — 现象:用户做了个合理但原设定没有的行动,模型为了让游戏继续,把它写进世界观。原因:把「合理」当成「允许」。规避:自定义行动只在不违反已锁规则时推进,绝不因此扩展或改写设定。
- 选项含歧义导致无法判定 — 现象:选项写「你四处看看」,用户选后不知推进到哪。原因:选项粒度太粗。规避:每轮 3 个选项都写成明确可执行动作,避免「看看」「想想」这类虚指。
- 读档时张冠李戴槽位 — 现象:用户说「读档」但默认槽与用户想要的槽不一致。原因:没确认槽位。规避:用户未指定槽位时按当前默认槽读,但若用户近期切换过槽,先确认「读 slotX 吗」。
验收用例
- 正常:玩 5 轮后说「读档」→ 回到上次存档点继续,世界观与之前一致
- 边界 1:用户做出与规则冲突的行动 → 说明不可行并给替代,设定不变
- 边界 2:达到结局条件 → 给出结局正文 + 关键选择复盘 + 其余结局提示
- 失败:说「读档」但无存档 → 提示无存档并询问是否重开
目录说明
references/— 存档 JSON 结构说明、用户越界行动的四类处理templates/— 每轮推进输出模板