dsh-skill-autopilot:用模型審查技能進化建議,並用反碎片策略准入

前言

在 DeepSeek Harness(DSH)裏做技能管理時,會碰到一個反覆出現的問題:技能進化頁每次攢下一批待處理建議,逐條點開看本身就是負擔;而由模型自動提出的建議,往往是「某次任務的流水」,如果直接採納,技能庫會很快膨脹成幾百個互不相干的窄技能。

dsh-skill-autopilot 就是把「審」和「發」這兩步交給你配置的大模型,但把「什麼樣的技能才配進庫」寫成確定性的准入規則。模型只能在這個框裏做判斷,代碼再判一遍,最後通過的技能打包成 SKILL.md 走技能數據源落盤,帶版本記錄、可回滾。

這是什麼

  • 插件名:dsh-skill-autopilot
  • 維護者:BrainZombie
  • 分類:工作流
  • 來源:SkillHub 目錄頁、GitHub
  • 版本與許可證:0.1.0,MIT

它解決的問題很明確:把進化鏈路裏積累的 pending 建議,經模型審查和反碎片化閘門後,變成真正進入技能庫的技能,而不是把每次建議都變成新文件。

它做什麼(一次運行)

一次運行的流程如下:

pending 建議 ──► 審查模型(你選的) ──► 確定性閘門 ──► 打包 SKILL.md ──► 落盤 + 版本記錄
   (mnemon)        (語義判斷)          (不可繞過)        (蒸餾/清洗)        (adopt)
  1. 讀:從 mnemon 的 Skills Source 取 pending 建議、證據軌跡、評測用例,以及全量技能目錄。
  2. 審:一次批量調用審查模型,對每條建議給出 create / merge / dismiss / defer,並附理由和歸併目標。
  3. 閘:模型說完不算數,代碼再判一遍。這一層是插件的核心,後面專門講。
  4. 打包:爲通過的條目單獨再調一次模型產出正文,同時剔除會隨時間腐化的內容,如日期、會話 id、uuid、機器絕對路徑、「N 小時前」。
  5. 落盤:recordDraft → adoptDraft,走技能數據源自己的寫入口。建議置爲 adopted,生成版本記錄,必要時可從「技能管理 → 版本/回收站」回滾。插件不直接寫 SKILL.md。

默認情況下 autoApply: false,review 只輸出決策和將要落盤的正文,一個字節都不寫;確認後 apply 才真正落盤。

反碎片策略

這是插件的核心。它把「庫是類級知識,不是流水」這條原則拆成了可執行的規則。

規則 判據
庫是「類級知識」,不是流水 一個技能帶 N 個帶標籤小節,勝過 N 個窄兄弟技能
歸併優先於新建 同 xxx-* 前綴簇且內容相關,或 description 相似,就歸併;只共用產品名不算
不重複造插件已有的能力 對照 ctx.skills.list()(宿主實際廣告的技能,含插件技能),命中即 dismiss
小打小鬧不單獨建 必須同時滿足強信號、置信度門檻、正文長度下限
不寫 hub/router 技能 正文超過 60% 的行是「指向別的技能」,直接拒絕
description 一句話 超長會被系統技能索引截斷,觸發詞等於失效
歸檔不刪除 歸併時被吸收的技能進回收站,可恢復

閘門裏幾個硬條件值得單獨列出來:

  • 建議置信度低於 minConfidence → 不建(這一條不進模型審)。
  • 模型對「新建」的把握低於 minModelConfidence → 留待下輪,不硬發。
  • 沒有強信號(procedure / correction / directive / skill-gap / skill-misleading / approach-change)→ 不建。
  • 插件已提供該能力 → 不建。
  • 與已有技能相似度 ≥ mergeSimilarity,或同屬 xxx-* 前綴簇且內容相關 → 強制歸併,不許新增兄弟技能。
  • 本輪 create 超過 maxNewPerRun → 留到下一輪。
  • 打包後的 SKILL.md 必須過 lint。

consolidate 是配套的存量體檢,對已有技能按前綴/同域聚簇,讓模型判斷哪些該收斂成一個 umbrella。應用時把合併後的正文寫到 keeper,把被吸收的移入回收站。

打包校驗

打包校驗在 lib/policy.js: lintSkillDoc 實現。硬攔項包括:名字非 kebab-case 或重名;缺 description 或超長;正文爲空、過短、超長;正文裏又帶 frontmatter;缺「何時使用」或「步驟」;是 router 技能。軟提示包括缺驗收小節、正文沒有可執行命令、description 開頭是套話。

安裝與啓用

安裝命令來自倉庫自帶的 install.ps1,共有兩種模式。標準模式寫 profile 的 package.json(link: 依賴 + dsh.profile.bundles)並執行 pnpm install:

# 先看計劃
powershell -ExecutionPolicy Bypass -File .\install.ps1 -DryRun

# 執行標準安裝
powershell -ExecutionPolicy Bypass -File .\install.ps1

免 pnpm 模式只建軟鏈,並往 profile 的 cordis.patch.yml 追加 insert 條目:

powershell -ExecutionPolicy Bypass -File .\install.ps1 -Link

回滾兩種模式都認,會還原 package.json / cordis.patch.yml 的備份:

powershell -ExecutionPolicy Bypass -File .\install.ps1 -Rollback

裝完不啓動、不重啓的情況下可以先做預檢:

