前言¶
在 DeepSeek Harness(DSH)裏,主會話常用 Opus、Qwen max 等高檔路由,而 subagent 工具會再開一條子會話做並行或專項任務。若子會話不顯式指定 provider、model 或 reasoning_effort, stock 的 ptc 預設不會給 subagent 單獨的下沉規則,子智能體往往沿用父路由與 effort——例如 Opus 5.5 @ max。子調用一多,總賬單會明顯高於「主模型貴、子任務便宜」的常見分工。
下面介紹社區插件 @lucagiftzek/dsh-subagent-tiering:在子調用未點名路由時,按內置規則把子智能體默認切到父模型同生態裏更便宜的一檔;主智能體若自己傳了上述三個字段,仍以主智能體的選擇爲準。
這是什麼¶
維護者 lucagiftzek 在 npm 與 GitHub 發佈該包,分類屬於模型推理。一句話定位:子智能體默認使用父模型對應的廉價同級路由,除非主智能體在調用裏指定了路由。
插件通過 Cordis 的 tools/pre-execute 在 subagent 執行前補全缺失的 provider / model / reasoning_effort,再走 DSH 原有的校驗流程。規則寫在包內 src/rules.js,也可在 profile 的 cordis.patch.yml 裏用 - id: subagent-tiering 的 config.rules 覆蓋(形狀與內置一致)。
內置降級規則(摘要)¶
當子調用未指定路由且滿足下文「前置條件」時,第一條匹配的規則生效。README 中的對照表如下(2026-09-29 起 Anthropic 默認子模型爲 claude-sonnet-5-5 @ medium,解析失敗時回退 claude-sonnet-5):
| 父路由 | 子默認 |
|---|---|
| anthropic Opus / Fable / Sonnet | anthropic claude-sonnet-5-5 @ medium(回退 claude-sonnet-5) |
| alibaba Qwen max/plus | qwen3.8-flash @ high |
| alibaba / byteplus DeepSeek pro | 對應 provider 的 DeepSeek flash @ high |
| byteplus GLM / Seed | glm-5-3-flash-260828 @ high |
| deepseek-official | deepseek-flash @ high |
| mistral large | mistral-medium-latest |
| 其它 mistral、alibaba GLM、hetzner | 同模型,effort 上限爲 high(不會抬高) |
| 其它情況 | 與 stock DSH 一樣繼承父路由 |
vision-toolkit-<x> 父路由會保留其 wrapper provider。規則項可配置可選的 child.fallbackModels(同 provider、同 effort 的模型 id 列表),當主模型不在會話 captured allow-list 或無法解析時按序嘗試。
subagent_fork 不會被修改——fork 必須留在父路由以複用緩存前綴。
工作機制與邊界¶
插件在 subagent 未傳入 provider、model、reasoning_effort 任一字段時,用第一條匹配規則填值,等價於模型自己點名路由。以下情況不改動調用,子會話仍繼承父路由:
- 主智能體已傳入上述三者之一(主智能體優先)。
- 當前 chat 沒有 model-selection policy(僅當 chat 創建時
subagent-model-selection.enabled爲 true 纔會記錄;更早創建的 chat 不受影響)。 - 目標路由不在 policy 的
allowedModels中。 llm.resolveCallConfig拒絕該路由;若僅 effort 被拒,會去掉 effort 保留路由。- core DSH 凍結了執行記錄(會打一次日誌)。
系統提示中會追加約 90 token 的 subagent-tiering 段,說明默認行爲及如何覆蓋。
權衡: 子模型與父模型不同時無法複用父 prompt cache,單次 subagent 的首輪可能多付一次完整 cache write(README 提到 Anthropic 在 GenUI 移除後約 48k tokens 量級)。若子會話只有一輪調用,可能比改插件前略貴;README 稱該安裝上 subagent 中位數約 28 次調用,整體仍更省。
README 的動機說明(2026-09-27):某一 busy 安裝上 14 天會話日誌里約 70% 的 Anthropic 調用來自 subagent;在 stock ptc 下子會話無默認下沉時,按 human prompt 計 DSH 成本約爲同機 Claude Code 的 2.1 倍(單次調用量級接近)。tool-subagent 的靜態 agentOptions 無法表達「Opus 父 → Sonnet 子、Qwen max 父 → flash 子」這類按父路由變化的策略。
安裝與啓用¶
安裝命令須使用資料原文:
dsh plugin --profile web add @lucagiftzek/dsh-subagent-tiering
# or from GitHub: dsh plugin --profile web add github:lucagiftzek/dsh-subagent-tiering
# then restart dsh web
本地開發目錄也可用:dsh plugin --profile web add link:/absolute/path/to/dsh-subagent-tiering。
要求 Node 22.18 或更新;README 註明在 DSH 0.1.5 與 0.2.1 上使用。包聲明 dsh.bundle,dsh plugin add 會把 bundle 記入 dsh.profile.bundles,並由 patch 插入 subagent-tiering 條目。
沒有 subagent model-selection policy 時,插件不會改變任何行爲——安裝後務必覈對前置條件。
前置條件(Needs)¶
- settings 中啓用子智能體模型選擇,例如:
subagent-model-selection: { enabled: true, allowedModels: [...] }
在 DSH 0.2.x 中,該 harness 設置位於條目 subagent-model-selection-settings,不會從舊版 settings.yaml 自動導入(詳見倉庫 docs/TROUBLESHOOTING.md)。
-
使用
ptc/ptc-lean預設裏帶modelSelectionSettings: true的tool-subagent行(stock 默認)。 -
adaptive-reasoning 的路由列表裏不要包含
anthropic/claude-sonnet-5-5(或回退用的claude-sonnet-5),否則會在每一步覆蓋子會話的 medium effort。
典型驗證方式¶
單元測試:
node --test test/*.test.js
端到端:新建一條 Opus 5.5 會話,讓主智能體在不帶 model 的情況下調用 subagent;子會話的 request/header 應出現 claude-sonnet-5-5 / medium(2026-09-29 之前爲 claude-sonnet-5)。README 記錄 2026-09-27 曾在生產環境驗證 Opus → Sonnet,沙箱驗證 Qwen max → Qwen flash;顯式指定 qwen3.8-max @ low 時保持不動。
適用場景與注意¶
適合: 頻繁用 subagent 做檢索、並行子任務、長鏈路工具調用,且希望主會話保持高檔模型、子會話自動下沉到 Sonnet / flash 等等價檔,又保留主智能體顯式改路由的能力。
注意:
- 插件與 DSH 進程同權限運行;安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證(
package.json版本 0.1.0)。 - 自定義規則、故障排查:倉庫
docs/TROUBLESHOOTING.md、docs/ERRORS.md;可讓智能體加載subagent-tiering-doctorskill(將skills/subagent-tiering-doctor複製到~/.dsh/skills/一次,步驟見 TROUBLESHOOTING)。 - DSH 生態以「一切皆插件」爲方向;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
經過上面的步驟,dsh-subagent-tiering 把「子智能體默認廉價同級、主智能體可覆蓋」寫進 pre-execute 與內置規則表,在啓用 model-selection policy 的前提下降低大量 subagent 調用帶來的路由成本。目錄與源碼:
- 目錄頁:https://www.skillhub.cn/plugins/lucagiftzek/dsh-subagent-tiering
- GitHub:https://github.com/lucagiftzek/dsh-subagent-tiering