前言¶
在 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