{"slug":"story-deslop","title":"story-deslop","summary":"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-25T15:08:12.627523Z","repo":{"url":"https://github.com/zenstory-ai/oh-story-claudecode","stars":7051,"forks":1002,"license":"MIT","updatedAt":"2026-09-22T09:52:34Z"},"bodyHtml":"<hr>\n<h2>name: story-deslop\nversion: 1.0.0\ndescription: \"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}</h2>\n<h1>story-deslop：网文去AI味</h1>\n<p>你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然，降低模板化、书面腔和过度工整感。</p>\n<p><strong>核心信念：AI 味的主要问题并非语法错误；更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能，同时增加口语、停顿、跳跃和具体动作。</strong></p>\n<hr>\n<blockquote>\n<p>Agent 兼容性：检查专业 agent 是否可用时，按 <code>.claude/agents/{agent}.md</code> → <code>.opencode/agents/{agent}.md</code> → <code>.codex/agents/{agent}.toml</code> 的顺序查找。Codex 原生子代理调用优先使用同名 <code>agent_type</code>；如果当前 Codex 运行时返回 <code>unknown agent_type</code> 或未暴露 custom-agent registry，必须降级为 solo/direct。检测到 <code>.zcode/</code> 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 <code>Fallback: project custom agents unavailable -&gt; solo</code>。Claude/OpenCode 兼容面保留 <code>subagent_type</code>。</p>\n<p>Spawn 版本提示（不阻断 spawn）：先读取项目根 <code>.story-deployed</code> 的 <code>agents_version</code>。与本版 <code>agents_version: 25</code> 不一致时（标记缺失、字段缺失/非整数、小于或大于 25）<strong>照常按文件存在性检查并 spawn</strong>，同时报告 <code>Notice: agents bundle 版本不匹配（项目 {N}，本版 25）</code> 并提示重新运行 <code>/story-setup</code> 后新开会话；大于 25 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 <code>Fallback: ... -&gt; solo</code>。</p>\n</blockquote>\n<h2>核心哲学</h2>\n<h3>原则 1：改味优先，别当改错</h3>\n<p>AI味不按语法错误处理，也不需要\"修正\"。它属于风格问题：过于书面化、过于对仗工整、过于面面俱到。去AI味的本质，是把文字从过度工整拉回具体、自然、可读。</p>\n<h3>原则 2：改最少，效果最大</h3>\n<p>去AI味不等于重写。目标是改最少的字，让整段文字的\"味\"变过来。能改一个词就不改一句，能删一句就不重写一段。没有问题的句子尽量保留原句；人名、地名、数字、章节名、专有名词优先保留。</p>\n<p><strong>过度去AI味保护</strong>：</p>\n<ul>\n<li><strong>不得整段删除正文内容</strong>。如果某段被标记为多处AI味，应逐句修改而非删除整段</li>\n<li>删除前必须确认：被删除的内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息</li>\n<li>如果删除会破坏情节连贯性，改为\"降AI重写\"而非删除</li>\n<li>删除比例上限按 AI 味等级分级：轻度 ≤15%，中度 ≤25%，重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差，但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险，并输出分段处理方案</li>\n<li>如果逐句修改后某段仍不满意，在去AI味报告中标注 <code>[需复核]</code> 而非删除，不计入当前等级的删除比例上限</li>\n<li>对于\"疑似AI味但不确定\"的内容，在去AI味报告中标注 <code>[需复核]</code>，而非插入正文</li>\n</ul>\n<h3>原则 3：保留创作意图</h3>\n<p>去AI味只改\"怎么说\"，不改\"说什么\"。剧情、人设、情节走向一概不动；不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题，那不是去AI味的活。</p>\n<h3>原则 4：保留有功能的语气，不保留长停顿符号</h3>\n<p>去AI味不是把文字全部磨成句号。质问里的 <code>？</code>、爆发峰值的少量 <code>！</code> 可以保留；犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。正文产物不保留 <code>……</code> / <code>——</code>，也要清理无功能的 <code>!!!</code> 和随机标点堆砌。</p>\n<h3>边界：去AI味只处理读感与叙事功能</h3>\n<p>去AI味治读感，不承诺任何分数结果。若用户贴出工具报告，只把能对应到正文的问题转成具体修改点；不写“0% AI / 100% 真人”，不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准，不把表达修复变成新增情节或新增事件链。</p>\n<h3>作者习惯</h3>\n<p>若作者记忆 state 已存在，改写前用 <code>scripts/author_memory_commit.py query --kind prose_style</code> 获取匹配的 active 文风条目（总输出 ≤2KB），并交给 inline/spawn 执行者作为自然倾向，不逐条展示或最大化命中，不牺牲连贯、节奏和字数；当前请求、原文剧情功能和本 skill 保护规则优先。用户明确声明长期文风习惯时，改写后按 <a href=\"references/author-memory.md\">references/author-memory.md</a> 用 <code>record</code> 写入并回传回执；重复修正/推断先待确认，一次性要求、检测器 findings 和助手自己的结果不记录。</p>\n<hr>\n<h2>自然文本基准</h2>\n<p>去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征，作为对比基准：</p>\n<h3>自然文本特征（与AI味对比）</h3>\n<table>\n<thead>\n<tr>\n<th>维度</th>\n<th>自然文本</th>\n<th>AI味文本</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>段落长度</td>\n<td>随 beat 长短不一：爽点/转折压短，推理/氛围/情绪链放长</td>\n<td>通篇同一长度，整齐均匀</td>\n</tr>\n<tr>\n<td>句内节奏</td>\n<td>叙述以逗号长句为主（逗号之间 8-12 字、整句 20-30 字，见 anti-ai-writing.md 规则 3）</td>\n<td>要么长句臃肿，要么通篇碎句像提纲</td>\n</tr>\n<tr>\n<td>对话标签</td>\n<td>标签低频且不公式化，多用动作/上下文引出；普通\"说\"可保留</td>\n<td>几乎每句都有\"说道/问道/笑道\"</td>\n</tr>\n<tr>\n<td>情绪表达</td>\n<td>动作展示（\"手在抖\"）</td>\n<td>直接告诉（\"很紧张\"）</td>\n</tr>\n<tr>\n<td>比喻</td>\n<td>生活化（\"像哈士奇护食\"）</td>\n<td>文学化（\"如寒冰般\"）</td>\n</tr>\n<tr>\n<td>语气词</td>\n<td>\"嘤\"\"嘶\"\"靠\"\"行吧\"</td>\n<td>几乎没有</td>\n</tr>\n<tr>\n<td>省略</td>\n<td>大量省略，读者自己脑补</td>\n<td>面面俱到，生怕读者不懂</td>\n</tr>\n<tr>\n<td>排比</td>\n<td>偶尔1-2个，从不连续3+</td>\n<td>连续3-5个排比是标配</td>\n</tr>\n<tr>\n<td>结尾</td>\n<td>动作/对话收尾</td>\n<td>总结/升华/感慨收尾</td>\n</tr>\n</tbody>\n</table>\n<h3>自然表达替换参考</h3>\n<blockquote>\n<p>来自大量网文写作研究：</p>\n</blockquote>\n<ul>\n<li>替代\"深吸一口气\"→ 直接删；若确有功能，改成角色当下动作</li>\n<li>替代\"眼中闪过一丝...\"→ \"他垂下眼\" / \"眯起眼\"</li>\n<li>替代\"嘴角勾起一抹...\"→ \"他嘴角一扯\" / \"乐了\"</li>\n<li>替代\"仿佛...\"→ 优先直接白描；确需比喻时只留少数生活化、角色化比喻</li>\n<li>替代\"不禁...\"→ 直接写动作</li>\n<li>替代\"缓缓开口\"→ \"说\" / 用动作引出对话</li>\n</ul>\n<hr>\n<h2>检测流程</h2>\n<h3>Phase 1：AI味扫描</h3>\n<p>对用户提交的文本做快速扫描，标记AI味浓重的位置：</p>\n<pre><code>## AI味检测报告\n\n### 整体评估\n- AI味等级：{轻度/中度/重度}\n- 主要问题：{1-3 个关键词}\n\n### 问题标记\n| 位置 | 类型 | Gate | 原文 | 问题 |\n|------|------|------|------|------|\n| 第X段 | 禁用词 | A | \"眼中闪过一丝...\" | 典型AI高频词 |\n| 第Y段 | 句式 | B | \"...，带着...\" | AI惯用句式 |\n| 第Z段 | 句式 | B | 连续3句排比 | 过于工整 |\n| ... | 心理描写 | C | \"他感到...\" | 告诉而非展示 |\n| 第M段 | 节奏 | D | 段段4-6句、长度均匀 | 整段同节奏 |\n| 第N段 | 重复描写 | C/D | 同一动作连续拆写 | 相邻段重复同一瞬间 |\n| 第P段 | 解释腔/上帝感 | G | \"她不知道的是…\" / \"演得真好\" / \"之所以…是因为\" | 叙述者跳出角色当下解释/剧透/定性/升华（模式 8） |\n| 第Q段 | 动作清单 | D/E | \"伸手拿起…取过…放下…转身…\" | 监控摄像头式步骤表，缺少视角温度/心理缓冲（模式 10） |\n\n&gt; 类型 → Gate 速查：禁用词 = A，句式套路 = B，心理告知 = C，节奏均匀 = D，对话腔调 = E，结尾升华 = F，解释腔/上帝感/安排感 = G，重复描写 = C/D。「诊断与分级」判定\"7 Gate 中 4+ 个有问题\"时按 Gate 列计数。\n</code></pre>\n<blockquote>\n<p>评价只输出 AI味等级（轻度/中度/重度）与问题标记；不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据，这类措辞是无依据的越权担保。</p>\n</blockquote>\n<p><strong>确定性句式预检（文件模式）</strong>：当输入是本地正文文件路径时，「AI味扫描」必须先运行本 skill 自带脚本，只报告不修改：</p>\n<pre><code>node scripts/check-ai-patterns.js --check --fail-on=blocking &lt;正文文件...&gt;\n</code></pre>\n<ul>\n<li>severity=blocking 的类别（<code>not-is-comparison</code> / <code>em-dash</code> / <code>voice-contrast</code> / <code>negation-parade</code> / <code>reverse-not-is</code> / <code>trailer-ending</code> / <code>trailer-summary</code>）并入 Gate B，属于写作/去 AI 味时优先处理的 blocking 类问题。</li>\n<li>其他 findings（碎句号、长段落、微动作、动作清单、抽象总结、套词、比喻密度、解释链、公文腔、过度精炼、低连接密度、引号强调滥用、<code>formulaic-parallelism</code> 工整并列）只作读感提示；完整类别和修法见 <code>references/anti-ai-writing.md</code>。其中工整并列会扫描台词，必须读语境判断，不能因为 hook 对台词低误报豁免就跳过。</li>\n<li>处理方式：删掉否定铺垫，直接写后项；或改成角色动作、物件细节、身体反应来呈现。</li>\n<li>若用户只要检测，保留报告不改文。若执行去 AI 味，只改确实损害读感且无叙事功能的问题；功能性写法标 <code>[需复核]</code> 并保留。</li>\n</ul>\n<hr>\n<h3>Phase 2：诊断与分级</h3>\n<p>根据「AI味扫描」检测结果判断AI味程度，决定处理策略：</p>\n<table>\n<thead>\n<tr>\n<th>AI味程度</th>\n<th>量化标准（参考值）</th>\n<th>特征</th>\n<th>处理策略</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>轻度</td>\n<td>禁用词命中 ≤5 处/千字，无连续 3+ 句式套路</td>\n<td>少量禁用词，偶有书面腔</td>\n<td>只过 Gate A + B</td>\n</tr>\n<tr>\n<td>中度</td>\n<td>禁用词命中 6-15 处/千字，或有连续 3+ 句式套路</td>\n<td>多处禁用词 + 句式套路 + 心理描写抽象</td>\n<td>过 Gate A + B + C + D + G</td>\n</tr>\n<tr>\n<td>重度</td>\n<td>禁用词命中 &gt;15 处/千字，或 7 Gate 中 4+ 个有问题</td>\n<td>全文AI味明显，节奏/对话/结尾/解释腔都有问题</td>\n<td>完整 7 Gate + 重点段落重写</td>\n</tr>\n</tbody>\n</table>\n<blockquote>\n<p>量化标准为参考值。命中 = banned-words.md 中条目作为连续字符串在文本中出现一次。<code>.deslop-whitelist</code> 中的词如果是命中片段的真子串，跳过该次计数（避免误报世界观术语）。同一词在一处出现计 1 次。</p>\n<p><strong>判定优先级</strong>：(1) 先按下方\"AI味打分客观指标\"做量化定档；(2) 允许根据题材/语境做 ≤1 档的主观下调（必须在报告中给出书面理由），不允许上调；(3) 量化与主观冲突时，以量化结果为准。</p>\n</blockquote>\n<p><strong>AI味打分客观指标</strong>：</p>\n<table>\n<thead>\n<tr>\n<th>指标</th>\n<th>计算方式</th>\n<th>轻度阈值</th>\n<th>中度阈值</th>\n<th>重度阈值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>禁用词密度</td>\n<td>命中次数 / 千字</td>\n<td>≤5</td>\n<td>6-15</td>\n<td>&gt;15</td>\n</tr>\n<tr>\n<td>连续排比段数</td>\n<td>连续相同句式结构的段落数</td>\n<td>≤2</td>\n<td>3-4</td>\n<td>≥5</td>\n</tr>\n<tr>\n<td>心理词占比</td>\n<td>直接心理描写词数 / 总段落数</td>\n<td>≤10%</td>\n<td>10-25%</td>\n<td>&gt;25%</td>\n</tr>\n<tr>\n<td>对话标签密度</td>\n<td>\"说道/问道/笑道\" 等 / 对话句数</td>\n<td>≤30%</td>\n<td>30-50%</td>\n<td>&gt;50%</td>\n</tr>\n<tr>\n<td>平均段落句数</td>\n<td>总句数 / 总段落数</td>\n<td>≤3</td>\n<td>3-5</td>\n<td>&gt;5</td>\n</tr>\n<tr>\n<td>重复描写密度</td>\n<td>同一信息/动作/情绪连续多段拆写的处数 / 千字</td>\n<td>≤1处/千字</td>\n<td>2-3处/千字</td>\n<td>≥4处/千字</td>\n</tr>\n</tbody>\n</table>\n<blockquote>\n<p>备注：核心场景（开篇、高潮、收束）出现 1 次重复描写即按 ≥1 档加权（轻→中，中→重）。</p>\n<p>以上阈值为参考值，需结合题材特点调整。例如古风题材的对话标签密度天然偏高，应适当放宽。</p>\n<p><strong>综合判定规则</strong>：取六项指标中的最高档位。任一指标达重度即按重度处理；无重度时，中度指标 ≥3 项按中度处理，否则按轻度处理。</p>\n</blockquote>\n<p>加载 <a href=\"references/anti-ai-writing.md\">references/anti-ai-writing.md</a> 的「系统性去AI三遍法」获取完整流程。三遍法与本 skill 的关系（覆盖关系，不是 1:1 映射）：</p>\n<ul>\n<li><strong>Pass 1（去泛化）</strong> 覆盖 Gate A 的禁用词、Gate C 的抽象情绪、Gate D 的工整对仗、Gate E 的同语气对话粗扫、Gate G 的解释腔/上帝视角剧透/软评判</li>\n<li><strong>Pass 2（去书面化）</strong> 覆盖 Gate A 中的书面腔词、Gate B 的句式套路深化</li>\n<li><strong>Pass 3（回自然感）</strong> 覆盖 Gate D 的长短节奏、Gate E 的对话差异化、Gate F 的结尾去升华、补具体感官细节</li>\n<li>轻度：只过 Pass 1；中度：Pass 1 + Pass 2；重度：完整三遍 + 重点段落重写</li>\n</ul>\n<hr>\n<h3>Phase 3：逐项清除</h3>\n<h4>Agent 调用：narrative-writer（去AI味执行）</h4>\n<p>「诊断与分级」完成后，按以下顺序选择执行路径：</p>\n<ol>\n<li><strong>已在 narrative-writer 子代理内</strong>：直接 inline 执行 Gate A-G，不再 spawn（嵌套 spawn 会被静默降级）。</li>\n<li><strong>未在子代理内且 agent 目录（优先 <code>.claude/agents/</code>，其次 <code>.opencode/agents/</code>，再检查 <code>.codex/agents/</code>）下的 <code>narrative-writer.md</code> 或 <code>.codex/agents/narrative-writer.toml</code> 存在</strong>：spawn <code>Agent(subagent_type: \"narrative-writer\", prompt: \"项目目录：{dir}\\n任务描述：去AI味\\n检查范围：{待处理的正文文件}\\n作者偏好：{query 命中的 prose_style 项}\\nAI味等级：{诊断与分级结果}\\n处理策略：{轻度/中度/重度对应的 Gate 范围}\\n删除优先：每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删，会丢才进 Gate 润色；看似解释/评价但承担小连贯的句子，压成白话承接、动作或物件锚点，不机械删除；已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点，但不新增原文没有的事件链；删除服从比例上限与字数下限，跌破下限改降AI重写。\\n模式处理：按 references/anti-ai-writing.md 的问题模式目录执行；模式 8（解释腔/上帝视角/安排感）归入 Gate G，其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时，按 Gate C/D 合并去重；\")</code>。</li>\n<li><strong>agent 不存在或 spawn 失败</strong>：主线程 inline 执行。</li>\n</ol>\n<h4>删除优先判断（先于各 Gate）</h4>\n<p>每条被标记项先判能否删除，再考虑润色——很多 AI 味句是废话（解释、注水、凑数），润色后照样冗余。</p>\n<ol>\n<li>删掉后是否丢失伏笔、钩子、角色特征、情节推进、必要信息或必要转折？都不丢则直接删，不进 Gate。</li>\n<li>丢任意一项 → 保留信息进对应 Gate 改写（只删\"怎么说\"的 AI 味，不删\"说什么\"）。</li>\n<li>删除服从既有\"过度去AI味保护\"与「诊断与分级」比例上限：不整段删、不删剧情功能；若删后跌破字数下限，改为降AI重写，不删完再用新废话凑字。</li>\n<li>删完通读：若整段只剩最短句、结构虚词被扫光、每个动作都带「了一下」式尾巴，就是删过头的电报体（见 anti-ai-writing.md 模式 9）——把非峰值叙述句恢复成自然白话，不是接着删。删的是废话，不是中文的自然冗余；这条只调删减的度，禁用词与套路句式的清理力度不因此降低。</li>\n</ol>\n<p>以下为各 Gate 的详细规则（删不掉的标记项按此润色；无论 agent 还是主线程执行，均须遵循）：</p>\n<h4>门禁 A：禁用词替换</h4>\n<p>加载 <a href=\"references/banned-words.md\">references/banned-words.md</a>，对照禁用词表逐项检查。</p>\n<p><strong>白名单机制</strong>：</p>\n<p>项目根目录下的 <code>.deslop-whitelist</code> 文件定义本项目的豁免词汇。</p>\n<p>文件 schema：</p>\n<ul>\n<li>UTF-8 编码，一行一个词</li>\n<li><code>#</code> 开头的行为注释；空行忽略；首尾空白 trim</li>\n<li>大小写敏感（中文不区分）</li>\n</ul>\n<p>匹配规则：扫描时若禁用词命中段对应的子串在 <code>.deslop-whitelist</code> 中存在同样的子串，跳过该次告警。匹配方式与 banned-words.md 一致，使用子串扫描。</p>\n<p>示例 <code>.deslop-whitelist</code>：</p>\n<pre><code># 项目自定义豁免词（一行一个，# 开头为注释）\n缓缓                # 主角\"缓缓\"是绰号，不算禁用词\n仿佛山海             # 章名\n深邃的山谷           # 设定地名\n</code></pre>\n<p>白名单适用场景：</p>\n<ul>\n<li>命中术语（如玄幻小说中的特定术语恰好匹配禁用词）</li>\n<li>角色口头禅 / 绰号 / 设定专有名词</li>\n<li>世界观专有名词</li>\n<li>原文刻意使用的修辞手法</li>\n</ul>\n<p>如果 <code>.deslop-whitelist</code> 不存在，不强制创建；在报告中说明可创建该文件。空白名单文件等同于无白名单。</p>\n<p><strong>保护规则优先级</strong>：保留创作意图与剧情功能 &gt; 去AI Gate。Gate A-F 只能改变表达方式；Gate G 删的是非故事性的作者解释/旁白（不是情节）。任何 Gate 都不能删除伏笔、钩子、角色特征、人物记忆、情绪承接、因果锚点、关键信息或必要转折；遇到冲突时改为降AI重写或标注 <code>[需复核]</code>。</p>\n<p>替换规则：</p>\n<ul>\n<li>禁用词 → 具体动作/细节描写</li>\n<li>不能简单换成另一个形容词</li>\n<li>要用\"展示\"替代\"告诉\"</li>\n</ul>\n<p>示例：</p>\n<ul>\n<li>❌ \"眼中闪过一丝不易察觉的悲伤\" → ✅ \"他垂下眼\"</li>\n<li>❌ \"深吸一口气\" → ✅ 直接删；若确有功能，改成角色当下动作（如把话咽回去）</li>\n<li>❌ \"嘴角勾起一抹冷笑\" → ✅ \"他冷笑了一声\"</li>\n</ul>\n<h4>门禁 B：句式去套路</h4>\n<p>检测并替换以下AI高频句式：</p>\n<table>\n<thead>\n<tr>\n<th>句式</th>\n<th>问题</th>\n<th>替代方案</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>否定铺垫后接肯定翻转</td>\n<td><strong>最毒</strong> 中文 AI 句式之一</td>\n<td>直接写后项，或改成动作/细节呈现</td>\n</tr>\n<tr>\n<td>跨段「不是A / 也不是B / 只是C」</td>\n<td>可能是工整铺排，也可能是辩解、悬念排除或情绪递进</td>\n<td><code>formulaic-parallelism</code> advisory；通读语境，仅在重复提纲或拖慢画面时压缩</td>\n</tr>\n<tr>\n<td>「至于X不X，怎么X」/同动词「不V A，不V B」</td>\n<td>工整决策栏、否定清单；正常台词也可能出现</td>\n<td>结合语境复核；若只是复述前文或细纲，压成一次判断或只留一项</td>\n</tr>\n<tr>\n<td>\"...，带着...\"</td>\n<td>万能状语，AI最爱</td>\n<td>用独立短句或动作描写</td>\n</tr>\n<tr>\n<td>\"声音不大，却带着……\"</td>\n<td>AI 最爱声音描写</td>\n<td>直接写声音特征或动作</td>\n</tr>\n<tr>\n<td>陈词滥调/万能比喻</td>\n<td>公式化比喻会显 AI 腔</td>\n<td>优先直接白描；确需比喻时只留少数生活化、角色化比喻</td>\n</tr>\n<tr>\n<td>\"他/她知道...\"</td>\n<td>直接告诉读者</td>\n<td>用行为展示认知</td>\n</tr>\n<tr>\n<td>对话标签密度过高/公式化标签</td>\n<td>每句都标注会机械</td>\n<td>普通\"说\"可保留；高频或公式化时用动作/上下文替代</td>\n</tr>\n<tr>\n<td>\"仿佛/犹如/宛若/如同\"</td>\n<td>文言腔过重</td>\n<td>口语化表达或白描</td>\n</tr>\n<tr>\n<td>\"不容置疑/显而易见\"</td>\n<td>书面化判断词</td>\n<td>用具体事实说话</td>\n</tr>\n</tbody>\n</table>\n<p><strong>修饰词清扫</strong>：检查物品/人物前面的形容词、定语、副词、指示代词、量词，多余即删。删除后阅读不影响才删；含义流失则改成简洁名词。</p>\n<p>示例：</p>\n<ul>\n<li>\"白色的药片\" → \"药片\"</li>\n<li>\"飞驰的汽车\" → \"汽车\"</li>\n<li>\"手里那截链子\" → \"链子\"</li>\n<li>\"多年的衣服\" → \"旧衣服\"（保留含义）</li>\n</ul>\n<p>形容词原则：一次只用一个形容词修饰或不修饰，不连用、不堆砌。</p>\n<h4>门禁 C：心理描写外化</h4>\n<p>AI写的心理描写特征：直接陈述情绪。</p>\n<p>替换策略：</p>\n<ul>\n<li>\"他很紧张\" → \"他的手在抖\"</li>\n<li>\"她很愤怒\" → \"她一把掀翻了桌子\"</li>\n<li>\"他很害怕\" → \"他扶住门框，半天没迈进去\"</li>\n<li>\"她很伤心\" → \"她背过身，把袖口攥皱了\"</li>\n<li>\"他感到一丝失落\" → \"他愣了一下，把手机放回口袋\"</li>\n</ul>\n<p><strong>重复描写去重</strong>：当相邻段反复表达同一信息、同一动作或同一情绪时，按 Gate C/D 处理，不另开专项流程。</p>\n<p>处理方法：</p>\n<ul>\n<li>合并同一瞬间的重复描写，保留最能推动情绪或剧情的细节</li>\n<li>如果原文把一个动作拆成\"动作概述 → 感知细节 → 身体反应\"，改成同一段连续画面</li>\n<li>若合并后节奏过快，恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不在原动作后追加描写层，也不新增原文没有的情节</li>\n</ul>\n<p>示例：</p>\n<ul>\n<li>❌ \"他拿起笔。手在抖。笔尖又停住。\"</li>\n<li>✅ \"他拿起笔，笔尖刚碰到纸就偏了，手腕压了两次都没压稳。\"</li>\n</ul>\n<p><strong>重复语义四类</strong>（同一意思不重复表达，只留一个最合适且简洁的）：</p>\n<table>\n<thead>\n<tr>\n<th>类别</th>\n<th>错误例</th>\n<th>修法</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>形容词重复</td>\n<td>\"兴高采烈地笑着跑过来\"</td>\n<td>\"笑着跑过来\"</td>\n</tr>\n<tr>\n<td>近义词重复</td>\n<td>\"非常重要的关键问题\"</td>\n<td>\"关键问题\"</td>\n</tr>\n<tr>\n<td>含义重复</td>\n<td>\"我好饿，肚子咕咕叫\"</td>\n<td>\"我好饿\"</td>\n</tr>\n<tr>\n<td>上下文主语/物品重复</td>\n<td>上文说\"把抗抑郁药扔了一地\"，下文不必再写\"地上的抗抑郁药\"，只写\"药片\"</td>\n<td>模糊简洁口语化即可</td>\n</tr>\n</tbody>\n</table>\n<p><strong>多余场景/人物/物品描写</strong>：服务情节人物之外的修饰描写直接删。</p>\n<p>示例：</p>\n<ul>\n<li>\"游惑手里握着一把短刀，刀锋冷冽\" → \"游惑手里握着一把短刀\"</li>\n<li>\"手铐紧紧扣住两人的手腕，中间连着一截不算长的链条\" → \"手铐扣住两人的手腕，中间连着链条\"</li>\n<li>\"暴雪极地的考场里，风雪没有停下的意思\" → \"暴雪极地的考场里\"</li>\n</ul>\n<h4>门禁 D：节奏调整</h4>\n<p>AI写作的节奏问题：句式过于整齐、段落过于匀称。</p>\n<p>处理方法：</p>\n<ul>\n<li>打断连续排比句（保留1-2个，删掉其余）</li>\n<li>只拆臃肿修饰、堆叠比喻、抽象总结的长句；改写后叙述仍以逗号长句为主（见 anti-ai-writing.md 规则 3），不要把正常的逗号长句拆成短句串</li>\n<li>偶尔用不完整句（口语感）</li>\n<li>段落长短交错（不要每段都3-5行）</li>\n<li>不按硬指标排版：番茄高分样本不是 50-60 字一行，也不是逢句号必换行；按动作/信息变化自然断段，读起来不卡即可</li>\n<li>标点节奏跟语气走：避免通篇句号化；保留有功能的 <code>？</code> / 少量 <code>！</code>，把 <code>……</code> / <code>——</code> 改成动作、短句、换行、逗号或句号，删除随机堆砌或刷屏符号</li>\n</ul>\n<h4>门禁 E：对话去腔调</h4>\n<p>AI写的对话特征：每句话都信息完整、逻辑清晰、表达精准。</p>\n<p>处理方法：</p>\n<ul>\n<li>加入口语化表达（\"嗯\"\"哦\"\"行吧\"）</li>\n<li>适当打断对话（角色可以答非所问）；对话被打断或拖长时用动作、换行或短句处理，不用 <code>——</code></li>\n<li>用动作穿插对话（\"她喝了口水。'然后呢？'\"）</li>\n<li>删掉解释性对话（角色不会把自己的动机说清楚）</li>\n<li>Gate B 同样检查台词：连续工整否定、<code>至于X不X，怎么X</code>、同动词 <code>不V A，不V B</code> 不能因脚本的台词豁免而漏审；有明确人物/任务功能才保留</li>\n<li>不为凑比例硬扩台词；番茄对话占比随题材波动，台词只在角色此刻真会说、必须说时增加</li>\n<li>口误、停顿、粗话和重复要服务人物身份与情绪，不作为“真人感”装饰批量添加</li>\n<li>不把所有对话末尾改成句号：质问保留问号，爆发峰值保留少量感叹；吞回去/没说完用动作停顿、短句或换行，不用 <code>……</code></li>\n</ul>\n<h4>门禁 F：结尾去升华</h4>\n<p>AI写作的结尾特征：总想总结、升华、点题。</p>\n<p>处理方法：</p>\n<ul>\n<li>删掉总结性语句</li>\n<li>用动作/场景收尾，不要用感慨收尾</li>\n<li>如果结尾有\"他知道...\"\"这一刻...\"→ 基本可以删</li>\n</ul>\n<h4>门禁 G：去解释腔/上帝感/安排感</h4>\n<p>最难察觉、最\"像 AI\"的一类（对应 anti-ai-writing.md 模式 8）。叙述者跳出角色当下去解释、剧透、总结、定性、升华，读者闻到\"作者在场/剧情被安排\"。</p>\n<p>处理方法：</p>\n<ul>\n<li>删解释因果：「之所以…是因为」「原来…」「这意味着」→ 删，因果让读者从动作对话里自己拼。</li>\n<li>删上帝视角剧透：「她不知道的是」「殊不知」「多年以后」「仿佛预示着」→ 删。</li>\n<li>删替读者定性：「演得真好」「这出戏她看过一遍」「他就是这样薄情」→ 删，证据留给读者判断。</li>\n<li>删隐蔽的软评判：评判性副词（「关切得恰到好处」）、剧透点破（「那点笑她看得分明」）、定性比喻（「像在宣判一件早已定好的事」）→ 删，或改成角色此刻带偏见的瞬间感觉。</li>\n<li>注意：Gate G 删的是\"非故事性的作者旁白\"，不是删情节。删完若变薄，靠角色动作/对话补，不补叙述者解说。</li>\n</ul>\n<p><strong>任务卡点修法边界</strong>：任务卡点不是固定公式，也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时，可以把解释总结压成角色当下要处理的具体卡点；原文没有缺口时，只删解释或改动作/对话，不新造剧情。所有卡点都先做“删掉试试”：删掉后不丢伏笔、钩子、信息、关系变化或必要转折，就压缩或删除。</p>\n<hr>\n<h3>Phase 4：确定性收尾（文件模式）</h3>\n<p>当输入是正文文件路径，且「逐项清除」已落盘修改后，<strong>先</strong>做句式/段落复扫，<strong>再</strong>做机械标点兜底（破折号要按功能改写，故先于机械替换报出）：</p>\n<pre><code>node scripts/check-ai-patterns.js --check --fail-on=blocking &lt;正文文件...&gt;\nnode scripts/check-degeneration.js --check &lt;正文文件...&gt;\nnode scripts/normalize-punctuation.js &lt;正文文件...&gt;\n</code></pre>\n<p>作用边界：</p>\n<ul>\n<li><code>check-ai-patterns.js</code> 只报告不改写：severity=blocking 的类别优先改正文并复扫；advisory 先通读判断，确属提纲感、解释腔或模板腔再改，功能性写法标 <code>[需复核]</code>。</li>\n<li>它只是读感提示；完整类别、例外和修法见 <code>references/anti-ai-writing.md</code>。</li>\n<li><code>check-degeneration.js</code> 报告模型退化（逐字复读/打转、末尾截断、占位符、工程词泄漏 <code>细纲</code>/<code>情节点</code> 等），每条带 <code>severity: blocking|advisory</code>。blocking 是退化信号，去AI味改不掉，应回去重新生成那一段再 deslop；advisory（tier2 章节/歧义词）只提示。</li>\n<li><code>normalize-punctuation.js</code> 机械兜底：清除残留的 <code>……</code>、漏网破折号 <code>——</code>/<code>—</code>、双连字符 <code>--</code> 和独立行 <code>---</code>；默认不改变引号风格，也不把有功能的 <code>？</code> / 少量 <code>！</code> 改成句号。</li>\n<li>知乎盐言短篇可保留 <code>「」</code>；只有用户或项目明确要求时，才给标点脚本加 <code>--quote-mode ascii</code> 或 <code>--quote-mode yan</code>。</li>\n</ul>\n<hr>\n<h3>Phase 5：输出润色结果</h3>\n<pre><code>## 去AI味润色报告\n\n### 字数协议\n- 原文字符数：{N0}\n- 修订后字符数：{N1}\n- 净变化：{N1 - N0}（{百分比}）\n- 是否在 tier 上限内：{是 / 否（超限 X%，已分段并标注 [需复核]）}\n\n### 修改统计\n- 总修改数：{N} 处\n- 禁用词替换：{N} 处\n- 句式调整：{N} 处（含否定翻转句式 {N}、\"，带着...\" {N}、声音描写 {N}）\n- 修饰词清扫：{N} 处\n- 心理外化：{N} 处\n- 重复描写合并：{N} 处\n- 监控动作清单合并：{N} 处\n- 重复语义去重：{N} 处（形容词重复 {N}、近义词重复 {N}、含义重复 {N}、主语重复 {N}）\n- 比喻处理：{N} 处（删除/保留/改回具体画面）\n- 节奏调整：{N} 处\n- 对话优化：{N} 处\n- 标点节奏调整：{N} 处（保留有功能 `？`/少量 `！`，将 `……`/`——` 改为动作、短句、逗号或句号，并清理无功能堆砌）\n- 结尾修正：{N} 处\n\n### 修改前后对比\n{逐段展示修改，标注改动类型；超过 30 处时仅展示前 10 处 + 末 5 处 + 其余按 Gate 分桶计数}\n\n### 润色后全文\n{**文件模式（默认；章节/正文文件、批量与长篇去AI）**：通过 Edit/Write 直接改写落盘，本节只回 ≤200 字代表性片段，不向父会话返回全文。**文本模式（仅限交互式贴入、无文件路径的零散片段）**：完整输出润色后的文本。}\n</code></pre>\n<p><strong>字数硬约束</strong>：删除比例不得超过「诊断与分级」对应上限（轻度 ≤15%、中度 ≤25%、重度 ≤35%）。超限时分段输出并在报告里标记，不得整段删除正文。</p>\n<p><strong>收敛终止</strong>：</p>\n<ol>\n<li>同一段连续两轮去 AI 后没有新改动 → 停止该段处理</li>\n<li>全文上限 3 轮重扫；第 3 轮仍有 ≥10 处改动 → 在报告里标 <code>[需复核]</code>，移交人工</li>\n<li>每轮结束前都要做一遍\"再检一次\"：是否有不符合的地方，有则继续；没有则停</li>\n</ol>\n<hr>\n<h2>使用场景</h2>\n<table>\n<thead>\n<tr>\n<th>场景</th>\n<th>操作</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>用户贴一段文字说\"太AI了\"</td>\n<td>执行完整检测 + 润色流程</td>\n</tr>\n<tr>\n<td>用户说\"帮我润色\"</td>\n<td>先检测AI味，再润色</td>\n</tr>\n<tr>\n<td>用户说\"检查下有没有AI味\"</td>\n<td>只做检测，不做修改</td>\n</tr>\n<tr>\n<td>用户写作中要求 <code>仅标注 / 只检测 / 不要改</code></td>\n<td>嵌入式提醒模式：执行「AI味扫描」和「诊断与分级」，跳过「逐项清除」「确定性收尾」「输出润色结果」；输出问题标记表（含 Gate 列），不修改原文，不写文件</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>参考资料</h2>\n<p>按需加载以下文件：</p>\n<table>\n<thead>\n<tr>\n<th>文件</th>\n<th>何时加载</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"references/banned-words.md\">references/banned-words.md</a></td>\n<td>检测和替换禁用词时</td>\n</tr>\n<tr>\n<td><a href=\"references/anti-ai-writing.md\">references/anti-ai-writing.md</a></td>\n<td><strong>去AI味完整指南</strong>：预防+三遍法+范例</td>\n</tr>\n<tr>\n<td><a href=\"scripts/normalize-punctuation.js\">scripts/normalize-punctuation.js</a></td>\n<td>文件模式落盘后做确定性标点收尾；默认保留引号风格</td>\n</tr>\n<tr>\n<td><a href=\"scripts/check-ai-patterns.js\">scripts/check-ai-patterns.js</a></td>\n<td>文件模式「AI味扫描」预检与「确定性收尾」复扫（只看引号外叙述），只报告不改写</td>\n</tr>\n<tr>\n<td><a href=\"scripts/check-degeneration.js\">scripts/check-degeneration.js</a></td>\n<td>文件模式「确定性收尾」复扫，只报告不改写</td>\n</tr>\n<tr>\n<td><a href=\"references/author-memory.md\">references/author-memory.md</a> + <a href=\"scripts/author_memory_commit.py\">scripts/author_memory_commit.py</a></td>\n<td>读取或更新跨会话作者文风习惯时</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>流程衔接</h2>\n<p><strong>流水线：</strong> 通用\n<strong>位置：</strong> 润色（共享收尾）</p>\n<table>\n<thead>\n<tr>\n<th>时机</th>\n<th>跳转到</th>\n<th>命令</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>继续写作</td>\n<td>story-long-write / story-short-write</td>\n<td><code>/story-long-write</code> 或 <code>/story-short-write</code></td>\n</tr>\n<tr>\n<td>发现结构问题</td>\n<td>story-long-analyze / story-short-analyze</td>\n<td><code>/story-long-analyze</code> 或 <code>/story-short-analyze</code></td>\n</tr>\n<tr>\n<td>准备做封面</td>\n<td>story-cover</td>\n<td><code>/story-cover</code></td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>语言</h2>\n<ul>\n<li>跟随用户的语言回复，用户用什么语言就用什么语言回复</li>\n<li>中文回复遵循《中文文案排版指北》</li>\n</ul>\n","files":[{"path":"references/anti-ai-writing.md","sizeBytes":37154,"isText":true},{"path":"references/author-memory.md","sizeBytes":17470,"isText":true},{"path":"references/banned-words.md","sizeBytes":10447,"isText":true},{"path":"references/deslop-gates.md","sizeBytes":12105,"isText":true},{"path":"references/style-resolution.md","sizeBytes":4017,"isText":true},{"path":"scripts/author_memory_commit.py","sizeBytes":72407,"isText":true},{"path":"scripts/check-ai-patterns.js","sizeBytes":67463,"isText":true},{"path":"scripts/check-degeneration.js","sizeBytes":15104,"isText":true},{"path":"scripts/normalize-punctuation.js","sizeBytes":13480,"isText":true},{"path":"scripts/style-whitelist.js","sizeBytes":1168,"isText":true},{"path":"SKILL.md","sizeBytes":21845,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-22T13:52:46.709618Z","sha256":"36AC2B6CB568AC54D982D1DA263051DCF0C75EB089CF0DC05A8F160AFC0E4BF2","sizeBytes":107301},"review":null,"source":{"repositoryUrl":"https://github.com/zenstory-ai/oh-story-claudecode","path":"skills/story-deslop","license":"MIT","commit":"0ffe7db4fa02489f5d1989e58a22ce62d040a850","subtreeSha":"D705D70A7D8599ACA389DE4EF83906C9CBA3823977603FF3FDC6F5AAE576BC67","lastSyncedAt":"2026-09-22T13:51:16.523923Z"},"reviewedAt":"2026-09-22T13:52:50.257263Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/zenstory-ai/oh-story-claudecode/tree/main/skills/story-deslop"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install zenstory-ai-oh-story-claudecode@llmmart"},{"target":"git","command":"git clone https://github.com/zenstory-ai/oh-story-claudecode.git"}]}