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