dsh-capability-router:用自然語言在已裝技能、插件與 MCP 裏做能力檢索

前言

在 DeepSeek Harness(DSH)裏,模型能調用什麼,取決於會話啓動時上下文裏掛載了哪些技能、插件和 MCP。目錄外的能力對模型等於不存在,用戶往往得先記住包名再操作。另一方面,插件描述多爲英文,用中文說「自動審批」「免確認」時,僅靠包名很難召回。技能在文件系統、插件在 profile、MCP 在另一份配置,也沒有統一檢索入口。

dsh-capability-router(維護者 difaandailisi,GitHub 倉庫 difaandailisi/dsh-capability-router)把三類能力收成一張本機目錄,提供一個只讀工具,按自然語言意圖匹配並返回帶命中理由的候選。純本地、零依賴,不聯網、不調 LLM、不自動安裝第三方包。當前版本 0.1.2,許可證 MIT;分類上屬於 DSH 社區目錄中的工作流類插件,與 DeepSeek / 幻方無官方從屬關係。

它解決什麼問題

README 歸納了三類具體痛點:

  1. 看不見就想不到:未進入上下文的能力無法被模型想到,用戶要先記住名字。
  2. 中文查詢零召回:只記包名時,中文意圖與英文描述對不上。
  3. 三類割裂:技能、插件、MCP 分散在不同配置與路徑,缺少統一按意圖查詢的入口。

本插件用「需求 → 詞元擴展 → 三類目錄打分 → 候選 + 理由」的流程應對上述問題;打分規則對名稱、標籤、分類、描述分別加權,且同字段最多計兩次,避免長描述靠詞多取勝。

核心功能

目錄採集來源

  • 技能:讀取 SKILL.md frontmatter。
  • 插件:讀取 profile 中的 package.json 及包內 description、keywords。
  • MCP:讀取 mcp.json 與 mcp-known-tools.json。

模型側工具

暴露工具 capability_route,參數包括自然語言需求 need,可選 limit(默認條數)與 kind(例如只篩 plugin)。返回結果包含候選條目、分數,以及可轉述的命中理由(名稱、標籤等字段爲何加分),並註明條目所在位置(例如 desktop profile)。

引導注入

除工具外,插件可向系統提示詞注入一段引導,說明當用戶說的是需求而不是工具名時,應先調用本工具——這是讓檢索被主動用到的設計之一。

與 WorkBuddy 共用引擎

lib/catalog.js 爲純函數、零依賴,可被其他宿主(如 WorkBuddy 技能目錄下的軟鏈與薄 CLI)複用同一套採集與打分邏輯,避免多份實現漂移。

安裝與啓用

DSH 引擎要求見 package.json:dsh 爲 >=0.2.1-0 <0.3.0,Node >=20。

方式一:bundle(進 dsh.profile.bundles,啓動時裝配)

dsh plugin --profile web add dsh-capability-router

bundle 層變更後需要重啓 DSH 進程。

方式二:本地開發

軟鏈進 profile 後,在本地路徑安裝並手工加熱掛載行:

npm install /path/to/dsh-capability-router --legacy-peer-deps

在 profile 的 cordis.patch.yml 末尾追加:

- insert:
    - id: capability-router
      name: dsh-capability-router

patch 層由 HMR 監視,改完即生效,無需重啓。

典型用法

模型調用示例(參數與返回格式來自 README):

capability_route(need: "任務完成時通知我", limit?: 5, kind?: "plugin")

返回示例形態如下(分數與理由由引擎計算,模型可直接轉述 reasons):

檢索「自動審批 不用我每次點同意」→ 1 條(catalog 181 條,更新時間 ...)
1. [plugin] dsh-auto-review — 12 分
   名稱命中「review、auto」+6;標籤命中「approval、review、auto」+4
   位置:desktop profile

配置

在 patch 條目中通過 config 覆蓋;注意 patch 會整體替換 config,需把要保留的鍵全部重述:

- id: capability-router
  name: dsh-capability-router
  config:
    ttlMs: 300000        # 目錄緩存時長,默認 5 分鐘
    limit: 5             # 默認返回條數
    injectPrompt: true   # 是否注入引導段落
    extraSkillRoots:     # 額外技能根目錄,支持 ~;會遞歸找其中的 skills/ 子目錄
      - ~/.workbuddy/skills
    sources:
      skills: true
      plugins: true
      mcp: true

extraSkillRoots 用於本機 DSH 未放技能、而技能在其它工具目錄的場景,掛入後可在同一目錄裏統一檢索。

設計取捨與侷限

README 說明:目錄規模爲幾十到幾百條時,中文 2-gram 加意圖詞典的召回已夠用,且每條命中可解釋、無額外模型調用;未採用向量檢索作爲主路徑。召回質量依賴技能/插件描述是否寫好觸發語義;只覆蓋本機已裝能力,不含遠端市場索引;中文長句可能有噪音,短需求效果更好。工具只給出安裝相關命令,不自動執行安裝——裝插件等於運行第三方代碼,安裝前應自行審閱源碼與許可證;插件在 DSH 進程權限下運行,與 DSH 其它插件相同。

與同生態項目的差異(摘自 README 對比表):dsh-need-finder 面向精選插件列表;dsh-skills-anywhere 側重技能;dsh-cap-manager 做管理面板;dsh-vet 做安裝前安全審計——本倉庫只做檢索,與 vet 等互補。

結尾

若你經常在本機已裝的技能、DSH 插件和 MCP 之間用中文描述需求、又不願死記包名,dsh-capability-router 提供統一的只讀意圖檢索與可解釋命中理由。社區目錄頁:skillhub.cn/plugins/difaandailisi/dsh-capability-router;源碼與完整說明:github.com/difaandailisi/dsh-capability-router。

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

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

小夜