前言¶
在 DeepSeek Harness(DSH)里,同一个逻辑模型往往出现在多个提供方上:deepseek-v4-pro 可能既走第一方账号,也走第三方路由;同名或近似的 Flash 模型也可能分散在不同渠道。常见做法是每次会话手动选一条路由,并自己记住哪条当前可用。路由一换,还要重新面对配额、延迟和 prompt 缓存是否还能复用的问题。
下面介绍社区插件 dsh-model-pool(维护者 BruceZhang1993,分类为模型推理)。它把已注册提供方的模型聚合成一个 Model Pool:你在输入区只选池内模型和思考深度,具体由哪条提供方服务交给可配置策略与健康感知失败转移来决定。
这是什么¶
dsh-model-pool 是 DeepSeek Harness 插件,npm 包名 dsh-model-pool,许可证 MIT,要求 Node.js >= 20。Host 侧为纯 ESM(index.js + lib/),浏览器侧为手写客户端模块(client.js);peer 依赖 @deepseek-ai/dsh-llm、@deepseek-ai/schemastery 由 DSH Host 提供,安装插件本身无需额外装运行时依赖,也无需构建步骤。
插件注册一条虚拟路由 model-pool,对外展示的是各提供方模型的并集(经 modelGroups 可合并不同 id 的同一逻辑模型)。选择单位从「提供方 + 模型 id」变成「池内模型」;提供方成为实现细节。
核心功能¶
路由策略¶
在 设置 → 模型池 中选择策略后,每次 llm/stream 调用在派发前被拦截并重定向到具体提供方:
| 策略 | 作用 | 适用场景 |
|---|---|---|
priority |
按配置的优先级顺序尝试 | 有明确首选并提供备份 |
round-robin |
每次调用轮换起始提供方 | 等价路由间均摊负载 |
weighted-random |
按权重随机 | 偏好某路由但不硬绑定 |
least-used |
优先调用次数最少的提供方 | 均衡且无需严格轮换 |
fastest |
优先近期首块延迟最低(EWMA) | 延迟敏感;首呼相当于探测 |
cheapest |
优先声明成本提示最低 | 成本敏感的批量任务 |
priority、least-used、fastest、cheapest 在 key 相同时保持 providerOrder 顺序,行为稳定。
健康感知与失败转移¶
每条具体路由有状态:ok、degraded、unavailable、unknown。失败会进入 cooldownMs 冷却并带失败码记录;有其他候选时跳过不可用路由。只有在尚未有任何输出流式到达用户时才会转移;已有部分输出则不再重放。maxAttempts 限制单次调用最多尝试的提供方数;fallback: false 时只试第一个候选。
Sticky 会话(默认开启)¶
sticky 把会话固定到首次成功服务该会话的路由,避免每轮轮换导致提供方 prompt 前缀缓存失效。失败转移仍有效:无输出前的失败会换候选,存活路由成为新 pin;冷却中的 pin 会被跳过。仅池内调用参与;换池内模型或从未选池的会话不受影响。需要在多账号间按调用分摊配额而非复用缓存时,可在 设置 → 模型池 → 行为 关闭。
提供方优先级与峰谷时段¶
providerOrder 决定 priority 排序,以及 least-used、fastest、cheapest 的平局与失败转移回退顺序。可在 设置 → 模型池 → 提供方优先级 用箭头调整,或写入 cordis.patch.yml:
providerOrder: [deepseek-account, workbuddy, our-free-model]
峰谷时段(peak / idle) 按当前时刻对提供方使用不同排序。默认时区 Asia/Shanghai,高峰为周一至周五的 09:00-12:00 与 14:00-18:00,并考虑国务院调休:补班周六按工作日高峰,法定节假日与周末其余时间为空闲。peakProviderOrder / offPeakProviderOrder 为空则继承 providerOrder。法定节假日数据来自 holiday-cn,插件自动同步至 $DSH_HOME/model-pool/calendar.json(未设置 DSH_HOME 时为 ~/.dsh 下),网络失败时保留缓存并回退星期规则,不阻断路由。
思考深度、图片与模型合并¶
池对外公布各候选思考深度的并集,路由器映射到目标最近层级(精确匹配优先)。上下文窗口取候选中的最小值,保证能进池的请求也能进任一 failover 目标。
输入模态取并集:带图片的调用在策略运行前收窄到接受图片的候选,避免「有一个纯文本候选就拒绝全池上传」的交集陷阱。
modelGroups 把不同提供方上的同名/近似 id 合并为一行(默认已合并 DeepSeek V4.1 Flash、GLM 5.3 Flash 等),可在 设置 → 模型池 → 合并组 或配置中编辑。
界面与可观测性¶
安装验证通过后,设置 → 模型池 列出池内模型、提供方数量、思考深度与逐路由状态;输入区模型选择器有 Model Pool 条目。输入区停靠栏会显示当前会话的实际路由(提供方、真实模型 id、思考深度、所选池模型),随失败转移更新;非池会话不显示该项。
安装与启用¶
环境:DSH 桌面版或 CLI,Node.js >= 20。
DSH 桌面版:打开插件管理器,在注册表搜索 dsh-model-pool 并安装,然后重启 DSH 桌面版。
CLI profile(命令来自项目 README):
dsh plugin --profile web add dsh-model-pool # latest
dsh plugin --profile web add dsh-model-pool@0.1.0 # pin a version
安装后需在 profile 内重启;dsh plugin 在 profile 目录委托 pnpm,并将 bundle 选入 dsh.profile.bundles。
本地开发安装(链接本地目录而非下载):
dsh plugin --profile web add /absolute/path/to/dsh-model-pool
验证:存在 设置 → 模型池,且 composer 可选 Model Pool 模型。更完整的步骤与故障排查见仓库 docs/installation.md(中文:installation.zh-CN.md)。
典型用法¶
经过上面的安装与重启,可按下面顺序使用:
- 打开 设置 → 模型池,查看各池内模型与路由状态;选择策略,按需调整行为开关、提供方优先级或峰谷时段排序。
- 在输入区模型选择器中选择 Model Pool 下的模型及思考深度。
- 正常对话;某路由失败且尚无输出时会冷却并 failover;可在设置页查看状态徽章,在停靠栏查看本会话实际路由。
日常策略也可写在 cordis.patch.yml 的 model-pool 配置块中(如 strategy、cooldownMs、maxAttempts、weights、costs 等),升级后仍保留。完整字段示例见 GitHub README.zh-CN.md 的配置一节。
适用场景与注意¶
适合已在 DSH 中注册多个提供方、且同一逻辑模型有多条重叠路由的用户:希望用策略统一选路、失败自动切换,并可选按国内工作日峰谷或节假日调整优先级。
使用前请注意:
- 插件与 DSH 进程同权限运行;安装前建议阅读 源码与 MIT 许可证,确认路由与日历同步行为符合你的环境。
- 健康与轮询状态按 Host 世代保存在内存,重启会清空;节假日日历缓存在磁盘。首次日历同步需要网络。
- 路由粒度是按调用;关闭 sticky 时同一会话多轮可能走不同提供方。
round-robin等均衡策略与 prompt 缓存复用存在权衡,文档建议缓存更重要时可考虑priority或保持 sticky。 - DSH 社区插件目录(如 SkillHub 条目)由社区维护,与 DeepSeek / 幻方无官方从属关系;安装来源以注册表或 npm 包为准。
结尾¶
dsh-model-pool 把「选模型」和「选提供方」拆开:一次选定池内模型,由策略、健康门控、sticky 与可选峰谷/节假日策略完成具体路由。若你在多提供方 DSH 环境里做推理与智能体开发,值得在测试 profile 里装一份对照日常手动选路的开销。