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

前言

在 DSH 里调模型时,上下文窗口通常来自 Profile 或适配器目录里的全局默认值。同一窗口跑长对话和短任务都够用,但偶尔需要在当前会话里临时收窄窗口,让压缩策略、maxTokens 和 request/context 事件看到的是一致的上限,又不想改 defaultContextWindow 去影响所有会话。

下面介绍的 dsh-context-window-switch(维护者 rayadesune,分类:客户端)在模型选择弹窗内增加一行「上下文窗口」,选择仅对当前 sessionId 生效,新建会话自动回到默认值。它是社区插件 luyiheng1111/dsh-context-window-picker 的延续维护版(自 v0.2.0 起更名为本仓库 id),实现思路与 README 描述一致。插件目录页:https://www.skillhub.cn/plugins/rayadesune/dsh-context-window-switch;源码与说明:https://github.com/rayadesune/dsh-context-window-switch。

这是什么

一句话:在 DSH 模型选择弹窗里,与「模型」「推理等级」并列提供会话级 contextWindow 切换;不写配置文件、不污染 session log,只在宿主内存按会话记录覆盖值。

对标 README 中的参照:WorkBuddy 在模型详情里把「思考强度」和「上下文窗口」并列、会话级临时生效;本插件把同类能力放进 DSH 的模型弹窗面板内部。

核心功能

弹窗内的交互

  1. 打开输入框右侧的模型选择弹窗,或使用 /model。
  2. 在「模型」「推理等级」下方多出一行,例如 上下文窗口 256K ›;右侧数字为当前生效窗口。若本会话有覆盖,该数字以品牌色高亮。
  3. 点击展开档位:可选「默认(跟随模型)」以及不超过当前模型默认窗口的档位(如 128K / 256K / 512K 等;具体列表由模型默认值与配置共同决定)。
  4. 选择后立即写入当前会话;再发一条消息时,request/context 里的 contextWindow 即为新值。
  5. 新建会话不携带该选择,回到适配器目录中的默认窗口。

该行渲染在弹窗内部,点选档位不会触发「点外部关闭」,可反复切换。

宿主侧行为(不写 Profile)

  • 包装 llm.prepareCall 与 llm.resolveModelInfo,使 request/context、token 计量、压缩压力判断使用同一会话覆盖值;卸载插件时还原包装。
  • 在覆盖生效期间,Session#requestHeader 会夹紧 config.maxTokens,避免压缩策略用旧窗口的完成预留去对比更小窗口而报错。
  • 客户端通过本机回环 JSON 与宿主通信:GET .../api/state、POST .../api/set、GET .../api/health;请求校验 Host、拒绝跨站 sec-fetch-site 等(详见 README「安全说明」)。

与改 Profile 的区别

defaultContextWindow 改的是全局默认,影响所有会话。本插件只在内存里按 sessionId 覆盖,不改 llm-pi-ai.providers.*.models[].contextWindow 等配置。

已知限制(摘自 README)

  • 候选档位只显示不超过模型基准窗口的值;不能通过插件放大到超过模型/Profile 能力。
  • 覆盖只影响之后发出的请求;正在执行的 step 仍用启动时的窗口。
  • 依赖 conversation.input.model.label 槽位与弹窗 DOM 结构;官方若改面板布局,插件可能需要调整定位方式。
  • 输入框上的模型按钮不再追加窗口后缀;窗口仅在弹窗内展示。

安装与启用

插件无构建步骤、无额外运行时依赖(React 由宿主提供)。当前 package.json 声明 0.2.0,要求 DSH 版本 >=0.2.1-rc.2 <0.3.0-0,许可 MIT。

若曾安装原版 dsh-context-window-picker,请先卸载再装本插件;两者插件 id 不同,同时安装会对 llm 服务产生双重包装。

README 给出的获取与安装方式如下。先把仓库放到本地目录,再在 DSH Plugins 页面用「Install from path / 本地 bundle」指向该目录,或在终端执行(路径替换为你的实际目录):

dsh plugin --profile desktop add /path/to/dsh-context-window-switch

安装后重启 DSH。默认使用 bundle patch 中的 presets、completionRatio 等,无需额外配置即可使用。

可选配置在 bundle patch 中修改(键与默认值见 README):

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

修改 index.js 需重启 DSH;只改 client.js 刷新页面即可。

典型用法

  1. 安装并重启 DSH 后,打开任意会话,进入模型弹窗,确认「推理等级」下方出现「上下文窗口」行。
  2. 需要在本会话用较小窗口时,展开档位并选择(例如 262144);该行数字即时更新,覆盖生效时高亮。
  3. 发送下一条消息,在开发者工具或日志中查看 request/context 的 contextWindow 是否为新值;README 已验证示例:设为 262144 后,request/header.maxTokens 会相对 256K 默认场景收紧。
  4. 诊断时可请求 GET /dsh-context-window-switch/api/health 查看 patch 计数与当前配置。
  5. 结束临时限制:在档位中选择「默认」,或通过 POST .../api/set 传 null 清除本会话覆盖(接口细节见 README)。

适用场景与注意

适合谁:需要在单会话内临时切换上下文窗口、又不想动 Profile 全局默认的 DSH 用户;习惯在模型弹窗里一并调模型、推理等级和窗口的人。

安全与信任:插件在当前 DSH 进程权限下运行,宿主半边会包装 llm 服务方法——DSH 尚无官方「按会话改上下文窗口」API,README 已说明这一点。安装前请自行阅读 仓库源码 与 LICENSE,确认可接受 MIT 条款及原作者 luyiheng1111、维护者 rayadesune 的署名说明。

DeepSeek Harness 生态强调「一切皆插件」;SkillHub 插件目录 是社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-context-window-switch 把会话级上下文窗口切换放进模型弹窗,与全局 Profile 默认值解耦,并通过宿主侧的 prepareCall / resolveModelInfo 包装保证计量与压缩一致。

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

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

Xiaoye