AI 文风检测器 · dsh-style-detector
一个给 DSH(DeepSeek Harness)用的右侧栏页签插件:粘贴一段中文,实时给出 0–100 的「AI 味」评分与分项诊断,标注问题片段,逐条给出改写建议,并能一键替换原文。
定位说清楚:这是一个文本机械性风险检测器,不是 AI 鉴定器。它检测的是「读起来像不像机器批量生产的中文」,用的是可解释的本地规则;分数低只说明没踩这十几个坑,不等于写得好,也不等于能通过平台的检测。
- 分数与定位全部本地算,不联网、不需要 API Key、同文本同分数
- 语义复审交给 DSH 已绑定的模型(可换,只影响本面板),结果并入同一份分析,分数仍由本地算
- 两种文体:通用(说明 / 议论 / 公文)与网文(正文 / 对白 / 场景),词表、权重、复审提示词各不相同
- 八个页签:诊断 / 标注 / 建议 / 错字 / 记录 / 重点 / 对比 / 批量
安装
桌面版(图形界面)
- 打开「设置 → 插件」
- 在「市场」里搜
dsh-style-detector,或直接用包名安装 - 完全退出 DSH 再重新打开(不是关窗口、不是刷新页面)
- 右侧栏的「+」指南页里选「AI 文风检测」
从 npm 装(推荐)
dsh plugin add dsh-style-detector
# 然后完全退出 DSH 再重新打开
包页:https://www.npmjs.com/package/dsh-style-detector
直接从 GitHub 装(不需要 npm)
dsh plugin add https://github.com/grq6414-hash/dsh-style-detector/releases/download/v0.1.0/dsh-style-detector-0.1.0.tgz
# 然后完全退出 DSH 再重新打开
也可以在 Releases 页 手动下载 .tgz。
命令行(装了 DSH CLI 的话)
dsh plugin add dsh-style-detector
# 然后完全退出 DSH 再重新打开
手动(都不方便时)
cd ~/.dsh/profiles/<你的 profile>
pnpm add https://github.com/grq6414-hash/dsh-style-detector/releases/download/v0.1.0/dsh-style-detector-0.1.0.tgz
# 然后在 package.json 的 dsh.profile.bundles 数组里加上 "dsh-style-detector"
这个包已经发到 npm(
dsh-style-detector@0.1.0),所以上面这句也可以简写成pnpm add dsh-style-detector。
为什么必须完全重启:插件清单(
dsh.profile.bundles)和前端启动图(window.__DSH_BOOT__)是在进程启动时一起生成的。运行中启停插件后再刷新页面,启动图里可能没有新插件的 factory,页签会卡在loading状态并导致整个 Web 界面白屏(DSH 目前没有安全模式,只能杀进程)。改插件状态 → 完全退出 → 重开,这条要记住。
别和本地开发版同时装:如果你之前用
created-plugins的 link 方式装过这个插件的开发版,先卸掉。两个插件抢同一个页签类型和同一组路由,后装的那个会静默失效。
能做什么
诊断
总分环 + 七项分项卡片。每一项都是「AI 味」分数:越高越像 AI,0 = 像人写的,100 = 一眼假。
| 分项 | 通用模式权重 | 网文模式权重 | 检测什么 |
|---|---|---|---|
| AI 套话 / AI 腔套句 | 0.24 | 0.20 | 约 54 个模板词组(通用)/ 约 51 个小说套句(网文),按密度计分 |
| 句式均匀 / 句子节奏平 | 0.20 | 0.22 | 句长离散度 + 段长离散度 + 接近均值的句子占比 |
| 排比结构 | 0.14 | 0.10 | 连续几句长度相差 ≤3 字(三句轻扣、四句起重扣)+ 总分总结构 |
| 连接词密度 | 0.14 | 0.10 | 书面逻辑连接词密度 + 破折号成片 + 分号串句 |
| 缺具体信息 / 缺画面感 | 0.16 | 0.20 | 数字、专名、引号内容、时间词(通用);对白、感官、动作、物件、身体部位(网文) |
| 词汇重复 / 描写重复 | 0.12 | 0.18 | 二元组去重率,剔除术语复现;另有「同义反复」检测 |
| 语义层 | 0.18 | 0.18 | 模型复审(只挑片段、不打分),总分 = 本地六项 × 0.82 + 语义层 × 0.18 |
档位:≥66「AI 味偏重」,36–65「半人半机」,<36「像人写的」。
诊断页底部还有两块可点的图:句长节奏(每根柱子一句或一组)与段落热力(每块一段,颜色越深越重)。点一下跳到「标注」页,把那几句原文标亮并滚到眼前。
分项卡片也能点:带「N 处」角标的可以直接跳到对应问题,循环点击在一类问题里依次定位。
标注
原文按问题类型着色,右上角图例固定列全七类,点图例可循环定位(标签上显示 2/5 这样的进度)。整句级问题(缺画面感、通篇长句、同义反复)用虚线底边,词级问题用实线底边,一眼能分开。
正文字号可调(A− / A+,四档),设置会记住。
建议
每条问题一张卡片,原句 / 改成 两行对照:原句里命中的部分标红删除线,下面是改写后的样子;给不出自动改写的显示「这条只给建议,不自动改写」。
每张卡片三个动作:应用改写(只改这一处)、忽略这条(不再计分,记住指纹下次还在)、原句整行可点(跳回标注页定位)。
「缺画面感」这类整句级问题不能自动改写——机器不知道你要写什么画面,硬塞一个假改写只会更糟。
错字
单开一页,完全不影响文风分数(错别字多是文本对错问题,混进 AI 味会互相干扰)。
两层机制:
- 内置固定错配表(231 组,如 既使→即使、做为→作为、烦燥→烦躁、签定→签订),即时标红,不联网、零延迟
- 模型逐句扫描(点「模型校对」才跑),挑形近字、成语误用、音近字,每条都要求原句逐字找得到、错字是原句的子串,对不上的直接丢弃
专有名词有保护:书名号《》里的一律不报;引号里且全文出现两次以上的当专名跳过。点「这不是错」加进白名单,与文风白名单共用一份。
记录
最近 30 条检测记录(文本 + 分数 + 时间),可一键载回。
重点
「最该先改的 10 句」:按句子归并问题,用真实引擎重跑一遍算出「改完这句实际掉多少分」,按掉分降序排列。这是改动优先级表,不是新维度。
对比
贴 v1 / v2 两版,显示分数变化、修好了几条、新引入几条、还在的几条。
批量
拖入或选择 .txt,按「第 N 章」自动切章,表格给出每章字数、分数、最重三项。顶部有章节趋势:平均分、首末变化、最干净/最重章、每章一根小柱。
表格行可点:点一下把该章载入正文,切到诊断页接着改。
顺手能用的十件事
- Ctrl/⌘ + Enter 立刻复审(不等自动触发)
- Ctrl/⌘ + Z 撤销上一次「替换原文」或「改错字」(只留一步)
- Esc 关掉放大编辑层或折叠面板
- 放大 编辑区可以全屏展开写
- 目标分 设一个(默认 30,有 25/30/36 三个快捷档),达标后环变绿
- 自定义词表 黑名单加你自己的口头禅,白名单压掉误报
- 不计分的项 觉得某一项对你没意义,直接关掉(权重会重新归一化)
- 复制报告 一键导出 Markdown 报告(总分、分项表、最该改的句子)
- 配置备份 文体、目标分、字号、词表、忽略表一键导出/导入
- 换复审模型 点标题下那行模型名,从已绑定的 provider 目录里挑
已知边界(请认真读)
修不了的:
- 词表永远漏报。低分只能证明「没踩这十几个坑」,不能证明安全
- 叙事层 / 人物层 / 情节套路测不到。三章一个打脸、伏笔不回收、所有角色一个腔调——这是本地规则的最大空洞,也是平台最容易抓的东西
- 模型复审不确定。同一个模型两次结果可能不同,换模型差异更大。已加「只能扣分不能抬分」+ quote 逐字校验两道保险,但本质仍是「某个模型的看法」
- 通过它 ≠ 通过平台。平台可能用困惑度/突发性分类器、水印、人工审核、读者举报、更新行为特征。工具测的是文本风格,平台还看行为
能修但还没修的:
- 英文界面只有半成品(
locale/en.json只有标题和描述,界面文案是中文) - 术语识别基于二元组,不是真分词,极端专业的文本仍可能偏严
建议用法:当「改稿前的机械性筛查」。目标 30 分以下,重点看排比、缺画面感、同义反复;降到 25 以下别再追(会开始伤文笔);剩下交给人眼三问——这章有没有推进?人物说话有没有区别?结尾想不想点下一章?
数据与隐私
所有数据存在本机浏览器 localStorage,键名带 dsh.style-detector. 前缀:
| 键 | 内容 |
|---|---|
draft.v1 |
当前编辑中的文本 |
history.v1 |
最近 30 条检测记录 |
mode.v1 |
文体(general / fiction) |
ignore.v1 |
已忽略的条目指纹与分项 |
custom.v1 |
自定义词表({deny, allow}) |
target.v1 |
目标分(1–100,默认 30) |
v2.v1 |
「对比」页的第二版文本 |
font.v1 |
标注页字号档位(0–3,默认 1) |
model.v1 |
复审挑的模型({provider, model},留空跟随默认) |
不联网的只有本地规则引擎。一旦你点「模型复审」或「模型校对」,文本会发给你在 DSH 里绑定的那个 provider——这是你自己配的、自己选的动作。不想外发就关掉自动复审(状态条上的勾选框)。
开发
git clone https://github.com/grq6414-hash/dsh-style-detector.git
cd dsh-style-detector
# 没有构建步骤,client.js 是手写的原生 CJS 模块,index.js 是宿主 ESM 插件
两个文件的分工:
index.js— 宿主侧(Node)。注册两条 HTTP 路由/dsh-style-detector/review与/dsh-style-detector/proofread,用ctx.llm.stream调模型,把模型输出当不可信数据校验(quote 必须原文逐字找得到)后才返回client.js— 浏览器侧。规则引擎 + 八个视图 + 页签注册/卸载。入口是window.__ModuleLoader__.load({ id, factory })
想调规则:client.js 里的 dimCliche / dimUniform / dimParallel / dimConnective / dimDetail / dimDetailFiction / dimDiversity 六个函数,权重在 MODES 里。改完直接热重载即可(dsh plugin disable/enable),不需要编译。
License
MIT
No comments yet. Be the first to write one.