前言¶
在 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)。
核心功能¶
規則匹配¶
- 規則按配置順序排列,先匹配先生效。
- 匹配方式:對
label + "\n" + prompt text做不區分大小寫的子串檢測;keywords不能爲空列表,空字符串 keyword 永不匹配。 - 顯式路由保留:若委派方已在
agentOptions裏指定provider、model或reasoningEffort,默認情況下規則不會覆蓋;某條規則設置overrideExplicit: true時,該規則仍可勝出。 - 無兜底路由:沒有規則命中則原樣透傳,由 DSH 自身的繼承邏輯處理。
- 非路由選項保留:
cwd、token 上限等agentOptions不動,只改寫provider、model、reasoningEffort;若省略route.reasoningEffort,調用方傳入的 effort 會被丟棄,避免帶到另一模型上。 - 對聲明
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 時可覆蓋調用方顯式指定的路由 |
典型用法思路¶
- 在
cordis.patch.yml中爲常見任務類型寫少量規則(如 README 中的 research / routine)。 - 委派子智能體時在 label 或 prompt 裏帶上能命中關鍵詞的用語(例如 prompt 含
research則走 research 規則)。 - 上線前用導出的
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。