dsh-skill-switch:按會話控制 Skill 加載,降低未使用 Skill 的 Token 開銷

前言

在 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

典型用法

  1. 安裝並重啓 DSH 後,打開任意會話,在 Composer 上方展開 Skill 條,查看當前會話目錄中有哪些 Skill。
  2. 關閉本會話不需要的 Skill,或切換到 none / work 等姿態(由 profile 中 defaultMode 與 workSkills 定義「工作」集)。
  3. 若配置了 skillGroups,在條帶上點擊對應芯片,整組在 Hub 與 parkDir 之間移動;長期不用的大家族建議保持 parked,避免每一步的目錄行成本。
  4. 若 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 插件頁。

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

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

小夜