前言¶
在 DeepSeek Harness(DSH)裏做技能管理時,會碰到一個反覆出現的問題:技能進化頁每次攢下一批待處理建議,逐條點開看本身就是負擔;而由模型自動提出的建議,往往是「某次任務的流水」,如果直接採納,技能庫會很快膨脹成幾百個互不相干的窄技能。
dsh-skill-autopilot 就是把「審」和「發」這兩步交給你配置的大模型,但把「什麼樣的技能才配進庫」寫成確定性的准入規則。模型只能在這個框裏做判斷,代碼再判一遍,最後通過的技能打包成 SKILL.md 走技能數據源落盤,帶版本記錄、可回滾。
這是什麼¶
- 插件名:
dsh-skill-autopilot - 維護者:BrainZombie
- 分類:工作流
- 來源:SkillHub 目錄頁、GitHub
- 版本與許可證:
0.1.0,MIT
它解決的問題很明確:把進化鏈路裏積累的 pending 建議,經模型審查和反碎片化閘門後,變成真正進入技能庫的技能,而不是把每次建議都變成新文件。
它做什麼(一次運行)¶
一次運行的流程如下:
pending 建議 ──► 審查模型(你選的) ──► 確定性閘門 ──► 打包 SKILL.md ──► 落盤 + 版本記錄
(mnemon) (語義判斷) (不可繞過) (蒸餾/清洗) (adopt)
- 讀:從 mnemon 的 Skills Source 取
pending建議、證據軌跡、評測用例,以及全量技能目錄。 - 審:一次批量調用審查模型,對每條建議給出
create / merge / dismiss / defer,並附理由和歸併目標。 - 閘:模型說完不算數,代碼再判一遍。這一層是插件的核心,後面專門講。
- 打包:爲通過的條目單獨再調一次模型產出正文,同時剔除會隨時間腐化的內容,如日期、會話 id、uuid、機器絕對路徑、「N 小時前」。
- 落盤:
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 開始試。