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 設置頁從一個小預設試起。

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

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

小夜