dsh-default-model:在設置裏固定 DeepSeek Harness 默認模型

前言

DeepSeek Harness(DSH)裏「默認模型」是一組配置:provider、model 和推理檔位 reasoningEffort。新建對話、重啓後恢復、以及 SurfCore 等橋接讀到的,往往都依賴 Harness 內部的 agentDefaultModel.currentSelection()。

實際使用時常見三種改法都不順手:手改 profile 的 cordis.patch.yml 容易寫錯且不清楚哪份 profile 生效;dsh-model-override 之類靠環境變量在啓動前寫死,UI 裏改不了;輸入框旁的模型選擇器在切換會話模型時會順帶調用 agentDefaultModel.saveSelection(),等於把「最後一次在任意對話裏點的模型」寫進全局默認,你以爲改好了默認,下一個新對話又跟着最後一次點擊走。

下面介紹社區插件 dsh-default-model(維護者 LFELKEEA,分類:模型推理)。它在 設置 → 默認模型 裏讓你選 provider / model / 檔位,並把選擇固定下來:之後在新對話裏換模型、重啓 Harness、SurfCore QQ 工作區跟隨默認時,都不會再把這份默認帶跑。

這是什麼

dsh-default-model 是 DSH 的 Host + 前端 bundle 插件(版本 0.1.0,MIT)。一句話:在設置頁改默認,並把同一份選擇寫入 <DSH_HOME>/default-model.json,用只讀方式覆蓋 agentDefaultModel.currentSelection(),與「在對話裏臨時換模型」解耦。

  • 改默認:設置頁選擇後走官方 agentDefaultModel.saveSelection(),並同步鏡像到組合條目(鏡像失敗時固定仍生效,/state 的 mirrored 會說明原因)。
  • 固定默認:狀態文件是唯一真相源;任意會話裏 saveSelection() 仍會寫組合條目,但讀口始終返回固定值。
  • 解除固定:POST /reset 刪狀態文件並卸覆蓋,恢復 Harness 原生行爲。

目錄頁:https://www.skillhub.cn/plugins/LFELKEEA/dsh-default-model
源碼:https://github.com/LFELKEEA/dsh-default-model

核心功能

設置頁操作

Host 半邊提供 /dsh-default-model/api/{state,save,reset};瀏覽器半邊註冊 settings.section 分頁。有 llm 服務時可從目錄選模型,沒有時列表爲空但仍可手填 provider / model。

固定後爲何不會被帶跑

  1. 會話內切模型:DSH 後臺仍會 saveSelection(),插件只覆寫 currentSelection() 的返回值,新會話、modelCatalog.default、跟隨默認的 SurfCore 工作區讀到的仍是固定值。
  2. 組合條目熱重載:寫入可能讓 agent-default-model 服務換實例,新實例上沒有覆蓋;插件約每 2 秒對賬,讀出的不是固定值就重裝覆蓋,避免「固定了聊一次又變」的半失效。

安裝覆蓋按三級回退並用行爲驗證(讀一次 currentSelection()):own-assign → own-define → proto-assign;都失敗時 /state 返回 attached:false 和 attachError,設置頁不會假裝成功。

與 SurfCore(QQ 等)

SurfCore 兩個 QQ 工作區默認 config.json → dsh.followDefaultModel: true,讀的是 session.modelCatalog.default(即這裏的 currentSelection())。在本插件保存默認後,QQ 工作區下一輪會用同一套(橋接約 15 秒緩存)。在 SurfCore 控制台取消「跟隨 DSH 默認模型」則改用 config.json 裏寫死的模型,與本插件無關。

安裝與啓用

安裝命令(來自倉庫 README,desktop profile):

dsh plugin --profile desktop add github:LFELKEEA/dsh-default-model

裝完後必須重啓 Harness(宿主插件不支持熱重載;改代碼後 plugin_manager toggle 也可能返回 application:"restart-required")。只帶前端、缺少 bundle 時會報 dsh.bundle 缺失;本包 package.json 的 dsh.bundle.patch 與根目錄 cordis.patch.yml 齊全,一條命令即可。

重啓後在 設置 → 默認模型 完成選擇與保存。

典型用法

  1. 打開 設置 → 默認模型。
  2. 選擇 provider,在列表中點選模型,或直接填寫模型 id。
  3. 按需選擇推理檔位;不選表示「跟隨模型默認」。
  4. 點擊 保存爲默認模型。卡片顯示「已固定」,並展示當前原生默認值供對照。
  5. 需要恢復 Harness 原行爲時,點擊 解除固定(對應 POST /reset)。

狀態文件示例(支持 BOM,Windows 編輯器寫入也可讀):

{ "provider": "dfy", "model": "deepseek-v4.1-flash-1017", "reasoningEffort": "max" }

適用場景與注意

適合誰:經常在 DSH 裏開新對話、用 SurfCore QQ 工作區,且希望「全局默認模型」與「某個對話裏臨時選的模型」分開的開發者或日常用戶。

兼容性(README 說明):

  • 需要 Harness 暴露 agentDefaultModel;沒有時設置頁只讀並說明原因。
  • 沒有 configEditor 時無法鏡像組合條目(mirrored: "skipped"),固定仍生效。

安全與權限:插件以當前 DSH 進程權限運行;寫 API 僅接受本機迴環 Host,application/json,並對跨站來源做校驗。安裝前建議自行查看源碼與 MIT 許可證。社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

排查要點:

  • 頁面「讀取失敗:HTTP 404」→ 檢查路由前綴是否只拼一次(API_ROOT = 'dsh-default-model/api')。
  • 「已固定,但沒掛上」→ 查看 <DSH_HOME>/default-model.boot.json、default-model.debug.json。
  • 行爲未更新 → 重啓 DSH,不要依賴熱重載。

維護者在倉庫提供 Host / 客戶端 smoke 測試:node scripts/smoke.mjs、node scripts/client-smoke.mjs(npm test 串聯兩者)。

結尾

dsh-default-model 把「在設置裏改默認」和「固定默認不被會話選擇器帶跑」做成同一頁 UI,併兼顧組合條目熱重載下的自愈。若你受困於「點一次模型選擇器就改了全局默認」,可以按上文命令安裝、重啓後在設置裏保存爲默認並固定。

羽毛球分组比赛记分
小程序二维码

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

小夜