story-deslop

|

Skill file

Preview skill file
---
name: story-deslop
version: 1.0.0
description: |
  网文去AI味。检测并清除文本中的AI写作痕迹,让文字回归自然、非模板化。
  触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」
metadata:
  openclaw:
    source: https://github.com/worldwonderer/oh-story-claudecode
---

# story-deslop:网文去AI味

你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然,降低模板化、书面腔和过度工整感。

**核心信念:AI 味的主要问题不是语法,而是过度圆滑、工整、解释充分。改写目标是保留剧情功能,同时增加口语、停顿、跳跃和具体动作。**

---

## 核心哲学

### 原则 1:不是改错,是改味

AI味不是语法错误,不需要"修正"。AI味是一种风格问题——过于书面化、过于对仗工整、过于面面俱到。去AI味的本质是把文字从过度工整拉回具体、自然、可读。

### 原则 2:改最少,效果最大

去AI味不是重写。目标是改最少的字,让整段文字的"味"变过来。能改一个词就不改一句,能删一句就不重写一段。没有问题的句子尽量保留原句;人名、地名、数字、章节名、专有名词优先保留。

**过度去AI味保护**:
- **不得整段删除正文内容**。如果某段被标记为多处AI味,应逐句修改而非删除整段
- 删除前必须确认:被删除的内容是否包含伏笔、钩子、角色特征、情节推进等关键信息
- 如果删除会破坏情节连贯性,改为"降AI重写"而非删除
- 删除比例上限按 AI 味等级分级:轻度 ≤15%,中度 ≤25%,重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差,但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险,并输出分段处理方案
- 如果逐句修改后某段仍不满意,在去AI味报告中标注 `[需复核]` 而非删除,不计入当前等级的删除比例上限
- 对于"疑似AI味但不确定"的内容,在去AI味报告中标注 `[需复核]`,而非插入正文

### 原则 3:保留创作意图

去AI味只改"怎么说",不改"说什么"。剧情、人设、情节走向一概不动;不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题,那不是去AI味的活。

---

## 自然文本基准

去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征,作为对比基准:

### 自然文本特征(与AI味对比)
| 维度 | 自然文本 | AI味文本 |
|------|----------|--------|
| 段落长度 | 1-3句为主,偶尔1句独占1行 | 每段4-6句,整齐均匀 |
| 对话标签 | 60%+无标签,用动作替代"说" | 几乎每句都有"说道/问道" |
| 情绪表达 | 动作展示("手在抖") | 直接告诉("很紧张") |
| 比喻 | 生活化("像哈士奇护食") | 文学化("如寒冰般") |
| 语气词 | "嘤""嘶""靠""行吧" | 几乎没有 |
| 省略 | 大量省略,读者自己脑补 | 面面俱到,生怕读者不懂 |
| 排比 | 偶尔1-2个,从不连续3+ | 连续3-5个排比是标配 |
| 结尾 | 动作/对话收尾 | 总结/升华/感慨收尾 |

### 自然表达替换参考
> 来自大量网文写作研究:

- 替代"深吸一口气"→ "胸口起伏了一下" / 直接删掉
- 替代"眼中闪过一丝..."→ "他垂下眼" / "眯起眼"
- 替代"嘴角勾起一抹..."→ "笑了一下,没到眼底" / "乐了"
- 替代"仿佛..."→ "像..." / 直接白描
- 替代"不禁..."→ 直接写动作
- 替代"缓缓开口"→ "说" / 用动作引出对话

---

## 检测流程

### Phase 1:AI味扫描

对用户提交的文本做快速扫描,标记AI味浓重的位置:

