# Chinese Erotic Fiction Writing

> 中文成人向（H）小说创作通用技能——需求勘察、写作规范、章节结构、批量扩写工程、本地语料索引、会话学习。不绑定任何固定玩法，玩法/笔触/题材由勘察确定。触发：用户要求创作/扩写/重写 H 向小说、完善大纲、学习参考作品。

- Skill: `xwebt/chinese-erotic-fiction-writing` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add xwebt/chinese-erotic-fiction-writing`
- Raw SKILL.md: https://api.skillmd.com/api/skills/xwebt/chinese-erotic-fiction-writing/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: xwebt (https://skillmd.com/u/xwebt)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/xwebt/chinese-erotic-fiction-writing

---


# 中文成人向（H）小说创作（通用技能）

> **白纸原则**：本技能不预设任何用户偏好。每个用户打开都是一张白纸，玩法、笔触、题材、字数全部由勘察确定。文中出现的一切角色名、场景名、玩法偏好仅当用户明确提供后才存在。

> **提示（本地书库）**：如果你手头有本地 H 小说书库（.txt 文件），可以在勘察时告诉我书库目录——我会在动笔前先学习它，提炼你偏好的玩法与笔触（见"语料库学习"）。书库不足或没有书库也不影响使用，本技能自带一套脱敏的通用玩法模板兜底（见"玩法定制"节的通用玩法模板）。提供书库时注意：书库是本地私有的，只用于学习技法，绝不写入或上传到任何公开发布的内容。

## 触发条件
- 用户要求写/扩写/重写成人向（H）小说
- 用户提供大纲要求"完善后创作"、要求"学习参考作品"
- 用户抱怨"不够爽/不够肉欲/内容太少/环境描写太多/不够长"

## 勘察（每个新用户必做，不可跳过）

不同用户的性癖取向、性别、题材偏好可能完全相反。**创作前必须先了解，不套用任何既有偏好**：

1. **性别 / 作者笔触**：
   - 男用户 → 通常要**男作者笔触**：动词先行、直接粗粝、肉感沉重、器官直呼名、对白带压迫感
   - 女用户 → 通常要**女作者笔触**：氛围与情感先行、细腻感官铺陈、心理描写多、节奏更柔
   - 拿不准就直接问，不要猜
2. **性癖 / 玩法取向**：不可预设。喜欢什么玩法？直白程度上限？雷区与禁忌（记录后绝不触碰）？
3. **题材与形式**：古风/现代/仙侠/制服？视角？H 占比？单章字数目标？
4. **风格参照**：有无参考作品或作者？有则用短语提取法学习。
5. **禁忌确认**：用户提到"不要 XX 情节""去掉 XX"时，必须追问确认——是只去掉这一个情节，还是不喜欢 XX 类情节整体？确认后记录到 `taboos` 清单。后续写作绝不触碰禁忌清单中的任何条目。如果用户没有主动提及，也要主动询问"有没有不喜欢的题材/情节？"
6. 勘察结果存入 `sessions/` 胶囊文件，全程遵守。
7. 扩写/续写同需勘察——扩写方向因人而异。

## 语料库学习（动笔前必做，如果用户提供了书库）

如果用户指定了本地参考书库目录，**必须先学习再动笔**，不可跳过：

1. 用短语提取法扫描书库（命令见下方"批量参考作品学习"），至少采样 50-80 本
2. 如果书库有索引（`novel index` 已建），直接查询高质量段落作为风格参照
3. 将学到的技法模式（比喻偏好、动词密度、高潮写法、回合结构）提炼为本次写作的风格约束，写入胶囊
4. 如果书库过大（如 5G+），优先采样锚点作品；无锚点则随机分层采样（按文件夹/分类各取几本）
5. **没有书库或用户明确要求跳过时，可跳过此步**

## 会话学习（越用越聪明）

每次会话的交互形成学习闭环，沉淀到 `sessions/` 下的用户胶囊文件中（本地私有，不上传）。

### 胶囊文件结构
```yaml
# sessions/{用户标识}.yaml
user_id: ""
preferences:           # 勘察结果
  gender: ""
  voice: ""
  play_types: []
  genres: []
  taboos: []
  perspective: ""      # 视角（第一人称/第三人称等）
  word_target: 0
  h_ratio: 0           # H 戏占比（0-1）
