Echelon(dsh-echelon):挡位式模型路由与自动降级

前言

DeepSeek Harness(DSH)接多个供应商后,模型选择器会列出每一个可用模型。名字各异、能力不同,开新对话时总要重新判断该用哪一个。Echelon 是社区维护的 DSH 插件,把十几个真实模型收成几个你命名的挡位;选中一个挡位,背后是一条有序的真实模型链,按序调用、失败重试、自动降级。下面介绍它解决什么问题、怎么装、怎么配。

这是什么

Echelon(npm 包名 dsh-echelon,仓库 Abnerluo123/dsh-echelon)由 Abnerluo123 维护,当前版本 1.9.0,许可证 MIT,分类属于模型推理。它不修改 DSH 本体,只注册一个 provider 路由,在 DSH 内部把「选哪个模型」变成「选哪个挡位」。

解决什么问题

DSH 默认会把每个能用的模型都列出来。挡位多了,菜单又长又难记。Echelon 让你定义若干挡位(例如日常、深度、免费),选择器里可以只显示这些名字;每个挡位对应一条按优先级排列的成员链,顺序就是降级顺序。成员可以是其它插件注册的路由(如免费车道、dsh-model-fusion 的 auto 等),形态上仍是 供应商/模型 字符串。

三个关键点

能力不同的模型可以互相当备用

链里混放能力不同的模型时, naive 的「失败就换下一个」容易变成悄悄降级。Echelon 在派发前会做三类对齐:

障碍 做法
思考档位命名不同(如 medium / max / 不声明) 统一为 off / low / middle / high / xhigh,派发时按成员翻译;翻译不到则用成员默认
上下文窗口不同 上报链内最大窗口,再按本次请求大小挑选装得下的成员
视觉能力不同 请求带图时跳过不能看图的成员

因此「强的」和「便宜的」可以放在同一条链:小请求可走便宜成员,大请求落到大窗口成员,带图请求落到视觉成员。README 中的调用日志示例说明:一次请求可能同时因带图跳过无视觉成员、因上下文过大跳过小窗口成员,并在限流后重试成功。

选择器变干净

可以隐藏真实模型,只留挡位。默认是「全部显示」,首次安装不会少任何一个原有模型;确认挡位可用后,可在设置里把模型选择器切成「只显示挡位」。若某挡位没有可派发的成员,隐藏会自动放开,避免菜单变成空列表、进不了设置页。

兼容现有插件

成员可以是其它 DSH 插件的路由,只要 DSH 里能解析为 provider。与 LiteLLM、One-API 等独立 OpenAI 兼容网关不同:Echelon 只在 DSH 内生效,不提供对外端点;若需要给 Cursor、Cline 等客户端统一入口,应使用独立网关。两者也可并存:把 LiteLLM 等注册为 DSH 的 provider,再放进 Echelon 的挡位链。

安装与启用

环境要求:DSH ≥ 0.2.0-rc.1、Node ≥ 22.14.0。

推荐安装方式(npm):

dsh plugin --profile desktop add dsh-echelon

desktop 换成你的 profile 名,可用 dsh profile list 查看。指定版本时在命令后加 #v1.9.0。也可在插件市场搜索 Echelon 安装,或使用 dsh plugin --profile desktop add github:Abnerluo123/dsh-echelon 从 GitHub 添加。

装完后重启 dsh 并刷新页面。验证:

dsh plugin --profile desktop list

列表中应包含 dsh-echelon,设置里出现 Echelon。

卸载:

dsh plugin --profile desktop remove dsh-echelon

配置保留在 $DSH_HOME/model-router/settings.json,彻底清理需手动删除该文件。

典型用法

  1. 打开 配置 → 新增挡位,命名挡位。
  2. 添加模型,按优先级排列成员——顺序即降级顺序。
  3. 确认对话正常后,在 设置 → 模型选择器的显示 切换为「只显示挡位」(可选)。

高级能力(均在设置页或同一配置文件)包括:逐成员设置重试、超时、思考强度、上下文长度、最大输出、视觉能力;挡位级默认超时与重试;新对话默认思考强度;思考强度映射开关;带图请求的「兼容视觉模型」策略;调用日志(挡位 → 真实模型、档位翻译、跳过原因、耗时与 token,默认保留 128 条,写盘);上下文长度支持 1m、256k、128k 等写法。改设置保存即生效,无需重启 DSH。

配置文件路径:

$DSH_HOME/model-router/settings.json

可手改,写入采用临时文件加重命名,避免半份配置。

超时与进展判定

Echelon 的超时按「有没有进展」计算,而不是「有没有收到任何数据」。心跳、空 delta、仅 usage 的包不算进展;带非空白文字的 text/reasoning delta、工具调用、块起止、结束包算进展。resolveModelInfo 查能力有 8 秒上限,超时则能力按未知处理;准备请求与流式输出共用成员超时预算。超时后会主动取消该成员请求。界面默认全新安装为 6 秒,范围 3–60 秒,可关闭。

适用场景与注意

适合:在 DSH 里不想记十几个模型名,需要失败自动降级,并希望按上下文大小、图片、思考档位在链内选合适成员的用户。

注意:

  • 插件在当前 DSH 进程的权限下运行,安装前请查看 源码与 LICENSE。
  • 隐藏真实模型依赖包装 llm.listModels;绕过该接口直接读适配器的代码不会被过滤。
  • ABORTED 与 CONTEXT_WINDOW_EXCEEDED 不会触发链内降级。
  • 内部路由 id 仍为 model-router,与品牌名 Echelon 并存,旧会话与配置仍有效。

社区插件目录页:skillhub.cn/plugins/Abnerluo123/dsh-echelon。该目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

Echelon 把 DSH 里的模型选择收成命名挡位,并在一条链上完成重试、降级,以及思考档位、上下文与视觉的路由。若你的痛点是「在 DSH 里选模型和兜底」,可按上文命令安装并配置挡位;更多细节见 GitHub README。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye