--- 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 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味完整指南**:预防+三遍法+范例 | --- ## 流程衔接 **流水线:** 通用 **位置:** 润色(共享收尾) | 时机 | 跳转到 | 命令 | |---|---|---| | 继续写作 | 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` | --- ## 语言 - 跟随用户的语言回复,用户用什么语言就用什么语言回复 - 中文回复遵循《中文文案排版指北》