Skip to content
dsh.fish
Skill

adult-tension

创建、运行和续玩仅限虚构成年人的沉浸式互动叙事,支持完整随机开局、张力引擎、身份与处境生成、NPC独立决策、时间推进、事件队列、世界追算和可恢复存档。仅当用户明确要求创建或续玩此类叙事,以及其存档、开局或世界推演时使用;不用于无关的总结、存档、角色扮演或世界推演。

Source
daha1216
stars
10 stars
Updated
Updated 14 days ago

Readme

# 🎭 adult-tension

[![Release](https://img.shields.io/github/v/release/daha1216/dsh-adult-tension?style=for-the-badge)](https://github.com/daha1216/dsh-adult-tension/releases)

> **插件形态:AI Skill**:DeepSeek Harness 等 AI Agent 的成年人互动叙事技能,核心入口是 `SKILL.md`。安装时请将仓库根目录完整复制到 AI 工具的技能目录,不要只复制单个文件。

**尺度放开,边界一直都在**——18+ 也把年龄、边界、当前同意放在第一优先,`暂停` / `安全词` 随时可用。

**内置数百项素材的世界库,NPC 会记得你**——从时代地点、角色身份到张力与压力,随机开局组合出几乎不重复的完整新故事;角色有自己的立场与底线,会犹豫、拒绝,也可能在你离开后自行行动。

**世界真的会往前**——离屏事件按时追算,一句闲话可能变成几章后的伏笔。

**随时存档,随时续玩**——YAML 存档从原节点继续,长线剧情不重掷、不丢失。

> ⚠️ **成年人内容(18+ Only)**:仅限虚构成年人,所有参与角色必须明确年满 18 岁。人物边界、当前同意和安全状态始终优先于剧情推进。

## 🚀 快速安装

让 AI 直接安装本仓库:

```text
帮我安装这个 skill:https://github.com/daha1216/dsh-adult-tension
```

也可以手动安装:把仓库根目录的一整套文件(`SKILL.md`、`commands.yaml`、`references/`、`scripts/`(含 `data/`)、`saves/`、`tests/`、`agents/`、`requirements.txt`)完整复制到 AI 工具的技能目录中。不要只复制 `SKILL.md`,其他文件也是技能的一部分。

复制完成后,让 AI 加载 `adult-tension` 技能即可开始。

## 🏷️ 版本发布(Releases)

稳定版本在 [GitHub Releases](https://github.com/daha1216/dsh-adult-tension/releases) 发布,适合需要固定版本快照的场景:

| 版本 | 发布日期 | 说明 |
| --- | --- | --- |
| [v0.2.0](https://github.com/daha1216/dsh-adult-tension/releases/tag/v0.2.0) | 2026-08-25 | 重构版:数据与文档分家,v3 运行时架构全面落地 |
| [v0.1.0](https://github.com/daha1216/dsh-adult-tension/releases/tag/v0.1.0) | 2026-08-20 | 首个公开发布版本 |

日常游玩建议直接按上文方式安装仓库 `main` 分支,获取最新的修复与素材更新。

## ✨ 核心能力

这个 Skill 把角色、世界、时间、关系和存档放进同一套运行规则,服务的是长期连续游玩的场景:一次开局的文采只是开始,多轮互动之后的状态是否连贯、角色是否可信、能否从原节点继续,才是它的重心。

**角色:记得你,也有自己的判断**
- **记忆与连续性**——NPC 记住对话与事件,立场、目标与底线不因一次回复重置,关系不会无故归零。
- **自主决策**——NPC 会犹豫、拒绝、协商、试探,也可能在你离开后主动行动,行为由状态、关系与当前压力共同决定。
- **亲密边界与安全**——关系推进有过程;内置年龄确认、人物硬边界(`本局不碰 X`)与当前同意检查,`暂停` / `安全词` 随时可停。

**世界:真的会一直走下去**
- **时间推进**——场景之外的事件按规则追算,世界不会在你离开时停摆。
- **连续记录**——地点、参与者、压力与事件留下连续记录,一句闲话可能成为之后的伏笔。

**体验:想开就开,想续就续**
- **随机开局 + 定向控制**——可以完整随机生成,也可以预锁身份、时代、题材或张力方向。
- **可恢复存档**——YAML 保存世界时钟、角色状态、关系、事件与当前节点,载入后从原节点继续,不重新生成开局。
- **存档简单直接**——`存档` / `保存 X` / `载入 X` 管理命名存档;多窗口写入冲突时有友好提示,不会悄悄覆盖。

## 🧠 用什么模型玩

具体游玩体验和出文效果,会随模型版本、上下文长度和平台配置而变化。当前体验上,**推荐优先尝试 DeepSeek 或 Grok**:

- **DeepSeek**:目前更适合中文长线叙事、人物关系和状态连续性。
- **Grok**:目前更适合临场感强、风格更放开的剧情表达。

其他模型也能正常游玩;对话轮次越深,角色一致性、时间线和语感就越依赖所选模型的上下文能力。建议按你的平台与偏好实际试用。

## 📦 内置素材:从设定到角色的一整套世界库

随机开局从内置素材池组合生成,而不是只依赖临场补全。素材数据本体全部在 [`scripts/data/`](./scripts/data/) 的 YAML 表里,由开局脚本直接加载:

| 内容 | 数量 | 示例 |
| --- | --- | --- |
| 时代与地点 | 时代 10 · 地点 23 | 古代宫廷、近未来都市、夜场会所 |
| 张力引擎 | 21 条 | 秘密暴露、债务压力、嫉妒与占有 |
| 压力来源 | 15 条 | 家人病倒、官司上门、证件卡壳 |
| 角色身份 | NPC 12 类 · 玩家化身 8 类 | 权力治理、家族继承、服务与手艺 |
| 角色处境 | 16 条 | 秘密将破、债务压身、晋升窗口 |
| 人物性格与反差 | 反差轴 8 种 | 外冷内热、端庄放浪、毒舌心软 |
| 关系与权力 | 4 种 | 玩家上位、NPC 上位、平等或动态切换 |
| 语言风格 | 表层风味 73 · 口癖语感 12 | 敬语、口癖、拟声词等 |
| 场景动作 | 交易摊牌 8 · 非交易靠近 12 | 递外套、承认紧张、摊牌谈判 |
| 中期转折池 | 7 类 × 3 | 信息类、资源类、时限类等 |
| 配角功能 | 13 类 | 盟友、竞争者、误导者、催化剂 |

此外还有决策三轴、外观轴、称谓(14 条)、命名库(姓氏 30 · 名 40)、美学基调等更细的生成素材。数量为 `scripts/data/*.yaml` 当前实测值;想扩充素材或调整文案见 [`references/加内容.md`](./references/加内容.md),改完可用 `python scripts/check_content.py` 做一键内容体检。

## ▶️ 怎么开始

**想直接玩,一句话就够:**

```text
开局
```

开局会一次性生成完整的世界、人物与处境,停在你能接手的第一个动作前;之后直接描述角色的行动或台词即可,系统会根据当前状态推进剧情:

```text
我走到她面前,把文件放在桌上
对她说:我们单独谈谈
跟着她钻进电梯,问今晚去哪
```

**开始前想加点控制?** 不必记技术参数,直接说你的想法就行:

| 我有这个想法 | 我直接对 AI 说 |
| --- | --- |
| 要一个能一模一样复刻的开局 | 「种子 42」——固定随机结果,下次照着来 |
| 先定主角或题材,其它随便 | 「开局,主角是帝国女帝,走宫廷权谋」 |
| 锁定某几项设定,其余随机 | 「预锁 处境=资源断供」「预锁 张力=信任透支」 |
| 内容只许来自技能自带素材 | 「强制表内」——仅从技能自带素材中生成设定 |
| 允许在自带素材之外自拟核心设定 | 「表外全随机」——仍遵守年龄、边界与同意规则 |

故事开始后,用这些命令推进和管理:

| 命令 | 什么时候用 |
| --- | --- |
| `继续`(`c`) | 剧情停在可接续处时,向前推一个节拍 |
| `快进到明天早上` | 跳过一段时间,让离屏事件被追算、世界自己长 |
| `状态` | 六行人话看板:地点、在场、暂停与否、当前压力、许可、可接续动作 |
| `存档`(`qs`) | 写入当前槽;成功只回一句「已保存到「名称」·第 N 回合」,不刷屏 |
| `保存 X` | 另存为命名存档 X,可开多条独立走向互不覆盖 |
| `载入 X` | 载入命名存档 X 并绑定为写入目标,从原节点继续 |
| `列出存档` | 显示所有命名存档的名称、回合与一句话处境 |
| `导出存档` / `载入存档` | 把当前局面导出成 YAML 文本带走备份,之后再发回来即可原地续玩 |
| `本局不碰 X` | 划一条本局硬边界;`解除不碰 X` 可撤销 |
| `撤销刚才的 X` | 只撤销最近一个事件,不推进回合 |
| `暂停` / `安全词` | 立刻停止亲密升级,任何时候都可以;`解除暂停` 恢复 |

> 高级功能随用随说:`帮助` 列出全部命令,另有贴视角、语态切换、冻结世界推演、叙事助手等,触发词详见 [`commands.yaml`](./commands.yaml)。一个会话默认使用自己的存档;需要继续已有主线时明确「载入 X」。保存时若存档已被其他窗口修改,会提示你读取最新版本、另存为其他名称或取消,不会静默覆盖。

## 🔧 辅助工具

普通游玩不需要运行脚本。以下命令适合需要固定随机结果、生成转折方向、查看状态或检查内容的场景。请在仓库根目录执行,先装依赖:

```bash
# 依赖只有 PyYAML(Python 3.10+)
python -m pip install -r requirements.txt

# 全自动开局:一次生成可开场的 v3 状态与开局简报(「开局」命令的后端)
python scripts/build_opening.py --complete --seed 42

# 生成 2~3 个中期转折方向(跨天推演也用它)
python scripts/roll_opening.py --twist --seed 42

# 人话状态视图(「状态」命令的后端)
python scripts/live_slice.py saves/current_state.yaml --human

# 校验 YAML 存档的结构和状态
python scripts/validate_state.py path/to/save.yaml

# 列出命名存档 / 校验并查看某个命名存档
python scripts/manage_saves.py list
python scripts/manage_saves.py load main
```

`build_opening.py` 支持 `--lock 字段=值` 锁定特定设定(可重复)、`--force-table` 仅用自带素材、`--all-custom` 配合 `--custom KEY=VALUE` 自拟核心设定。存档由 `manage_saves.py` 原子写入:每个存档目录包含 `state.yaml`(v3 叙事状态)与 `manifest.yaml`(创建/更新时间),覆盖保存需携带载入时记录的 `--expected-updated-at`,不一致即拒绝且不自动合并——按提示读取最新版本、另存为其他名称或取消。

维护者向的工具:`commit_turn.py` 是回合提交器(时钟、场景、事件、许可与提交前校验一次落地);`check_content.py` 对全部素材数据做内容体检。扩充素材的方法见 [`references/加内容.md`](./references/加内容.md)。

## 📁 文件放在哪里

| 位置 | 里面是什么 |
| --- | --- |
| `SKILL.md` | 技能运行规则(主控文档) |
| `commands.yaml` | 命令总表:触发词、行为与后台 CLI 的唯一来源 |
| `references/` | 开局流程、角色设计、世界运转、存档格式与扩充指南 |
| `scripts/` | 开局生成、回合提交、活切片、存档管理与内容体检工具 |
| `scripts/data/` | 全部素材数据本体(YAML 表) |
| `saves/` | 运行时存档目录(命名槽在 `saves/slots/`) |
| `tests/` | 自动测试(111 项) |
| `agents/` | AI 工具配置(如 `openai.yaml`) |

维护者视角:改素材条目直接编辑 `scripts/data/*.yaml` 并跑 `python scripts/check_content.py`;改规则或存档格式需同步检查脚本与测试。变更历史与冻结段契约见 [PROGRESS.md](./PROGRESS.md),扩充指南见 [`references/加内容.md`](./references/加内容.md)。

Install

# Skills are files: copy them into $DSH_HOME/skills/adult-tension (defaults to ~/.dsh/skills/adult-tension)

Profile: web

Source