yiyunet/dsh-kill-ai-slop

dsh-kill-ai-slop

AI垃圾过滤(Kill AI Slop):给收到的文件打一个可回溯的体检得分(表达/执行/决策三维加权),用交付承接台账审查工作空转,每条引文回原文机器复核;支持 docx/pptx/xlsx/pdf/txt/md/csv/json/html。零运行依赖、零联网、纯本地计算。

未分類ai-slopdeepseek-harnessdocument-quality

AI垃圾过滤 · Kill AI Slop

把收到的文件压一遍:给出一个体检得分,抽出一份不掺水的结论。

@yiyunet/dsh-kill-ai-slop · DSH 插件 · 零依赖 · 零联网 · 零上传

### ⚠️ 当前状态(请先读这一格)
| 项 | 状态 |
|---|---|
| 版本 | 0.7.15 —— 判定语义自 0.7.13 起变更,分数与 0.7.13+ 可比,与 0.7.12 及之前不可比 |
| 源码 | 宿主 14 模块 + 客户端 1 包 + 构建/校验脚本 + 测试 |
| npm run build | ✅ lib/ 与源码同版 |
| npm test | ✅ 全绿 —— 以本次运行输出为准(本文档不写死条数,写死过一次就过时一次) |
| npm run verify | ✅ 十三类发布契约断言全过(含脱敏扫描与零联网断言) |
| npm 发布 | ✅ @yiyunet/dsh-kill-ai-slop@0.7.15 |
| 面板 UI | ✅ 总览四层卡 + 证据页逐格原文引文 + 工作缺口清单 + 提炼 + MD 报告 |
已通过的是两件事:「代码自洽」(单测覆盖的规则与算式、发布形态的完整性)
和「宿主契约」(面板位、RPC 信封、工具注入、模块装载)。
dsh plugin add @yiyunet/dsh-kill-ai-slop 现在可直接装。
### 🚨 两次破坏性变更:分数方向与粒度
| | 0.3.x | 0.5.x | 0.7.x(当前) |
|---|---|---|---|
| 分数含义 | 越高越差(100 = 全是 slop) | 越高越好 | 越高越好 |
| 谁给分 | 引擎用词表算 severity | 人/Agent 给 0–4 | 人/Agent 通读全文给 0–10(0.5 一档) |
| 层分怎么来 | 加权平均 | 层内平均 | 本层最弱的一格(平均会把"一格没做完"洗成 92 分) |
| 主口径 | 表达/执行/决策双指数 | 四层十二格(20/35/35/10) | 四层十二格 + 工作缺口(同一件事合并成一条) |
跨版本的分数不可比,任何并列展示都必须带方向标注。

一句话说清

你收到一份文件,真正想知道的是它还剩多少活要你补。

这个插件把交付拆成四层十二格,回答四句话:

层 · 回答 · 权重 意图 · 接住了什么任务?—— 交付是否推动了任务要求的结果 · 20% 策略 · 作出了什么选择?—— 作者是否完成必要的判断与取舍 · 35% 执行 · 如何推进?—— 是否完成把选择转成行动所需的组织工作 · 35% 表达 · 能否准确、轻松地接收?—— 接收者是否需要重新整理才能用 · 10%

它的核心能力不是打分,是识别「看起来交付了,实际上还剩哪些工作没完成」,并说明依据与影响。

它在 DSH 的 设置 → AI垃圾过滤 里,与其他插件的设置面板同层。

判断单位:「尚未完成的必要工作」

不看缺不缺字段,看还剩哪些工作没完成。每条扣分必须四问全有答案,缺一条就只能列为建议:

# · 条件 · 不成立时 C1 · 当前阶段必须完成 · 季末才需要的判据 → 建议 C2 · 属于提交者职责,或须为其准备决定所需信息 · 纯他人/审批方的判断 → 不扣 C3 · 全文确实未充分完成(先合并同一事项多处说明) · 分散在别处已完成 → 不扣 C4 · 影响当前决定或行动 · 只增加阅读成本 → 建议

两条最容易搞错的地方:

  • 责任归属不是开关,只是四条件之一。「决定权不在提交者」推不出「提交者没有准备信息的义务」——

拿货价由上级批,但推荐价、理由、与公司标准的关系,仍是提交者该准备的。

  • 「存在未确认条件」本身不等于 Slop。 关键看作者有没有处理不确定性:

识别了、安排了确认、说明了影响哪一步,就不扣分。

两个词:AI Slop 与 Work Slop