feedback_log:          # 历史修改意见（每次追加）
  - date: ""
    issue: ""
    correction: ""
    type: ""             # "style" | "taboo" | "plot" | "character"
                         # taboo 类型的反馈同时更新 preferences.taboos
style_fingerprint:     # 满意段落的技法密度（用于生成时匹配）
  sound_density: 0
  liquid_density: 0
  climax_chain_length: 0
  dimension_coverage: 0
  bystander_ratio: 0   # 旁观者/露出类手法的占比（按用户玩法匹配）
style_reference: {}    # 参考作品学习产出（四遍阅读法，见下方"学习输出格式"）
characters: {}         # 角色设定库
custom_rules: []       # 用户特有的写作铁律
```

### 学习工作流
1. **首次使用** → 运行勘察 → 创建胶囊文件 → 写入 preferences
2. **后续使用** → 读取胶囊 → 跳过基础勘察 → 直接问"这次写什么新场景？"
3. **收到反馈** → 解析修改意见 → 如果是"去掉 XX 情节"类反馈，先确认是否讨厌整个 XX 类型 → 追加 feedback_log（标记 type: taboo 则同步更新 preferences.taboos） → 更新 style_fingerprint
4. **满意度高的段落** → 提取技法密度特征 → 更新 style_fingerprint → 下次自动匹配
5. **越用越准** → feedback_log 积累避坑清单 → style_fingerprint 收敛到用户偏好密度

## 通用写作规范

- **身体反应优先**：发烫/战栗/湿透/咬唇忍住/腿软/收缩/喷水/脚趾蜷缩——用身体反应代替直白叙述。
- **高潮要写足**：痉挛/弓起/脚尖绷直/穴肉剧烈收缩/喷涌/眼前发白/脱力。不能一句带过。
- **声音与液体必须同时出现**："啧啧""咕叽咕叽""噗嗤噗嗤" + "汩汩/顺着大腿根往下淌"。
- **多维描写**：每场戏的器官描写至少覆盖 3-4 个维度（形状/触感/声音/视觉/状态变化）。写法参考 `references/carnal-writing-techniques.md`。
- **器官描写密度（P0）**：H 场景必须直呼器官——阴蒂/乳头/乳晕/乳房/阴唇/穴口/阴道（具体称谓按勘察结果），禁止用"那里/下面/那个地方"一带而过。每场 H 戏至少出现 3 处明确器官名；器官的充血、肿胀、湿润、收缩、痉挛要写状态变化的过程，不只写结果。性器官是主角，笔触要足够色情、足够具体。
- **器官称谓遵循勘察结果**：不预设任何默认称谓。
- **人称混用（P0）**：长段落内人物名称与代词交替使用（如"[女主名]"与"她"），段首与句首优先用人物名称确立主语、句内用代词接续，禁止连续 3 句以上以同一代称开头造成"她她她"堆砌；多人同场时用名称区分角色。
- **环境描写压到最少**：两三句交代场景即进入正题。H/身体反应/心理为核心。
- **单章充实**：字数目标按勘察结果。收到"加长/充实"指令时必须真正新增内容，禁止复制原文充数。
- **交付格式**：正文 .txt，纯文本，UTF-8 编码。写作过程中每章一个独立 .txt 文件，段落间空行分隔。全部章节完成后，按顺序拼接为一个完整的 .txt 文件（见下方"成书组装"）。不使用 markdown 格式（无 ###、无加粗、无列表符号）。改动只在对话中口头汇报，文件内不写 changelog。

## 玩法定制（勘察后确定）

本技能不预设玩法。勘察出玩法后，把该玩法的"铁律/升级轴/章节结构"写入 `sessions/` 胶囊的 `custom_rules`。玩法结构应包含：
- **核心铁律**（不可违背的规则）
- **升级轴**（从初级到高级的递进阶段）
- **场景模板**（典型场景的描写框架）

通用玩法模板参考（均为脱敏后的通用模板，只展示"玩法文档应包含哪些要素"，不绑定任何具体角色，实际玩法由勘察确定）：
- `references/quiet-exposure-techniques.md` — 悄悄露出（隐秘暴露）：差一步暴露的紧张感
- `references/tech-toy-play-techniques.md` — 情趣玩具/远程控制：断崖式高潮与档位即权力
- `references/domination-training-techniques.md` — 调教/主奴（权力交换）：高潮许可制度与奖惩循环
- `references/group-play-techniques.md` — 多人/群交：空间调度与角色分工

## 章节结构

### 通用骨架
场景开场（两三句）→ 铺垫/疑点铺设 → H 主体（2-4 回合，写足）→ 高潮收尾 → 结尾钩子。

### 大纲量化结构（字数保障法）
单靠手感写不满目标字数时，在大纲层就为字数服务：
- 每章拆 3-4 个场景段，每段 1200-2000 字
- 每段写 1-2 个动作支点（如"揉奶 → 摸阴蒂 → 插穴"），段内写透
- 每章附"细节清单"：必须出现的关键词与动作，逐项勾销
- 典型分法：铺垫 → H 主体（重点） → 余韵/钩子

### 分段生成工作流（解决单次输出长度天花板）

Agent 单次生成通常只能出 1500-3000 字，远低于 5000 字目标。**每一章必须通过分段策略达到用户要求的字数后才算完成。**

#### 段目标计算（每章开始前必须算好）

- 大纲每章有 3-4 个场景段。段目标 = 用户目标字数 ÷ 段数
- 例：5000 字 ÷ 3 段 = **每段目标 1667 字**；5000 字 ÷ 4 段 = **每段目标 1250 字**
- 段目标不是建议，是硬指标。每段未达标不得跳到下一段

#### 逐段生成流程

1. **加载锚点**：读本章大纲的场景分段描述 + 玩法铁律（从胶囊读取）+ 角色状态
2. **生成当前段**：只传当前段场景描述 + 前一段的结尾 300 字（第一段用章首衔接语）。不传全章总览
3. **门控检查（不可跳过）**：
   - 生成完后**立刻**跑 wordcount
   - 如果 ≥ 段目标 → 该段通过，进入下一段
   - 如果 < 段目标 → 自动续写一轮（传当前段结尾 300 字 + "继续，不要重复已有内容，字数需要达到XXXX字"）
   - 续写最多 3 轮；3 轮后仍未达标 → **从头重写该段**（调整提示词，换角度写），不得蒙混过关
4. **全章拼接**：所有段通过后按顺序拼接 → 跑 wordcount
5. **终检门控**：
   - 全章总字数 ≥ 用户目标 → ✅ 达标，标记完成
   - 全章总字数 < 用户目标但 ≥ 60% → 追加生成一段"桥段/余韵"，回到步骤 2，再拼
   - 全章总字数 < 60% → 回到未达标的段落，逐段追补

#### 进度报告与图标规则

图标含义（不可混淆）：

| 图标 | 含义 | 条件 |
|------|------|------|
| ✅ | 达标 | 字数 ≥ 用户设定的目标（如 5000） |
| 🔶 | 未达标 | 已生成但低于目标，需继续补写 |
| ⬜ | 未开始 | 尚未生成 |

- 每段完成后报告：`第N章-段X/Y (YYYY字/目标ZZZZ字)` 
- **只有 ✅（达到用户目标）的章节才能对用户说"完成"**
- 🔶 章节必须明确告知用户"还差 XXXX 字，是否继续补写？"——不得主动跳过
- 禁止将 🔶 章节汇总为"完成"向用户汇报

## 批量扩写工程流程

逐章 patch 对多章节扩写不可接受。**已验证方案：锚点批量插入**（模板见 `scripts/batch_insert.py`）：

1. 建 `expand.py`：锚点取原文段落结尾的整句（20-60 字、全文唯一）
2. 脚本按锚点位置**降序**插入（防位置偏移）；三重幂等：锚点缺失→跳过、锚点重复→跳过、插入文本已存在→跳过
3. 每章 8-15 个插入点，一次运行 2-4 章；每轮跑 `wordcount.py` 验证缺口
4. 新内容用 `write_file` 写独立脚本，在结构标记处插入条目
5. **收尾验证**：wordcount 达标 → 全局重复段检查 → 章节标题序号连续 → 人物称呼一致性 → 脚本语法校验

**P0 坑（实战踩过）**：
- **引号转义**：含大量对白的插入文本用 patch 会截断。规则：含引号内容一律 write_file 写独立 py 文件；patch 的 old_string 不包含引号文本
- **锚点嵌套**：绝不取自己之前插入过的文本做锚点，防止二次插入切碎段落
- **锚点跨章节冲突**：锚点太短会跨章节重复。造好后用 `body.count(锚点)` 验证唯一
- **锚点漂移**：清理重复段后同步删除 expand.py 对应条目
- **错记原文**：锚点写错一两个字即失配。造好后用 `content.find` 验证
- **清理重复段**：用 Python 脚本精确替换（old 串含 `\n\n` 锚定边界），不要用 patch
- **patch 安全**：禁止大块 old_string（超过半章）替换；patch 只用于 ≤200 字小范围插入
- **番外字数口径**：番外按用户设定目标判断，别误判去硬扩

## 批量参考作品学习（多维深度采样法）

用户要求"学 N 本书"时，不可只用几个关键词 grep 了事——那只能看到碎片，看不到结构。必须做多维深度采样。

### 采样策略
- **总量**：至少 50-80 本（书库 5G+ 则 80+），不是 20 本
- **分层**：按目录/分类各取几本，确保古风、现代、玄幻等不同题材覆盖
- **锚点优先**：用户指定的优质作品优先采样，其余随机补齐
- **密度筛选**：优先选 H 描写密度高的（文件大 + 关键词命中多），跳过纯情节流水账

### 四遍阅读法（每本书扫四遍，由粗到细）

**第一遍——结构扫描：** 定位 H 段落边界，判断密度
- 关键词覆盖三大类：
  - 动作：操|插|干|摸|揉|捏|舔|吸|含|套|坐|骑|趴|按|抽|顶|磨|碾
  - 器官：奶|乳|穴|阴|肉棒|阴茎|龟头|花径|蜜穴|嫩穴|骚穴
  - 反应：湿|颤|抖|痉挛|高潮|弓起|喷|泄|射|精液|淫水|爱液
- 对每本书提取 H 段落起止行号和密度分布

**第二遍——技法提取：** 对命中的 H 段落提取上下文 500 字完整场景
- 声音词密度（啧啧|噗嗤|咕叽|汩汩|啪嗒）
- 液体词密度（淫水|浓精|爱液|白浊|蜜汁|洇湿|顺着淌）
- 高潮链长度（从第一个身体信号到高潮结束的字符跨度）
- 器官描写维度数（每场戏覆盖了几个维度：形状/触感/声音/视觉/状态）
- 张力来源（旁观者视线？言语羞辱？权力差？环境暴露？）

**第三遍——玩法识别：** 在高密度段落中搜索玩法特征词
- 露出/暴露：露出|走光|真空|没穿|衣下|帘后|背身|弯腰|领口|短裙|裸
- 调教：调教|驯服|惩罚|跪|主人|奴隶|服从|听话|指令|赏罚|拴|链
- 偷情：偷情|出轨|背地里|瞒着|幽会|人妻|老公|男友|被发现了
- 多人：群交|轮奸|多人|三人|双飞|围观|众人|满屋|一起
- 玩具/科技：跳蛋|振动|遥控|穿戴|App|蓝牙|充电|电池|开关|档位|震
- 强制：强暴|挣扎|反抗|绑|捆|塞嘴|蒙眼|黑暗|囚禁

**第四遍——句式提炼：** 提取三类句式各 5-10 条
- 身体描写句式（特征模式，如 "X 的 Y 在 Z 的作用下 A 了"）
- 对话推进句式（高潮前/中/后的对白模式）
- 高潮引爆句式（最后 100 字怎么把高潮推上去的）

### 学习输出格式

四遍读完汇总成结构化笔记，写入胶囊的 `style_reference`：

```yaml
style_reference:
  sample_count: 60
  high_density_works: ["作品A（高密度示例）", "作品B", ...]   # 仅记录作品名，不摘抄原文
  technique_profile:
    avg_sound_per_1k: 4.2
    avg_liquid_per_1k: 3.8
    avg_climax_chain_length: 180
    dominant_tension_types: ["旁观者视线", "公共空间暴露"]
  play_distribution:
    露出: 25%
    调教: 18%
    ...
  sentence_bank:
    body_descriptions: ["...", "..."]
    dialogue_patterns: ["...", "..."]
    climax_triggers: ["...", "..."]
