dsh-inject:DSH 请求侧上下文注入与消息重写

前言

在 DeepSeek Harness(DSH)里做智能体或长会话开发时,常见需求是:在发给模型之前改一版上下文(加系统规约、做敏感词中性化、临时插一段构造消息),但又不希望把界面和会话日志里的原文改掉。手写脚本改请求、或在会话里堆系统消息,往往要么难维护,要么和 Keysmith 等既有规则格式对不上。

下面介绍社区插件 dsh-inject(维护者 john-walks-slow):在模型请求前对指定角色做关键词/正则替换,按会话启用多个上下文预设,并可在当前位置插入构造回合;改写只作用于请求副本,会话记录保持原样。分类上属于「模型推理」相关能力,npm 包版本为 0.1.0(MIT)。

这是什么

dsh-inject 是 DSH 的 Cordis 插件,定位是「高级模型上下文注入 + 仅请求侧重写」,并原生兼容 Keysmith 规则格式。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。安装插件前,插件以当前 DSH 进程权限运行,应自行查看源码与许可证(本插件为 MIT)。

核心语义

理解下面几条,后面配置和命令才不容易用错。

  1. 只改请求,不改会话:自动替换发生在发给模型的请求副本上;会话记录和界面显示的原始消息不变。
  2. 默认关闭:预设一律不默认启用;需要常驻时在设置页勾选「默认启用」,或在本会话用 /inject <预设 id> 临时启用。
  3. 会话级覆盖:/inject <预设 id> / /inject off 只作用于当前会话,且总是优先于预设的「默认启用」。
  4. agent preset 级默认启用:勾选「默认启用」后可在展开区填「限定 agent preset」(逗号分隔,留空表示全部);填了之后只在该会话当前 agent preset 命中时默认启用。当前 preset 由 DSH 的 agentPreset 投影读取,运行中切换会按新 preset 重算。
  5. id 即句柄:预设只有 id 一个标识,不含空格、逗号与斜杠;设置页里 id 就是标题,可直接改。
  6. 零副作用(启用状态):启用状态是进程内状态,不写入会话日志;关掉预设等于从未启用。进程重启后会话级状态重置,只剩「默认启用」预设仍生效。

每次注入还会在会话里留下一条可折叠记录行,写明这次注入了什么(与 /inject 等命令卡形态一致),便于审计;界面上的用户消息仍显示原文,插件也未在界面上标记被替换的片段。

核心功能

预设:自动替换 + 构造回合

在设置页 Inject 可建立任意多个预设,每个预设包含:

  1. 自动替换:多条规则,每条可选「关键词」或「正则」,填写替换文本,并勾选生效角色:用户 / 助手 / 工具返回。
  2. 开头构造回合:放进请求最前面的消息,角色可选 系统 / 助手 / 用户 / 工具。

另外可维护构造回合模板,供现场 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 preset unrestricted 下默认启用。
  • nsfw:成人文学创作规约与场景回合;限定 agent preset nsfw 下默认启用。

普通会话不受影响。在 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 仍可用,窗口内插入会失败。
  • 会话级启用状态进程内有效,重启后重置。

安装与启用前请确认信任维护者与代码;插件能力等价于在每次模型调用前改写请求,应评估与自身安全策略是否一致。

链接

dsh-inject 把「改请求、不改会话」和预设化配置、Keysmith 导入、会话命令 /inject / /inject-turn 收在一处;若你的痛点是上下文要在发送前可控、可复现、可审计,可以按上文安装后在 Inject 设置页从一个小预设试起。

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

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

小夜