前言¶
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 挂载行,无需手动修改配置。
使用¶
启用裁剪功能的操作步骤如下:
- 新建一个会话,点击输入栏左下角的漏斗按钮(标记为“注入”)。
- 弹出的树表视图列出了所有能影响模型上下文的插件。展开不想注入的插件组,点击组行的勾选框进行批量取消。
- 底部会实时显示已裁剪项数及预计减少的字符数。
- 点击「应用」,本会话立即生效,模型上下文中不再出现被裁剪的内容。
- 点击「存为默认」,可将当前勾选状态保存为该工作区新会话的默认模板。
实现机制¶
插件在 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 操作,开发者可以在不修改核心包的情况下,精确控制每个会话接收到的信息,有效优化上下文窗口利用率。