dsh-agent-router:在委派子智能體時按關鍵詞確定性選模型

前言

在 DeepSeek Harness(DSH)裏,主智能體通過委派(delegation)拉起子智能體時,往往需要在不同任務上選用不同的 provider 與 model:調研類任務希望用推理能力更強的模型,改 typo、重命名、格式化則用更輕量的模型。若每次都在調用側手寫 provider / model,規則分散、難以審計;若再疊一層「打分分類器」,行爲又不透明、也不好在 CI 裏做 dry-run。

下面介紹的 dsh-agent-router(維護者 gengwg,GitHub 倉庫 gengwg/dsh-agent-router,社區目錄分類爲「模型推理」)做的是另一件事:在委派發生的瞬間,用你寫的一小段關鍵詞規則決定子智能體的路由;沒有分類器、沒有打分,第一條命中的規則生效;沒有任何規則命中時,行爲與未裝插件時一致。

這是什麼

一句話:DSH 插件,在子智能體創建時根據 label 與 prompt 文本中的關鍵詞,從配置裏選出 provider、model(以及可選的 reasoningEffort),且決策過程可導出、可單測。

它包裝官方 subagents.startActivation 服務,子智能體仍走 DSH 自身的容量、取消、結果回傳、持久化與清理;不向根智能體註冊工具,也不改變根智能體的行爲。包聲明瞭 dsh.bundle,通過 dsh plugin add 加入 profile 的 bundle 棧。當前 package 版本爲 0.1.0,許可證 MIT;引擎要求 Node >=22.18,DSH >=0.2.1-rc.5 <0.3.0(README 開發說明中測試針對 DSH 0.2.1-rc.5)。

核心功能

規則匹配

  1. 規則按配置順序排列,先匹配先生效。
  2. 匹配方式:對 label + "\n" + prompt text 做不區分大小寫的子串檢測;keywords 不能爲空列表,空字符串 keyword 永不匹配。
  3. 顯式路由保留:若委派方已在 agentOptions 裏指定 provider、model 或 reasoningEffort,默認情況下規則不會覆蓋;某條規則設置 overrideExplicit: true 時,該規則仍可勝出。
  4. 無兜底路由:沒有規則命中則原樣透傳,由 DSH 自身的繼承邏輯處理。
  5. 非路由選項保留:cwd、token 上限等 agentOptions 不動,只改寫 provider、model、reasoningEffort;若省略 route.reasoningEffort,調用方傳入的 effort 會被丟棄,避免帶到另一模型上。
  6. 對聲明 capabilities.agentOptions: false 的 out-of-process 後端(例如 ACP),插件不嘗試改路由,避免委派失敗。

可檢查的決策

插件導出 decide(rules, { label, promptText, requested }),返回 { action, reason, rule, matchedKeyword, agentOptions? },可在腳本里對規則集做 dry-run。使用前應對配置走 validateConfig(config).rules;decide 假定已是校驗後的結構。畸形規則在加載時失敗並給出路徑(例如 rules.0.match: unknown rule key),避免 typo 靜默錯路由或靜默全放行。

安裝與啓用

安裝依賴 pnpm(dsh plugin 會通過 shell 調用它)。README 給出的從源碼安裝步驟如下:

git clone https://github.com/gengwg/dsh-agent-router
cd dsh-agent-router
dsh plugin --profile web add "$PWD"

將插件加入 profile 的 bundle 棧後,重啓 dsh 以加載。初次啓用時規則列表爲空,不會改寫任何路由。

配置方式

規則寫在 profile 的 ~/.dsh/profiles/<profile>/cordis.patch.yml 中,條目 id 爲 agent-router。示例(字段含義以 README 表格爲準):

- id: agent-router
  name: dsh-agent-router
  config:
    rules:
      - name: research
        keywords: [investigate, research, compare]
        route:
          provider: openrouter
          model: deepseek/deepseek-v4-pro
          reasoningEffort: high
      - name: routine
        keywords: [typo, rename, format]
        route:
          provider: openrouter
          model: deepseek/deepseek-v4-flash
字段 必填 含義
keywords 是 非空列表;子串匹配 label 與 prompt,不區分大小寫
route.provider、route.model 是 子智能體 provider 與 model;須已是你在 DSH 中允許的路由,插件不能代爲開通
route.reasoningEffort 否 寫入子智能體;省略時丟棄調用方 effort
name 否 決策記錄中的標籤
overrideExplicit 否 默認 false;爲 true 時可覆蓋調用方顯式指定的路由

典型用法思路

  1. 在 cordis.patch.yml 中爲常見任務類型寫少量規則(如 README 中的 research / routine)。
  2. 委派子智能體時在 label 或 prompt 裏帶上能命中關鍵詞的用語(例如 prompt 含 research 則走 research 規則)。
  3. 上線前用導出的 decide 對樣例 label/prompt 跑一遍,確認順序與 overrideExplicit 符合預期。

注意:路由在子智能體工具自身的 preflight 之後應用,插件不會再次校驗路由是否在 DSH 模型選擇 allowlist 內;只配置 profile 已允許的路由。路由僅在創建子智能體時生效,運行中的子智能體不會換模型;配額、鑑權、限流失敗也不會自動改路由——若需要失敗回退,需另配 fallback 類插件。關鍵詞匹配刻意保持簡單;若要分類,應自行實現分類器並把結果放進 label。

適用場景與注意

適合:希望在 DSH 子智能體委派鏈路上用可版本化、可審查的 YAML 規則做模型分流,且接受「第一條關鍵詞命中」語義、不需要 ML 分類器的團隊或個人。

使用前請知悉:

  • 插件與 DSH 進程同權限運行;安裝前請閱讀倉庫源碼與 MIT 許可證,確認符合你的安全與合規要求。
  • 社區目錄 skillhub.cn 上的條目 與 GitHub 源碼是瞭解插件的入口;目錄站點爲社區生態索引,與 DeepSeek / 幻方無官方從屬關係。
  • README 列出的限制(allowlist、運行期不換模、簡單關鍵詞)應在設計規則時一併考慮。

結尾

dsh-agent-router 把「子智能體用哪個模型」收束到委派時刻、可配置的 keyword 規則上:行爲確定、可 dry-run,又不打斷 DSH 原生子智能體生命週期。需要細節與更新時,可看目錄頁 https://www.skillhub.cn/plugins/gengwg/dsh-agent-router 與倉庫 https://github.com/gengwg/dsh-agent-router。

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

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

小夜