Back to home@rouyiemei

dsh-smart-router

Automatic model routing for DeepSeek Harness: three difficulty tiers (hard/normal/easy) plus vision routing, picking models you already configured under Settings ? Models. ???? + ?????????

Stars
0
Language
JavaScript
Created
Aug 16, 2026
Updated
Aug 17, 2026

Introduction

dsh-smart-router · DSH 智能路由插件

English · 简体中文

License: MIT DeepSeek Harness dsh-plugin

为什么做这个插件

2026 年 8 月,DeepSeek V4 系列全面涨价并启用峰谷定价。Flash 的 output 价格从 ¥2 翻倍到 ¥4.5(高峰 ¥9),Pro 更是涨了 3–5 倍。我的月账单从 ¥120 飙到了 ¥700+。

我开始疯狂寻找替代方案。OpenCode Go 号称"低价订阅",实际上是把官方价格原样卖给你,还限了量;MiMo-V2.5 便宜但写代码力不从心;GLM-5.1 和 Kimi K3 的定价比 Flash 还贵。订阅计划也研究了个遍——小米的 Token Plan Pro 覆盖得了用量但性能过不了自己那关,智谱的 Coding Plan 额度太紧,Google AI Pro 和 ChatGPT 订阅都不提供 API。

算来算去,没有任何一个方案能同时满足"性能不降、价格可接受"。

887M tokens/月,80% 是缓存命中的 input——这是我用 DS Flash 积累下来的用量结构。调价后 output 涨价才是费用暴涨的主因,而 output 里一大半是 thinking tokens,又不能完全关掉。

最后我想明白了:与其找一个便宜的模型来替代,不如让同一个系统在不同任务上调用不同的模型。 简单的文件操作、格式化、问答交给便宜模型;需要真正推理、复杂编码的时候再上 Flash。按需分配,而不是一刀切。

这就是 dsh-smart-router 的由来。它不是什么高大上的架构创新,只是一个被涨价逼出来的实用工具:根据任务复杂度自动路由到最合适的模型,让你在能力和成本之间找到属于自己的平衡点。

如果你也被 AI API 的账单刺痛过,希望这个小工具能帮你省下一些钱。

它解决什么问题

  • 性能分层:困难任务(架构/重构/疑难调试)交给强模型,简单任务(闲聊/收尾/小改动)交给便宜快速的模型,一般任务走中间档——像 cc-switch 为 Claude Code 配置「主模型 / 快速模型 / 视觉模型」那样,为 DSH 配置三档能力。
  • 视觉能力:很多人会额外装视觉插件给 DSH 看图。本插件把视觉路由整合进路由器:消息里带图 → 自动走视觉档模型;纯文本 → 按难度走三档。开箱即用,默认内置免费匿名视觉模型(OVHcloud Qwen2.5-VL-72B-Instruct,无需 Key),也可换成你自己配置的任何视觉模型。
  • 缓存友好:建议三档选同一供应商的同一系列(如同一家的 pro / flash 版),前缀缓存命中率更高、更省钱(设置页内置提示)。

安装

dsh plugin --profile web add dsh-smart-router

重启 dsh web 后:

  1. 打开 设置 → 智能路由:为 困难 / 一般 / 简单 / 视觉 四行各选一个模型(下拉里就是你已配置的模型,视觉行只列支持图片的模型)。
  2. 回到会话,点右下角模型选择器,选 Smart Router(自动路由)
  3. 直接开聊:分类器自动分流,每个请求都会路由到对应档位的模型。

不配置任何档位也能用:请求会回退到你的默认模型(fail-open,绝不静默失败)。

工作原理

你选择虚拟模型「smart」(声明 text+image,DSH 图片准入直接放行)
        │
        ▼
SmartRouterAdapter.stream(请求)
        │
        ├─ 消息含图? ──→ 视觉侧车(默认 replace 模式):
        │       图块分割 → 视觉模型返回结构化证据(摘要/OCR/版面)
        │       → 替换回文本(按附件缓存 1h)→ 继续走下方难度分类
        │       (visionMode=route 时:整段路由到视觉档,旧行为)
        │
        └─ 纯文本:难度分类 ──→ hard → 困难档
             (启发式默认 / LLM 可选)──→ normal → 一般档
                                  └─→ easy → 简单档
        │
        ▼
   ctx.llm.prepareCall({provider, model}).stream(请求)  ← 透传 DSH 流式协议
        │
        └─ 档位缺失 → 困难→一般→简单→默认模型 阶梯回退;全部失败才报错
  • 路由在 LLM 适配器层完成(参考 llm-adaptive / dsh-vision-mix 的架构):注册虚拟 provider,stream() 内按请求内容决策后经 prepareCall().stream() 转发,不修改宿主源码,与其它视觉插件互不冲突。
  • 分类器两种模式:启发式(默认,零成本零延迟,关键词 + 代码量 + 文件引用数评分);LLM(更准,复用简单档模型做一次小调用,带 120s 缓存)。
  • 视觉模型只做辅助:图片被分割出去,由视觉模型返回结构化证据(参考 modlens / dsh-tool-vision 的 evidence 方案:摘要 + OCR 全文 + 版面阅读顺序 + 实体 + 主色调 + 不确定项),替换回原图块位置后再由三级难度模型作答;证据按附件 id 缓存(默认 1 小时),分析失败时图块降级为占位文本,请求不中断。
  • 视觉准入:虚拟模型声明 inputModalities: ['text', 'image'],DSH 的图片预检(MODEL_DOES_NOT_SUPPORT_IMAGES)直接放行——不需要打宿主补丁(对比 dsh-easyvision 的 patch 方案)。

设置说明(设置 → 智能路由)

设置说明
启用路由关闭后请求直接走默认模型
分类方式heuristic 启发式(默认) / llm LLM 分类
困难 / 一般 / 简单各档 { 提供方, 模型, 思考档位 },留空 = 未配置(阶梯回退)
视觉默认 ovh-vision / Qwen2.5-VL-72B-Instruct(免费匿名);可换任何自配视觉模型
视觉处理方式replace 结构化替换(默认,图块→证据文本→难度分类) / route 整段路由到视觉模型
默认回退留空 = 会话当前默认模型
LLM 分类器可选,默认复用简单档模型

思考强度(推理)两级层级:对话框模型选择器上的思考强度(Off / High)是总开关

  • Off:所有难度等级都不使用思考模式(关闭 extended thinking)
  • High:各难度等级使用上方配置的推理强度(如 hardEffort=high、normalEffort=max 等)

设置页各档模型区域会显示此提示。

手写配置(~/.dsh/profiles/web/settings.yaml 或 profile 的 settings 提供方):

smart-router:
  enabled: true
  classifier: heuristic        # heuristic | llm
  hardProvider: deepseek-official
  hardModel: deepseek-v4-pro
  normalProvider: deepseek-official
  normalModel: deepseek-chat
  easyProvider: deepseek-official
  easyModel: deepseek-flash
  visionProvider: zhipu-vision # 免费额度,需在 设置→模型 填入 GLM_API_KEY
  visionModel: glm-4v-flash
  visionMode: replace          # replace(结构化替换,默认)| route(整段路由)
  visionCacheTtl: 3600         # 视觉证据缓存秒数,0 = 关闭
  visionFallbacks: []
  fallbackProvider: ''
  fallbackModel: ''

安装时插件会幂等 seed 两条免费视觉路由到 llm-pi-ai(只补缺失键、绝不覆盖你的配置):

路由模型成本
ovh-visionOVHcloud Qwen2.5-VL-72B-Instruct(匿名端点)免费,无需 Key(约 2 次/分/IP)
zhipu-vision智谱 GLM-4V-Flash免费额度,需在设置页填 GLM_API_KEY

视觉默认值开箱即用;需要更稳定/更强的视觉时,把视觉行换成你已配置的模型即可。

与其它视觉插件共存

本插件只在「会话模型 = smart」时参与路由,不接管任何现有 provider 路由,也不改动宿主; 其它视觉插件(modlens、dsh-vision-router 等)可同时安装、互不影响。

开发与测试

npm test          # node --test tests/(80 个用例:分类器/路由链/视觉侧车/schema/配置 API/seed 幂等)

本地挂载调试:

dsh plugin --profile web add C:\Users\...\dsh-smart-router   # 目录安装
dsh --profile web --dump-config | grep smart-router          # 确认已挂载

鸣谢(References)

本项目实际参考了以下开源项目与 DSH 内部机制,在此致谢:

项目参考点
farion1231/cc-switch分级模型配置的产品形态(Claude Code 四档:主/快速/思考/视觉)
dylan121322/llm-adaptiveadapter 级路由架构:registerAdapter + prepareCall().stream() 透传;LLM 分类器判定标准
BruceLanLan/dsh-tier-router档位配置 schema 与阶梯回退、失败升级的取舍
haiziyao/dsh-vision-mix在 adapter 层声明 inputModalities: ['text','image'] 通过 DSH 图片准入(零宿主补丁)
liustack/modlens结构化视觉证据方案:summary/OCR/layout/semantics/visual/uncertainty 模板与「vision parsing engine」提示词(源码级参考)
gloryxpnv/dsh-tool-vision同款结构化 JSON 证据模板;vision-bridge 图块→描述文本替换、失败保持宿主行为的模式
ysr666/dsh-vision-router免费视觉链方案:OVHcloud 匿名端点(免 Key);图片准入机制分析;按图内容缓存
s3yf1337/dsh-easyvisionresolveModelInfo().inputModalities 判读模型视觉能力的模式
akqwpeter-prog/dsh-media-skillsllm-pi-ai 幂等 seed 免费视觉路由(zhipu-vision)的模式
DeepSeek Harness 内部dsh-llm(LlmAdapter/llm 服务/prepareCall 契约)、dsh-settings(installSettingsSection)、dsh-agent-loop(agent/request 瀑布)、dsh-client-modules(客户端 bundle 契约)

许可证

MIT