dsh-set-model:让 Agent 按任务自主切换模型与思考深度

前言

在 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 投影:

  1. 进入 Plan(/plan on):暂存当前模型;优先切到 planPreset 指定档位,否则切到 planModel。
  2. 退出 Plan(exit_plan_mode 批准或 /plan off):默认 autoRestorePlanModel: true 时恢复进入前的模型。
  3. 自动切换失败只 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;目标模型不支持时就近钳制;非推理模型自动剥离思考深度;再经 DSH ctx.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 的部署:

  1. 设 enablePresetTools: true,按需关闭 enableModelTools。
  2. 写好 presets 与 policyPrompt。
  3. Agent 在规划或排查阶段调用 switch_preset,例如:
{ "preset": "deep", "reason": "疑难并发问题排查,需要深度推理" }

2. 同一模型只调思考深度

档位里只填 reasoningEffort,provider / model 留空。Jev 或 switch_preset 会在当前模型上把日常任务留在 low、疑难升到 max,无需换 endpoint。

3. 开 Jev,少用手动与工具

  1. 配置完整 presets(建议每个档位有 when,否则 Jev 可判信息不足,插件会 warning)。
  2. 设 jevEnabled: true,配置 jevApiKey 或环境变量。
  3. 用户每轮发新指令即可;命中时宿主日志可见类似:
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
羽毛球分组比赛记分
小程序二维码

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

小夜