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 / 幻方无官方从属关系;星标与版本以仓库与目录页实时信息为准。

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

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

Xiaoye