前言¶
DSH 的插件机制可以把新增能力挂到运行流程中。对 LLM 流式响应来说,一个实际问题是:模型输出按 token 粒度分片到达,单个 delta 可能看起来很短、很普通,但组合后可能包含控制字符、协议标记、异常脚本或垃圾关键词。
dsh-llm-injection-filter 面向这个问题。它挂载在 llm/stream waterfall 上,在模型流式响应进入 agent 之前,对响应做检测和处置,不改动任何运行时源码。
这是什么¶
下面介绍这个插件的基本定位。
- 插件名:
dsh-llm-injection-filter - 维护者:
XiaoYuOvO - 许可证:
MIT - 运行环境:
Node >=18 - 交付形态:动态插件 / npm 包,纯 JS、无 import、无运行时依赖
- 作用范围:挂载于
llm/streamwaterfall,对所有适配器生效 - 核心目标:检测疑似提示词注入 / 污染内容,并按配置处置
它通过 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
本地 link 安装¶
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
常见调整路径如下:
- 先确认
CFG.enabled是否开启。 - 如果合法输出包含日文、韩文、俄文等脚本,在
CFG.allowedScripts中追加相应脚本。 - 如果只想观察不改输出,把
CFG.mode设为audit。 - 如果需要提高触发门槛,调整
CFG.minScore。 - 如果只想检查部分 provider / model,可以配置
CFG.applyToProviders、CFG.applyToModels。 - 如果需要跳过某些 provider / model,可以配置
CFG.skipProviders、CFG.skipModels。 - 在 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