创新方案
网文正文AI味过重、模板化书面腔时…
当网文文本出现禁用词、句式套路、情绪空转、节奏均匀、解释腔等AI写作痕迹,需要检测并自然化改写时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
网文正文AI味过重、模板化书面腔时,用分通用
解决思路
- 正文写作、改写或审稿前先读 references/style-resolution.md,加载本书文风并形成 style_resolution;无作者记忆也执行;当前请求、本书文风和 active 偏好按维度覆盖通用 references;同一裁决交给后续执行者。
- 只检查当前运行时的 canonical agent 目录:Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`;不得因其他端文件存在而误判。
- Codex 使用同名 `agent_type`;Antigravity 使用 `invoke_subagent` + `TypeName`;对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时,降级 solo/direct。
- 检测到 `.zcode/` 时直接 solo/direct,因为 ZCode 3.3.4 不执行项目 custom agents;报告 `Fallback: project custom agents unavailable -> solo`。Claude/OpenCode 兼容面保留 `subagent_type`。
- Spawn 前读取项目根 `.story-deployed` 的 `agents_version`;与本版 `agents_version: 30` 不一致时(标记缺失、字段缺失/非整数、小于或大于 30)照常按文件存在性检查并 spawn,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 30)` 并提示重新运行 `/story-setup` 后新开会话;大于 30 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖;只有 agent 文件缺失或运行时不暴露 custom agent 时才降级 solo/direct,报告 `Fallback: ... -> solo`。
- 把 AI 味当风格问题而非语法错误处理:目标是改味,把过于书面化、过于对仗工整、面面俱到的文字拉回具体、自然、可读。
- 改最少、效果最大:能改一个词就不改一句,能删一句就不重写一段;没有问题的句子尽量保留原句;人名、地名、数字、章节名、专有名词优先保留。
- 不得整段删除正文内容;一段有多处 AI 味时逐句修改而非删除整段。
- 删除前确认被删内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息;若删除会破坏情节连贯性,改为“降 AI 重写”而非删除。
- 按 AI 味等级控制删除比例:轻度 ≤15%,中度 ≤25%,重度 ≤35%;重度可通过合并重复描写+重写降 AI 产生更大字符差,但仍不得整段删除或删掉剧情功能;超过对应比例应在报告中标记超限风险,并输出分段处理方案。
- 逐句修改后仍不满意的段落,在去 AI 味报告中标注 `[需复核]` 而非删除,不计入当前等级删除比例上限;对“疑似 AI 味但不确定”的内容也标注 `[需复核]`,而非插入正文。
- 只改“怎么说”,不改“说什么”:剧情、人设、情节走向一概不动;不新增原文没有的情节、设定、关系或时间线;原文逻辑问题不属于去 AI 味。
- 按文风保留有功能的语气与停顿:质问里的 `?`、爆发峰值的少量 `!` 可保留;犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排;默认不保留 `……` / `——`,本书明确选择并登记的功能性停顿保留,同时清理无功能的 `!!!` 和随机标点堆砌。
- 去 AI 味只处理读感与叙事功能,不承诺分数结果;用户贴出工具报告时,只把能对应到正文的问题转成具体修改点;不写“0% AI / 100% 真人”,不注水、故意错字或打乱标点;仍以原文剧情边界为准,不把表达修复变成新增情节或新增事件链。
- 若作者记忆 state 已存在,改写前运行 `scripts/author_memory_commit.py query --kind prose_style --book-root {书目录}` 获取匹配的 active 文风条目(总输出 ≤2KB),交给 inline/spawn 执行者作为自然倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数;当前请求、原文剧情功能和本 skill 保护规则优先。
- 用户明确声明长期文风习惯时,改写后按 references/author-memory.md 用 `record` 写入并回传回执;只记作者明确说的,一次性要求、反复修改、检测器 findings 和助手自己的结果不记录。
- 以自然文本基准对比 AI 味:段落长度随 beat 长短不一,爽点/转折压短,推理/氛围/情绪链放长;避免通篇同一长度。
- 句内节奏:叙述以逗号长句为主(逗号之间 8-12 字、整句 20-30 字);避免长句臃肿或通篇碎句像提纲。
- 对话标签:低频且不公式化,多用动作/上下文引出;普通“说”可保留;避免几乎每句都有“说道/问道/笑道”。
- 情绪表达:直写有上下文支撑,反应带后果;避免空转的情绪总结句或给每个情绪词配微动作。
- 比喻生活化,避免文学化;语气词可自然出现(如“嘤”“嘶”“靠”“行吧”);大量省略让读者脑补,避免面面俱到;排比偶尔 1-2 个,从不连续 3+;结尾用动作/对话收尾,避免总结/升华/感慨收尾。
- 按自然表达替换参考操作:替代“深吸一口气”→直接删;若确有功能,改成角色当下动作;替代“眼中闪过一丝...”→“他垂下眼”/“眯起眼”;替代“嘴角勾起一抹...”→“他嘴角一扯”/“乐了”;替代“仿佛...”→优先直接白描,确需比喻时只留少数生活化、角色化比喻;替代“不禁...”→直接写动作;替代“缓缓开口”→“说”/用动作引出对话。
- Phase 1 对用户提交文本做快速扫描,标记 AI 味浓重位置,输出 AI 味检测报告:整体评估含 AI 味等级(轻度/中度/重度)、主要问题(1-3 个关键词);问题标记表列含位置、类型、Gate、原文、问题。
- 使用类型→Gate 速查:禁用词=A,句式套路=B,情绪空转=C,节奏均匀=D,对话腔调=E,结尾升华=F,解释腔/上帝感/安排感=G,重复描写=C/D;评价只输出 AI 味等级与问题标记,不做横向市场判断(如上乘/新人投稿属上乘/性价比高)。
- 文件模式下,AI 味扫描先运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>`,只报告不修改。
- 将 severity=blocking 的类别(`not-is-comparison` / `em-dash` / `voice-contrast` / `negation-parade` / `reverse-not-is` / `trailer-ending` / `trailer-summary`)并入 Gate B 优先处理;其他 findings 只作读感提示,完整类别和修法见 references/anti-ai-writing.md;工整并列会扫描台词,必须读语境判断,不能因 hook 对台词低误报豁免就跳过。
- 对 blocking 类问题的处理方式:删掉否定铺垫,直接写后项;或改成角色动作、物件细节、身体反应来呈现。
- 若用户只要检测,保留报告不改文;若执行去 AI 味,只改确实损害读感且无叙事功能的问题;功能性写法标 `[需复核]` 并保留。
- Phase 2 诊断与分级:用户明确指定 Gate 时直接使用该范围;未指定时根据扫描结果判断程度决定策略:轻度只过 Gate A+B;中度过 Gate A+B+C+D+G;重度完整 7 Gate+重点段落重写。
- 按量化标准参考值判断:轻度禁用词命中 ≤5 处/千字,无连续 3+ 句式套路;中度 6-15 处/千字,或有连续 3+ 句式套路;重度 >15 处/千字,或 7 Gate 中 4+ 个有问题。命中 = banned-words.md 中条目作为连续字符串在文本中出现一次;`.deslop-whitelist` 中的词如果是命中片段的真子串,跳过该次计数;同一词在一处出现计 1 次。
- 判定优先级:先按 AI 味打分客观指标量化定档;允许根据题材/语境做 ≤1 档主观下调(必须在报告中给出书面理由),不允许上调;量化与主观冲突时以量化结果为准。
- 使用 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三遍法”获取完整流程:Pass 1(去泛化)覆盖 Gate A 的禁用词、Gate C 的抽象情绪、Gate D 的工整对仗、Gate E 的同语气对话粗扫、Gate G 的解释腔/上帝视角剧透/软评判;Pass 2(去书面化)覆盖 Gate A 中的书面腔词、Gate B 的句式套路深化;Pass 3(回自然感)覆盖 Gate D 的长短节奏、Gate E 的对话差异化、Gate F 的结尾去升华、补具体感官细节。Gate 范围以用户指定为先,未指定时按处理策略表;三遍法仅安排所选 Gate 的执行顺序,不扩大改写范围。
- Phase 3 按顺序选择执行路径:已在 narrative-writer 子代理内时,按选定 Gate 范围 inline 执行,不再 spawn(嵌套 spawn 会被静默降级)。
- 未在子代理内且按顶部顺序找到 `narrative-writer` agent 时,按当前运行时调用;Antigravity 用 `invoke_subagent(TypeName: \"narrative-writer\")`,Claude/OpenCode/Codex 用各自字段;prompt 保持:项目目录:{dir}、任务描述:去AI味、Gate 细则:执行前按参考表读取 deslop-gates.md 的删除保护与所选 Gate、检查分工:负责本次语义去味、父流程负责 Phase 4 最终文件扫描、检查范围:{待处理的正文文件}、文风路径:{本书文风全文路径,无则写无}、style_resolution:{本次生效要求及来源、被覆盖的默认条款、事实边界}、作者偏好:{query 命中的 prose_style 项}、AI味等级:{诊断与分级结果}、处理策略:{实际选定的 Gate 范围;优先使用用户指定范围}、删除优先:每条 AI 味项先判能否删除,删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删,会丢才进 Gate 润色;看似解释/评价但承担小连贯的句子,压成白话承接、动作或物件锚点,不机械删除;已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点,但不新增原文没有的事件链;删除服从比例上限与字数下限,跌破下限改降AI重写;模式处理:按 references/anti-ai-writing.md 的问题模式目录执行;模式 8(解释腔/上帝视角/安排感)归入 Gate G,其余新增模式归入 Gate A-F 的对应处理;相邻段重复表达同一信息/动作/情绪时,按 Gate C/D 合并去重。
- agent 不存在或 spawn 失败时,主线程 inline 执行。
- 实际执行者在逐项清除前读取 references/deslop-gates.md 的删除保护与所选 Gate 细则;inline 与 agent 使用同源规则;三遍法仍按前文安排所选 Gate 的执行顺序,不另起一次全篇去味。
- Phase 4 文件模式下,逐项清除已落盘修改后,先做句式/段落复扫,再做机械标点兜底(破折号要按功能改写,故先于机械替换报出),依次运行:`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 的类别优先改正文并复扫;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`。
- 仅本次要求切换视角时,交付前回读原文,逐项核对新增的感知/认知句:原文只说明事件发生,不等于人物已经看见或知道;不得自行补观察时点;没有原文依据的“进门时发现”“后来看到”等句子删去,或只呈现原有、当前场景可见的物件状态;不可得的信息暂不叙述;这个检查先于交付,不能用句式脚本通过代替。
- Phase 5 输出去 AI 味润色报告,包含字数协议:原文字符数 N0、修订后字符数 N1、净变化(百分比)、是否在 tier 上限内(是/否,超限 X%,已分段并标注 [需复核])。
- 修改统计包含:总修改数、禁用词替换、句式调整(含否定翻转句式、`,带着...`、声音描写)、修饰词清扫、情绪落地与重复说明清理、重复描写合并、监控动作清单合并、重复语义去重(形容词重复、近义词重复、含义重复、主语重复)、比喻处理(删除/保留/改回具体画面)、节奏调整、对话优化、标点节奏调整(保留有功能 `?`/少量 `!`,将 `……`/`——` 改为动作、短句、逗号或句号,并清理无功能堆砌)、结尾修正。
- 修改前后对比逐段展示修改,标注改动类型;超过 30 处时仅展示前 10 处+末 5 处+其余按 Gate 分桶计数。
- 润色后全文:文件模式(默认;章节/正文文件、批量与长篇去 AI)通过 Edit/Write 直接改写落盘,本节只回 ≤200 字代表性片段,不向父会话返回全文;文本模式(仅限交互式贴入、无文件路径的零散片段)完整输出润色后的文本。
- 字数硬约束:删除比例不得超过诊断与分级对应上限(轻度 ≤15%、中度 ≤25%、重度 ≤35%);超限时分段输出并在报告里标记,不得整段删除正文。
- 收敛终止:同一段连续两轮去 AI 后没有新改动→停止该段处理;全文上限 3 轮重扫;第 3 轮仍有 ≥10 处改动→在报告里标 `[需复核]`,移交人工;每轮结束前做“再检一次”:是否有不符合的地方,有则继续;没有则停。
- 使用场景:用户贴一段文字说“太 AI 了”→执行完整检测+润色流程;用户说“帮我润色”→先检测 AI 味再润色;用户说“检查下有没有 AI 味”→只做检测不做修改;用户写作中要求 `仅标注 / 只检测 / 不要改`→嵌入式提醒模式:执行 AI 味扫描和诊断与分级,跳过逐项清除、确定性收尾、输出润色结果;输出问题标记表(含 Gate 列),不修改原文,不写文件。
- 按需加载参考资料:banned-words.md 用于检测和替换禁用词;deslop-gates.md 用于逐项清除前的删除保护与所选 Gate 细则、示例;anti-ai-writing.md 为去 AI 味完整指南(预防+三遍法+范例);normalize-punctuation.js 用于文件模式落盘后做确定性标点收尾,默认保留引号风格;check-ai-patterns.js 用于文件模式 AI 味扫描预检与确定性收尾复扫(只看引号外叙述),只报告不改写;check-degeneration.js 用于文件模式确定性收尾复扫,只报告不改写;author-memory.md + author_memory_commit.py 用于读取或更新跨会话作者文风习惯。
- 流程衔接:继续写作跳转 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`)。
- 语言:跟随用户的语言回复;中文回复遵循《中文文案排版指北》。
适用边界 · 注意事项
- 不适用于修复剧情逻辑、人设冲突、情节漏洞等原文内容问题;去 AI 味只改表达,不改“说什么”。
- 不适用于承诺或伪造 AI 检测分数(如“0% AI / 100% 真人”),也不应通过注水、故意错字或打乱标点来规避检测。
- 当用户明确要求“仅标注 / 只检测 / 不要改”时,不应修改原文或写文件。