网文去AI味。检测并清除文本中的AI写作痕迹,让文字回归自然、非模板化。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。
npx skills add https://github.com/worldwonderer/oh-story-claudecode --skill story-deslop
你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然,降低模板化、书面腔和过度工整感。
核心信念:AI 味的主要问题并非语法错误;更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能,同时增加口语、停顿、跳跃和具体动作。
> Agent 兼容性:检查专业 agent 是否可用时,按 .claude/agents/{agent}.md → .opencode/agents/{agent}.md → .codex/agents/{agent}.toml 的顺序查找。Codex 原生子代理调用优先使用同名 agent_type;如果当前 Codex 运行时返回 unknown agent_type 或未暴露 custom-agent registry,必须降级为 solo/direct。检测到 .zcode/ 时同样直接 solo/direct,因为 ZCode 3.3.4 不执行项目 custom agents;报告 Fallback: project custom agents unavailable -> solo。Claude/OpenCode 兼容面保留 subagent_type。
AI味不按语法错误处理,也不需要"修正"。它属于风格问题:过于书面化、过于对仗工整、过于面面俱到。去AI味的本质,是把文字从过度工整拉回具体、自然、可读。
去AI味不等于重写。目标是改最少的字,让整段文字的"味"变过来。能改一个词就不改一句,能删一句就不重写一段。没有问题的句子尽量保留原句;人名、地名、数字、章节名、专有名词优先保留。
过度去AI味保护:
[需复核] 而非删除,不计入当前等级的删除比例上限[需复核],而非插入正文去AI味只改"怎么说",不改"说什么"。剧情、人设、情节走向一概不动;不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题,那不是去AI味的活。
去AI味不是把文字全部磨成句号。质问里的 ?、爆发峰值的少量 ! 可以保留;犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。正文产物不保留 …… / ——,也要清理无功能的 !!! 和随机标点堆砌。
去AI味治读感,不承诺任何分数结果。若用户贴出工具报告,只把能对应到正文的问题转成具体修改点;不写“0% AI / 100% 真人”,不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准,不把表达修复变成新增情节或新增事件链。
去 AI 味补充判断:
地/得 全改 的、全禁顿号/“很”/“像”当成硬规则。去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征,作为对比基准:
| 维度 | 自然文本 | AI味文本 |
|------|----------|--------|
| 段落长度 | 1-3句为主,偶尔1句独占1行 | 每段4-6句,整齐均匀 |
| 对话标签 | 60%+无标签,用动作替代"说" | 几乎每句都有"说道/问道" |
| 情绪表达 | 动作展示("手在抖") | 直接告诉("很紧张") |
| 比喻 | 生活化("像哈士奇护食") | 文学化("如寒冰般") |
| 语气词 | "嘤""嘶""靠""行吧" | 几乎没有 |
| 省略 | 大量省略,读者自己脑补 | 面面俱到,生怕读者不懂 |
| 排比 | 偶尔1-2个,从不连续3+ | 连续3-5个排比是标配 |
| 结尾 | 动作/对话收尾 | 总结/升华/感慨收尾 |
> 来自大量网文写作研究:
对用户提交的文本做快速扫描,标记AI味浓重的位置:
## AI味检测报告
### 整体评估
- AI味等级:{轻度/中度/重度}
- 主要问题:{1-3 个关键词}
### 问题标记
| 位置 | 类型 | Gate | 原文 | 问题 |
|------|------|------|------|------|
| 第X段 | 禁用词 | A | "眼中闪过一丝..." | 典型AI高频词 |
| 第Y段 | 句式 | B | "...,带着..." | AI惯用句式 |
| 第Z段 | 句式 | B | 连续3句排比 | 过于工整 |
| ... | 心理描写 | C | "他感到..." | 告诉而非展示 |
| 第M段 | 节奏 | D | 段段4-6句、长度均匀 | 整段同节奏 |
| 第N段 | 重复描写 | C/D | 同一动作连续拆写 | 相邻段重复同一瞬间 |
| 第P段 | 解释腔/上帝感 | G | "她不知道的是…" / "演得真好" / "之所以…是因为" | 叙述者跳出角色当下解释/剧透/定性/升华(模式 8) |
| 第Q段 | 动作清单 | D/E | "伸手拿起…取过…放下…转身…" | 监控摄像头式步骤表,缺少视角温度/心理缓冲(模式 10) |
> 类型 → Gate 速查:禁用词 = A,句式套路 = B,心理告知 = C,节奏均匀 = D,对话腔调 = E,结尾升华 = F,解释腔/上帝感/安排感 = G,重复描写 = C/D。「诊断与分级」判定"7 Gate 中 4+ 个有问题"时按 Gate 列计数。
> 评价只输出 AI味等级(轻度/中度/重度)与问题标记;不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据,这类措辞是无依据的越权担保。
确定性句式预检(文件模式):当输入是本地正文文件路径时,「AI味扫描」必须先运行本 skill 自带脚本,只报告不修改:
node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
not-is-comparison / em-dash / voice-contrast / negation-parade / reverse-not-is / trailer-ending / trailer-summary)并入 Gate B,属于写作/去 AI 味时优先处理的 blocking 类问题。references/anti-ai-writing.md。[需复核] 并保留。根据「AI味扫描」检测结果判断AI味程度,决定处理策略:
| AI味程度 | 量化标准(参考值) | 特征 | 处理策略 |
|----------|---------|------|----------|
| 轻度 | 禁用词命中 ≤5 处/千字,无连续 3+ 句式套路 | 少量禁用词,偶有书面腔 | 只过 Gate A + B |
| 中度 | 禁用词命中 6-15 处/千字,或有连续 3+ 句式套路 | 多处禁用词 + 句式套路 + 心理描写抽象 | 过 Gate A + B + C + D + G |
| 重度 | 禁用词命中 >15 处/千字,或 7 Gate 中 4+ 个有问题 | 全文AI味明显,节奏/对话/结尾/解释腔都有问题 | 完整 7 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 的「系统性去AI三遍法」获取完整流程。三遍法与本 skill 的关系(覆盖关系,不是 1:1 映射):
「诊断与分级」完成后,按以下顺序选择执行路径:
.claude/agents/,其次 .opencode/agents/,再检查 .codex/agents/)下的 narrative-writer.md 或 .codex/agents/narrative-writer.toml 存在:spawn Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味\n检查范围:{待处理的正文文件}\nAI味等级:{诊断与分级结果}\n处理策略:{轻度/中度/重度对应的 Gate 范围}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删,会丢才进 Gate 润色;看似解释/评价但承担小连贯的句子,压成白话承接、动作或物件锚点,不机械删除;已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点,但不新增原文没有的事件链;删除服从比例上限与字数下限,跌破下限改降AI重写。\n模式处理:按 references/anti-ai-writing.md 的问题模式目录执行;模式 8(解释腔/上帝视角/安排感)归入 Gate G,其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时,按 Gate C/D 合并去重;如改后明显变薄,恢复原文中有功能的信息或重表达既有信息,不新增原文没有的情节、设定、关系或时间线。")。每条被标记项先判能否删除,再考虑润色——很多 AI 味句是废话(解释、注水、凑数),润色后照样冗余。
以下为各 Gate 的详细规则(删不掉的标记项按此润色;无论 agent 还是主线程执行,均须遵循):
加载 references/banned-words.md,对照禁用词表逐项检查。
白名单机制:
项目根目录下的 .deslop-whitelist 文件定义本项目的豁免词汇。
文件 schema:
# 开头的行为注释;空行忽略;首尾空白 trim匹配规则:扫描时若禁用词命中段对应的子串在 .deslop-whitelist 中存在同样的子串,跳过该次告警。匹配方式与 banned-words.md 一致,使用子串扫描。
示例 .deslop-whitelist:
# 项目自定义豁免词(一行一个,# 开头为注释)
缓缓 # 主角"缓缓"是绰号,不算禁用词
仿佛山海 # 章名
深邃的山谷 # 设定地名
白名单适用场景:
如果 .deslop-whitelist 不存在,不强制创建;在报告中说明可创建该文件。空白名单文件等同于无白名单。
保护规则优先级:保留创作意图与剧情功能 > 去AI Gate。Gate A-F 只能改变表达方式;Gate G 删的是非故事性的作者解释/旁白(不是情节)。任何 Gate 都不能删除伏笔、钩子、角色特征、人物记忆、情绪承接、因果锚点、关键信息或必要转折;遇到冲突时改为降AI重写或标注 [需复核]。
替换规则:
示例:
检测并替换以下AI高频句式:
| 句式 | 问题 | 替代方案 |
|------|------|----------|
| 否定铺垫后接肯定翻转 | 最毒 中文 AI 句式之一 | 直接写后项,或改成动作/细节呈现 |
| "...,带着..." | 万能状语,AI最爱 | 用独立短句或动作描写 |
| "声音不大,却带着……" | AI 最爱声音描写 | 直接写声音特征或动作 |
| 陈词滥调/万能比喻 | 公式化比喻会显 AI 腔 | 优先直接白描;确需比喻时只留少数生活化、角色化比喻 |
| "他/她知道..." | 直接告诉读者 | 用行为展示认知 |
| 对话标签密度过高/公式化标签 | 每句都标注会机械 | 普通"说"可保留;高频或公式化时用动作/上下文替代 |
| "仿佛/犹如/宛若/如同" | 文言腔过重 | 口语化表达或白描 |
| "不容置疑/显而易见" | 书面化判断词 | 用具体事实说话 |
修饰词清扫:检查物品/人物前面的形容词、定语、副词、指示代词、量词,多余即删。删除后阅读不影响才删;含义流失则改成简洁名词。
示例:
形容词原则:一次只用一个形容词修饰或不修饰,不连用、不堆砌。
AI写的心理描写特征:直接陈述情绪。
替换策略:
重复描写去重:当相邻段反复表达同一信息、同一动作或同一情绪时,按 Gate C/D 处理,不另开专项流程。
处理方法:
示例:
重复语义四类(同一意思不重复表达,只留一个最合适且简洁的):
| 类别 | 错误例 | 修法 |
|------|--------|------|
| 形容词重复 | "兴高采烈地笑着跑过来" | "笑着跑过来" |
| 近义词重复 | "非常重要的关键问题" | "关键问题" |
| 含义重复 | "我好饿,肚子咕咕叫" | "我好饿" |
| 上下文主语/物品重复 | 上文说"把抗抑郁药扔了一地",下文不必再写"地上的抗抑郁药",只写"药片" | 模糊简洁口语化即可 |
多余场景/人物/物品描写:服务情节人物之外的修饰描写直接删。
示例:
AI写作的节奏问题:句式过于整齐、段落过于匀称。
处理方法:
? / 少量 !,把 …… / —— 改成动作、短句、换行、逗号或句号,删除随机堆砌或刷屏符号AI写的对话特征:每句话都信息完整、逻辑清晰、表达精准。
处理方法:
——……AI写作的结尾特征:总想总结、升华、点题。
处理方法:
最难察觉、最"像 AI"的一类(对应 anti-ai-writing.md 模式 8)。叙述者跳出角色当下去解释、剧透、总结、定性、升华,读者闻到"作者在场/剧情被安排"。
处理方法:
任务卡点修法边界:任务卡点不是固定公式,也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时,可以把解释总结压成角色当下要处理的具体卡点;原文没有缺口时,只删解释或改动作/对话,不新造剧情。所有卡点都先做“删掉试试”:删掉后不丢伏笔、钩子、信息、关系变化或必要转折,就压缩或删除。
当输入是正文文件路径,且「逐项清除」已落盘修改后,先做句式/段落复扫,再做机械标点兜底(破折号要按功能改写,故先于机械替换报出):
node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
node scripts/check-degeneration.js --check <正文文件...>
node scripts/normalize-punctuation.js <正文文件...>
作用边界:
check-ai-patterns.js 只报告不改写:severity=blocking 的类别(not-is-comparison / em-dash / voice-contrast / negation-parade / reverse-not-is / trailer-ending / trailer-summary)优先改正文并复扫;advisory 先通读判断,确属提纲感、解释腔或模板腔再改,功能性写法标 [需复核]。references/anti-ai-writing.md。check-degeneration.js 报告模型退化(逐字复读/打转、末尾截断、占位符、工程词泄漏 细纲/情节点 等),每条带 severity: blocking|advisory。blocking 是退化信号,去AI味改不掉,应回去重新生成那一段再 deslop;advisory(tier2 章节/歧义词)只提示。normalize-punctuation.js 机械兜底:清除残留的 ……、漏网破折号 ——/—、双连字符 -- 和独立行 ---;默认不改变引号风格,也不把有功能的 ? / 少量 ! 改成句号。「」;只有用户或项目明确要求时,才给标点脚本加 --quote-mode ascii 或 --quote-mode yan。—— 不再作为例外保留;脚本会改成句号、逗号、动作可承接的断句或中文连接词。无功能标点堆砌由人工 Gate D/E 判断处理。story-deslop 的本地副本,不引用其他 skill 的文件。## 去AI味润色报告
### 字数协议
- 原文字符数:{N0}
- 修订后字符数:{N1}
- 净变化:{N1 - N0}({百分比})
- 是否在 tier 上限内:{是 / 否(超限 X%,已分段并标注 [需复核])}
### 修改统计
- 总修改数:{N} 处
- 禁用词替换:{N} 处
- 句式调整:{N} 处(含否定翻转句式 {N}、",带着..." {N}、声音描写 {N})
- 修饰词清扫:{N} 处
- 心理外化:{N} 处
- 重复描写合并:{N} 处
- 监控动作清单合并:{N} 处
- 重复语义去重:{N} 处(形容词重复 {N}、近义词重复 {N}、含义重复 {N}、主语重复 {N})
- 比喻处理:{N} 处(删除/保留/改回具体画面)
- 节奏调整:{N} 处
- 对话优化:{N} 处
- 标点节奏调整:{N} 处(保留有功能 `?`/少量 `!`,将 `……`/`——` 改为动作、短句、逗号或句号,并清理无功能堆砌)
- 结尾修正:{N} 处
### 修改前后对比
{逐段展示修改,标注改动类型;超过 30 处时仅展示前 10 处 + 末 5 处 + 其余按 Gate 分桶计数}
### 润色后全文
{**文件模式(默认;章节/正文文件、批量与长篇去AI)**:通过 Edit/Write 直接改写落盘,本节只回 ≤200 字代表性片段,不向父会话返回全文。**文本模式(仅限交互式贴入、无文件路径的零散片段)**:完整输出润色后的文本。}
字数硬约束:删除比例不得超过「诊断与分级」对应上限(轻度 ≤15%、中度 ≤25%、重度 ≤35%)。超限时分段输出并在报告里标记,不得整段删除正文。
收敛终止:
[需复核],移交人工| 场景 | 操作 |
|------|------|
| 用户贴一段文字说"太AI了" | 执行完整检测 + 润色流程 |
| 用户说"帮我润色" | 先检测AI味,再润色 |
| 用户说"检查下有没有AI味" | 只做检测,不做修改 |
| 用户写作中要求 仅标注 / 只检测 / 不要改 | 嵌入式提醒模式:执行「AI味扫描」和「诊断与分级」,跳过「逐项清除」「确定性收尾」「输出润色结果」;输出问题标记表(含 Gate 列),不修改原文,不写文件 |
按需加载以下文件:
| 文件 | 何时加载 |
|------|----------|
| references/banned-words.md | 检测和替换禁用词时 |
| references/anti-ai-writing.md | 去AI味完整指南:预防+三遍法+范例 |
| scripts/normalize-punctuation.js | 文件模式落盘后做确定性标点收尾;默认保留引号风格 |
| scripts/check-ai-patterns.js | 文件模式「AI味扫描」预检与「确定性收尾」复扫(只看引号外叙述),只报告不改写 |
| scripts/check-degeneration.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 |
Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementing any feature or bugfix, before writing implementation code
Use when you have a spec or requirements for a multi-step task, before touching code
Use when creating new skills, editing existing skills, or verifying skills work before deployment
Use when writing or improving README files. Not all READMEs are the same — provides templates and guidance matched to your audience and project type.
| Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Official Opentrons Protocol API for OT-2 and Flex robots. Use when writing protocols specifically for Opentrons hardware with full access to Protocol API v2 features. Best for production Opentrons protocols, official API compatibility. For multi-vendor automation or broader equipment control use pylabrobot.
Take worldwonderer/story-deslop from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.