前言¶
在 DeepSeek Harness(DSH)里跑 Agent,常见做法是全程固定一个模型,或在 GUI 里手动改 provider、模型和思考强度。任务从「改文案、跑测试」切到「线上疑难、架构规划」时,要么一直用高推理模型浪费成本,要么记得在提问里交代「用深度思考」,体验并不连贯。
下面介绍的 dsh-set-model(维护者 john-walks-slow)是 DSH / cordis 生态下的「模型推理」类插件(GitHub 约 3 stars,当前 package 版本 0.3.0)。它通过 Jev 决策 或 Agent 工具调用,按任务场景切换模型预设与 reasoning 档位,并支持 Plan 模式自动升降级与 Web 设置页。社区目录见 SkillHub 插件页。
这是什么¶
一句话:把「什么时候用哪个模型、多深的思考」写成策略与档位,交给 Jev 每轮判定或交给 Agent 调工具执行。
插件向会话写入与 GUI 模型选择器相同的 model/selection 机制,Web UI 状态会同步;三个能力开关彼此独立,可只开 Jev、只开工具、组合使用或全部关闭。
三个独立开关¶
| 开关 | 默认 | 作用 |
|---|---|---|
enableModelTools |
true |
注入 set_model / list_models,可切任意已注册 provider / model / 思考强度 |
enablePresetTools |
false |
注入 switch_preset / list_presets,只能在 presets 声明的档位间切换 |
jevEnabled |
false |
每轮首个 step 由 TypeSafe Jev 决策档位,不依赖上述工具 |
档位工具只约束 Agent 的工具面;GUI 里手动切模不受插件拦截,可作为人工兜底。三个开关也都不改变 GUI 既有行为。
核心能力¶
策略提示词 policyPrompt¶
同一份 policyPrompt 有两个读者:
- Agent:在
enableModelTools或enablePresetTools至少一个为真时,以## Model policy段落进入系统提示词。 - Jev:在
jevEnabled为真时,随每轮决策请求发出(state.policy),与用户最新指令、上一轮回复一起参与判定。
两个读者都关闭时,该配置不会被读取,插件仅在日志里给出 warning。
示例:
policyPrompt: |
规划与疑难排查一律先切 deep;日常实现、改文件、跑测试用 daily。
开启档位工具后,Agent 还会看到由 presets 的 id / name / when 自动生成的档位清单;档位的 when 也是 Jev 的判定依据。
模型档位 presets¶
在 profile 里声明一组「模型 + 思考强度」档位。provider / model 同时留空表示沿用当前模型,只调节 reasoningEffort。未配置 presets 时,内置 low / medium / high 三档(均不绑定具体模型)。
运行时上下文¶
插件通过 systemPrompt.context 把当前活跃模型写入 Runtime Context 快照(内容不变则复用,利于 cache)。模型可随时看到类似:
[Current active model: deepseek/deepseek-chat · reasoning: low · preset: daily]
Plan 模式活跃时会附加 [Plan Mode Active];命中档位时才有 preset: xx。
Agent 工具¶
自由调模(enableModelTools):
set_model({ provider?, model?, reasoningEffort?, reason })—reason必填;每次切换会使会话 KV cache 失效,说明里要求 Agent 给出理由、避免频繁切换。list_models({ provider? })— 列出已注册 provider 与模型能力。
档位模式(enablePresetTools):
switch_preset({ preset, reason })—preset为配置中的档位 id;切换自下一个 step 生效。list_presets({})— 列出允许档位、适用阶段与当前生效档位。
工具只注册给 根 Agent,subagent 不提供自主调模;两个工具开关都关即可整体关闭工具面。
Plan 模式自动升降级¶
插件监听 agent/pre-step 的 Plan 投影:
- 进入 Plan(
/plan on):暂存当前模型;优先切到planPreset指定档位,否则切到planModel。 - 退出 Plan(
exit_plan_mode批准或/plan off):默认autoRestorePlanModel: true时恢复进入前的模型。 - 自动切换失败只 warn,不打断 step。
Jev 自动换档¶
jevEnabled: true 时,每轮首个 step 调用 TypeSafe Jev(OpenRouter Decisions API 体系):结合最新用户指令(可与尚未提交的输入对齐)、上一轮回复(尾部截断至 2000 字符)、presets 与 keep,选出档位;置信度低于 jevConfidenceThreshold(默认 0.7)则不动。
凭据可通过设置页或环境变量 JEV_API_KEY / JEV_BASE_URL / JEV_MODEL 配置;单次判定 README 描述约 200–300ms。Plan 模式期间 Jev 主动避让;失败仅 warn,不阻塞对话。Jev 与两个工具开关解耦,可只开 Jev。
安全护栏¶
allowedProviders非空时,白名单外切换拒绝;档位加载时也会丢弃不合规项并记错误日志。- 会话 token 超过目标模型
contextWindow时拒绝切换,并提示先压缩上下文(如 clear_mind)。 - 支持 7 级思考深度
off | minimal | low | medium | high | xhigh | max;目标模型不支持时就近钳制;非推理模型自动剥离思考深度;再经 DSHctx.llm.resolveCallConfig校验。 - 配置诊断(重复档位 id、缺 provider/model、
planPreset指向不存在档位等)写宿主日志,不拖垮整棵插件树。
安装与启用¶
已抓取 README 未给出单独的 dsh plugin add … 一行命令;启用方式以 profile 中的 loader entry 与 Web 设置 为准。Settings 命名空间为 loader entry id:set-model,保存后宿主即时重新应用,无需重启。
在 profile 的 cordis.patch.yml(或设置页写入的用户层)增加条目,例如:
- id: set-model
name: dsh-set-model
config:
enableModelTools: true
enablePresetTools: false
jevEnabled: false
presets:
- id: daily
name: 日常执行
when: 常规实现、修改、测试
provider: deepseek
model: deepseek-chat
reasoningEffort: low
- id: deep
name: 深度攻坚
when: 疑难排查、架构设计
provider: deepseek
model: deepseek-reasoner
reasoningEffort: max
policyPrompt: |
线上事故排查一律先切 deep。
planPreset: deep
autoRestorePlanModel: true
可视化维护路径:设置 → 动态模型。可编辑档位表、策略提示词、工具开关与 allowedProviders、Plan 目标、Jev 开关与 API 等;字段需标记为 volatile 才会出现在 DSH 设置表单(插件遵循 DSH 设置系统约定)。
安装或升级插件包前,请在 GitHub 仓库 自行核对源码与 LICENSE,插件以当前 DSH 进程权限运行。
典型用法¶
1. 只让 Agent 在档位间切换¶
适合希望限制调模范围、避免随意换 provider 的部署:
- 设
enablePresetTools: true,按需关闭enableModelTools。 - 写好
presets与policyPrompt。 - Agent 在规划或排查阶段调用
switch_preset,例如:
{ "preset": "deep", "reason": "疑难并发问题排查,需要深度推理" }
2. 同一模型只调思考深度¶
档位里只填 reasoningEffort,provider / model 留空。Jev 或 switch_preset 会在当前模型上把日常任务留在 low、疑难升到 max,无需换 endpoint。
3. 开 Jev,少用手动与工具¶
- 配置完整
presets(建议每个档位有when,否则 Jev 可判信息不足,插件会 warning)。 - 设
jevEnabled: true,配置jevApiKey或环境变量。 - 用户每轮发新指令即可;命中时宿主日志可见类似:
dsh-set-model: [Jev] auto-switched session <id> to preset "deep" (deepseek/deepseek-reasoner · reasoning: max) with confidence 0.87
4. Plan 与日常分离¶
设 planPreset: deep(或 planModel),日常对话保持 daily 档位;进入 /plan on 自动升档,退出后 autoRestorePlanModel 恢复。
适用场景与注意¶
适合:同一 DSH 会话里任务类型变化大、希望在成本与推理深度之间自动或半自动平衡的团队;已使用 Plan 模式、希望规划阶段默认更强模型的场景;需要 Provider 白名单与上下文窗口护栏的多 provider 部署。
注意:
- 插件能力依赖 DSH 的模型目录与路由;切换失败或 Jev 不可用时应以日志为准,当前档位保持不变。
- 频繁
set_model会失效 KV cache,策略上应优先档位 + Jev,工具切换附带明确reason。 - SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以你安装时的 GitHub / npm 包为准。
结尾¶
dsh-set-model 把「任务类型 → 模型与思考深度」收成可配置的档位与策略,并可选交给 Jev 每轮自动执行,或通过 set_model / switch_preset 交给 Agent 自主执行,Plan 模式还可自动暂存与恢复模型。
- 目录页:https://www.skillhub.cn/plugins/john-walks-slow/dsh-set-model
- 源码与完整配置说明:https://github.com/john-walks-slow/dsh-set-model