前言¶
在 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。
配置入口¶
- Web UI 配置页:侧栏 插件 → 已安装插件 → dsh-project-models,页面下方「项目模型」中维护规则。
- 会话命令:输入框使用
/project-models系列命令(见下文),写回同一份配置。 - 手写 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:添加项目规则¶
先做安装,再在配置页操作:
- 点击「添加项目」,填写项目目录(绝对路径或
~/...)。 - 分别选择主智能体、子智能体的模型;若模型支持推理强度,旁边会出现强度下拉框。
- 点击「保存」,写回当前 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 规则。