🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

虚拟模型路由 andrepontesmelo/dsh-model-router

DeepSeek Harness
andrepontesmelo53 天前有提交已提供中文文档扫描:未发现敏感能力

用虚拟模型 id 按算法分发请求并自动故障转移

29.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add andrepontesmelo/dsh-model-router
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · model
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 53 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@andrepontesmelo/dsh-model-router(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 05:57:41

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-settings@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 虚拟模型ID调度
  • 可插拔路由算法
  • 透明故障转移

DSH 插件:虚拟模型 id 由可插拔路由算法(优先级、轮询)在真实服务商候选间调度,并支持透明故障转移。

README

由 DeepSeek 最新模型翻译生成
dsh-model-router CI Version local gate dsh-model-router banner 一个 DeepSeek Harness (DSH) 插件,将模型选择转变为智能路由:在配置中声明一个虚拟模型 id,将其绑定到针对一组真实 provider/model 候选者的路由算法上,然后就可以在任何地方使用这个虚拟 id —— agent 选项、模型选择器。每次调用都会被透明地分派到由算法选出的真实模型,并带有自动故障转移。 它的功能 - 虚拟模型 id。 诸如 routed-chat 这样的路由在选择器中表现得像任何真实模型一样,但它只是你定义的候选池之上的一个门面。 - 透明故障转移。 当某个候选者失败时,会尝试下一个 —— 相同的请求,用户看不到错误 —— 并且插件会记录每次调用实际由哪个真实模型提供服务,因此故障转移总是能在来源信息中体现,而不是悄无声息。 - 两种路由算法(可插拔的扩展点): - priority —— 总是先尝试第一个候选者;仅在失败时才跳过它。失败的候选者会获得指数退避,让陷入困境的模型在被再次尝试之前有时间恢复。 - round-robin —— 在候选池中分配调用。 - 每个候选者的推理级别。
展开完整文档(README 剩余 1 节)
dsh-model-router

CI
Version
local gate

dsh-model-router banner

一个 DeepSeek Harness (DSH) 插件,将模型选择转变为智能路由:在配置中声明一个虚拟模型 id,将其绑定到针对一组真实 provider/model 候选者的路由算法上,然后就可以在任何地方使用这个虚拟 id —— agent 选项、模型选择器。每次调用都会被透明地分派到由算法选出的真实模型,并带有自动故障转移。

它的功能

- 虚拟模型 id。 诸如 routed-chat 这样的路由在选择器中表现得像任何真实模型一样,但它只是你定义的候选池之上的一个门面。
- 透明故障转移。 当某个候选者失败时,会尝试下一个 —— 相同的请求,用户看不到错误 —— 并且插件会记录每次调用实际由哪个真实模型提供服务,因此故障转移总是能在来源信息中体现,而不是悄无声息。
- 两种路由算法(可插拔的扩展点):
- priority —— 总是先尝试第一个候选者;仅在失败时才跳过它。失败的候选者会获得指数退避,让陷入困境的模型在被再次尝试之前有时间恢复。
- round-robin —— 在候选池中分配调用。
- 每个候选者的推理级别。 候选者可以声明一个 reasoning 努力级别,当该候选者服务请求时会被应用;没有匹配级别的模型则保持其 provider 默认值。
- 你自己的算法。 RoutingAlgorithm 是一个工厂契约(select、onFailure,可选的 onDispatch/onSuccess)—— 实现一个并注册它。

单个回合的故障转移 —— 一个候选者失败,下一个接手,来源信息记录谁做出了响应:

flowchart LR
V["request: routed-chat"] --> P["algorithm selectsthe first live candidate"]
P --> C1["candidate 1alpha/alpha-model"]
C1 -- "stream error" --> F["mark failed +backoff cooldown"]
F --> R["retry: select thenext live candidate"]
R --> C2["candidate 2beta/beta-model"]
C2 -- "stop" --> OK["success — provenancerecords beta as the model that served"]

为什么存在

模型池是现实:一个便宜快速的模型、一个强大的模型、一个备用模型。硬编码一个 id 意味着 provider 的故障就是你的故障。在插件层进行路由意味着 harness 的其余部分永远不会知道故障 —— 也永远不需要知道。

安装

需要 Node ≥ 22 以及一个用于安装的 DSH profile。

npm pack
dsh plugin --profile add file:/path/to/dsh-model-router-.tgz

或者直接从 GitHub 安装:

markdown
dsh plugin --profile add github:andrepontesmelo/dsh-model-router

[!WARNING]
路由由配置驱动,不会绕过任何你未声明的内容——但你列出的每个候选者都是真实提供方,你的提示词和补全结果都会被发送到那里。在安装并非由你编写的路由配置之前,请审计 candidates 列表,并固定安装版本(tag 或本地 tarball),而不是跟随分支浮动。

安装前验证构建: bash
npm pack --dry-run # 检查实际发布的内容
sha256sum dsh-model-router-.tgz

将校验和与你要安装的版本随附发布的校验和进行比较。github: 安装会在安装时解析默认分支——为了可复现性,请固定一个 tag。

安装后有有用的命令: bash
npm test # 76 项测试的单元测试套件(node --test)
npm run smoke # 5 个故障转移演练,内存中运行,零网络
dsh plugin --profile list

快速开始

向你的 profile 的 cordis.patch.yml 添加一条路由: jsonc {
"routes": [
{
"id": "routed-chat",
"algorithm": "priority", // "priority" | "round-robin"
"candidates": [
{ "provider": "deepseek-official", "model": "deepseek-v4-flash", "reasoning": "high" },
{ "provider": "pi-ai", "model": "..." }
]
}
]
}

在模型选择器中选择 routed-chat(或将其设为某个 agent 的模型)即可路由。发生故障转移时,响应来源会显示实际应答的模型,以及任何正处于退避窗口中的候选者。

候选者可选的 reasoning 是该提供方模型的一个 effort id。当该候选者处理请求时, shim 会以该 reasoning effort 进行分发;如果模型没有 reasoning 概念(或没有这样的 effort),该级别会被忽略,并应用提供方自身的默认值——请求绝不会因此失败。

从配置到选择器的整个栈——一条声明的路由会变成一个由候选池支撑的真实模型选择器条目: mermaid
flowchart TD
C["cordis.patch.ymlroute routed-chat, algorithm priority,candidates: deepseek-official/deepseek-v4-flash, pi-ai/…"] --> A["apply(): validate config,group routes by provider"]
A --> S["RouterShim registers thevirtual provider routed-chat"]
S --> L["llm runtime"]
L --> M["model picker advertisesrouted-chat"]
M --> D["picking routed-chat dispatches throughthe algorithm with transparent failover"]

编写你自己的算法

算法是一个工厂函数 (ctx, routes) => algorithm:
js
{
select(route, callCtx) // -> candidate | undefined (纯函数——不推进状态)
onFailure(route, candidate) // 记录失败,以便 select 跳过它
onDispatch?(route, candidate) // 请求的首次分发
onSuccess?(route, candidate) // 可选
}

shim 会对 select 进行布尔检查探测,因此它必须保持纯函数;状态推进发生在 on* 回调中。test/ 中的测试套件固定了这些接缝机制。
文档

从文档索引开始:

- 架构 — 插件接线、垫片、路由、退避。
- 开发 — 目录结构、测试门禁、如何运行冒烟测试套件。

贡献

欢迎提交 PR — 工作流程和本地门禁请参见 CONTRIBUTING.md。
安全问题:SECURITY.md(请勿公开提交 issue)。

路线图

- 会话粘性 — 将会话固定到首次为其提供服务的候选者 — 上游阻塞:插件在适配器的 prepareCall(provider, model, signal) 接缝处选择其候选者,而该接缝不携带会话 ID(循环在请求选项上的可选 sessionId 只会在稍后、流式传输时、选择之后才出现),因此插件无法按对话进行固定。如果 DSH 在候选者选择过程中传递会话 ID,则可解除阻塞。

要求

- Node ≥ 22。
- 一个用于安装的 DSH 配置文件;候选者指向已在该配置中配置好的提供者。

测试

npm test # 单元测试套件
npm run smoke # 内存故障转移演练(LOCAL 模式)

许可证

MIT — 参见 LICENSE。
预览分享卡片长什么样 ↓andrepontesmelo/dsh-model-router
分享 · DeepSeek Harness Hub
andrepontesmelo/dsh-model-router

用虚拟模型 id 按算法分发请求并自动故障转移

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部