dsh-llm-injection-filter:給 DSH 的 LLM 響應流加一層注入過濾

前言

DSH 的插件機制可以把新增能力掛到運行流程中。對 LLM 流式響應來說,一個實際問題是:模型輸出按 token 粒度分片到達,單個 delta 可能看起來很短、很普通,但組合後可能包含控制字符、協議標記、異常腳本或垃圾關鍵詞。

dsh-llm-injection-filter 面向這個問題。它掛載在 llm/stream waterfall 上,在模型流式響應進入 agent 之前,對響應做檢測和處置,不改動任何運行時源碼。

這是什麼

下面介紹這個插件的基本定位。

  • 插件名:dsh-llm-injection-filter
  • 維護者:XiaoYuOvO
  • 許可證:MIT
  • 運行環境:Node >=18
  • 交付形態:動態插件 / npm 包,純 JS、無 import、無運行時依賴
  • 作用範圍:掛載於 llm/stream waterfall,對所有適配器生效
  • 核心目標:檢測疑似提示詞注入 / 污染內容,並按配置處置

它通過 dsh.bundle.patch 自動加入 dsh.profile.bundles,安裝後隨 DSH 插件機制掛載。

核心功能

軌道 A:罕見腳本硬性阻斷

軌道 A 處理的是腳本層面的異常。

當模型輸出中出現不屬於允許腳本集合的 Unicode 字符時,插件會直接中斷。軌道 A 是最高優先級,命中時不做 strip / reject,直接中斷響應流。

默認允許腳本爲:

Latin
Han
Common
Inherited
Greek

也就是說,默認允許集合不含日文假名、韓文諺文、俄文西里爾等腳本。如果合法輸出包含這些腳本,會被軌道 A 硬阻斷。可以通過 allowedScripts 放行相應腳本。

maxScanLen 只約束軌道 B 的逐段掃描 / 替換,軌道 A 不設上限。

軌道 B:評分規則處置

軌道 B 基於評分規則處理內容。規則類型包括:

CTRL
PROTO
SCRIPT
KW

同時支持組合加成。觸發閾值爲 minScore,默認值爲:

100

軌道 B 的處置模式支持:

audit
strip
reject

其中有兩條限制:

  • KW 永不單獨觸發;
  • SCRIPT 必須與至少一個 PROTO / CTRL 同現才計入總分。

reject 模式依賴 block-end 攜帶完整 arguments。在不發 block-end 的 delta-only 流中,tool-call 參數無法整塊改寫,此時僅審計。

審計與 WebUI

插件會輸出結構化審計日誌,規則類型爲:

HARD_BLOCK | CTRL | PROTO | SCRIPT | KW

攔截記錄不落盤,隨插件 fiber 輸出到結構化日誌通道,進程內環形緩衝受 maxRecords 限制。

WebUI 中可以在:

設置 → LLM 注入過濾器

進行查詢和配置調整。設置頁支持實時調整配置,改動即時生效,無需重啓。

需要注意,配置狀態持久化在 localStorage。Host 重啓後配置會回到默認值,需要在設置頁重新保存。

停止 / 卸載插件時,監聽器隨插件 fiber 自動清理,無定時器 / 全局訂閱殘留。

安裝與啓用

下面給出幾種安裝方式。

從 GitHub 默認分支安裝

dsh plugin --profile web add github:XiaoYuOvO/dsh-llm-injection-filter

按 tag 安裝

按 tag 安裝可以鎖定已驗證版本。

dsh plugin --profile web add github:XiaoYuOvO/dsh-llm-injection-filter#v1.1.0
dsh plugin --profile web add "link:G:/DEEPSE~1/data/dsh/plugins/LLM-IN~1"

驗證安裝

安裝後執行:

dsh --profile web --dump-config

這一步用於確認插件已經進入當前 profile 的配置 / bundle 組合。

典型用法

安裝後,可以先打開 WebUI 設置頁查看配置。

設置 → LLM 注入過濾器

可以調整的配置項包括:

CFG.enabled
CFG.hardBlockRareScripts
CFG.allowedScripts
CFG.mode
CFG.minScore
CFG.applyToProviders
CFG.applyToModels
CFG.skipProviders
CFG.skipModels
CFG.maxRecords
CFG.extraKeywords
CFG.maxScanLen
CFG.maxSampleLen
CFG.recordMaxLen

常見調整路徑如下:

  1. 先確認 CFG.enabled 是否開啓。
  2. 如果合法輸出包含日文、韓文、俄文等腳本,在 CFG.allowedScripts 中追加相應腳本。
  3. 如果只想觀察不改輸出,把 CFG.mode 設爲 audit。
  4. 如果需要提高觸發門檻,調整 CFG.minScore。
  5. 如果只想檢查部分 provider / model,可以配置 CFG.applyToProviders、CFG.applyToModels。
  6. 如果需要跳過某些 provider / model,可以配置 CFG.skipProviders、CFG.skipModels。
  7. 在 WebUI 查詢最近攔截記錄,確認規則命中情況。

適用場景與注意

這個插件適合使用 DSH 的 LLM 流式響應,並希望在響應進入 agent 之前做一層安全過濾的用戶。

使用前需要注意:

  • 插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
  • 軌道 A 的默認允許腳本比較嚴格,默認不含日文假名、韓文諺文、俄文西里爾等腳本。
  • 軌道 B 只有總分達到 minScore 纔會觸發。
  • KW 不會單獨觸發,SCRIPT 需要與 PROTO / CTRL 同現才計入。
  • reject 模式依賴完整 arguments,對某些 delta-only 流只能審計。
  • 攔截記錄不落盤,只保留在進程內環形緩衝中,受 maxRecords 限制。
  • WebUI 配置保存在 localStorage,Host 重啓後需要重新保存配置。

結尾

dsh-llm-injection-filter 提供的是 DSH LLM 響應流層面的注入 / 污染過濾能力。它的核心是軌道 A 的罕見腳本硬阻斷,以及軌道 B 的評分規則處置,並配合結構化審計日誌和 WebUI 設置頁。

GitHub 倉庫地址:

https://github.com/XiaoYuOvO/dsh-llm-injection-filter

如需在 DSH 社區目錄查找,可搜索插件名:

dsh-llm-injection-filter
羽毛球分组比赛记分
小程序二维码

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

小夜