前言¶
DeepSeek Harness(DSH)裏,模型的默認上下文窗口寫在適配器目錄(Profile)裏,改 defaultContextWindow 會作用於所有會話。若你只想在當前對話裏把窗口臨時收窄到例如 300K,又不想動全局配置,就需要一種「會話級覆蓋」機制。
下面介紹社區客戶端插件 dsh-window(維護者 rayadesune)。它是 luyiheng1111/dsh-context-window-picker 的延續維護版:在輸入框工具行提供檔位切換,覆蓋只寫在宿主內存裏並按 sessionId 生效,新建會話自動恢復 Profile 默認值。同類思路可對標 WorkBuddy 模型面板裏「思考強度」與「上下文窗口」並列、且僅在當前會話生效的配置方式。
這是什麼¶
dsh-window 是 Session-scoped context window switcher:在 DSH 模型選擇相關的交互區域旁,爲當前會話臨時切換 contextWindow;不寫配置文件、不寫會話日誌。
- 插件 id / API 前綴:
dsh-window(npm 發佈名爲@rayadesu/dsh-window,因 npm 上的dsh-window已被佔用) - 分類:客戶端(工具行 UI + 宿主側
llm/ 壓縮包裝) - 許可證:MIT(保留原作者 luyiheng1111 署名,當前維護 rayadesune)
- 適用 DSH:
package.json中engines.dsh爲>=0.2.1-rc.2 <0.3.0-0
核心功能¶
會話級窗口覆蓋¶
- 選中檔位後,覆蓋立即寫入當前會話;再發一條消息時,
request/context中的上下文窗口即爲新值。 llm.prepareCall與llm.resolveModelInfo被包裝後,請求計量、壓縮壓力判斷看到的是同一會話覆蓋值。- 新建會話不攜帶該選擇,回到適配器目錄裏的默認窗口。
輸入框工具行入口¶
交互入口在 conversation.input.right 槽位,位於輸入框工具行模型按鈕左側,顯示類似 1M 的純文字按鈕(無圖標、無箭頭)。
- 單擊直接展開檔位菜單(與「允許完全訪問」等審批按鈕共用原生
Menu組件)。 - 菜單項包括「默認(跟隨模型)」以及在模型默認窗口範圍內的預設檔位(默認配置下常見爲 300K);當前項右側有勾選。
- 鍵盤行走、
Esc關閉、點擊外部關閉等行爲全部由@deepseek-ai/dsh-client-ui-primitives的Menu負責,插件不重寫。
插件不在原生模型彈窗內追加控件:conversation.input.model.label 僅按契約渲染非交互的 model.name 文本。
壓縮閾值與檔位策略¶
只改窗口不改壓縮閾值時,按 Profile 大窗口(例如 1M)計算的壓縮點可能晚於實際規劃窗口,存在超窗風險。dsh-window 對非默認檔位做了對齊:
| 檔位 | 壓縮閾值 | 規則 |
|---|---|---|
| 默認 | min(窗口 × 0.8, 窗口 − 預留 − headroom) |
官方規則,插件不干預 |
| 300K(示例) | 307,200 | 等於所選窗口本身 |
默認 presets 爲 [307200]。覆蓋縮小的是 DSH 規劃窗口,適配器目錄中的真實 contextWindow 仍可大於所選檔位,因而在該前提下「到所選窗口才壓縮」不會與物理上限衝突。
安裝與啓用¶
推薦通過 npm 安裝(命令來自項目 README):
npm i @rayadesu/dsh-window
安裝後按 DSH 插件管理流程啓用 bundle。插件無構建步驟、無運行時依賴(React 由宿主提供),默認使用 bundle patch 中的 presets、completionRatio 等,無需額外配置即可使用。
若曾安裝原版 dsh-context-window-picker,請先卸載再裝本插件。兩者插件 id 不同,同時安裝會對 llm 服務產生雙重包裝。
說明:README 還提到可從源碼用本地目錄安裝(Install from path);本文不展開 clone 步驟。安裝前請自行閱讀倉庫源碼與 LICENSE,插件以當前 DSH 進程權限運行。
典型用法¶
- 安裝並啓用
@rayadesu/dsh-window(當前資料版本 0.4.3)。 - 打開任意會話,在輸入框工具行找到模型按鈕左側的窗口文字按鈕(顯示當前基準或檔位,例如
1M)。 - 點擊按鈕,在菜單中選擇「默認」或不超過模型默認窗口的預設(如 300K)。
- 發送下一條消息,在
request/context中核對contextWindow是否已變爲所選值;request/header.maxTokens會隨窗口同步收緊。 - 新建會話驗證:不應繼承上一會話的檔位。
如需通過本機 API 讀寫狀態(迴環 JSON,僅供本機客戶端使用):
| 路徑 | 方法 | 用途 |
|---|---|---|
/dsh-window/api/state |
GET | 基準窗口、覆蓋值、候選檔位 |
/dsh-window/api/set |
POST | 設置覆蓋;傳 null 清除 |
/dsh-window/api/health |
GET | patch 計數與配置(診斷) |
可選配置¶
可在 bundle patch 或 profile patch 中調整下列鍵(默認值來自 README):
| 鍵 | 默認 | 說明 |
|---|---|---|
presets |
[307200] |
候選窗口;只展示不超過模型默認值的項 |
completionRatio |
0.25 |
單次輸出上限 ≤ 窗口 × 該比例 |
headroomTokens |
65536 |
與壓縮策略 headroom 對齊 |
minimumWindow |
131072 |
最小可選窗口;更低者僅顯示「默認」 |
修改 profile 的 cordis.patch.yml 可由 HMR 熱加載;client.js 變更後仍需刷新客戶端窗口。
適用場景與注意¶
適合誰
- 需要在單條長對話裏臨時收窄上下文、又不想改全局 Profile 的 DSH 用戶。
- 希望壓縮觸發點與所選小窗口一致,而不是仍按 1M 檔位壓力才壓縮的場景。
已知限制(來自 README)
- 預設檔位只顯示不超過模型基準窗口的值;放大窗口屬於模型 / Profile 能力。
- 覆蓋隻影響之後發出的請求;正在執行的 step 保持啓動時的窗口。
- 入口在工具行,不在官方模型彈窗內部;模型按鈕上不會追加窗口後綴。
安全與信任
宿主通過包裝 llm、Session#requestHeader、compaction 等實現能力;卸載時聲稱會精確還原。對外 API 校驗 Host、Origin,拒絕跨站 sec-fetch-site。安裝插件等同於信任維護者代碼在同一進程內執行,請從官方倉庫覈對源碼與 MIT 許可後再安裝。
結尾¶
dsh-window 把「上下文窗口」從全局 Profile 配置裏拆成「按會話、可撤銷」的工具行操作,並在縮窗時同步調整壓縮閾值邏輯,避免規劃窗口與壓縮點錯位。
- SkillHub 目錄頁:https://www.skillhub.cn/plugins/rayadesune/dsh-window
- GitHub:https://github.com/rayadesune/dsh-window
社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;星標與版本以倉庫與目錄頁實時信息爲準。