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
羽毛球分组比赛记分
小程序二维码

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

小夜