dsh-smart-selector:用獨立判定模型做事件判斷、候選篩選與動作執行

前言

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-selector 0.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
羽毛球分组比赛记分
小程序二维码

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

小夜