dsh --profile web --dump-config | Select-String skill-autopilot

生效需要重啓 DSH,這一步由使用者自己執行。

典型用法

裝好並重啓後,在任意會話裏可以直接用斜槓命令:

/skill-autopilot status       # 看隊列、計數、審查模型、策略、日誌目錄
/skill-autopilot review       # 只審不寫(默認 dry-run)
/skill-autopilot apply        # 審完直接落盤
/skill-autopilot consolidate  # 存量歸併審查(只出方案)
/skill-autopilot history      # 最近決策

也可以直接讓 agent 調工具:

{"action": "review", "maxItems": 3}
{"action": "apply", "ids": ["<suggestionId>"]}
{"action": "apply", "provider": "deepseek-official", "model": "deepseek-reasoner"}
{"action": "consolidate", "confirm": true}

決策日誌是 append-only 的 JSONL,另有最近一次完整結果,位於 $DSH_HOME/storages/skill-autopilot/:decisions.jsonl 每條建議一行,含最終動作、理由、是否落盤和錯誤;last-run.json 是最近一次運行的完整內容,含將要落盤或已落盤的 SKILL.md 正文。review 默認 dry-run 的意義就在這裏,可以先讀再發。

相關配置

插件 patch 裏的 config 都可省略。常用鍵如下,默認值取自 README:

鍵 默認值 說明
enabled true 關掉後工具仍在,任何運行直接返回 disabled
mnemonDataDir ~/.mnemon 其下應有 skills/ledger.json,自動探測
targetRoot user-dsh 新技能寫到 ~/.dsh/skills(也可設 user-agents)
reviewer.provider/model 空 = 宿主默認模型 留空時用設置頁裏選的那個模型
reviewer.maxTokens 4096 審查/打包單次上限
policy.minConfidence 0.8 建議置信度低於此值不建
policy.minModelConfidence 0.5 模型對「新建」把握低於此值留待下輪
policy.maxNewPerRun 2 每輪最多新建幾個
policy.mergeSimilarity 0.45 相似度閾值,超過即強制歸併
policy.descriptionMaxChars 240 description 上限
policy.maxBodyChars / maxMergedBodyChars 16000 / 24000 正文字符上限
policy.requireStrongSignal true 必須有強信號
autoApply false 定時任務是否直接落盤
intervalMinutes 0 大於 0 時後臺定時跑,默認只 review
logDir 空 = $DSH_HOME/storages/skill-autopilot 日誌目錄

想讓判斷更嚴格,可以把 reviewer.model 指向更強的模型、把 mergeSimilarity 調到 0.55、maxNewPerRun 調到 1。需要注意,deepseek-flash 對「新建」的自評通常在 0.65–0.8 之間,這是校準值不是裁決值,所以 minModelConfidence 默認只設 0.5。真正決定「配不配進庫」的是建議置信度、強信號、去重和文檔 lint。

驗證

node test/selftest.mjs          # 單元閘門/去重/打包/落盤(臨時 ledger + 臨時技能根,不動真實數據)
node test/selftest.mjs --live   # 追加:只讀真實 ledger,確認能讀到 pending 與目錄
node test/host-contract.mjs     # 用真實 dsh-tools/dsh-llm 走一遍註冊與一次 llm 組裝調用
dsh-plugin verify .             # 真打包、真安裝、掛載檢查

selftest 從不碰 ~/.mnemon/skills 與 ~/.dsh/skills:它在 %TEMP% 下複製一份 ledger、建一個空的臨時技能根,跑完即刪。需要「本機已裝 DSH / 已裝 mnemon 數據源」的兩段測試在沒有安裝的機器上會自動 skip 而不是失敗,所以 CI 只跑 npm test;host-contract 與 verify 需要真實宿主,請在裝好 DSH 的機器上跑。

適用場景與注意

適合這個插件的人,是已經在 DSH 裏用 mnemon 管理技能、並且被進化建議的人工審查和技能庫碎片化困擾的開發者。

需要注意幾點:

  • 插件以當前 DSH 進程的權限運行,安裝前應先檢查源碼與許可證(MIT)。本插件通過 dsh-mnemon-source-skills 的 manage() 讀寫同一份 ledger,屬於信賴 mnemon 內部契約的實現。
  • apply 會真的新增或修改 ~/.dsh/skills 下的技能,但只經數據源寫入口,因此有版本記錄和回收站兩條退路。模型判斷不會 100% 合意,所以默認 dry-run。
  • 不要把 autoApply 和短 intervalMinutes 一起開,那等於讓模型無限自增長技能庫。建議 apply 手動觸發,或 autoApply 只配合 maxNewPerRun: 1。
  • 項目級技能(project-dsh / project-agents)默認只讀不建,consolidate 只處理 user-dsh / user-agents。
  • 運行時要求:DeepSeek Harness >= 0.2.0,Node.js >= 20;dsh-mnemon-source-skills >= 0.4.0 爲可選 peer,缺失時插件仍可加載,但讀不到 pending 建議。

結尾

dsh-skill-autopilot 的價值不在於讓模型說了算,而在於把「什麼樣的技能才配進庫」固化成確定性的規則,讓審查和歸併可以自動跑,同時保住版本記錄和回滾能力。如果恰好在 DSH 技能進化這條鏈路上,可以從 dry-run 的 review 開始試。

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

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

小夜