```
## AI味检测报告

### 整体评估
- AI味等级:{轻度/中度/重度}
- 主要问题:{1-3 个关键词}

### 问题标记
| 位置 | 类型 | Gate | 原文 | 问题 |
|------|------|------|------|------|
| 第X段 | 禁用词 | A | "眼中闪过一丝..." | 典型AI高频词 |
| 第Y段 | 句式 | B | "...,带着..." | AI惯用句式 |
| 第Z段 | 句式 | B | 连续3句排比 | 过于工整 |
| ... | 心理描写 | C | "他感到..." | 告诉而非展示 |
| 第M段 | 节奏 | D | 段段4-6句、长度均匀 | 整段同节奏 |
| 第N段 | 重复描写 | C/D | 同一动作连续拆写 | 相邻段重复同一瞬间 |

> 类型 → Gate 速查:禁用词 = A,句式套路 = B,心理告知 = C,节奏均匀 = D,对话腔调 = E,结尾升华 = F,重复描写 = C/D。Phase 2 判定"6 Gate 中 4+ 个有问题"时按 Gate 列计数。
```

---

### Phase 2:诊断与分级

根据 Phase 1 检测结果判断AI味程度,决定处理策略:

| AI味程度 | 量化标准(参考值) | 特征 | 处理策略 |
|----------|---------|------|----------|
| 轻度 | 禁用词命中 ≤5 处/千字,无连续 3+ 句式套路 | 少量禁用词,偶有书面腔 | 只过 Gate A + B |
| 中度 | 禁用词命中 6-15 处/千字,或有连续 3+ 句式套路 | 多处禁用词 + 句式套路 + 心理描写抽象 | 过 Gate A + B + C + D |
| 重度 | 禁用词命中 >15 处/千字,或 6 Gate 中 4+ 个有问题 | 全文AI味明显,节奏/对话/结尾都有问题 | 完整 6 Gate + 重点段落重写 |

> 量化标准为参考值。命中 = banned-words.md 中条目作为连续字符串在文本中出现一次。`.deslop-whitelist` 中的词如果是命中片段的真子串,跳过该次计数(避免误报世界观术语)。同一词在一处出现计 1 次。
>
> **判定优先级**:(1) 先按下方"AI味打分客观指标"做量化定档;(2) 允许根据题材/语境做 ≤1 档的主观下调(必须在报告中给出书面理由),不允许上调;(3) 量化与主观冲突时,以量化结果为准。

**AI味打分客观指标**:

| 指标 | 计算方式 | 轻度阈值 | 中度阈值 | 重度阈值 |
|------|----------|---------|---------|---------|
| 禁用词密度 | 命中次数 / 千字 | ≤5 | 6-15 | >15 |
| 连续排比段数 | 连续相同句式结构的段落数 | ≤2 | 3-4 | ≥5 |
| 心理词占比 | 直接心理描写词数 / 总段落数 | ≤10% | 10-25% | >25% |
| 对话标签密度 | "说道/问道/笑道" 等 / 对话句数 | ≤30% | 30-50% | >50% |
| 平均段落句数 | 总句数 / 总段落数 | ≤3 | 3-5 | >5 |
| 重复描写密度 | 同一信息/动作/情绪连续多段拆写的处数 / 千字 | ≤1处/千字 | 2-3处/千字 | ≥4处/千字 |

> 备注:核心场景(开篇、高潮、收束)出现 1 次重复描写即按 ≥1 档加权(轻→中,中→重)。
>
> 以上阈值为参考值,需结合题材特点调整。例如古风题材的对话标签密度天然偏高,应适当放宽。
>
> **综合判定规则**:取六项指标中的最高档位。任一指标达重度即按重度处理;无重度时,中度指标 ≥3 项按中度处理,否则按轻度处理。

加载 [references/anti-ai-writing.md](references/anti-ai-writing.md) 的「系统性去AI三遍法」获取完整流程。三遍法与本 skill 的关系(覆盖关系,不是 1:1 映射):
- **Pass 1(去泛化)** 覆盖 Gate A 的禁用词、Gate C 的抽象情绪、Gate D 的工整对仗、Gate E 的同语气对话粗扫
- **Pass 2(去书面化)** 覆盖 Gate A 中的书面腔词、Gate B 的句式套路深化
- **Pass 3(回自然感)** 覆盖 Gate D 的长短节奏、Gate E 的对话差异化、Gate F 的结尾去升华、补具体感官细节
- 轻度:只过 Pass 1;中度:Pass 1 + Pass 2;重度:完整三遍 + 重点段落重写

