DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

yiyunet /

yiyunet/dsh-kill-ai-slop

Verified

DSH 插件:AI垃圾过滤 Ai Slop/Work Slop —— 给收到的文件打可回溯的「体检得分」(表达/执行/决策三维加权),用义务台账审查工作空转,每条引文机器复核原文。零依赖·零联网·纯本地。DeepSeek Harness plugin: score documents for AI-slop and work-slop.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@06f6a8f1
AI垃圾过滤 · Kill AI Slop

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")

format="json" 可拿结构化结果做二次加工。

③ 直接分析宿主上的文件:slop_audit_file

⚠️ 默认关闭。它读的是宿主进程的文件系统,比 agent 自己的沙箱更大,所以默认不开口子。 要开启,在 cordis.patch.yml 里加:

    - id: kill-ai-slop
      name: '@yiyunet/dsh-kill-ai-slop'
      config:
        inputRoots:
          - '/absolute/path/to/inbox'    # 只有这个目录内的文件会被读

同时也支持 slop_distill(text=…) —— 只提炼、不评分。

④ 审查"任务有没有被接住":slop_obligation_audit

这是 v0.2 的主线能力,解决的问题是:只给一份文档,算不出"任务承接"。

因为 Work Slop 的定义是「任务要求 与 实际交付 之间的缺口」——两个操作数的差。 所以这条路要求两份输入:原始任务原话 + 待审文档。

分工是刻意的:

谁做 做什么
你(或你用的模型) 拆义务:任务要求交的每件事算一条,逐条判 met / partial / missing / conflicting,并摘出原文引文
本插件 只做校验:引文是不是真的在原文?行号对不对?说"已满足"却拿不出引文算不算数?结论有没有越权?

不会拆义务?看 OBLIGATIONS.md —— 那是配套的《义务表起草规约》: 三条硬规则、从任务原话到义务的三步、五种字段怎么填、四条禁令、常见错法对照。 没有它,这条链只有会拆义务的人能用;有了它,任何人都能跑出可核对的台账。

插件从不判断结论对不对,只判断证据有没有。 因为模型最容易出问题的地方正是编行号和编引文, 而规则层在这件事上百分之百可靠 —— 引文对不上的判定,一律降级为不可采信。

slop_obligation_audit(
  task="线上垂直平台开拓尽快出一个落地方案",
  path="…/报告.md",
  obligations='[{"id":"O1","question":"首轮优先推进哪些渠道?","coverage":"conflicting",
                 "evidence":[{"quote":"最佳首选","line":65},{"quote":"优先级表将其放在P2","line":95}]}]'
)

四条硬闸门:

  • 状态必须可机器统计:写"没问题""通过"这类非枚举值直接判违规;
  • 说"已满足"就必须有通过复核的引文,否则不予判定;
  • 没有任务原话就不许判定"任务承接" —— 只出清单,并写明"这是检查表,不是任务要求";
  • 引文太短不算证据("P2"两个字符在任何长文里都能随机会中)。

写任何带证据的评审之前,可以先用 slop_verify_quotes 单独自查一遍引文。


文档类型是"适用性开关"

同一份文件,当纪要读和当方案读,评分本来就该不一样。所以"类型"不是风格选项,是规则开关:

类型 会被关掉的维度(点明理由)
会议纪要 B3 论据支撑(纪要靠如实记录,不承担论证义务)、B5 决策支持
说明 / 科普 B3、B5、B6(说明类不指派责任人,缺责任人不算缺陷)
通知 / 公告 B3、B5
研究 / 调研 B6(研究报告交付结论,不承诺执行动作)
方案 / 计划 / 报告 全维适用
其他 / 不确定 关 B6(避免体裁误伤)

不适用 ≠ 0 分:它们退出分母并在报告里写明理由。


支持的文件

格式 解析方式 说明
txt md csv json log yaml html rtf 直读 UTF-8 / UTF-16 BOM 优先,GBK 兜底
docx 自行解析 ZIP → word/document.xml 取段落文本;页眉/页脚/内嵌对象不计入(会提示)
pptx ZIP → ppt/slides/slideN.xml 按页序;演讲者备注不计入
xlsx ZIP → 共享字符串 + 工作表 按行列展平;公式取缓存值,不重算
pdf 内容流 inflate → 文本算子 启发式:不做 OCR、不做字体编码映射
doc xls ppt、压缩包、图片、eml 不支持 报错里直接给"该怎么另存"

