面向中文网文的「去 AI 味」领域能力层:结构化规则库 + 确定性评分引擎 + 双形态润色管线。 后续小程序/Web 应用的引擎层;同时以 Agent Skill 形态发布(Claude Code / Cursor 可装)。
rules/ ← 唯一事实源(34 条三段式规则:识别条件/改写动作/保留边界)
├── patterns/*.yaml sweep-transition / quant-metaphor / hedge-modifier /
│ idiom-pileup / preach-ending / summary-tell / dialogue-stiff
├── models/*.yaml GPT说教 / Claude华丽 / DeepSeek量化 / Qwen成语(加权与策略)
├── genres/*.yaml 玄幻修仙 / 都市脑洞 / 言情日常
├── wordlists/modifiers.yaml 55 词修饰词表(评分 d2 指标源)
└── profiles/{basic,deep}.yaml 质量门档位(阈值/重写上限/提前停)
engine/ ← 确定性引擎(零 npm 依赖,Node ≥20,js-yaml 已 vendor 化)
├── cli.js 评分命令行:node engine/cli.js <file> [--model deepseek]
├── hard-filter.js 硬过滤(仅零歧义规则,只删不改)
└── src/
├── segment.js / dialogue.js 分句 / 对话区间(对话豁免与 dialogue-stiff 双轨)
├── rules.js 规则加载 + 匹配(模型加权、boundary_guard)
├── metrics.js / compose.js 三指标 + D1 扣分制合成 → 去味指数
├── score.js / polish.js 评分组装 / 润色管线(硬过滤→软改写→质量门→回滚)
├── diff.js 句子级 LCS,修改归因 rule_id
└── llm/ provider adapter / mock / prompt 组装 / judge / extract
prompts/ ├── rewrite/{gpt,claude,deepseek,qwen}.md(软改写策略)
skills/ ← 构建产物:novel-deai-score / novel-deai-polish(scripts/build-skills.js)
eval/ ← 回归门禁:run.js(score 级 33 用例)/ run-polish.js(真实 API)/
calibrate.js(embedding 校准)/ zhuque-protocol.md(人工基准)
一份规则的三个出口:正则被执行(硬过滤/评分,零 token)、改写指令注入 prompt(软改写,只注入命中规则)、
渲染成 SKILL.md(Agent 引流形态)。见 openspec/changes/add-novel-deai-skills/design.md(D6)。
npm install # 开发环境(测试用);运行时引擎已零依赖
npm test # 122 项测试
npm run validate # 规则库 schema 校验
node eval/run.js # score 级回归门禁(33 用例)
# 评分
node engine/cli.js 样本.txt --model deepseek
# 润色(需 DEAI_LLM_API_KEY,默认 DeepSeek 端点)
node -e "import('./engine/src/polish.js').then(async m => {
const r = await m.polishText({ text: '……', sourceModel: 'deepseek', genre: 'xuanhuan', qualityProfile: 'basic' });
console.log(JSON.stringify(r, null, 2));
})"
# 构建 Agent Skill 并安装
node scripts/build-skills.js
# 产物 skills/novel-deai-{score,polish} 拷入 ~/.claude/skills/ 即装即用- 加规则:
rules/patterns/新建P-XXX-NNN.yaml(id 格式P-<类>-三位数),必填三段式:pattern(识别正则)/boundary(保留边界:什么情况不许动)/rewrite(改写动作)+examples(网文语境前后例)。 - 校验:
npm run validate(id 唯一、枚举、正则可编译、hard_filter 准入、profile/weights 合法)。 - 回归:
node eval/run.js——每条新规则配一条「必须改」用例;边界行为配「必须不改」用例 (对话内、真实纠正、角色口吻都要有用例钉住)。两类用例任一失败即禁止发布。 - 改写纪律:rewrite 字段写方向不写答案;每条规则至少 2–3 个策略不同的示例更佳(design D9 反同质化)。
- 发布:规则变更后
node scripts/build-skills.js重新生成 skills(版本戳自动更新)。
- 单分数可对账:展示分 = 三项硬指标扣分制合成;LLM-judge 只做质量门内部判定
- 质量门:定点重写低分段落;提前停/上限停/实体校验失败回滚——宁出低分忠实版,不出高分失真版
- 对话双轨制:硬过滤与通用规则豁免对话;dialogue-stiff 类规则只扫对话、计入评分
- 反同质化:rewrite 温度 0.7 与 judge 0 分离;禁复用示例意象;多样性回归用例 + 朱雀集群监测
- 确定性承诺:同输入评分逐字节一致(版本内);润色输出不承诺复现
- 规则三段式格式与"保留边界"方法论借鉴 op7418/Humanizer-zh(MIT), 规则内容为网文语境原创重写,未复制其条文。
- hylarucoder/ai-flavor-remover 仅借鉴实测结论(朱雀基准、定点重写), 未复制其 Prompt 文本(该仓库无 LICENSE)。
- 本仓库规则与代码为原创内容,商业使用请保留本致谢。