前言¶
DSH 的插件体系是「一切皆插件」:上下文注入、工具拦截、目录裁剪这类行为都挂在特定事件上。问题是,什么时候该裁剪、该保留哪几项、命中之后做什么动作,往往只能靠写死的规则判断。dsh-smart-selector(智能选择器,维护者 vb2250158)把这个判断交给一个独立的判定模型:按事件读取待判断内容,按题型判定,再执行命中选项上配置的动作。它是 dsh-jev-context-gate 的后续插件,配置入口 ID 仍为 dsh-jev-context-gate。
下面介绍这个插件的定位、能力和接入方式。
这是什么¶
一句话:一个把「判断 + 筛选 + 执行」串起来的 DSH 工作流插件。规则由「事件 → 待判断内容 → 题目 → 选项与行为」组成,判定结果直接决定主请求看到什么、工具是否被放行、是否向外部动作(如 Rabi 工作群)发送内容。
- 包名:
dsh-smart-selector,当前版本 0.2.2,许可证 MIT。 - 依赖运行时:DSH 0.2.1-alpha.1 或兼容的 0.2 release;界面需要「模型与推理选择」插件
dsh-codex-model-selector0.1.18 或以上。 - 分类:工作流。
核心能力¶
三种题型与两类模型¶
规则编辑器顶部和测试页都能选择题型:选择题(Choice)、判断题(Noul)、评分题(Score)。
| 题型 | 普通规则 |
|---|---|
| Choice | 在配置选项中选一个,达到该选项概率阈值才执行动作 |
| Noul | 恰好两个选项,第一项代表是、第二项代表否 |
| Score | 选项按低到高排列,以期望等级最近的选项执行动作,仍检查该等级概率阈值 |
模型分两类路径:普通聊天模型走 JSON 兼容模式,用 LLM 生成的概率估计选项;选择受支持的 OpenRouter 原生概率模型后,规则判断、候选筛选和测试页直接调用 Decisions API。原生请求按模型声明的题数上限分批(GPT 每批最多 200 题)。需要生成回复文本的动作仍使用 messageModel,不把决策模型当聊天模型用。
事件、输入与动作¶
事件支持六类:用户发送消息、Skill 目录准备注入、Skill 正文准备注入、工具返回结果、工具调用前、工具调用后。其中前三个作用于主模型请求前,后三个作用于工具管线(调用前可拦截、调用后可补充上下文)。
内置动作适配器是 tool,可以调用任何已安装工具,把生成消息写入指定参数,arg.* 作为该工具的其他参数;rabi 是可选适配器,渠道、对象类型、对象 ID、Route ID 等都在动作参数里,未安装 Rabi 不影响其他规则。扩展插件可以通过 ctx.inject(['smartSelector'], ...) 注册事件和适配器:
scope.smartSelector.registerEvent({ key, display, parameters })
scope.smartSelector.emit({ key, id, agent, parameters, signal })
scope.smartSelector.registerAdapter({ key, display, parameters }, handler)
注册返回撤销函数。当前版本没有内置群消息接收事件,要监听群,需要消息来源插件注册并投递该事件。
候选筛选与输入预算¶
动态筛选提交全部候选项,按模型声明的题数上限分批,要求返回每项的 0–1 评分,再按规则取评分前 N、后 N、大于 N% 或小于 N% 的项。候选来源可以是待判断内容按换行/空格/指定字符串拆分、逐行固定列表或脚本生成。候选至少 2 条、最多 500 条,总内容不超过 64000 字,保留数量 1–50。脚本运行在本机工作线程,限时 5 秒、内存限额 64 MiB。
输入预算的规则:选择当前上下文时,先为最新真实用户输入保留字符预算,再从剩余预算取近期上下文并恢复原消息顺序;换行计入预算;超长用户文本保留末尾截取;技能目录仍从判定上下文中排除。
默认配置只有一条「Skill 裁剪」规则,保留归一化评分严格大于 50 的全部候选,不附加前 N 项上限。它监听官方 agent/pre-step 已准备的目录,官方先合并技能 registry 的可用 Skill,再由插件裁剪,正文仍由官方 skill 工具按需加载。
统一上下文策略与宿主补丁¶
contextPolicy 默认开启,独立于模型判定总开关,管理快照、目录、项目指令的压缩与保存。阈值取窗口 thresholdRatio 与扣除输出预留后的预算较小值,压缩目标按 targetRatio / retainRatio 计算,默认依次为 0.8、0.06、0.4、0.16。
启用前必须应用宿主补丁 patches/2026-10-10-request-context-policy.patch 并重建涉及的 Host 包。另一台电脑先核对 patches/README.md 的基线与依赖补丁,运行 git apply --check。缺少补丁时开启策略会报错;设置 contextPolicy.enabled: false 可保留已有智能选择器。插件卸载会撤销工具和监听,已记录的替换继续参与会话回放。
安装与启用¶
官方文档没有给出可直接粘贴的单行安装命令,而是统一要求通过 DSH 插件 CLI / 同步器安装仓库 main 分支上可达的固定提交(共享环境存完整 commit id,本地路径不是可移植的插件 pin)。从旧插件升级时,流程是备份 profile → 替换同步清单里的固定提交并保留 settingsNamespaces → 在 cordis.patch.yml 中保留 id: dsh-jev-context-gate 只改 name → 用同步器或官方插件 CLI 完成新旧包替换。相关配置片段:
{
"settingsNamespaces": ["dsh-jev-context-gate"]
}
# cordis.patch.yml:保留完整 config 与元数据,不覆盖已有配置
id: dsh-jev-context-gate
name: dsh-smart-selector
启用后在「插件 → 智能选择器 → 判定模型」选择判定模型(只保存智能选择器的判定模型,不切换聊天模型),在「设置 → 模型 → 添加模型提供商」选择 OpenRouter 并填写 API 密钥,之后回到规则页配置事件与动作。
典型用法¶
1、在规则列表里新建一条规则,填写规则标题和说明。
2、事件选「用户发送消息」,判定方式选「筛选自定义候选」,每行输入一条注意事项,再设定题目和「最多保留多少条」。
3、启用规则,用规则页内的「打开测试页面」跑一次,测试视图不会执行规则也不修改会话。
4、候选过多时把筛选行为改为「Skill 裁剪」或脚本候选,编辑弹窗里改「最多保留多少条」。
适用场景与注意事项¶
适合需要在主模型请求前自动裁剪上下文(Skill 目录、自定义注意事项)、按模型判断拦截或放行工具调用、以及按判断结果向外部动作投递内容的 DSH 开发者。要求宿主已应用上述补丁,且已配置可用的 OpenRouter 或其他判定模型。
注意三点:一是插件以当前 DSH 进程权限运行,等待回复、定时轮询等状态由当前进程持有,进程重启不会自动恢复;二是安装前应检查源码与许可证(仓库已附 MIT LICENSE),并用独立 Home 先验收固定提交;三是社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,插件不由官方背书。
小结¶
dsh-smart-selector 的价值在于把概率判断从主模型里拆出来,让「什么该注入、什么该拦截、选中后做什么」都变成可编辑的规则。适合愿意装补丁、能配置判定模型、需要按事件做自动化裁剪的 DSH 工作流用户。
- 目录页:https://www.skillhub.cn/plugins/vb2250158/dsh-smart-selector
- GitHub:https://github.com/vb2250158/dsh-smart-selector