前言¶
在 DeepSeek Harness(DSH)裏,Skill 的 SKILL.md 正文是懶加載的:模型只有調用 skill 工具時纔會讀到正文。但 Skill 目錄不是懶加載的。官方 tool-skill 在每一步之前都會把每個可被模型調用的 Skill 注入爲 <available_skills> 塊,因此某個會話裏從未用到的 Skill,仍會在每一步產生目錄描述行的開銷。若希望某次對話就是純聊天、一開始就不提供任何 Skill,原先也沒有統一的入口。
dsh-skill-switch 由維護者 EdisonYang1982 發佈,在 SkillHub 社區目錄中歸類爲 工作流。它提供按會話查看與開關 Skill、三種會話姿態預設,以及將整組相互依賴的 Skill 家族移入或移出宿主 Skill Hub 的能力,目標是在「按會話」和「按家族」兩個維度上減少未使用 Skill 帶來的 Token 成本。
這是什麼¶
一句話:Per-session skill switch for DeepSeek Harness——在輸入框上方展示當前會話加載了哪些 Skill,可逐項關閉,也可一鍵保持無 Skill 的純聊天會話;同時支持整族 Skill 掛載或停放(park)到 Hub 外。
插件以 npm 包名 dsh-skill-switch 分發,當前資料中的版本爲 0.1.0,許可證 MIT。GitHub 倉庫:EdisonYang1982/dsh-skill-switch;社區目錄頁:skillhub.cn 條目。
它針對的三層成本¶
README 將設計目標拆成三層,實際收益最大的是第二層:
| 層級 | 機制 | 節省什麼 |
|---|---|---|
| 1 | 從目錄中移除 Skill | 一行描述 |
| 2 | 模型看不到,因而不會加載 | 整份 SKILL.md 正文 |
| 3 | 全部關閉後 skill 工具本身卸載 |
連 JSON Schema 也不再注入 |
第一層主要是爲第二層服務:隱藏目錄行後,模型不再知道該 Skill 存在,從而不會觸發正文加載。第三層在已全部關閉時幾乎無額外成本。
README 在真實 ~/.agents/skills Hub 上做過字符數對比(非 Token,便於復現):Hub 內 7 個 Skill 全開時目錄約 749 字符;某一組 27 個相互依賴的 Skill 家族 停放(parked) 時目錄成本爲 0;同一家族 掛載(mounted) 時爲 5,559 字符(平均每行約 205 字符)。要點是:僅做目錄內「隱藏」仍要先發現 Skill 再渲染行;把目錄移出 Hub 則註冊表根本看不到,停放時成本爲 0。
核心功能¶
會話條(Strip)¶
每個會話在 Composer 上方有一條可摺疊的條帶,展示當前會話會加載哪些 Skill,每個 Skill 有獨立開關,並提供三種 姿態(posture)預設(配置中的 defaultMode 與 workSkills 與之相關,見下文)。
按會話開關¶
設計理由是會話意圖不同:頭腦風暴不必爲編碼工具集付目錄行;「本會話不要任何 Skill」應一鍵可達,而不是反覆和模型說明。
Skill 組(skillGroups)¶
部分 Skill 家族體積大且 成員間用相對路徑互相引用(例如 lark-doc → ../lark-shared),無法按單個 Skill 拆分開關:只開一個會破壞引用,全部列出則每一步都付全部目錄行。
Skill 組把整族 Skill 停放 在 Hub 外的 parkDir,需要時再 整組移入 hubDir:
| 狀態 | 目錄成本 | 成員所在位置 |
|---|---|---|
| Parked | 0 | parkDir |
| Mounted | 每個成員一行 | hubDir |
條帶上以虛線/實線芯片展示組狀態(例如停放時 ⬡ Feishu CLI 27),點擊整組掛載或停放。
同步腳本(syncScript)¶
宿主從 Hub 目錄 掃描 Skill,而不是從作者存放 Skill 的任意路徑。若 Skill 倉庫在別處(網絡盤、同步目錄),可配置 syncScript 指向絕對路徑的同步腳本;條帶會出現 Sync skills 按鈕,點擊後執行腳本、使目錄緩存失效並刷新所有打開的條帶。Hub → 條帶的展示由文件監聽與 SSE 自動更新;倉庫 → Hub 的拷貝 ** deliberately 手動**,避免網絡掛載上每次掃描的隱性成本。
替換官方 skill 工具¶
安裝前需知:插件通過 cordis.patch.yml 禁用 @deepseek-ai/dsh-tool-skill,並註冊自己的 skill 工具與會話目錄實現;實現是對官方邏輯的移植並加入按會話過濾,不是在外層包一層官方插件。若你依賴官方 tool-skill 的精確行爲,安裝前應閱讀倉庫 README 中 Why it takes over tool-skill 一節。
安裝與啓用¶
資料給出兩種路徑:本地 link 構建,以及發佈後的 profile 安裝。
本地構建並 link 到 profile:
# 1. Build (inside the plugin directory)
npm install && npm run build
# 2. Link it into a profile: add to <profile>/package.json
# dependencies: { "dsh-skill-switch": "link:/path/to/dsh-skill-switch" }
# dsh.profile.bundles: [..., "dsh-skill-switch"]
# 3. Let the plugin resolve @deepseek-ai/* from the profile
ln -s ~/.dsh/profiles/node_modules <plugin>/node_modules
發佈後(README 示例):
dsh plugin --profile web add dsh-skill-switch
安裝後需 重啓 DSH。插件在 DSH 進程權限下運行;安裝前應自行審閱源碼與 MIT 許可證,確認可接受替換官方 skill 工具的行爲。
配置¶
默認值在插件自帶的 cordis.patch.yml;與環境相關的項寫在 你的 profile patch(<profile>/cordis.patch.yml),對應行 id 爲 skill-switch:
- id: skill-switch
name: dsh-skill-switch
config:
defaultMode: all # posture a new session starts in: all | none | work
workSkills: [] # skills the `work` posture enables
syncScript: '' # absolute path of a sync script; empty hides the control
hubDir: '' # absolute path of the hub the host scans (needed for skillGroups)
skillGroups: [] # all-or-nothing bundles, see below
defaultMode: all接近 stock 行爲,需要時再關;設爲none則新會話默認不提供 Skill,按需打開。- 使用
skillGroups時需填寫hubDir與每組parkDir等字段。
Skill 組示例(來自 README):
hubDir: '/home/you/.agents/skills'
skillGroups:
- id: lark
label: 'Feishu CLI'
description: '27 Feishu skills, mounted and parked as one unit'
parkDir: '/home/you/.agents-parked/lark'
discover: true # read members from parkDir; no hand-maintained list
典型用法¶
- 安裝並重啓 DSH 後,打開任意會話,在 Composer 上方展開 Skill 條,查看當前會話目錄中有哪些 Skill。
- 關閉本會話不需要的 Skill,或切換到
none/work等姿態(由 profile 中defaultMode與workSkills定義「工作」集)。 - 若配置了
skillGroups,在條帶上點擊對應芯片,整組在 Hub 與parkDir之間移動;長期不用的大家族建議保持 parked,避免每一步的目錄行成本。 - 若 Skill 源不在 Hub 路徑,配置
syncScript,在需要更新 Hub 內容時點擊 Sync skills;成功約 2 秒後按鈕恢復,失敗會保留錯誤輸出便於排查。
適用場景與注意¶
適合: 本地或 profile 中掛載了大量 Skill、且不同會話用途差異明顯的 DSH 用戶;擁有數十個相互引用、只能整族啓用的 Skill 家族,希望在不使用時從 Hub 物理移出以省目錄成本。
注意:
- 插件 替換 官方
@deepseek-ai/dsh-tool-skill,升級 DSH 或 Cordis 時需關注 peer 依賴是否仍匹配(package.json 中列出了@deepseek-ai/cordis、dsh-agent、dsh-skill等範圍)。 - 社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;星標等元數據以目錄頁爲準(當前資料中 GitHub 星標爲 0)。
- 所有安裝與配置命令、字段名以上述 README 與
cordis.patch.yml爲準,勿憑插件名臆造dsh plugin add github:...形式。
結尾¶
dsh-skill-switch 把 Skill 的 Token 成本拆成「目錄行」「正文加載」「工具 Schema」三層,用會話級開關和整族 park/mount 兩種手段,讓純聊天和未使用的 Skill 家族不必在每一步付費。需要細節、行爲差異說明與中文 README 時,可查閱 GitHub 倉庫 與 SkillHub 插件頁。