---

### Phase 3:逐项清除

#### Agent 调用:narrative-writer(去AI味执行)

Phase 2 诊断完成后,按以下顺序选择执行路径:

1. **已在 narrative-writer 子代理内**:直接 inline 执行 Gate A-F,不再 spawn(嵌套 spawn 会被静默降级)。
2. **未在子代理内且 `.claude/agents/narrative-writer.md` 存在**:spawn `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味\n检查范围:{待处理的正文文件}\nAI味等级:{Phase 2 诊断结果}\n处理策略:{轻度/中度/重度对应的 Gate 范围}\n模式处理:按 references/anti-ai-writing.md 的问题模式目录执行;所有新增模式都归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时,按 Gate C/D 合并去重;如改后明显变薄,恢复原文中有功能的信息或重表达既有信息,不新增原文没有的情节、设定、关系或时间线。")`。
3. **agent 不存在或 spawn 失败**:主线程 inline 执行。

以下为各 Gate 的详细规则(无论 agent 还是主线程执行,均须遵循):

#### 门禁 A:禁用词替换

加载 [references/banned-words.md](references/banned-words.md),对照禁用词表逐项检查。

**白名单机制**:

项目根目录下的 `.deslop-whitelist` 文件定义本项目的豁免词汇。

文件 schema:
- UTF-8 编码,一行一个词
- `#` 开头的行为注释;空行忽略;首尾空白 trim
- 大小写敏感(中文不区分)

匹配规则:扫描时若禁用词命中段对应的子串在 `.deslop-whitelist` 中存在同样的子串,跳过该次告警。匹配方式与 banned-words.md 一致,使用子串扫描。

示例 `.deslop-whitelist`:

```
# 项目自定义豁免词(一行一个,# 开头为注释)
缓缓                # 主角"缓缓"是绰号,不算禁用词
仿佛山海             # 章名
深邃的山谷           # 设定地名
```

白名单适用场景:
- 命中术语(如玄幻小说中的特定术语恰好匹配禁用词)
- 角色口头禅 / 绰号 / 设定专有名词
- 世界观专有名词
- 原文刻意使用的修辞手法

如果 `.deslop-whitelist` 不存在,不强制创建;在报告中说明可创建该文件。空白名单文件等同于无白名单。


**保护规则优先级**:保留创作意图与剧情功能 > 去AI Gate。Gate A-F 只能改变表达方式,不能删除伏笔、钩子、角色特征、关键信息或必要转折;遇到冲突时改为降AI重写或标注 `[需复核]`。

替换规则:
- 禁用词 → 具体动作/细节描写
- 不能简单换成另一个形容词
- 要用"展示"替代"告诉"

示例:
- ❌ "眼中闪过一丝不易察觉的悲伤" → ✅ "他垂下眼"
- ❌ "深吸一口气" → ✅ "胸口起伏了一下"(或直接删掉,这个动作90%无意义)
- ❌ "嘴角勾起一抹冷笑" → ✅ "他笑了一下,没到眼底"

#### 门禁 B:句式去套路

检测并替换以下AI高频句式:

| 句式 | 问题 | 替代方案 |
|------|------|----------|
| "不是A,而是B" | **最毒** 中文 AI 句式 | 直接写 B 或更自然的表达 |
| "...,带着..." | 万能状语,AI最爱 | 用独立短句或动作描写 |
| "声音不大,却带着……" | AI 最爱声音描写 | 直接写声音特征或动作 |
| 陈词滥调/万能比喻 | 公式化比喻会显 AI 腔 | 换成生活化、角色化比喻或直接白描 |
| "他/她知道..." | 直接告诉读者 | 用行为展示认知 |
| 对话标签密度过高/公式化标签 | 每句都标注会机械 | 普通"说"可保留;高频或公式化时用动作/上下文替代 |
| "仿佛/犹如/宛若/如同" | 文言腔过重 | 口语化表达或白描 |
| "不容置疑/显而易见" | 书面化判断词 | 用具体事实说话 |

