dsh-writing-discipline:給寫作加一道「剃掉防禦性噪音、鎖住事實層」的閘門

前言

DSH(DeepSeek Harness)的理念是「一切皆插件」,社區維護者會針對智能體寫作、提示詞紀律這類工程環節做獨立插件。下面介紹的 dsh-writing-discipline(維護者 oobitoooo,分類 admin-security)就是其中偏審計向的一個:它不是排版工具,也不是風格潤色器,而是一個「寫作紀律閘門」。

它針對的問題很具體:模型在寫東西時會習慣性地爲不被指責而寫,而不是爲把事交付而寫。結果是免責、「作爲一個 AI」、說教勸退、無意義對沖、過程旁白這類防禦性表達大量出現在交付物裏,讀者看完無法行動。清理這些表達的工具市面上不少,但最大的風險不是刪不乾淨,而是順手把真事實一起刪了——主語裏的否定、數字、引用、適用邊界、主張強度。這個插件同時做兩件事:清掉防禦性噪音,並用守恆鎖證明改寫前後事實層一個字都沒動。

這是什麼

一句話定位:一個零網絡、零 LLM、純本地正則加統計的 DSH 插件,用五個確定性工具檢測並清除防禦性寫作,同時保證改寫不破壞事實層。它不調用任何外部服務,同樣的輸入永遠給同樣的輸出,因此可以放進 CI 或 pre-commit。

  • 名稱:dsh-writing-discipline
  • 維護者:oobitoooo
  • 分類:admin-security
  • 當前版本:0.2.1
  • 許可:MIT
  • 目錄頁:https://www.skillhub.cn/plugins/oobitoooo/dsh-writing-discipline
  • GitHub:https://github.com/oobitoooo/dsh-writing-discipline

插件對應目錄頁由社區獨立站點維護,與 DeepSeek / 幻方沒有官方從屬關係。

它匹配的五類病竈

README 把它針對的問題列成一張表,每一類都對應現實中的固定表達:

病竈 典型形態 代價
免責 「僅供參考」「不構成任何建議」 交付物變成半成品,責任推回讀者
能力自貶 「作爲一個 AI」「能力有限」「如有疏漏」 佔篇幅,零信息
說教勸退 「請注意」「務必確保」「建議謹慎」 用姿態替代參數
無意義對沖 「可能或許大概」「一定程度上」 主張被稀釋到無法據此決策
過程旁白 「首先我需要了解…」「接下來我將」 純噪音

只做一個環節的工具是殘缺的:只做清理是排版工具,只做事實覈對是審計工具。這個插件明確兩者缺一不可。

五個工具

安裝後會在工具表中出現五個以 wd_ 開頭的工具,全部確定性。

wd_scan — 掃描

{ "text": "……", "profile": "chat", "severityMin": "warn", "maxWarn": 3, "verbose": true }
// 或 { "filePath": "docs/report.md" }

返回 ERROR / WARN / INFO 計數、逐條命中(這條規則、行號、段落、命中原文、語義片段、建議動作),以及文本指標(平均句長、對沖密度、破折號密度)。

profile 控制判定嚴格度。README 明確區分了幾種文檔類型:

  • chat:hedge 記 WARN,說教 / 免責記 ERROR(chat 被描述爲默認常見值)。
  • report / readme / email:同上,元評論殘留加重。
  • academic:hedge 全部降級爲 INFO,理由是學術 hedging 是 ICMJE 認可的正當表達。
  • review:「as requested」「按要求」類過程殘留不報。

wd_rules — 規則速查

列出 24 條規則加 3 條密度規則在當前 profile 下的實際嚴重度。README 的用法建議是寫作前掃一眼,比寫完再改便宜。

wd_rewrite — 確定性改寫

它只做三件有把握的事:剝離引子(好的, / 請注意, / 需要注意的是, / 溫馨提示:)、壓縮堆疊對沖(可能或許 → 可能、may potentially → may)、刪掉純防禦句。硬約束是含數字、引用、圖表編號、鏈接的句子永不刪除。返回改寫後文本、逐條變更記錄,以及對改後文本的復掃結果。

需要說清邊界:它不生成新句子。「把這句話改寫成事實句」這種語義級改寫要人來做。

wd_conservation — 守恆鎖

{ "original": 原文, "revised": 改後文本 }   // 或 originalPath / revisedPath

它對比改寫前後,檢查四類事實漂移,並給出級別:

檢查 級別 說明
數字 / 單位 / 百分比 / p 值 / n= INVARIANT 丟失即 HIGH,必須回滾
引用鍵 / 圖表編號 / DOI / URL INVARIANT 同上
主張強度上調 VIOLATION 可能→導致、associated→caused、suggests→proves
段落否定漂移 INVARIANT 相似度 ≥40% 的段落裏 不/未/never 數量變了
適用邊界詞消失 CANDIDATE 僅/限於/only/within 被刪——人工確認

INVARIANT / VIOLATION 一旦出現即 ok: false,CI 可以直接紅。

wd_stats — 指標

統計字符、中文詞數、英文詞數、段落、句數、平均句長、對沖密度(每千語言單位)、破折號密度。README 給出的典型用法是改寫前後各跑一次,用數字說話。

規則表

README 列出 25 條規則加 3 條密度規則,按組劃分:

組 規則
防禦性 能力自貶、拒絕式措辭、道歉、自我評價、免責類、防禦性聲明、推責專業人士、合規姿態
元評論 社交尾巴、開場白、過程旁白、反問請示、修改過程殘留
對沖 中文信使詞、英文信使詞、模糊程度詞、限定詞堆疊(ERROR)
文體 絕對化、填充開頭、中文套話、英文套話、不是X而是Y、元評論開場白、鋪墊式開頭
密度 段落軟對沖 ≥3 處且 0 處量化數據 → ERROR、破折號 >6‰、超長句(中 >55 字 / 英 >34 詞)

