前言¶
做智能體開發時經常遇到這種情況:模型默認的 temperature 或 maxTokens 不合適,想臨時改一下對比效果,但每次都要去改配置文件、重啓服務。如果只是想在做某次對話時把 temperature 從默認值調到 0.2,現有做法要麼改全局配置影響所有會話,要麼沒有入口可改。
DeepSeek Harness(DSH)的理念是「一切皆插件」,這類需求正適合做成插件。下面介紹的 dsh-sampling-sliders 就是這樣一個插件:在輸入欄加一個「採樣」按鈕,點開就能用滑桿調整 temperature 和 maxTokens,對每次模型調用生效。
這是什麼¶
dsh-sampling-sliders 是由 Semidia 維護的 DSH 插件,當前版本 0.1.0,採用 MIT 許可證。它的定位一句話可以說清:輸入欄「採樣」按鈕彈出 temperature / maxTokens 滑桿,經 agent/request 鉤子微調每次模型調用的採樣參數。
它作用於所有 Provider,包括官方 DeepSeek 和第三方接入,因爲攔截髮生在 Provider 路由之前——不管請求最終路由到哪個模型,採樣參數都會被應用。
核心功能¶
插件的已覈實能力如下:
1、輸入欄「採樣」按鈕,位於 conversation.input.right 插槽,點擊彈出採樣面板。
2、兩個滑桿,各帶一個「覆蓋」開關:
temperature:範圍 0–2,步進 0.05;maxTokens:範圍 512–32768,步進 256。
不勾選「覆蓋」時該字段跟隨模型默認值,不會注入。
3、熱調 / 持久化兩種模式:
- 持久化:值寫入 settings,長期生效,重啓後仍在;
- 熱調:值僅在本次運行期間生效,下次啓動自動清除。
工作原理¶
插件分爲 Host 和 Client 兩部分。
Host(src/index.ts)通過 inject: ['settings'] 注入 settings,註冊名爲 sampling-sliders 的 settings 命名空間,schema 爲 { mode, temperature?, maxTokens? }。它同時監聽 agent/request 瀑布事件:先 await next() 拿到機器本來會使用的 LlmCallConfig,如果命名空間裏有數值,就把它們合併進返回的替換配置。啓動時如果發現殘留的 mode: 'hot' 值,會將其清空——這就是熱調模式「下次啓動自動清除」的實現方式。
Client(dist/client.js)是一個通過 window.__ModuleLoader__.load({ id, factory }) 注入的瀏覽器 bundle,經 connection.api.settings.describe/update/replace 讀寫命名空間,負責渲染按鈕和彈層。
之所以滑桿只有 temperature 和 maxTokens 兩個字段,是因爲 LlmCallConfig 抽象層只暴露 temperature / maxTokens / stop,沒有 top_p,插件沒有做超出抽象層的猜測。
安裝與啓用¶
這是一個 Out-of-tree bundle,從 GitHub 直裝即可,不需要 npm 賬號,也不需要 npm publish。本包自帶 dsh.client 元數據與 exports["./client"],客戶端 bundle 會隨頁面加載自動注入。
完整步驟如下:
# 1. 構建
npm install && npm run build
# 2. 裝進 profile(本地目錄方式)
dsh plugin --profile web add link:D:/path/to/dsh-sampling-sliders
# 3. 組合掛載(兩種任選其一)
# a. 加入 profile package.json 的 dsh.profile.bundles
# (會應用本包 cordis.patch.yml 裏的 insert 行)
# b. 在 profile 的 cordis.patch.yml 裏手動加:
# - insert:
# - id: sampling-sliders
# name: dsh-sampling-sliders
# 4. 重啓
dsh --profile web # 或重啓 web 服務
第 1 步把 TypeScript 源碼編譯爲 Host 產物並生成 Client bundle;第 2 步把本地目錄鏈接進 web profile;第 3 步的兩種方式效果相同,選一種即可;第 4 步重啓後插件生效。
典型用法¶
啓用後使用流程很簡單:
1、在輸入欄找到「採樣」按鈕,點擊彈出採樣面板。
2、拖動 temperature 或 maxTokens 滑桿到目標值,勾選對應的「覆蓋」開關。兩個字段可以只覆蓋其中一個,未勾選的字段跟隨模型默認。
3、選擇模式:需要臨時調試就選熱調,重啓後自動清除;確認這組參數要長期使用就選持久化,值會寫入 settings,重啓後仍然生效。
之後每次模型調用都會應用這組參數,無論請求路由到哪個 Provider。
適用場景與注意¶
適合的場景:
- 調試階段想臨時壓低 temperature 觀察輸出穩定性,改完即棄;
- 某類任務確實需要更大的 maxTokens 上限,希望長期生效;
- 同時使用官方 DeepSeek 和第三方接入,希望一組採樣參數對所有 Provider 統一生效。
使用前有幾點需要注意:
1、攔截器只在插件運行期間生效。值通過 settings 持久化,但卸載插件後不會再注入,配置也就不起作用了。
2、滑桿只有 temperature 和 maxTokens 兩個字段,這是 LlmCallConfig 抽象層的邊界,不是插件偷工。
3、插件以當前 dsh 進程的權限運行。安裝第三方插件前,建議先閱讀源碼(本倉庫的 Host 源碼就在 src/index.ts,可以逐行覈對上面描述的攔截邏輯),確認許可證與自身使用場景兼容。
結語¶
dsh-sampling-sliders 解決的問題很具體:讓採樣參數的調整從「改配置、重啓」變成「點按鈕、拖滑桿」,並且用熱調 / 持久化兩種模式區分了臨時實驗和長期配置兩類需求。攔截點選在 Provider 路由之前,也讓它對混合接入的場景同樣有效。
- GitHub:https://github.com/Semidia/dsh-sampling-sliders
- 社區目錄頁:https://www.skillhub.cn/plugins/Semidia/dsh-sampling-sliders(社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係)