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