DeepSeek Harness 的分级模型路由插件:只暴露自定义挡位,每个挡位是一条有序的真实模型链,带重试和故障转移。
31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Abnerluo123/dsh-echelon该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 14 处,展示前 14 条)
- 发起网络请求client.js:522
const response = await fetch(`${API}${path}`, { - 写入剪贴板client.js:1655
await navigator.clipboard.writeText(state.file) - 读取本地文件src/log.js:87
parsed = JSON.parse(readFileSync(this.#file, 'utf8')) - 写入本地文件src/log.js:115
mkdirSync(dirname(this.#file), { recursive: true }) - 写入本地文件src/log.js:119
writeFileSync(temporary, body, 'utf8') - 写入本地文件src/log.js:120
renameSync(temporary, this.#file) - 删除本地文件src/log.js:123
unlinkSync(temporary) - 读取本地文件src/store.js:101
stat = statSync(this.#file) - 读取本地文件src/store.js:114
raw = JSON.parse(readFileSync(this.#file, 'utf8')) - 写入本地文件src/store.js:137
mkdirSync(directory, { recursive: true }) - 写入本地文件src/store.js:141
writeFileSync(temporary, body, 'utf8') - 写入本地文件src/store.js:144
renameSync(temporary, this.#file) - 删除本地文件src/store.js:147
unlinkSync(temporary) - 读取本地文件src/store.js:153
const stat = statSync(this.#file)
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成Echelon
给 DeepSeek Harness 用的挡位式模型路由。把十几个模型收成几个你自己命名的名字,选中一个,背后是一条有序的真实模型链:按序调用、失败重试、自动降级。
dsh plugin --profile desktop add dsh-echelon
配置页
解决什么问题
DSH 的模型选择器会列出每一个能用的模型。接了几个供应商之后,这个列表变成十几个名字各异、能力不同的条目,每次开新对话都要重新判断该用哪个。
Echelon 把这一步换成命名:定义几个挡位(日常、深度、免费…),选择器里就只剩这几个名字。
三个关键点
能力不同的模型可以互相当备用
这是最不显然的部分。
展开完整文档(README 剩余 1 节)
Echelon 给 DeepSeek Harness 用的挡位式模型路由。把十几个模型收成几个你自己命名的名字,选中一个,背后是一条有序的真实模型链:按序调用、失败重试、自动降级。 dsh plugin --profile desktop add dsh-echelon 配置页 解决什么问题 DSH 的模型选择器会列出每一个能用的模型。接了几个供应商之后,这个列表变成十几个名字各异、能力不同的条目,每次开新对话都要重新判断该用哪个。 Echelon 把这一步换成命名:定义几个挡位(日常、深度、免费…),选择器里就只剩这几个名字。 三个关键点 能力不同的模型可以互相当备用 这是最不显然的部分。链里混放能力不同的模型会遇到三个障碍,每一个都会让「自动换模型」变成「悄悄降级」: | 障碍 | Echelon 怎么做 | | 思考档位命名不同(medium / max / 不声明) | 统一 off / low / middle / high / xhigh,派发时按成员翻译;翻译不到就用成员自己的默认 | | 上下文窗口不同(1M 与 300K 混放) | 上报最大窗口,再按本次请求大小挑装得下的成员 | | 视觉能力不同(多模态与纯文本混放) | 请求带图时跳过看不了图的成员 | 于是「强的」和「便宜的」可以共处一条链:小请求走便宜的,大请求落到大窗口,带图请求落到能看图的。你不用知道背后选的是谁。 调用日志 这张日志里的一次请求同时触发了三种判断:带图 → 跳过无视觉成员;上下文过大 → 跳过小窗口成员;随后限流重试成功。 选择器变干净 隐藏真实模型,只留挡位。默认「全部显示」,隐藏是你确认挡位可用后主动做的选择。挡位里没有可派发的成员时隐藏会自动放开 —— 菜单永远不会变成进不去设置页的空列表。 兼容现有插件 成员可以是其它插件的路由(它们都只是 供应商/模型 字符串):dsh-our-free-model 的免费车道、dsh-model-fusion 的 auto、任何注册了 provider 的插件。 不修改 DSH 本体,不 patch 任何东西 —— 只注册一个 provider 路由,并包装一个公开只读方法来实现隐藏。 快速上手 dsh plugin --profile desktop add dsh-echelon 需要 DSH ≥ 0.2.0-rc.1、Node ≥ 22.14.0。装完重启 dsh,刷新页面。 1. 配置 → 新增挡位,起个名字。 2. 添加模型,按优先级排列 —— 顺序就是降级顺序。 3. 确认能正常对话后,再把 设置 → 模型选择器的显示 切成「只显示挡位」。 首次安装是「全部显示」,你的模型一个都不会少。 高级功能 - 逐成员设置:重试次数、超时、思考强度、上下文长度、最大输出、视觉能力(模型能看图却没上报时手动指认)。 - 超时按「进展」算,不按「数据」算:只发心跳、空包、计量行不算活着,超时照样换下一个;模型的思考过程算进展。范围 3–60 秒,全新安装默认 6 秒,可以关掉。DSH 自己会重试,而重试通常比等待更划算。 - 挡位默认值:给整条链设一个超时和重试次数,成员没单独设置时生效。 - 新对话默认强度:跟随模型,或固定成五档之一。 - 思考强度映射开关:开启时选择器统一五档,选中后按成员翻译(成员没有就换成最接近的,完全没有就交给模型默认);关闭时显示模型自己上报的档位并原样转发。成员编辑器里的那一栏永远只用该模型上报的档位 —— 那是给单个成员钉死档位的地方,不能钉一个它不认识的值。 - 图片路由:带图的请求优先选能看图的成员。开启 设置 → 高级 → 兼容视觉模型 后,只有时效范围内的图片才把整条链锁在视觉成员上(默认最近 5 条对话,也可按分钟计);超出时效,非视觉成员重新参与派发,图片以 [图片] 纯文本发给它们,内容由模型从上下文推断。能看图的成员照旧收到真实图片。默认关闭,行为与之前一致:对话里只要还有图片就走视觉成员。 - 调用日志:每次请求 挡位 → 真实模型、档位怎么翻译的(xhigh → max / 未发送)、试过谁、为什么被跳过、耗时与 token。写盘保存,重启不清空,默认保留 128 条,可关闭。 - 上下文写法:1m、256k、128k、纯数字都行,不用数零。k=1000、m=1000000(十进制:看到什么就输入什么,数值不会被改写)。 - 保存即生效:改设置不用重启,也不用刷新页面。右上角一个按钮:有改动时保存并重新加载,没改动时只重新加载。 - 配置文件:$DSH_HOME/model-router/settings.json,可手改(同样接受 "128k");写入走临时文件+重命名,不会留下半份配置。 超时是怎么判定的 界面里的说明只有一行,细节在这里。 看门狗量的不是「有没有收到数据」,而是「有没有进展」。这个区别很关键:不少网关在模型卡住时会持续发心跳、空 delta、只带 usage 的包,如果按「收到任何数据」算,这次尝试可以无限挂着——屏幕上什么都没有,计时器却一直在重置。 算进展的: - 带非空白文字的 text-delta / reasoning-delta(一个字符也算) - 带名字或非空参数的工具调用 - 块开始 / 块结束 - 结束包 不算进展的:空字符串、纯空白的 delta、只带 usage 的行、任何未知类型的心跳。 三处共用这一个预算,所以卡在哪一步都会被拦: | 阶段 | 以前 | 现在 | | resolveModelInfo 查能力 | 无期限(卡住时日志是空的) | 8 秒,超时降级为「能力未知」 | | prepareCall 准备请求 | 无期限 | 成员自己的超时 | | 流式输出 | 只在「完全没数据」时生效 | 同上,且按进展判定 | 超时后会主动取消该成员的请求,并且清理有 1 秒上限——否则清理本身会卡在同一个读上,出现「8 秒预算却跑了 277 秒」。 关于误伤:模型思考时在持续产出 reasoning delta,算进展;模型等待本地命令执行时,这次模型调用早已以工具调用块结束,看门狗根本不在等待——所以跑十分钟的本地任务不受影响。 输入框的行为 - 打字过程中不校验、不纠正:你可以先把 90 删成 9、再删空、再重新输入。 - 只有失焦或回车时才规范化:低于下限填下限,高于上限填上限,空着表示「不设置」。 - 不显示上下箭头,方向键和滚轮不会改动数值。 和其它方案的区别 Echelon 是 DSH 插件,不是独立的模型网关 —— 这个区别决定了它适合什么、不适合什么: | | Echelon | LiteLLM / One-API / New-API / OpenRouter | | 形态 | DSH 内部插件 | 独立服务,对外提供 OpenAI 兼容端点 | | 覆盖范围 | 只在 DSH 里生效 | 任何兼容 OpenAI 协议的客户端(Cursor、Cline、Cherry Studio、Chatbox 等) | | 部署 | 装进 DSH 即用 | 需要单独起服务、配端口与密钥 | | 路由依据 | 挡位 + 上下文大小 + 图片 + 思考档位 | 通常是模型名、权重、配额、限流 | | 解决的是 | 「DSH 里该选哪个模型」 | 「所有客户端统一走一个入口」 | 所以:如果你要给 Cursor、Cline、Cherry Studio、Chatbox 这类客户端做一个统一的 OpenAI 兼容入口,LiteLLM 或 One-API 更合适 —— Echelon 不提供外部端点,做不到这件事。 如果你要的是在 DSH 里不用再记十几个模型名、还要失败自动降级、还要考虑上下文和图片,Echelon 就是为此设计的。两者也可以并存:把 LiteLLM 之类注册成 DSH 的一个 provider,再让 Echelon 把它和免费车道放进同一条挡位。 关键词 方便检索用的同义说法: 中文:模型路由 / 模型聚合 / 挡位 / 按序降级 / 接口兜底 / 失败自动切换 / 渠道自动切换 / 防限流 / 429 处理 / 免费模型聚合 / 多供应商 LLM / 思考档位映射 / 上下文窗口路由 / 视觉能力路由 English: model router, model cascading, sequential fallback, automatic failover, multi-provider LLM, provider routing, rate-limit handling (HTTP 429), request retry, reasoning-effort mapping, context-window routing, vision / multimodal routing, DeepSeek Harness plugin 其它安装方式 | 方式 | 命令 | | npm(推荐) | dsh plugin --profile desktop add dsh-echelon | | 指定版本 | 加 #v1.9.0 | | GitHub 源码 | dsh plugin --profile desktop add github:Abnerluo123/dsh-echelon | | 插件市场 | 插件 → 插件市场,搜索 Echelon | desktop 换成你的 profile 名(dsh profile list)。 验证:dsh plugin --profile desktop list 应包含 dsh-echelon;设置里出现 Echelon。 卸载:dsh plugin --profile desktop remove dsh-echelon。配置保留在 settings.json,需要彻底清理时手动删除。 已知限制 - 隐藏依赖包装 llm.listModels:DSH 没有目录过滤钩子,绕过它直接读适配器的代码不会被过滤。 - 调用日志保留有限条数:默认 128 条,写盘所以重启不清空,但它是排障视图不是审计记录,超过上限的最旧条目会被丢掉。 - 未声明视觉能力的模型按「未知」处理:仍是图像请求的候选,但不会优先选中。 - ABORTED 与 CONTEXT_WINDOW_EXCEEDED 不降级:前者是你取消的,后者换个模型也装不下。 - 内部路由 id 仍为 model-router:改品牌时没有动它,已保存的会话和配置继续有效。 开发 node --test test/ # 219 项测试,无需网络 node scripts/verify-profile.mjs # 检查当前 profile 能否加载 test/integration.test.js 在本机有 DSH 应用包时,会用真实的 LlmRuntime 跑注册、派发、隐藏与降级。 | 文件 | 职责 | | index.js | Host 入口:注册路由、目录过滤、设置 API | | src/adapter.js | 按链派发、流式转发、重试、降级、写日志 | | src/config.js | 规范化、链展开、上下文与模态筛选 | | src/effort.js | 思考档位词汇与逐成员翻译 | | src/tokens.js | 请求大小估算与图片识别 | | src/catalog.js | 目录过滤(隐藏)与未过滤读取 | | client.js | 设置页与调用日志页 | License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Abnerluo123/dsh-echelon
DeepSeek Harness 的分级模型路由插件:只暴露自定义挡位,每个挡位是一条有序的真实模型链,带重试和故障转移。
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目