**修饰词清扫**:检查物品/人物前面的形容词、定语、副词、指示代词、量词,多余即删。删除后阅读不影响才删;含义流失则改成简洁名词。

示例:
- "白色的药片" → "药片"
- "飞驰的汽车" → "汽车"
- "手里那截链子" → "链子"
- "多年的衣服" → "旧衣服"(保留含义)

形容词原则:一次只用一个形容词修饰或不修饰,不连用、不堆砌。

#### 门禁 C:心理描写外化

AI写的心理描写特征:直接陈述情绪。

替换策略:
- "他很紧张" → "他的手在抖"
- "她很愤怒" → "她一把掀翻了桌子"
- "他很害怕" → "他的腿在发抖,几乎站不稳"
- "她很伤心" → "她转过身去,肩膀微微颤动"
- "他感到一丝失落" → "他愣了一下,把手机放回口袋"

**重复描写去重**:当相邻段反复表达同一信息、同一动作或同一情绪时,按 Gate C/D 处理,不另开专项流程。

处理方法:
- 合并同一瞬间的重复描写,保留最能推动情绪或剧情的细节
- 如果原文把一个动作拆成"动作概述 → 感知细节 → 身体反应",改成同一段连续画面
- 若合并后节奏过快,恢复原文中有功能的信息,或把既有信息改成更自然的动作/对话表达;不在原动作后追加描写层,也不新增原文没有的情节

示例:
- ❌ "他拿起笔。手在抖。笔尖又停住。"
- ✅ "他拿起笔,笔尖刚碰到纸就偏了,手腕压了两次都没压稳。"

**重复语义四类**(同一意思不重复表达,只留一个最合适且简洁的):

| 类别 | 错误例 | 修法 |
|------|--------|------|
| 形容词重复 | "兴高采烈地笑着跑过来" | "笑着跑过来" |
| 近义词重复 | "非常重要的关键问题" | "关键问题" |
| 含义重复 | "我好饿,肚子咕咕叫" | "我好饿" |
| 上下文主语/物品重复 | 上文说"把抗抑郁药扔了一地",下文不必再写"地上的抗抑郁药",只写"药片" | 模糊简洁口语化即可 |

**多余场景/人物/物品描写**:服务情节人物之外的修饰描写直接删。

示例:
- "游惑手里握着一把短刀,刀锋冷冽" → "游惑手里握着一把短刀"
- "手铐紧紧扣住两人的手腕,中间连着一截不算长的链条" → "手铐扣住两人的手腕,中间连着链条"
- "暴雪极地的考场里,风雪没有停下的意思" → "暴雪极地的考场里"

#### 门禁 D:节奏打碎

AI写作的节奏问题:句式过于整齐、段落过于匀称。

处理方法:
- 打断连续排比句(保留1-2个,删掉其余)
- 长句拆短句
- 偶尔用不完整句(口语感)
- 段落长短交错(不要每段都3-5行)

#### 门禁 E:对话去腔调

AI写的对话特征:每句话都信息完整、逻辑清晰、表达精准。

处理方法:
- 加入口语化表达("嗯""哦""行吧")
- 适当打断对话(角色可以答非所问)
- 用动作穿插对话("她喝了口水。'然后呢?'")
- 删掉解释性对话(角色不会把自己的动机说清楚)

#### 门禁 F:结尾去升华

AI写作的结尾特征:总想总结、升华、点题。

处理方法:
- 删掉总结性语句
- 用动作/场景收尾,不要用感慨收尾
- 如果结尾有"他知道...""这一刻..."→ 基本可以删

---

### Phase 3.5:确定性标点收尾(文件模式)

当输入是正文文件路径,且 Phase 3 已落盘修改后,运行本 skill 自带脚本做最后一遍确定性标点收尾:

```bash
node scripts/normalize-punctuation.js <正文文件...>
```

作用边界:
- 只处理正文里的 `——`、`—`、`--` 和独立行 `---`;默认不改变引号风格。
- 知乎盐言短篇可保留 `「」`;只有用户或项目明确要求时,才加 `--quote-mode ascii` 或 `--quote-mode yan`。
- 该脚本是 `story-deslop` 的本地副本,不引用其他 skill 的文件。

---

### Phase 4:输出润色结果

```
## 去AI味润色报告

### 字数协议
- 原文字符数:{N0}
- 修订后字符数:{N1}
- 净变化:{N1 - N0}({百分比})
- 是否在 tier 上限内:{是 / 否(超限 X%,已分段并标注 [需复核])}

### 修改统计
- 总修改数:{N} 处
- 禁用词替换:{N} 处
- 句式调整:{N} 处(含 "不是A而是B" {N}、",带着..." {N}、声音描写 {N})
- 修饰词清扫:{N} 处
- 心理外化:{N} 处
- 重复描写合并:{N} 处
- 重复语义去重:{N} 处(形容词重复 {N}、近义词重复 {N}、含义重复 {N}、主语重复 {N})
- 比喻删除:{N} 处
- 节奏调整:{N} 处
- 对话优化:{N} 处
- 结尾修正:{N} 处

### 修改前后对比
{逐段展示修改,标注改动类型;超过 30 处时仅展示前 10 处 + 末 5 处 + 其余按 Gate 分桶计数}

### 润色后全文
{完整输出润色后的文本;输入为文件路径时改为通过 Edit/Write 落盘,本节仅给 ≤200 字片段}
```

**字数硬约束**:删除比例不得超过 Phase 2 等级对应上限(轻度 ≤15%、中度 ≤25%、重度 ≤35%)。超限时分段输出并在报告里标记,不得整段删除正文。

**收敛终止**:
1. 同一段连续两轮去 AI 后没有新改动 → 停止该段处理
2. 全文上限 3 轮重扫;第 3 轮仍有 ≥10 处改动 → 在报告里标 `[需复核]`,移交人工
3. 每轮结束前都要做一遍"再检一次":是否有不符合的地方,有则继续;没有则停

---

## 使用场景

| 场景 | 操作 |
|------|------|
| 用户贴一段文字说"太AI了" | 执行完整检测 + 润色流程 |
| 用户说"帮我润色" | 先检测AI味,再润色 |
| 用户说"检查下有没有AI味" | 只做检测,不做修改 |
| 用户写作中要求 `仅标注 / 只检测 / 不要改` | 嵌入式提醒模式:执行 Phase 1+2,跳过 Phase 3-4;输出问题标记表(含 Gate 列),不修改原文,不写文件 |

---

## 参考资料

按需加载以下文件:

| 文件 | 何时加载 |
|------|----------|
| [references/banned-words.md](references/banned-words.md) | 检测和替换禁用词时 |
| [references/anti-ai-writing.md](references/anti-ai-writing.md) | **去AI味完整指南**:预防+三遍法+范例 |
| [scripts/normalize-punctuation.js](scripts/normalize-punctuation.js) | 文件模式落盘后做确定性标点收尾;默认保留引号风格 |

---

## 流程衔接

**流水线:** 通用
**位置:** 润色(共享收尾)

| 时机 | 跳转到 | 命令 |
|---|---|---|
| 继续写作 | story-long-write / story-short-write | `/story-long-write` 或 `/story-short-write` |
| 发现结构问题 | story-long-analyze / story-short-analyze | `/story-long-analyze` 或 `/story-short-analyze` |
| 准备做封面 | story-cover | `/story-cover` |

---

## 语言

- 跟随用户的语言回复,用户用什么语言就用什么语言回复
- 中文回复遵循《中文文案排版指北》

Source

Creator's repository · worldwonderer/oh-story-claudecode

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
What this skill can do
Reads your filesConnects to the internetRuns code on your machine
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk