dsh-context-window-picker:在模型弹窗里按会话切换上下文窗口

前言

在 DeepSeek Harness(DSH)里调模型时,上下文窗口大小会直接影响单次对话能塞进多少历史、压缩策略何时触发,以及 request/context 里上报的 contextWindow。适配器目录里的 defaultContextWindow 是全局配置:改 Profile 或 llm-pi-ai.providers.*.models[].contextWindow 会影响所有会话,不适合「这一通对话临时用 128K,下一通仍用模型默认」这类需求。

WorkBuddy 等环境里,模型详情面板里可以把「思考强度」和「上下文窗口」并列配置,且只在当前会话生效。DSH 原生模型选择弹窗有「模型」「推理等级」,但没有同级的会话级窗口切换。社区插件 dsh-context-window-picker(维护者 luyiheng1111,分类:模型推理)在弹窗内增加独立一行,按 sessionId 在宿主内存里覆盖窗口,不写配置文件、不污染 session log;新建会话自动回到 Profile 默认值。

下面介绍插件定位、安装方式、交互步骤,以及实现与安全上的要点。事实以 GitHub 仓库 README 与 package.json 为准。

这是什么

dsh-context-window-picker 是面向 DSH 模型选择弹窗的会话级上下文窗口选择器(Session-scoped context window selector for the DeepSeek Harness model picker)。版本 0.1.0,许可证 MIT,要求 DSH 引擎 >=0.2.1-rc.2 <0.3.0-0。插件无构建步骤、无运行时依赖(React 由宿主提供),默认使用 bundle patch 中的 presets、completionRatio 等,可不改配置直接使用。

社区目录页:SkillHub · dsh-context-window-picker。

核心功能

模型弹窗内多一行「上下文窗口」

打开输入框右侧的模型选择弹窗(或 /model),在「模型」「推理等级」下方会出现独立一行,例如 上下文窗口 256K ›。右侧数字表示当前生效的窗口;若本会话有覆盖,该数字会以品牌色高亮。点击展开档位列表,选择后立即写入当前会话,再发消息时 request/context 事件中的上下文窗口即为新值。点击该行及档位列表不会关闭弹窗,可像原生配置项一样反复切换。

档位与默认值

候选包括「默认(跟随模型)」以及不超过当前模型默认窗口的档位(如 128K / 256K / 512K 等,具体以模型基准与配置为准)。选中与模型默认相同的档位等同于回到「默认」。新建会话不携带上一会话的选择。

bundle patch 中可改的键(默认值如下):

键 默认 说明
presets [131072, 262144, 524288, 1048576] 候选窗口(只显示不超过模型默认值的)
completionRatio 0.25 单次输出上限 ≤ 窗口 × 该比例
headroomTokens 65536 与压缩策略的 headroom 对齐
minimumWindow 131072 最小可选窗口;低于它的模型只显示「默认」

宿主侧与会话一致性

插件在 llm 服务原型上包装 prepareCall 与 resolveModelInfo(卸载时还原),使 request/context、token 计量、压缩阈值(含 compaction-basic 通过 resolveModelInfo 取窗)看到同一会话覆盖值;并在覆盖生效期间通过 Session#requestHeader 夹紧 config.maxTokens,避免压缩策略用旧的大窗口预留去对比新的小窗口而报错。README 记载:将会话设为 262144 后,下一请求的 request/context 记录 contextWindow: 262144,request/header.maxTokens 会从 256000 收紧到 65536。

客户端通过 conversation.input.model.label 槽位在弹窗内追加 UI(Portal 到面板最后一个单元格之后);输入框上的模型按钮仍只显示模型名,窗口仅在弹窗内展示。

安装与启用

README 给出的安装方式如下。取得源码后,在 DSH 的 Plugins 页面用「Install from path / 本地 bundle」指向该目录,或在终端执行(将路径换成你本机上的实际目录):

git clone https://github.com/luyiheng1111/dsh-context-window-picker.git
dsh plugin --profile desktop add /path/to/dsh-context-window-picker

安装后重启 DSH。修改 index.js 需再次重启宿主半边;只改 client.js 刷新页面即可。

插件以当前 DSH 进程权限运行。安装前请自行查看仓库源码与 MIT 许可证,确认符合你的环境与安全策略;社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

典型用法

  1. 安装并重启 DSH,刷新客户端页面。
  2. 打开模型选择弹窗,在「推理等级」下方找到「上下文窗口」行。
  3. 展开列表,选择「默认」或某一档位(如 256K)。
  4. 发送一条新消息,在诊断或日志中查看 request/context 的 contextWindow 是否已为所选值。

需要以接口核对状态时,可使用本机回环 JSON API(Host 须为回环或 webRuntime.trustedHosts 授权域,并满足 README 中的 Origin / sec-fetch-site 校验):

路径 方法 用途
/dsh-context-window-picker/api/state GET 当前会话基准窗口 / 覆盖值 / 候选档位
/dsh-context-window-picker/api/set POST 设置或(传 null)清除本会话覆盖
/dsh-context-window-picker/api/health GET patch 计数与当前配置(诊断)

适用场景与注意

适合谁: 需要在单会话内临时缩小或调整上下文窗口(例如减轻压缩压力、对齐某次任务的可承载上下文),又不想改全局 Profile 的开发者。

已知限制(README):

  • 候选档位不会大于模型基准窗口;放大窗口仍属模型 / Profile 能力。
  • 覆盖只影响之后发出的请求;正在执行的 step 保持启动时的窗口。
  • 客户端依赖模型弹窗 DOM 结构;若官方改动面板结构,插件可能需要调整定位方式。
  • DSH 目前没有官方的「按会话改上下文窗口」接口,插件通过包装 llm 与 Session#requestHeader 实现;卸载插件会还原包装。

结尾

dsh-context-window-picker 把「上下文窗口」放进 DSH 模型弹窗,与模型、推理等级并列,会话级生效、新建会话回默认,并通过宿主拦截保证事件与压缩逻辑看到同一窗口值。进一步了解与提 issue 可访问:

  • 目录页:https://www.skillhub.cn/plugins/luyiheng1111/dsh-context-window-picker
  • GitHub:https://github.com/luyiheng1111/dsh-context-window-picker
羽毛球分组比赛记分
小程序二维码

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

小夜