```

> **原则**：学技法，不抄句子。提炼模式，迁移规律，不照搬原文。

### 玩法模板提炼流程（把书库变成通用参考文件）

当用户提供了书库且要求"提炼玩法模板"时，把书库中的规律沉淀成脱敏的通用参考文件（`references/*.md`），让没有这套书库的其他用户也能用。完整流程（在语料工具一节之后讲解，需先安装 `novel` CLI）：

1. **索引书库**：`novel index -d <书库目录> --db /tmp/corpus.db --min-score 2`。
   - 书库过大（如 5G+ 或上万文件）时，**先分层采样再索引**：每个子文件夹随机抽 200-300 本建软链到临时目录，再对它 `novel index`。全量索引外接硬盘会耗时数小时，采样索引几分钟即可。
   - 采样时优先纳入各分类代表作与"锚点作品"，保证题材覆盖。
2. **看玩法分布**：`novel stats --db /tmp/corpus.db`，确定语料里哪类玩法占主导，据此选择要提炼哪些模板。
3. **采样高密度段落**：对每个目标玩法，用 SQL 按 `play_types LIKE '%X%'` 且 `score >= 12` 取高分段落；再用 Python 直接在语料文件里抓关键词上下文窗口（±200 字）补齐该玩法专属场景（文件多为 GBK，读取时先 utf-8 再 gbk 兜底）。
4. **四遍阅读法**：对每个目标玩法的采样段落跑上面"四遍阅读法"，逐层提取结构、技法、玩法特征词、句式。
5. **写模板文件**：按参考文件结构（见下）写成 `references/<玩法>-techniques.md`。
6. **脱敏检查（P0）**：逐项核验——无真实书名、无真实角色名、无本地绝对路径（如 `/media/...`）；角色全部替换为 `[女主]/[男主]/[地点]` 等占位符。可 `grep` 核验真实姓名是否泄漏。
7. **更新引用清单**：在 `SKILL.md` 与 `CLAUDE.md` 的"参考文件"清单中登记新模板。
8. **提交推送**：每次改动单独提交、信息清晰，与代码改动分开提交。

**参考文件结构**（与既有模板一致，示例见 `references/` 五份模板）：
- 头部：`> **通用技法模板**` 声明脱敏与不绑定，说明可跨题材迁移
- 本质区别表：错误写法 vs 正确写法的对照
- 核心张力：一句话公式 + 说明
- 写法模板：场景拆解、逐步递进
- 升级轴：从初级到高级的全书结构
- 句式库：可复用句式（学句式，不抄句子）
- 与既有模板的联动：与其他参考文件的关系

**既有脱敏模板（可直接复用/参照结构）**：
- `references/quiet-exposure-techniques.md` — 悄悄露出
- `references/tech-toy-play-techniques.md` — 情趣玩具/远程控制
- `references/domination-training-techniques.md` — 调教/主奴
- `references/group-play-techniques.md` — 多人/群交
- `references/carnal-writing-techniques.md` — 通用肉欲写法

## 语料工具（harness/ 本地 CLI）

本技能附带纯本地 CLI 工具，不依赖外部 API：

- `novel index` — 扫描本地 .txt 语料库，建 SQLite 索引（编码检测、质量过滤、SimHash 去重、技法密度评分、玩法关键词分类）
- `novel calibrate` — 用指定的锚点作品校准评分阈值
- `novel wordcount` — 按章节统计字数
- `novel stats` — 查看索引统计

安装：`pip install -e .`（在项目根目录）

工具读取本地文件，不联网，不调 API，不收集任何数据。

## 成书组装

全部章节写完后，必须交付一个完整的、可导入阅读软件的 .txt 文件：

1. **拼接顺序**：按章节序号逐章拼接为单个 .txt 文件
2. **格式规范**：
   - 每章标题用"第N章 标题"独立一行，前后各空一行
   - 章内段落间用空行分隔，无缩进，无特殊字符
   - UTF-8 编码（兼容所有主流阅读软件：阅读、Moon+ Reader、Kindle、多看等）
   - 文件末尾留一个空行
3. **交付清单**：
   - 完整版：`书名.txt`（全部章节拼接，导入阅读软件用）
   - 分章版：`第N章-标题.txt`（写作过程中保留，方便修改单章）
   - 大纲：`大纲.md` 或 `大纲.txt`（供创作者参考，非必交付）
4. **组装前自审**：每章字数达标 + 无 markdown 残留 + 人称无混用 → 再拼接

## 人性化设计（创作体验优化）

写作过程中 Agent 应主动做到以下事项，减少用户手动操作：

### 进度可见
- 每章开始前告知用户"开始写第 N 章：标题"
- 每章完成后**立即**用以下标准格式报告全篇进度（直接输出到对话中，不可省略），同时更新进度.txt：

```
《书名》进度 — 日期

✅ 第X章 标题    — XXXX字
🔶 第Y章 标题    — XXXX字（差XXX字达标）
⬜ 第Z章 标题    — 未开始

X/总数完成 | X章达标 | X章待补
```

使用图标：✅ 达标(≥用户目标) | 🔶 未达标(已写但不够) | ⬜ 未开始
- 在输出目录维护 `进度.txt`，列出所有章节的完成状态（已完成/写作中/未开始）和字数

### 写作护航
- 每写完 3 章，主动对照大纲检查情节是否偏离，如有偏离提醒用户
- 发现潜在人称混用时主动修正（不要等用户指出）
- 每次用户给反馈后，先更新胶囊的 feedback_log 再继续写作

### 断点续写
- 长篇写作可能跨多个会话。每次会话开始时，先检查输出目录的 `进度.txt` 和胶囊文件，了解上次写到哪里
- 用户说"继续写"时，自动从第一个未完成的章节开始

### 数据隐私
- 所有创作内容（大纲、章节、进度）放在用户指定的输出目录，不写入 skill 目录
- 胶囊文件（sessions/）不离开用户本地机器
- 任何时候用户说"清除记录"，立即删除当前用户的胶囊文件和输出目录中的所有内容

## Pitfalls

- **白纸原则（P0）**：本技能不绑定任何玩法、笔触、字数目标。任何偏好都必须是勘察产物。收到"帮我写文"请求时先勘察再动笔，不沿用任何默认口味。
- 不要写完就停：高潮不能一句带过。
- 大纲与正文章节号必须对齐。
- 环境/情节铺垫每章累计不超过 40%。
- **字数达标（P0，不可绕过）**：用户的字数目标（勘察确定，工具阈值默认 5000 字可按需调整）是交付标准，不是建议。60% 只是绝对安全底线（低于此值不得汇报），但达标线始终是 100%。分段生成工作流（见上）定义了从段目标→续写→追补→终检的完整门控链。**任何时候都不得将低于用户目标的章节标记为"完成"提交给用户。** 如果经过完整分段流程后仍无法达标，必须向用户说明情况并征求同意，不得自行降低标准。
- 写完自审再交付：高潮次数与叙述一致、章节号对齐、人称正确、器官描写密度达标。
- 人称笔误高发：每章补完通读确认人称一致性，并按"名称+代词混用"检查有无连续代称堆砌。

