前言¶
在 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