词 · 指什么 · 落在哪一层 AI Slop · 看起来像内容、实际没内容的表达填充:套话、重复、模板、模糊、结构噪音 · 表达(10%)—— 需要用重新整理才能用 Work Slop · 把本该完成的思考与整理转嫁给接收者:不选、不判、不排期、不指人 · 意图 + 策略 + 执行(90%)

两者的共同点:都不问"谁写的",只问"这份文件要你多花多少力气"。 所以这个插件既不猜作者,也不给"AI 生成概率"。

为什么前三层占九成:一份文风朴素、但事实充分的技术报告,只是"不好看";
而一份目的不明、没有取舍、没人负责的方案,会让你把它退回去重做 —— 后者才是真正的成本。
但注意方向:0.5.x 高分是好事。 前三层拿高分,说明这份交付你接着就能用。

为什么不做"AI 率"

市面上大多数工具给你一个数字:"87% 可能是 AI 写的"。这个数字有两个硬伤:

  • 文风不是作者身份的证据。 人写的空文件、AI 辅助的高质量技术件,文风都可能"不像真人"。
  • 它答非所问。 你真正想知道的是"这份文件能不能用",不是"它是谁写的"。

所以这里给的是一个可回溯的体检得分,全程不涉及作者:

层面 · 权重 · 判什么 表达(A) · 20 · 多少表达成本没有转化成信息:套话、重复、模板、模糊、段落之间没有推进 执行(C) · 40 · 交付里「要谁做什么、什么时限、做成什么样」有没有交代 决策(D) · 40 · 交付里「选了什么、放弃了什么、依据是什么」有没有交代

三项加权成一个「体检得分」(0–100,越高问题越重)。执行与决策占八成,因为这个插件抓的是工作空转,不是文笔—— 文风朴素但事实充分的技术报告,不该因为"不像散文"被判差文件。

权重 20 / 40 / 40 是初案、未校准。它是给人看的方向盘,不是给绩效用的尺子。
格式不计分。 标题层级跳跃、空标题、单条列表、加粗过载这类排版格式问题一律不进分数——
「结构」在这套规则里只指段落之间有没有推进(前一段和后一段是承接还是并排摆放)。
格式层面照样会告诉你查了多少个标题、多少个列表项,只是不换算成分数。

安装

装到哪里,取决于你用哪个形态打开 DSH。这两个地方互相独立 —— 一边装了,另一边看不到。

① 浏览器 GUI(dsh web / dsh --profile web)

dsh plugin --profile web add @yiyunet/dsh-kill-ai-slop

② 桌面客户端

不要用上面的命令。 桌面版带着自己的一份运行时,插件落在保留的 $DSH_HOME/profiles/desktop 里,由客户端自己管理 —— 在桌面版的插件窗口里填包名安装即可。

填包名 @yiyunet/dsh-kill-ai-slop,不要填 GitHub 地址: 从 git 来源安装时宿主会要求执行包的构建脚本,在默认开启构建脚本审批的环境里会被直接拒绝 (ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED)。

确认装载

无论哪一种,装完在 cordis.patch.yml 里(通常已由包的 patch 自动注入)确认:

- insert:
    - id: kill-ai-slop
      name: '@yiyunet/dsh-kill-ai-slop'

重启 Host → 打开 设置 → 左侧出现 AI垃圾过滤。

本仓库把构建产物 lib/ 一并提交,所以从 npm 安装不需要任何构建步骤。
从 git 来源安装则要求能执行 scripts/build.mjs,多数受管环境默认不允许 —— 这也是推荐走 npm 的原因。

第一步:自检

装完先跑这个,它会告诉你"引擎活没活着、支持什么格式、哪些开关是关的":

slop_engine_info

返回里重点看三项:

字段 · 含义 gates.inputRoots · [] = 宿主文件读取关闭(默认)。要用 slop_audit_file 必须先配它 supported / notSupported · 能分析什么、不能分析什么(不做 OCR、不拆压缩包) weightsAreProvisional · 权重是初案的提醒,每次自检都会重申

三种用法

① 设置面板(主路径,推荐)

设置 → AI垃圾过滤:

  1. 「上传文件」拖入文件,或「粘贴文本」直接贴;
  2. 选文档类型(是适用性开关,见下)与提炼档位;
  3. 点「开始体检」;
  4. 看四个页签:总览 / 证据 / 提炼 / Markdown;右下可「复制 Markdown」「保存报告」。

点「保存报告」会弹系统的另存为对话框,存哪里、叫什么名字都由你定;宿主机不落任何文件。

文件不上传:面板把内容交给本机 Host 进程,在内存里算完就结束。

② 给 agent 用:slop_audit_text

slop_audit_text(text=<原文>, docType="proposal", level="summary")