前言¶
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 用一次是強調,用三次是套路;我們認爲 有時是弱的正當解釋。工具只負責標出來,刪不刪由你定。
安裝與啓用¶
方式 A:本地 link(開發 / 自用)¶
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,DSH0.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 自己列得很清楚:
- 中文規則偏嚴格:
可能在技術文本里常是真的不確定,不是防禦。README 建議用profile=academic或severityMin=warn過濾。 - 不改寫語義:
wd_rewrite只刪不造,給不出「改成事實句」的替代文本。 - 守恆鎖是啓發式:數字比對按字面 token,
840 ms與840ms會被視爲不同;主張強度靠成對詞表,覆蓋不到所有動詞。它是安全帶,不是剎車。 - 不處理 .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