dsh-project-models:按项目目录路由主 agent 与子 agent 模型

前言

在 DeepSeek Harness(dsh)里做多仓库或多产品线开发时,常见做法是全局选一套主模型和子 agent 模型。换到另一个项目再手改模型,既慢也容易忘。全局默认适合「始终同一种配置」的场景,但不适合「项目 A 用一套推理栈、项目 B 用另一套」的日常切换。

下面介绍社区插件 dsh-project-models(维护者 futuretea,分类:模型推理):按项目目录为 dsh 的主 agent和 sub-agent 分别指定模型;在某个项目下开会话时自动套用该项目的配置,换目录即换模型,无需每次在 UI 里重选。

这是什么

dsh-project-models 是 dsh 的 Cordis 插件,版本 0.1.0(MIT 许可证)。核心能力是一句 README 里的定位:Per-project model routing for DeepSeek Harness——每个项目目录一条路由规则,分别绑定 main(主智能体)与 sub(子智能体)的 provider / model,并在模型支持推理强度时配置 reasoningEffort。

插件在 SkillHub 目录 展示,源码与说明见 GitHub:futuretea/dsh-project-models。SkillHub 为社区独立站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查看源码与许可证,插件以当前 dsh 进程权限运行。

环境要求(来自 package.json):Node >=24.9.0,dsh >=0.2.2-rc.1 <0.3.0。

核心功能

按会话根目录匹配项目

规则以会话的根目录匹配项目配置:在多条规则中取路径最长的一条;路径支持 ~,符号链接会解析为真实路径。sub-agent 按其所属顶层会话的目录匹配。

未匹配到任何项目时,插件不改动行为;未配置 main 时沿用 dsh 默认模型。

主模型与子模型

  • 主 agent:匹配项目的 main 在新建会话时生效。
  • sub-agent:匹配项目的 sub;优先级为:委派时显式指定的模型或推理强度(委派参数或 tool-subagent 的 agentOptions)> 配置中的 sub > dsh 默认(沿用父 agent)。

恢复的旧会话保留已记录的模型;规则主要作用于新建会话与新建的 sub-agent。

配置入口

  1. Web UI 配置页:侧栏 插件 → 已安装插件 → dsh-project-models,页面下方「项目模型」中维护规则。
  2. 会话命令:输入框使用 /project-models 系列命令(见下文),写回同一份配置。
  3. 手写 YAML:直接编辑当前 profile 的 cordis.patch.yml。

若通过 --patch 或 $DSH_HOME/cordis.patch.yml 写入本插件配置,其优先级高于 profile,此时命令无法保存,需改配置文件(README 已知限制)。

安装与启用

官方 README 给出的本地构建并安装到 profile 的步骤如下(支持 dsh >=0.2.2-rc.1 <0.3.0):

git clone https://github.com/futuretea/dsh-project-models.git
cd dsh-project-models && pnpm install && pnpm build
dsh plugin --profile web add "$(pwd)"

也可以执行 pnpm pack,再安装生成的 tarball。完成后在 Web profile 的已安装插件列表中应能看到 dsh-project-models。

典型用法

Web UI:添加项目规则

先做安装,再在配置页操作:

  1. 点击「添加项目」,填写项目目录(绝对路径或 ~/...)。
  2. 分别选择主智能体、子智能体的模型;若模型支持推理强度,旁边会出现强度下拉框。
  3. 点击「保存」,写回当前 profile 的 cordis.patch.yml。

保存时若路径为空、不是合法绝对路径(经 ~ 展开后),或与其他项目重复,将无法保存。

新建规则时,项目路径默认取会话目录向上最近的含 .git 的目录(dsh 进程所在机器的文件系统);远程工作区会退化为会话目录本身。

命令:查看与即时改模型

在会话输入框中使用:

命令 作用
/project-models 查看当前项目的配置和本会话正在用的模型
/project-models main <provider>/<model> [effort] 设置主 agent 模型,当前会话从下一步起立即生效
/project-models sub <provider>/<model> [effort] 设置 sub-agent 模型
/project-models remember 把本会话当前模型记为该项目的主模型
/project-models unset main\|sub 删除一项
/project-models forget 删除该项目的全部配置

provider 为 dsh 内已注册的提供方 id(如 openai、moonshotai、zai 或自定义提供方);model id 可含 /。命令会校验提供方已注册、模型可解析、推理强度在模型声明范围内。

直接编辑 cordis.patch.yml

经过上面的步骤若需批量维护或纳入版本管理,可编辑 profile 的 cordis.patch.yml,例如:

- id: project-models
  config:
    projects:
      - path: ~/dev/project-a
        main: { provider: openai, model: gpt-astra }
        sub: { provider: openai, model: gpt-sol }
      - path: ~/dev/project-b
        main: { provider: moonshotai, model: kimi-k3, reasoningEffort: high }
        sub: { provider: zai, model: glm-5.3 }

保存后,在对应路径下新建会话即可按规则选用模型。

适用场景与注意

适合谁:同时在多个代码库上用 dsh,且希望「目录 = 模型策略」固定下来;主 agent 偏重一种模型、子 agent 偏重另一种(例如主模型负责编排、子模型负责专项推理)的团队或个人。

使用注意:

  • 配置页仅在 Web UI 提供;CLI 或其他界面请用命令或 YAML。
  • 配置页浏览器端由 esbuild 按 dsh 客户端模块格式打包,依赖 Web 壳提供的 react、dsh-client-ui-primitives 等;dsh 升级若改动这些接口,配置页可能需要随插件更新。
  • 插件逻辑跑在 dsh 进程内,路径解析以该进程可见的文件系统为准。

已知限制(README):除上述 patch 优先级、远程工作区路径退化外,星标等目录元数据以 SkillHub / GitHub 页面为准(当前 GitHub 星标为 0)。

结尾

dsh-project-models 把「每个项目用哪套主/子模型」从反复手选变成目录级配置:Web 页保存、命令即时改、YAML 可版本化,并与委派时的显式子模型优先级对齐 README 规则。

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

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

Xiaoye