密度規則是它和普通禁詞表的關鍵差別:單獨一個 可能 不是問題,一段裏三個 可能 且一個數字都沒有才是。

判定分級與建議動作

級別分三檔,每級對應不同的 CI 策略:

級別 含義 CI 策略
ERROR 防禦性寫作,刪掉不損失信息 必須爲 0
WARN 可疑:軟對沖、絕對化、套話 設閾值,看趨勢
INFO 學術語境下的正當 hedging 不計入失敗

每條命中都帶 action,有四種取值:

  • CUT:整句刪。
  • TIGHTEN:壓縮,保留信息、去掉保險層。
  • REFRAME:改寫成事實句,從條件推到後果。
  • REVIEW:需要人判斷,不要自動刪。

REVIEW 的存在有明確理由:不是X而是Y 用一次是強調,用三次是套路;我們認爲 有時是弱的正當解釋。工具只負責標出來,刪不刪由你定。

安裝與啓用

dsh plugin --profile desktop add link:C:/path/to/dsh-writing-discipline

方式 B:從 GitHub 裝

dsh plugin --profile desktop add github:oobitoooo/dsh-writing-discipline

裝完重啓 DSH(或等插件熱加載),wd_* 五個工具就會出現在工具表裏。

注:安裝命令中的 link: / github: 前綴與 --profile desktop 均爲 README 原文寫法。它只用到 ctx.tools.register 和 defineTool,DSH 0.1.x 與 0.2.x 均可。README 明確說明沒有 postinstall 腳本、不寫磁盤、不改配置。

命令行(CI / pre-commit)

插件帶有獨立 CLI——裝完包就有 wd-lint:

wd-lint README.md docs/DESIGN.md      # 多文件
cat x.md | wd-lint -                  # stdin
wd-lint -t "本內容僅供參考。"           # 直接測一段
wd-lint -m 3 src/                     # WARN 預算 3
wd-lint --json x.md                   # JSON,給 CI 解析
wd-lint --fix x.md                    # 就地改寫(原文件存 .bak)
wd-lint --diff before.md after.md     # 守恆鎖:兩版事實是否漂移

退出碼:0 通過;1 有 ERROR 或超出 WARN 預算;2 用法或 IO 錯誤。

README 專門解釋了 WARN 預算的用途:存量項目一開始必然一堆 WARN,直接卡死沒人會開。先清到 ERROR=0,再把預算從 20 一週周壓到 0。wd-lint -m 3 的就是「這週最多容忍 3 個 WARN」。

pre-commit 示例:

- repo: local
  hooks:
    - id: writing-discipline
      name: writing discipline
      entry: wd-lint -m 0
      language: node
      types: [markdown, text]

接 CI

README 給了兩種方式。一種是直接在工作流裏調用規則模塊:

- name: writing discipline
  run: node -e "import('./lib/rules.js').then(m=>{const r=m.scan(require('fs').readFileSync('dist/README.md','utf8'),{profile:'readme'});if(!r.ok){console.error(m.formatReport(r));process.exit(1)}})"

另一種是直接 import 純函數,scan / rewrite / conservation / stats 都不依賴 DSH 運行時:

import { scan, conservation } from 'dsh-writing-discipline/rules'

const r = scan(text, { profile: 'report' })
if (!r.ok) throw new Error(`防禦性寫作 ${r.counts.error} 處`)

const c = conservation(before, after)
if (!c.ok) throw new Error('改寫破壞了事實層:' + c.items.filter(i => i.severity === 'error').map(i => i.message).join('; '))

適用場景與注意

適合誰:需要在一條流水線裏對中文技術文檔、README、報告、郵件做規範化的 DSH 開發者,尤其是想把寫作紀律變成 CI 門檻、而不是口頭約定的團隊。它能對 --fix 場景做就地改寫,也能在 CI 裏用守恆鎖兜底。

需要留意的邊界,README 自己列得很清楚:

  1. 中文規則偏嚴格:可能 在技術文本里常是真的不確定,不是防禦。README 建議用 profile=academic 或 severityMin=warn 過濾。
  2. 不改寫語義:wd_rewrite 只刪不造,給不出「改成事實句」的替代文本。
  3. 守恆鎖是啓發式:數字比對按字面 token,840 ms 與 840ms 會被視爲不同;主張強度靠成對詞表,覆蓋不到所有動詞。它是安全帶,不是剎車。
  4. 不處理 .docx/.pdf:純文本進,純文本出,Office 文檔請先用對應 skill 抽取。

插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。倉庫附帶了代碼與規則實現,測試用 npm test 跑(17 個用例,純 node:assert,無依賴),npm run check 做語法檢查。規則都集中在 lib/rules.js 的 RULES 數組裏,加一條就是加一個對象。test/smoke.mjs 會校驗「所有正則都能編譯」和「ruleId 不重複」。

結尾

這個插件的價值不在「一鍵消滅廢話」,而在它把兩件平時分開做的事綁在了一起:用確定性規則清掉防禦性表達,同時用守恆鎖把數字、引用、否定和主張強度壓在原地。前者決定了交付物能不能被行動,後者決定了自動清理能不能被信任。

目錄頁:https://www.skillhub.cn/plugins/oobitoooo/dsh-writing-discipline
GitHub:https://github.com/oobitoooo/dsh-writing-discipline

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