dsh-context-control:在 DeepSeek Harness 裏看清 token 構成並裁剪請求

前言

在 DeepSeek Harness(DSH)裏跑長會話時,每一輪請求往往都會重發系統提示、工具定義、技能與 MCP 說明,再加上其他插件注入的運行時上下文;會話歷史也會持續擠佔上下文窗口。只看 DSH 自帶的窗口占用,很難判斷「慢」和「滿」究竟是歷史消息堆積,還是每輪固定開銷過大。

已有插件例如 dsh-context 更側重跨會話查看上下文構成與演變;dsh-context-control 把方向落在「先看清 token 花在哪,再決定這一輪發什麼」——在不動日誌、不改插件源碼的前提下,只改下一次請求的裝配結果。

這是什麼

dsh-context-control 是 creatjy 維護的 DSH 工作流類插件:看清 token 構成,按會話懶加載技能 / MCP / 插件,並在需要時壓縮會話。它不改動 DSH 日誌,也不改其他插件源碼;開關與文本改寫都只作用於下一次請求的裝配,可隨時還原。

  • 目錄頁:https://www.skillhub.cn/plugins/creatjy/dsh-context-control
  • 源碼:https://github.com/creatjy/dsh-context-control
  • 許可證:MIT(README 與 package.json 一致)
  • 當前 package 版本:0.6.8

兩個入口分別解決什麼問題

插件在 Web GUI 提供兩處入口,對應「全局請求構成」與「當前會話」兩類問題。

入口 回答的問題 能做什麼
左側「上下文管控」配置臺 整個請求由什麼組成? 按系統提示 / 運行時注入 / 工具定義拆 token;逐段開關、編輯、還原;配置項目與全局規則。
輸入框左側的「上下文」膠囊 這條會話佔多少?下一輪還會發什麼? 看當前窗口、每次重發、下一輪預計;按會話切換技能 / MCP / 插件檔位;開關提示段與工具;立即壓縮或設置自動壓縮。

配置臺頂部有三段比例尺(系統內容 / 運行時注入 / 工具定義),下面按「構成 / 項目 / 全局」組織:構成展示當前項目實際會發出的全部內容;項目定義工作區規則並可被子項目繼承;全局爲所有項目共享的默認值。

膠囊與 DSH 上下文統計同口徑,展開後可見三層數字:當前窗口(會話已佔用)、每次重發 ≈(下一輪還會再發的系統提示與工具定義,已扣本會話隱藏項)、下一輪預計 ≈(兩者相加的粗估)。

核心能力

請求側與會話側分開覈算

DSH 的上下文佔用由兩部分組成:

  • 請求側(每輪重發):系統提示段、運行時注入、技能說明、工具定義。
  • 會話側(窗口內累積):用戶消息、助手消息、工具調用與結果。

插件分列展示;請求側按來源分組並帶 ≈token、預覽與開關;會話側讀取 DSH 的 tokenMeter,「會話已累積」與膠囊、DSH 當前窗口一致。

逐段編輯系統提示與運行時注入

與「只看統計」的工具相比,本插件可以改這一輪實際發送的內容。

在配置臺「構成」中:

  • 系統提示段(sections):段名、來源、預覽、≈token;可開關、編輯文本、還原;作用域爲全局 / 項目 / 本會話。
  • 運行時注入(contexts):其他插件或宿主在請求前塞進上下文的內容;可單獨關閉或改寫後再發;作用域爲全局 / 項目。
  • 工具定義(tools):僅支持開關,不能改 schema 文本;作用域爲全局 / 項目 / 本會話。
  • 技能 / MCP / 插件:支持加載 / 簡介 / 隱藏三檔;作用域爲全局 / 項目 / 本會話。

編輯保存後只寫入本地規則,下一次裝配時用你的文本替換對應段;點「還原」可回到宿主或插件生成的原文。將某能力設爲「隱藏」會連帶去掉其工具定義與相關提示段。

工具開關通過 agent.ctx.tools.restrict({ deny }) 等機制限制;全關工具後模型確實無工具可用,界面會提示但不會強制攔截。

技能 / MCP / 插件:三檔懶加載(本會話)

檔位 這一輪發什麼 模型調用時
加載 正文與工具定義均在 正常調用
簡介 只留一行說明,正文與工具不發 自動恢復完整內容
隱藏 連簡介也不發 先彈審批;拒絕則調用失敗

三檔默認作用於本會話;行內標「本會話」,回退可重新點選檔位。同一能力在多個頁面出現時,關聯的說明段與工具會同步;優先級從低到高爲:全局 → 項目繼承鏈 → 項目覆蓋 → 本會話覆蓋。

系統提示段與系統工具無「簡介」檔,僅有加載 / 不加載。

會話內壓縮

  • 立即壓縮:宿主暴露壓縮服務時,由 DSH 選擇可壓縮區間並摺疊歷史;本輪仍在運行時會排隊。
  • 自動壓縮:窗口占用達到設定比例(5%–95%)後,在空閒時執行。
  • 無壓縮服務時:按鈕變爲「發送壓縮指令」,以 steer 方式讓模型就地摺疊,不硬改會話日誌,可回滾。

AI 建議(0.6.0 起,默認關閉)

在配置臺或膠囊中手動觸發後,纔將當前作用域的條目元數據交給當前會話模型,生成帶 reason / confidence / risk / 預計少發 的建議;需先預覽、勾選再「應用選中」,可撤銷。首次啓用會說明隱私範圍:發送條目名稱、類型、token 數,不發送會話正文。基礎能力(文件讀寫、shell、壓縮、上下文管控自身等)受保護,只允許保留或簡介。

數據存放與邊界

規則寫在本地 <DSH_PROFILE_DIR>/dsh-context-control/modes.json,純 JSON,可手改;刪除該文件即恢復默認。帶 ≈ 的數爲估算,真實會話側以計量器爲準。壓縮是否可用取決於當前 DSH profile 是否暴露壓縮服務。README 註明驗證環境爲 macOS,其他系統可能存在差異。

安裝與啓用

從 GitHub 直裝(README 原文):

dsh plugin add github:creatjy/dsh-context-control

或下載 Release 中的 tarball,例如 0.6.8:

dsh plugin add ./dsh-context-control-0.6.8.tgz

也可通過 GitHub Packages(npm 包名 @creatjy/dsh-context-control),需先對 https://npm.pkg.github.com 完成 npm 認證後再執行:

npm login --scope=@creatjy --auth-type=legacy --registry=https://npm.pkg.github.com
npm config set @creatjy:registry https://npm.pkg.github.com
dsh plugin add @creatjy/dsh-context-control

安裝後重啓 DSH,並刷新 Web GUI。左欄應出現「上下文管控」,輸入框左側出現類似 上下文 12.7k ▾ 的膠囊。

插件以當前 dsh 進程權限運行,安裝前請自行查閱源碼與 MIT 許可證,確認是否符合你的環境與安全要求。

典型用法

README 中給出的可復現場景如下:

  1. 長會話越跑越慢:打開膠囊,將暫不需要的 MCP / 插件設爲「簡介」或「隱藏」,再點「立即壓縮」。
  2. 某個插件注入過多:配置臺 →「構成」→「運行時注入」,找到來源後關閉;若要保留結構,可「編輯」壓成一句話。
  3. 系統提示過長:在「系統提示」裏按段查看 ≈token,改寫爲本項目需要的規則,或關閉不用的工具說明段。
  4. 減少重複手工調整:在項目層設一套默認規則,會話內只覆蓋當前需要的幾項。

適用場景與注意

適合經常在 DSH 中開長會話、裝多個技能 / MCP / 插件,且希望區分「每輪固定開銷」與「歷史佔用」的開發者。若需要跨會話深挖上下文演變,可配合 dsh-context 使用。

「隱藏」能力依賴審批;若全局關閉審批,隱藏項調用會直接失敗。插件不額外上傳會話內容,token 統計在本地完成。DSH 生態以「一切皆插件」爲理念;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-context-control 把請求裝配與會話佔用拆開呈現,並在配置臺與會話膠囊裏完成開關、編輯、懶加載與壓縮,目標是讓你在發下一輪之前就能看清 token 構成並做裁剪。

  • 社區目錄:https://www.skillhub.cn/plugins/creatjy/dsh-context-control
  • GitHub:https://github.com/creatjy/dsh-context-control
羽毛球分组比赛记分
小程序二维码

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

小夜