智能模型路由 chillBnetley/dsh-model-router
DeepSeek 客户端v0.7.1按问题类型自动挑选最合适的模型作答
30.7/100
综合分
1
GitHub 星标
201
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/chillBnetley/dsh-model-router.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-model-router @ 0.7.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 04:18:42
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按问题类型路由模型
面向 DeepSeek Harness 的按问题类型路由模型
README
由 DeepSeek 最新模型翻译生成dsh-model-router
面向 DeepSeek Harness 的、按问题类型感知的模型路由。
不再让一个模型包办所有问题,路由器会先给每一轮对话分类,再重新分发到合适的模型上——研究工作正确率优先,闲聊免费模型优先。
安装
git clone https://github.com/<you>/dsh-model-router.git
cp -r dsh-model-router ~/.dsh/plugins/
然后在配置档的 cordis.patch.yml 里,把 dsh-model-router 写进 dsh.profile.bundles。插件自带 config: 配置块——带注释的默认值见 cordis.patch.yml。
先用 dryRun: true 起步。 这时路由器只记录它本来会选哪个模型,不做任何改动,你可以拿自己的模型目录对照观察,确认无误再放它去调度真实流量。
展开完整文档(README 剩余 1 节)
dsh-model-router
面向 DeepSeek Harness 的、按问题类型感知的模型路由。
不再让一个模型包办所有问题,路由器会先给每一轮对话分类,再重新分发到合适的模型上——研究工作正确率优先,闲聊免费模型优先。
安装
git clone https://github.com/<you>/dsh-model-router.git
cp -r dsh-model-router ~/.dsh/plugins/
然后在配置档的 cordis.patch.yml 里,把 dsh-model-router 写进 dsh.profile.bundles。插件自带 config: 配置块——带注释的默认值见 cordis.patch.yml。
先用 dryRun: true 起步。 这时路由器只记录它本来会选哪个模型,不做任何改动,你可以拿自己的模型目录对照观察,确认无误再放它去调度真实流量。
判断逻辑
| 任务类型 | 目标 |
| coding、math_reasoning、learning_tutor、knowledge_qa、agentic_tools | 质量优先:评分最高的模型直接胜出;只有评分相同的候选之间才用价格分高下 |
| daily_chat | 效率优先:只要过了分数下限都算合格,其中免费的胜出 |
| writing_literature、translation、long_context | 接近最优(与最高分差距在 maxScoreDrop 以内),然后选最便宜的 |
以下硬性规则与上面的目标无关:
- 凡是执行任务的轮次,一律禁用 Grok。 在配置的网关上它永远拿不到工具 schema,所以它只能服务 grok.allowedTypes 里列出的类型(默认:闲聊),绝不接手带工具活动或动作请求的轮次。
- 未知不等于猜测。 没有能力记录的模型会被排除;在需要执行工具的轮次上,工具支持情况未知的模型同样被排除。如果没有任何模型合格,请求就交给 fallback——没配 fallback 且处于实时模式时,请求保持原样不动。
- 被限流的路由进入冷却,而不是每轮都重试。
- 辅助调用不走路由。 会话标题和压缩请求都带 purpose,沿用 harness 选定的模型,因为它们的输出格式是有约定的。respectPurpose: false 可以关掉这条。
- 固定模型可以豁免。 respectModels: ["provider/model"] 让路由放过这些请求——这是给模型被 agentOptions 固定住的子代理留的逃生口。
闲聊语气
maxTokens 只能在传输层限制闲聊长度,语气还得靠提示词。插件贡献一个系统提示词段落(model-router:chitchat-style),只在闲聊轮次渲染;其他轮次它渲染为空并被丢弃,所以那些提示词与不装本插件时组装出来的结果逐字节一致。
轮次关联是精确的,不靠记账:组装钩子的 scope 就是 Agent,而 Agent 暴露了 .session,所以最新的真实用户消息直接从会话里读(插件自己写的上下文和工具结果会被跳过——它们也是 user 角色的消息)。
⚠️ 一个会逐轮切换的区块会改变系统提示词前缀,而提示词缓存正是以此为键。如果缓存复用比语气更重要,就设置 chitchatStyle.enabled: false。
子代理与智能体团队
两者都照常工作:路由器只换掉为某个流提供服务的模型,别的什么都不动。派生、团队任务板、消息传递、工具暴露,以及子代理/队友模型的选择,全都不受影响。
每次 llm/stream 调用都会被路由,包括子智能体自己的轮次——所以做代码的子代理会拿到编码模型。子代理的选择继承自父级(或由 agentOptions 固定);用 respectModels 保护固定项。
机制
它挂上 llm/stream 瀑布——harness 文档里写明这是替换服务商/模型路由的接缝——然后返回一个新的请求信封。传入的请求绝不会被改动:循环构建的请求被深度冻结,其内容是会话日志的纯函数。
配置
一切都放在配置档的 cordis.patch.yml 里,位于本插件的 config: 下。带注释的默认值见 cordis.patch.yml。
有用的开关:
- dryRun: true —— 记录它本来会选什么,什么都不改。先做这一步。
- enabled: false —— 让每个请求都保持调用方构建时的原样。
- chunk 限制:chitchatMaxTokens 在传输层限制闲聊输出。
工作 / 闲聊 mode
用户选择的覆盖项会引导整个轮次,与任务类型无关:
- work(默认)—— 上面那套基于类型的策略,不变。
- chat —— 免费模型优先:Space Bunny Free 首选,然后是免费池里的其余模型;真正困难的问题(不是执行工具的轮次)可以升级到 Grok 做推理。
模式按会话生效。输入框的 ⚡ 工作 / 闲聊 开关(在模型选择器那一行)会写入它;/mode(或 /mode work|chat)显示或设置它。三个来源保证它可靠,按优先级排列:
1. data/modes.json —— 插件自己的映射表,由 /mode 写入,路由器每轮都会读取。这是路由信任的来源,所以切换在下一轮就生效,并且重启后依然保留。
2. model-router/mode 会话事件 —— 由 /mode 追加,作为会话日志里的语义记录,并在某个会话的模式早于状态文件时被读回。
3. defaultMode —— 会话在从未切换过之前使用的值。
stateFile 覆盖这张映射表存放的位置(测试把它指向临时文件),chat.preferred.id 指定闲聊模式优先选用的免费模型。
状态文件之所以存在,是因为在路由时从会话日志里读回模式并不可靠:为某个轮次解析实时会话可能落空,而落空是静默的——模式就停在默认值,尽管写入本身成功了。因此路由从不依赖那次读取。
反映被路由的模型
当路由器选了不同的模型,它会把选择写回会话会持久保存模型选择,所以 composer 的模型席位会切换到真正服务本轮对话的模型——你能看到是谁回答了你。reflectModel: false 会关闭这一行为,保持选择不变。
查看某次决策
/route 会打印上一次决策:分类结果、置信度、是否要求工具、生效的模式、调用方请求的内容、最终选中的内容,以及原因。
数据
data/capabilities.json 是策略读取的能力矩阵:每个模型有九项任务评分,附带来源 URL 和置信度、价格、模态,以及实时探测得到的实测事实(可达性、工具调用、首 token 时间)。tools/ 存放生成它的探测脚本;tools/validate-profile.mjs 会拿配置档的 provider 段对照适配器自己的 schema 做校验。
能力置信度天然参差不齐:厂商基准数据是 high,基于元数据推断的档位是 low,无法验证的 id 是 unknown。translation 几乎完全没有实测,不应据此路由。
矩阵是快照,会过期;超过 maxMatrixAgeDays 后,路由器会在启动时告警。想针对你自己的网关重新测量,把 gateways.local.json.example 复制为 gateways.local.json,列出要探测的端点:
[{ "route": "my-gateway", "base": "https://api.example.com/v1", "keyEnv": "MY_GATEWAY_API_KEY" }]
keyEnv 指向 ~/.dsh/.credentials.yaml 里的某个密钥,因此不会有任何凭据写进这个仓库。然后运行 node tools/probe-catalog.mjs,再用 node tools/build-capabilities.mjs 重新构建。
这个仓库里刻意不放的东西
路由器读写的是能识别你使用情况的状态,探测又需要知道你为哪些服务付费。这些一律不纳入版本控制:
| 文件 | 内容 |
| data/modes.json | 会话 ID → work/chat |
| data/diagnostics.log | 每一次路由决策,带时间戳 |
| data/probe-.json、data/research-.json | 网关原始响应和目录转储 |
| gateways.local.json | 你的网关端点,以及各自使用的凭据 |
这些都由 .gitignore 覆盖,运行时按需创建。
测试
node --test test/*.test.mjs
大约 100 个测试:分类器行为、上面每一条策略规则,以及一个集成套件——它把真实插件挂载进真实的 cordis 上下文,断言实际的分发决策。两个 mode-e2e 用例覆盖从会话日志恢复,目前是红的——它们在作者机器上也失败,与路由无关。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
chillBnetley/dsh-model-router
按问题类型自动挑选最合适的模型作答
相关插件 · 其他
模型破甲清洗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
这是你的仓库?认领条目