dsh-plugin-context-trim:DeepSeek Harness 会话级上下文注入门控

前言

DeepSeek Harness (DSH) 生态遵循“一切皆插件”的理念。在开发或使用过程中,一个常见问题是:插件开发知识库在纯聊天场景下无意义,而生图工具在代码编写场景下显得多余。所有插件默认向模型注入所有能力,导致上下文窗口被大量无关信息占用。dsh-plugin-context-trim 插件旨在解决这一问题,它提供会话级的注入门控,允许用户按会话裁剪注入模型的 skill、tool 以及系统提示词段落。

核心功能

本插件通过“影子条目”机制实现会话级裁剪,不污染全局注册表。主要功能包括:

  • 按会话裁剪 skill:对同名影子技能设置 modelInvocable:false,使模型在调用时无法看到该技能。
  • 按会话裁剪 tool / MCP 工具:通过 tools.restrict({ deny }) 隐藏特定工具,未知名工具自动跳过。
  • 按会话裁剪提示词段落:创建同名空文本 section 或 context,渲染层自动丢弃,无法归属插件的段落默认锁定。
  • 树表弹窗:提供按插件聚合的视图,支持组行批量设置、三态勾选,且可拖动/缩放。
  • 关键能力保护:文件读写、控制台、技能总闸等关键能力带警告标识,取消需二次确认。
  • 会话锁定与强制更改:会话一旦开始(落盘 ≥1 步)即锁定,防止运行中修改;支持“强制更改”热生效。
  • 新会话默认模板:支持将当前裁剪方案保存为工作区默认模板,新会话自动套用。
  • 状态点:通过颜色标识会话状态(绿=全量、橙=有裁剪、灰锁=已锁定)。

安装

安装过程无需任何配置。使用官方提供的命令即可完成挂载:

dsh plugin --profile web add dsh-plugin-context-trim

安装完成后,需重启 dsh launcher 并刷新浏览器。插件会自动应用 cordis.patch.yml 挂载行,无需手动修改配置。

使用

启用裁剪功能的操作步骤如下:

  1. 新建一个会话,点击输入栏左下角的漏斗按钮(标记为“注入”)。
  2. 弹出的树表视图列出了所有能影响模型上下文的插件。展开不想注入的插件组,点击组行的勾选框进行批量取消。
  3. 底部会实时显示已裁剪项数及预计减少的字符数。
  4. 点击「应用」,本会话立即生效,模型上下文中不再出现被裁剪的内容。
  5. 点击「存为默认」,可将当前勾选状态保存为该工作区新会话的默认模板。

实现机制

插件在 agent 作用域层叠加同名“影子条目”来压制全局原条目。注册表里的原条目保持不变,仅在当前 agent 的生命周期内生效。

  • Skill:注册同名影子技能,设置 modelInvocable:false,使 <available_skills> 目录消失,且按名加载该 skill 被拒绝。
  • Tool / MCP:调用 agent.ctx.tools.restrict({ deny:[name] }) 逐工具隐藏。
  • 提示词段落:调用 agent.ctx.systemPrompt.section(同名, text:'') 创建空文本段落,渲染层会自动丢弃。

这种机制保证了零残留、零跨会话影响。重复应用时,会先 dispose 上一代再重建,确保幂等性。

兼容性与限制

  • 目标版本:DeepSeek Harness 0.1.2-rc.1。
  • 运行环境:Node.js ≥ 18,纯插件实现,不改核心包。
  • 数据存储:零配置,数据自动持久化在 $DSH_HOME/dsh-plugin-context-trim。
  • 安全限制:HTTP 路由仅接受本机回环来源(remoteAddress 为空一律拒绝),校验 Host 头仅允许 127.0.0.1/localhost 且端口匹配,请求体上限 2MB。

注意事项

  • 历史消息:会话中途裁剪后,历史消息中的旧目录内容仍会保留,模型以最新目录为准。
  • MCP 竞态:MCP server 重连后新增的工具可能暂时不受门控,需手动处理。
  • 动态插件:动态 cordis 插件(cordis_run)的 scoped 工具不受 restrict 约束。

结语

dsh-plugin-context-trim 是 DeepSeek Harness 生态中第一个按会话裁剪上下文注入的插件。通过简单的 UI 操作,开发者可以在不修改核心包的情况下,精确控制每个会话接收到的信息,有效优化上下文窗口利用率。

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

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

小夜