前言¶
在 DeepSeek Harness(DSH)里做智能体或长会话开发时,常见需求是:在发给模型之前改一版上下文(加系统规约、做敏感词中性化、临时插一段构造消息),但又不希望把界面和会话日志里的原文改掉。手写脚本改请求、或在会话里堆系统消息,往往要么难维护,要么和 Keysmith 等既有规则格式对不上。
下面介绍社区插件 dsh-inject(维护者 john-walks-slow):在模型请求前对指定角色做关键词/正则替换,按会话启用多个上下文预设,并可在当前位置插入构造回合;改写只作用于请求副本,会话记录保持原样。分类上属于「模型推理」相关能力,npm 包版本为 0.1.0(MIT)。
这是什么¶
dsh-inject 是 DSH 的 Cordis 插件,定位是「高级模型上下文注入 + 仅请求侧重写」,并原生兼容 Keysmith 规则格式。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。安装插件前,插件以当前 DSH 进程权限运行,应自行查看源码与许可证(本插件为 MIT)。
核心语义¶
理解下面几条,后面配置和命令才不容易用错。
- 只改请求,不改会话:自动替换发生在发给模型的请求副本上;会话记录和界面显示的原始消息不变。
- 默认关闭:预设一律不默认启用;需要常驻时在设置页勾选「默认启用」,或在本会话用
/inject <预设 id>临时启用。 - 会话级覆盖:
/inject <预设 id>//inject off只作用于当前会话,且总是优先于预设的「默认启用」。 - agent preset 级默认启用:勾选「默认启用」后可在展开区填「限定 agent preset」(逗号分隔,留空表示全部);填了之后只在该会话当前 agent preset 命中时默认启用。当前 preset 由 DSH 的
agentPreset投影读取,运行中切换会按新 preset 重算。 - id 即句柄:预设只有 id 一个标识,不含空格、逗号与斜杠;设置页里 id 就是标题,可直接改。
- 零副作用(启用状态):启用状态是进程内状态,不写入会话日志;关掉预设等于从未启用。进程重启后会话级状态重置,只剩「默认启用」预设仍生效。
每次注入还会在会话里留下一条可折叠记录行,写明这次注入了什么(与 /inject 等命令卡形态一致),便于审计;界面上的用户消息仍显示原文,插件也未在界面上标记被替换的片段。
核心功能¶
预设:自动替换 + 构造回合¶
在设置页 Inject 可建立任意多个预设,每个预设包含:
- 自动替换:多条规则,每条可选「关键词」或「正则」,填写替换文本,并勾选生效角色:用户 / 助手 / 工具返回。
- 开头构造回合:放进请求最前面的消息,角色可选 系统 / 助手 / 用户 / 工具。
另外可维护构造回合模板,供现场 dialog 与 /inject-turn 复用。
预设头部有「默认启用」开关(默认关闭);展开区可填「限定 agent preset」。设置页采用手动保存:改动先落本地草稿,标题右侧提示「有未保存的修改」,需点「保存」才会写回配置。
Keysmith 兼容¶
插件默认预置 Keysmith(Keysmith Switch / codex-keysmith)规则体系:
- 内置
unrestricted预设:含本地执行模式系统规约(Local execution mode active)及常用敏感词/边界词中性化替换;规则对象兼容 Keysmith 的{ "from": "...", "to": "..." },自动映射为pattern、replacement并绑定用户输入。 - 设置页提供「导入 Keysmith 规则」,可批量解析粘贴的规则包或数组。
- 对以
/开头的斜杠命令以及<system-reminder>、<command-name>等系统注入标签自动跳过改写,避免误伤系统指令。
内置预设与 agent preset¶
未自行配置时,自带两个 inject 预设:
unrestricted:Keysmith 本地执行模式系统规约及常用中性化规则;限定 agent presetunrestricted下默认启用。nsfw:成人文学创作规约与场景回合;限定 agent presetnsfw下默认启用。
普通会话不受影响。在 agentPresets 服务可用时,插件会注册同名内置 agent preset(最小组合:persona complete + 基础工具 + compaction);选中对应 agent preset 时 inject 预设自动生效,会话内仍可用 /inject off 关闭。没有 agentPresets 的 profile(例如 headless)不注册 agent preset,但 inject 预设仍可用 /inject 手动启用。
安装与启用¶
先安装 npm 包,再把 bundle 挂进 profile。
npm install dsh-inject
把 dsh-inject 加入 profile 的 dsh.profile.bundles(具体字段写法以你使用的 DSH profile 文档为准)。
典型用法¶
会话内启用 / 查看预设¶
/inject 查看当前会话启用了哪些预设与注入摘要(列出 id)
/inject <id...> 启用(可省略 on,逗号或空格分隔多个)
/inject on <id...> 同上,显式写法
/inject off <id...> 关闭
/inject clear 关闭本会话全部预设
例如在当前会话临时启用 id 为 my-rules 的预设,可输入 /inject my-rules;要全部关掉用 /inject clear。
插入构造回合¶
/inject-turn 打开「插入构造回合」窗口
/inject-turn <模板名> 把模板内容排进下一次请求
/inject-turn <JSON 数组> 现场构造,如 [{"role":"user","text":"..."}]
在输入框输入 /inject-turn 回车可打开现场 dialog:增删消息与角色、载入模板、保存为模板、「插入到当前位置」把内容排进下一次模型请求且不写入会话记录;Esc 关闭。带参数时由宿主命令处理;裸 /inject-turn 通过客户端命令装饰打开窗口。
注入记录¶
- 行标题为注入来源(
inject/inject-turn),折叠态一行摘要,展开看完整内容。 /inject <id>的记录行列出该预设将注入的构造回合与启用的替换规则数。/inject-turn(含 dialog 写入)的记录行列出刚排入下一次请求的构造回合。
空白会话首屏可能尚未显示注入记录,需第一次对话后才与会话日志一起可见。常驻预设不会逐请求留痕,内容以启用时的记录行为准。
适用场景与注意¶
适合谁
- 需要在请求侧统一做 prompt 规约、敏感词中性化,且不想污染会话 UI 的 DSH 用户。
- 从 Keysmith 迁移或并存规则集,希望一键导入
{ from, to }格式。 - 使用 unrestricted / nsfw 等 agent preset 组合,希望 inject 与 preset 联动默认启用。
已知限制(来自 README)
tool角色的构造消息会转成带「工具返回」标记的用户上下文,避免悬空 tool result。- 现场 dialog 依赖
webServer与connection;缺失时带参数的/inject-turn仍可用,窗口内插入会失败。 - 会话级启用状态进程内有效,重启后重置。
安装与启用前请确认信任维护者与代码;插件能力等价于在每次模型调用前改写请求,应评估与自身安全策略是否一致。
链接¶
- 社区目录:https://www.skillhub.cn/plugins/john-walks-slow/dsh-inject
- GitHub:https://github.com/john-walks-slow/dsh-inject
dsh-inject 把「改请求、不改会话」和预设化配置、Keysmith 导入、会话命令 /inject / /inject-turn 收在一处;若你的痛点是上下文要在发送前可控、可复现、可审计,可以按上文安装后在 Inject 设置页从一个小预设试起。