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
羽毛球分组比赛记分
小程序二维码

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

小夜