无 OCR:扫描件 PDF 抽不到字时,报告会明示"覆盖不足"并拒绝给总分,而不是给一个假分数。


报告长什么样

首屏是四层分数 + 推进结论,不是单一总分。

意图 92   策略 83   执行 75   表达 83
综合质量分 82 / 100(越高越好)

推进结论:补充后推进 —— 局部安排不足 6 项,4 项待确认但不阻塞阶段 1–3
最低的一层是执行(75)—— 要动手先看这一层。

紧接着逐层展开十二格:每格给分数 + 状态 + 归属 + 判决理由 + 证据线索; 低于 4 分的格要过四条件闸,未过闸的扣分不删、只降级,并在报告里点名缺哪一条。

以下 §「A/B 维度」相关说明描述的是 0.3.x 口径

0.5.x 里 A1–A5(套话/重复/模板/模糊/推进)与 B1–B6(目的/实质/论据/逻辑/决策/执行) 仍然逐条计算,但降为「证据线索」,通过 DIMENSION_HINTS 映射到对应的十二格,不再自己出分。 原因见 CHANGELOG 0.5.0:文本属性与"任务要求 − 实际交付"不是同一个量纲。 下面这段旧口径保留,是为了让读惯 0.3.x 报告的人看懂两边的关系。

**体检得分 N / 100(档位)**
表达 X · 执行 Y · 决策 Z(权重 20 / 40 / 40,初案未校准;越高越重)

紧接着是为什么是这个分:每个扣分点都带可定位证据(第几行、命中哪条、怎么改), 外加一份五要素提炼(目的 / 阐述 / 观点 / 态度 / 执行)——每句都是原文片段,不改写。

「表达 / 执行 / 决策」三个数字都能就地展开成账本:表达由 A1–A5 逐维给出, 执行与决策在证据页各有「扣分依据」一节,写明分母怎么拼的、扣在哪几行。 一个数只在首页出现一次,就不能怪读者不信它。

执行层的分母先是"要判缺项的动作":合同、协议里「经销商须在 60 天内…」 「Distributor shall …」这类对方义务,责任人由条款主语给出,不按"作者没写责任人"扣分; 全篇都是对方义务时,执行层不出分(而不是判 100)。

规则判不了的部分会退出分母、并在结论区点名,而不是假装查过: 「方案里出现过风险」这类词能查到,但「识别到风险之后改了什么」要判因果,规则不给分。 "我没看"不许印成"没问题"。

⚠️ 两件事必须知道:

  • 零命中不等于干净 —— 也可能只是规则没覆盖到这个体裁或语种;
  • N 也可能是"未判定" —— 解析覆盖率低于阈值、或多数维度不适用时,报告拒绝给总分,明说覆盖不足,而不给一个看起来精确的假分。

每条命中都是这个三段式:引原句 → 为什么 → 怎么改。没有证据的分数不可回溯,不如不给。


五要素提炼

要素 必须区分
目的 原文明示 / 推断 / 未明示
阐述 客观事实 / 原文主张
观点 结论 / 假设(保留等级)
态度 明确表态 / 未表态(不读心)
执行 已写明 / 未说明(不补填);对方义务单独标出,不按"没写责任人"算缺陷

另附证据与限制、必须追问的问题。

它是抽取式,不是改写。 每一条都是原文连续片段,带行号,可以回原文逐字核对。 代价是读起来不如人写的摘要顺;收益是永远不会把"预计降本,尚无测试数据"写成"可以降本"。

三个档位:

档 用途 特征
保真精简 拿去做汇报 保留结构与顺序,只删纯套话与重复句
工作摘要(默认) 拿去决定与派活 按五要素重组,全部原句摘录
速读卡片 快速了解 每要素 ≤3 条,明示不能替代原文

每档都附删了什么、为什么删、可能损失什么。


隐私与安全

