dsh-skill-router:在 step 開始前用規則完成技能路由

前言

用 DeepSeek Harness(DSH)搭智能體時,技能的加載時機通常交給模型自己判斷:技能以目錄(catalog)形式暴露給模型,模型每一步都能看到目錄,每次都要重新決定要不要加載。結果是決策不穩定——可能加載晚了,可能加載錯了,也可能根本沒加載。

dsh-skill-router 把這件事改成規則驅動:在每個 step 開始前,用純規則匹配最新的用戶消息,命中就把對應技能內容注入當前 step,未命中就完全不干預。整個過程零 LLM 調用、零 token 成本。下面介紹它的用法。

這是什麼

dsh-skill-router 是一個 DSH 插件,一句話定位:規則優先的 pre-step 技能路由——命中的技能會被注入(pour),不確定時保持沉默。按目錄信息,維護者爲 MJorgin,當前版本 0.1.3,許可證 MIT。倉庫歸屬有一處待覈實的矛盾,見下文安裝一節。

它解決的問題很具體:讓「某類消息 → 某個技能」的映射不依賴模型的臨場判斷。相比讓模型每步重新決策,或引入 LLM judge、embeddings 做路由,純規則匹配是確定性的,未命中時零開銷。

工作原理

Pre-step 鉤子

插件掛載在 agent/pre-step 鉤子上,在每個 step 開始前讀取最新一條用戶消息,也就是說路由發生在模型開始處理之前。

規則匹配

規則來自 YAML 策略文件:用戶可編輯的 ~/.dsh/skill-router.yaml,插件內置一份默認策略 default-policy.yaml。規則按順序匹配,首條命中即生效。

命中時,插件以 skill-invocation 消息把匹配技能的內容注入當前 step,技能目錄裏「已加載、不要重複加載」的規則自動生效。未命中時零干預,模型照常走自己的 catalog 流程。

去重與回退

每個技能在每個 session 裏最多注入一次,避免技能內容反覆進入 context。

策略文件如果寫壞(YAML 解析失敗),插件回退到內置默認策略,不會中斷會話。

whenToUse 次級觸發

已安裝技能的 whenToUse frontmatter 作爲次級觸發,採用字面短語匹配,附加在 YAML 規則之後。現有技能數據大多缺少這個字段;要用的話應寫成短觸發短語,長文匹配不上。skill-bartender 的 taste test 可以回填該字段。

與 skill-bartender 的分工

skill-bartender 負責策略判斷,本插件負責執行,兩者互補;不需要判斷層時,本插件也可以獨立使用。缺失技能的自動安裝不歸它管——那部分流程保留在 skill-bartender 的 quarantine → SkillSpector → 人工審批裏。

安裝與啓用

安裝命令(README 原文):

dsh plugin --profile web add github:akqwpeter-prog/dsh-skill-router

安裝後先重啓運行中的實例,再做驗證——profile bundles 在啓動時加載。插件的 peerDependencies 爲 @deepseek-ai/cordis、@deepseek-ai/dsh-llm、@deepseek-ai/dsh-skill 和 yaml。

一個需要留意的地方:這條命令指向 akqwpeter-prog/dsh-skill-router,而目錄頁與 GitHub 倉庫地址給出的是 MJorgin/dsh-skill-router,兩處不一致,實際倉庫歸屬無法從現有資料確認。安裝前建議覈對你實際要添加的倉庫地址。

驗證方式:對實例說「生成一張海報」,media-tools 會自動注入;說「這個截圖幫我檢查一下」,vision-review 會注入;沒有規則命中時,模型照常工作。

自定義規則

先複製內置默認策略,再編輯副本:

cp default-policy.yaml ~/.dsh/skill-router.yaml

這一步把插件自帶的 default-policy.yaml 複製爲用戶策略文件 ~/.dsh/skill-router.yaml。規則按順序匹配,首條命中即生效,pour 列出要加載的技能名。示例:

# ~/.dsh/skill-router.yaml
rules:
  - match: "(生成|畫).{0,12}(圖|海報|banner)"
    pour: [media-tools]

這條規則匹配「生成/畫」之後 0 到 12 個字符內出現「圖/海報/banner」的消息,命中時注入 media-tools。

經過上面的步驟,路由行爲完全由這份 YAML 決定:改進匹配靠編輯規則,不需要改代碼。

測試覆蓋

插件帶 10 個集成測試用例,覆蓋 pour、dedupe、zero-touch、reject passthrough、URL 路由、郵件/IM 消歧、誤報防護等場景。

適用場景與注意事項

適合誰:

  • 希望技能加載可預期、可復現的人:哪些消息觸發哪些技能,由自己在 YAML 裏寫清楚。
  • 已經在用 skill-bartender 做策略判斷、需要一個確定性執行環節的人。

注意事項:

  • 沒有 LLM judge,沒有 embeddings,只做規則匹配。語義層面的模糊判斷不在它的能力範圍內。
  • 不做缺失技能的自動安裝,該流程保留在 skill-bartender 的 quarantine → SkillSpector → 人工審批。
  • whenToUse 次級觸發依賴技能數據裏有這個字段,而目前大多缺失,實際觸發主要還是靠 YAML 規則。
  • 插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證;本項目許可證爲 MIT。

小結

dsh-skill-router 做的事情很收斂:在 step 開始前用規則決定要不要注入技能,命中才動手,不命中零開銷。策略是數據,改進匹配靠改 YAML;策略判斷可以交給 skill-bartender,也可以由你自己寫進規則,執行交給它。

  • GitHub 倉庫:https://github.com/MJorgin/dsh-skill-router
  • 插件目錄頁:https://www.skillhub.cn/plugins/MJorgin/dsh-skill-router (社區站點,非官方應用商店)
羽毛球分组比赛记分
小程序二维码

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

小夜