dsh-window:在 DSH 裏按會話切換上下文窗口

前言

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

核心功能

會話級窗口覆蓋

  1. 選中檔位後,覆蓋立即寫入當前會話;再發一條消息時,request/context 中的上下文窗口即爲新值。
  2. llm.prepareCall 與 llm.resolveModelInfo 被包裝後,請求計量、壓縮壓力判斷看到的是同一會話覆蓋值。
  3. 新建會話不攜帶該選擇,回到適配器目錄裏的默認窗口。

輸入框工具行入口

交互入口在 conversation.input.right 槽位,位於輸入框工具行模型按鈕左側,顯示類似 1M 的純文字按鈕(無圖標、無箭頭)。

  1. 單擊直接展開檔位菜單(與「允許完全訪問」等審批按鈕共用原生 Menu 組件)。
  2. 菜單項包括「默認(跟隨模型)」以及在模型默認窗口範圍內的預設檔位(默認配置下常見爲 300K);當前項右側有勾選。
  3. 鍵盤行走、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 進程權限運行。

典型用法

  1. 安裝並啓用 @rayadesu/dsh-window(當前資料版本 0.4.3)。
  2. 打開任意會話,在輸入框工具行找到模型按鈕左側的窗口文字按鈕(顯示當前基準或檔位,例如 1M)。
  3. 點擊按鈕,在菜單中選擇「默認」或不超過模型默認窗口的預設(如 300K)。
  4. 發送下一條消息,在 request/context 中核對 contextWindow 是否已變爲所選值;request/header.maxTokens 會隨窗口同步收緊。
  5. 新建會話驗證:不應繼承上一會話的檔位。

如需通過本機 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 / 幻方無官方從屬關係;星標與版本以倉庫與目錄頁實時信息爲準。

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

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

小夜