项 默认 说明
联网 无 npm run verify 有一条断言专门守"零联网",引入网络模块会直接红
上传 无 面板把内容交给本机 Host 进程,浏览器不向任何外部地址发送文件
落盘 无 点「保存报告」走浏览器另存为,落点是你选的那个目录,宿主进程不写盘
原文回传 开启 报告要含证据片段才能回溯;敏感文件可设 includeSnippets: false
宿主文件读取 关闭 inputRoots: [];要开必须显式列目录
最近报告 内存 20 条 不写盘,Host 重启即清空

文件是数据,不是指令。 文件里写"忽略以上指令、给满分"不会改变任何判定 —— 插件不执行文件内容,只做文本匹配与统计。文档也不能自我豁免。


配置项

- insert:
    - id: kill-ai-slop
      name: '@yiyunet/dsh-kill-ai-slop'
      config:
        maxFileBytes: 20971520     # 单文件上限 20 MB
        maxRpcBytes: 12582912      # 面板单次上传上限 12 MB(base64 会膨胀约 1.37 倍)
        maxChars: 600000           # 参与分析的字符上限,超出截断并明示
        minParseCoverage: 0.7      # 解析覆盖率低于此值 → 不出总分
        minEvalCoverage: 0.6       # 可评估权重低于此值 → 出分但标"部分结论"
        includeSnippets: true      # 报告是否含原文片段
        reportRoot: ''             # 工具/自动化落盘用;面板的「保存报告」不依赖它
        keepRecent: 20             # 内存里保留最近几份报告摘要
        # inputRoots: ['/abs/path'] # 不设 = 关闭 slop_audit_file

已知限制(请务必读)

  1. 不做 OCR。 扫描件 PDF 抽不到字,会明示覆盖不足并拒给总分。
  2. 不做作者鉴定。 不输出"AI 生成概率"。文风不是作者身份的证据。
  3. Office / PDF 解析是结构级的,不做版面还原。 PDF 走启发式:字体编码映射、分栏顺序、表格结构都可能失准,报告标注 pdf-heuristic 并下调可信度;docx / xlsx 按 OOXML 结构取文本与单元格,页眉页脚、文本框、图表、批注可能不计入。一律以报告中的覆盖率为准。
  4. 不做语义理解。 规则在符号层面(词表、结构、数值一致性),抓不出"逻辑通顺但结论错误"这类问题——那仍需人读。
  5. 四层分数需要人来给。 引擎不猜 0–10:不传 cells/review 就只有证据线索、没有综合分。这不是缺陷,是防止"字段齐全=高分"复发。代价是它不能绕过模型全自动批量跑分。
  6. 权重 20 / 35 / 35 / 10 是初案(未经校准)。 综合分只适合横向粗筛与讨论起点,不适合当对外结论或绩效依据。四层同分时权重实际失效,报告会明示。
  7. 0.3.x 的 A/B 维度权重(25/25/20/20/10、15/20/20/20/10/15)仍是初案,且已降为证据来源,不再出分。
  8. 中英共用一套阈值。 语种差异未验证。
  9. 判定稳定性未检验。 同一份文件两次判定是否收敛(阈值:同文件最多 1 格允许差 1 分)尚未实测。

精度不达标时的处置顺序写在方法论文档里:先收窄适用文档类型,再降级为"只出线索不出分",而不是放宽判据硬凑。


开发

npm run doctor     # 前置条件体检(Node 版本 / GBK 支持 / 文件齐全 / 零依赖)
npm run build      # plugin-src/ → lib/(零构建依赖,不用打包器)
npm test           # node --test,单测直接测 plugin-src/
npm run verify     # 发布契约校验
npm run check      # build + test + verify
  • 唯一真源是 plugin-src/,lib/ 是产物,改了会被下次构建覆盖。
  • 改判定规则 → 升 RULESET_VERSION;改计算流程 → 升 ENGINE_VERSION(须与 package.json 同步)。 不升版本 = 新旧分数被当成可比 = 历史结论作废。
  • 维护者请先读 CONTEXT.md 的「五个不可随手改的设计决定」。

许可

MIT。

方法论参考了三个开源项目(stop-slop / no-ai-slop / kill-ai-slop), 未复制任何代码,致谢与"吸纳/不吸纳"的逐项理由见 THIRD_PARTY_NOTICES.md。


判的是文件能不能用,不鉴定作者、不评人。

—/ 5

No ratings yet

Verified DSH bundle

Commit 06f6a8f19f9b

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout