← 返回列表
⚠ 装前注意
面向 DeepSeek Harness 的 Shadow 模式 SLM 路由插件。每轮通过…
基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/19 · 已提供中文文档
DeepSeek Harness 的影子模式 SLM 路由器:通过 vertical-small-model CLI 进行每轮弱/强预测,写入影子 JSONL 日志
综合分
29.9
GitHub 分
29.9
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add NinjaSln-labs/dsh-session-slm-router未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 1 天前真实安装成功
- 是什么
- dsh 原生插件 · chat
- 装得上吗
- 本站已真实安装成功(非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 6 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/21(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-session-slm-router(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
未发布到 npm registry,仅可从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 23:45:38
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-attachment@deepseek-ai/dsh-brand@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-invariants@deepseek-ai/dsh-jobs@deepseek-ai/dsh-llm@deepseek-ai/dsh-scope@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-session-slm-router
npm version
License
面向 DeepSeek Harness 的 Shadow 模式 SLM 路由插件。每轮通过 vertical-small-model CLI 预测用户发言的强弱分类(weak/strong),记录影子日志 JSONL,不改变会话活跃模型。
⚠️ S1 阶段:默认 shadow 模式,只观察不换模。weak-only 模式(S3 灰度)可执行降档换模,仅放行 weak→strong 降档,不改变用户原模型持久化。
English
安装
通过 dsh plugin 安装(推荐,自动处理 bundle 注册)
dsh plugin add dsh-session-slm-router
或手动添加到 profile package.json 的 dependencies + dsh.profile.bundles
配置
模式选择
| mode | 行为 |
|------|------|
| shadow(默认) | 只预测 + 写影子日志,不换模 |
| weak-only(S3 灰度) | 真正换模,但只放行 switch_to_weak(降档);switch_to_strong 记录但不放行 |
| off | 关闭插件 |
weak-only 绑定时做 reasoning effort 能力兼容预检(宿主对不兼容组合硬拒):目标无该能力 → 当轮剥离请求参数后绑定;值不在目标支持列表 → 顺延次选;全部不兼容 → 不绑定(不降档)。详见「数据」节说明。
同意门(downgradeConfirm):bind 前可经宿主审批通道弹「是否降档」确认卡(浏览器 dsh-client-ui-approval 渲染,标题=reason);always 每次 bind 都问,smart 仅高意图情景(会话首轮/强模型≠默认)问,never 静默。拒绝/超时(30s)/无 UI → 当轮不降档(安全方向),结果落 downgrade_confirm 影子字段。
完整配置示例
仅 cordis 行内 config(bundle 的 cordis.patch.yml,或宿主 profile 的 cordis.patch.yml 覆盖行)
⚠️ settings.yaml 的插件命名空间块不会注入插件 config(2026-09-03 实测)
session-slm-router:
mode: shadow # shadow | weak-only | off
weakOnlyMainOnly: true # weak-only 是否只对主会话换模
predictCmd: "python3 /vertical-small-model/scripts/route_predict.py"
predictModel: "/vertical-small-model/data/eval/routing-v0/model-r1.json"
timeoutMs: 250
logPath: "slm-shadow/session-slm-shadow.jsonl"
slotCachePath: "slm-shadow/slot-order-cache.json" # 可选:槽位缓存路径(相对 ~/.dsh);缺省=与 logPath 同目录
tierRules:
maxTokensWeakMax: 32768 # L2 元数据降档阈值
autoWeak: true # 自动收录:元数据确认的弱模型进候选池(显式 strongSlots 否决)
freeFirst: false # free 优先排序(默认关:free 供应商普遍限额)
downgradeConfirm: never # 同意门:never(默认,静默自动降档)| always(每次 bind 弹「是否降档」确认卡)| smart(仅高意图情景弹)
weakSlots:
- { provider: , model: }
strongSlots:
- { provider: , model: }
- predictCmd / predictModel:必填,指向 vertical-small-model 项目的 CLI 脚本与模型文件
- weakSlots / strongSlots:运行时模型槽位候选表,按你想使用的 provider/model 填写
- tierRules.autoWeak(默认开):新供应商/模型(如其他 agent 直接改 settings.yaml 加入)自动收录——元数据确认(maxTokens ≤ 阈值)即进降档候选池,显式 strongSlots 一票否决;free 关键字不参与强弱推断
- freeFirst(默认关):free 模型/供应商普遍限额,free 优先仅作为显式开启的排序偏好
- slotCachePath(可选,2026-09-09 缓存隔离):槽位健康缓存文件路径(相对 ~/.dsh,与 logPath 同约定)。缺省 = dirname(logPath)/slot-order-cache.json(与日志同目录,即默认 ~/.dsh/slm-shadow/)。测试/隔离场景显式指向独立目录,避免把测试缓存写进生产目录(scripts/mount.mjs 即经此键隔离)
- downgradeConfirm(默认 never,2026-09-09 同意门):weak-only bind 前是否经宿主审批通道(浏览器 dsh-client-ui-approval 渲染确认卡,标题「是否降档」)征得用户同意。always=每次 bind 都弹;smart=仅高意图情景(会话首轮 / 当前强模型≠默认选择)弹;never=静默自动降档(现状)。超时 30s;拒绝/超时/无 UI 一律不降档(fail-closed,安全方向),结果落影子日志 downgrade_confirm 字段
- 配置只读 cordis.patch.yml 行内 config:bundle 自带注册行 + 宿主 profile cordis.patch.yml 的 - id: session-slm-router + config: 覆盖行(本机文件,可含本机路径)
槽位健康缓存(weak-only 换模顺序)
weakSlots 的配置顺序 ≠ 生效顺序。插件维护一个持久化健康缓存:
- 缓存文件:~/.dsh/slm-shadow/slot-order-cache.json(= slotCachePath,缺省为与 logPath 同目录;删除即重建;仅持久化显式 weakSlots,auto 收录槽不落盘、重启重推)
- 生效顺序:可用槽(freeFirst: true 时 free 槽优先,默认按配置序)→ 瞬态未知槽(原配置序)→ 死亡槽(沉底);tierRules.autoWeak: true 时显式 weakSlots 之后自动追加元数据确认的弱模型
- 死亡判定:provider 已注销 / 模型不在该 provider 已配置清单(catalog)/ 模型实测不可用(404 / NO_ADAPTER 等)→ 沉底
- 刷新时机:启动(拓扑未就绪时 2s/4s/6s 有限重试)、llm/adapters-updated、agent/session-start、24h TTL 过期;绑定路径发现元数据缺失时惰性补收集(重挂载兜底)
数据
影子日志写在 ~/.dsh/slm-shadow/session-slm-shadow.jsonl(一行一条 JSON),字段:
| 字段 | 说明 |
|------|------|
| v | schema 版本(当前 1) |
| ts | 时间戳 |
| session_id | 会话 ID |
| turn_seq | 轮次序号 |
| utterance_hash | 用户发言 sha256 前 16 位(脱敏) |
| utterance_preview | 前 80 字(脱敏) |
| suggested_tier | CLI 预测强弱结果 |
| confidence | 预测置信度 |
| actual_tier | 当前实际模型档位 |
| actual_tier_cause | 实际档裁决来源:registry-weak / registry-strong / metadata / heuristic / abstain-unknown-model |
| target_source | 降档目标来源:registry(显式 weakSlots)/ auto(自动收录);未绑定为 null |
| switch | 决策结果:stay / switch_to_weak / switch_to_strong |
| bound | weak-only 是否实际换模(shadow 恒 false) |
| downgrade_confirm | 同意门结果(2026-09-09):confirmed 用户同意 / denied 拒绝 / cancelled 超时或取消 / unavailable 无 UI 或无应答器 / not-required 未开启同意门;非 bind 轮次为 null |
| predict_ok | 预测是否成功 |
| error | 预测失败原因摘要 |
| kind | 仅 bind-failure 事件有(bind-failure):降档目标执行层失败回放(reasoning effort 不兼容,宿主 prepareCall 硬拒);轮次事件无此字段。本事件不含 utterance 字段(数据源是执行层错误,无用户话语) |
| reasoning_effort | 仅 bind-failure 事件有:请求携带、目标模型不支持的 reasoning effort 值 |
2026-09-09 起,weak-only bind 前做 reasoning effort 能力兼容预检(通用机制,按宿主 resolveModelInfo().reasoning 声明能力判定,非模型白名单):目标确认无该能力 → 当轮剥离请求中的 reasoningEffort 再绑定;目标支持 reasoning 但不含该值 → 顺延次选;候选元数据未知 → 不猜顺延;全部不兼容 → 不绑定(安全退化=不降档)。目标执行仍失败时经 agent/error 落 kind=bind-failure 事件(兜底记录,不淘汰槽位——模型没死,只是参数不兼容)。
开发
git clone https://github.com/NinjaSln-labs/dsh-session-slm-router.git
cd dsh-session-slm-router
npm install --legacy-peer-deps # peer 由宿主 dsh 提供
npm run build # tsc + build.mjs 探测包装 → lib/
npm test # 验证链单源(scripts/verify.mjs):build → typecheck → unit → mount
npm run mount # 单跑挂载冒烟测试(验证 apply 运行 + 影子管线端到端;已含于验证链)
测试
验证链单源 scripts/verify.mjs(npm test / CI / publish 三处同调),测试使用 Node 内置 test runner,零外部依赖,不触网:
node --test tests/ # 112 用例:switch 判定表 / health 标记 / would_bind 语义 / 五级证据链 tierOf(弱档词整词匹配)/ autoWeak 收录 / 缓存隔离 / reasoning effort 兼容 / 同意门 / 超时降级
依赖
- 运行时:@deepseek-ai/cordis(dsh 宿主)
- 外部:vertical-small-model CLI(预测器,需独立部署)
- 开发:TypeScript + Node 内置 test runner
贡献
见 CONTRIBUTING.md。
License
MIT © 2026 ninjasln