dsh-auto-model:为 DeepSeek Harness 增加「自动选择」模型路由

前言

在 DeepSeek Harness(DSH)里开发智能体时,会话往往绑在一个固定模型上:写代码、看图、长上下文、想省额度,都要手动换模型。社区里也有人在多个 Provider 之间来回切,但每轮任务特征不同,人工选模型既慢也容易选错。

下面介绍维护者 vener0 发布的 dsh-auto-model(GitHub:vener0/dsh-auto-model)。它在模型选择器里注册虚拟项 「自动(Auto) → 自动选择」:由你配置的主模型根据副模型清单和任务摘要挑选执行模型,实际请求由被选中的副模型完成;工具调用、脚本、审批与沙箱仍走当前会话原有机制,插件只做路由。

这是什么

dsh-auto-model 是 DSH 的 Host 插件(当前 package 版本 3.0.1,MIT 许可证)。它向 Harness 注册 Provider auto、模型 auto,在每轮用户消息前增加一次轻量路由:主模型只读任务摘要与副模型清单,输出一行 JSON(route、reason),再把完整 messages、tools 等原样转发给副模型执行。回复开头可标注本次选用(默认开启)。

数据流可概括为:

用户消息 ──▶ 主模型(只收任务摘要 + 副模型清单)
                 │ {"route":"provider/model","reason":"…"}
                 ▼
           副模型(执行请求、调用工具、生成回复)
                 │
                 ▼
   回复 = 自动模式|主模型 X|任务 … → 执行 Y + 副模型输出

插件要求 DSH 引擎 ^0.2.1-rc.2(见 package.json 的 engines.dsh)。社区目录页:https://www.skillhub.cn/plugins/vener0/dsh-auto-model;源码与说明:https://github.com/vener0/dsh-auto-model。

核心功能

模型选择器与设置页

  1. 在会话模型选择器中选 「自动(Auto) → 自动选择」。
  2. 打开 设置 → 自动模型 配置:
    - 主模型:负责挑选执行模型(自己不直接回答用户),宜选响应快、指令稳定的模型。
    - 副模型清单:主模型只能从这里选;顺序即提示与重试顺序;可勾选 免费、设置 标签。
    - 自定义标签:字母/数字/中文/-/_,最多 20 个,可挂到任意副模型。
    - 优先使用免费模型:默认关闭;开启后先尝试免费模型,不可用或失败时自动切换。
    - 兜底模型:副模型全部不可用时使用。
    - 在回复中显示本次选用的模型:默认开启。
    - 向模型提示中提供 API Key 明文:默认关闭(见下文安全说明)。
    - 高级:上下文窗口 / 最大输出覆盖(0 = 自动 / 模型默认)。

配置持久化到 $DSH_HOME/profiles/<profile>/cordis.patch.yml 的 auto-model 行。

副模型清单:输入输出与标签

每个副模型需声明输入 / 输出类型(纯模态):text、image、audio、video。例如对话 text→text,视觉 text+image→text,文生图 text→image,图生图 image→image。

能力标签只影响排序与提示,不做硬过滤;带图请求的输入模态由宿主 inputModalities 硬性保证。常用能力标签包括 vision、coding、image-gen、reasoning、tools、long-context、fast 等(完整表见仓库 README)。未打标签的模型仍可按「通用」参与;Host 还会从模型名称/元数据推导部分标签。

任务标签由插件根据当前轮次自动推导,例如:最新消息带图片 → vision;要求生成图片 → image-gen;已有工具调用 → tools;估算上下文 ≥ 48k / ≤ 6k(无图)→ long-context / fast。

文生图与图生图

DSH 没有 outputModalities,图片通常由工具生成。给适合画图的副模型设置输出含 image、能力含 image-gen / image-to-image 与 tools 即可。模型理解需求并调用工具,独立画图服务一般注册为工具而非副模型。清单示例(YAML 片段,来自 README):

- provider: hbec
  model: qwen25-72b
  inputs: [text, image]
  outputs: [text, image]
  tags: [vision, image-gen, image-to-image, multimodal, tools]
  free: false

免费优先与失败处理

开启 优先使用免费模型 后,主模型先判断免费模型能否胜任;免费模型在产生可见输出前失败(鉴权、限流、额度、上下文超限、网络等)时,按清单顺序重试下一个,并在回复中提示类似:⚠️ X 调用失败(原因),已切换到 Y。全部副模型失败时由主模型带完整对话接管;主模型也失败则输出可读的失败总结。失败模型冷却 2 分钟;已产生可见输出后失败不中途换模型。

主模型可见范围与 API Key

路由提示只含任务摘要:副模型清单、任务标签、是否含图/文生图/工具、请求大小估算、最后一条用户消息(截断)、助手最近消息、工具名。不发送完整会话上下文;执行时转发给副模型的请求仍携带完整参数。主模型只输出一行 JSON,解析失败时回退到清单第一个可用副模型。

默认 exposeApiKeys: false:提示里只有环境变量名和「已配置/未配置」。开启 向模型提示中提供 API Key 明文 会把真实 Key 写进路由提示,密钥会发给主模型提供方,有泄露风险,仅在明确需要时开启。

安装与启用

插件暂未发布到 npm,通过 GitHub 安装(使用 --profile web,与 README 一致):

# 跟随 main
dsh plugin --profile web add github:vener0/dsh-auto-model

# 固定 commit(推荐,避免分支变动)
dsh plugin --profile web add github:vener0/dsh-auto-model#<40位commit>

在 GitHub 仓库 Commits 页面复制完整 40 位 commit SHA 替换占位符。安装后重启 Harness。

典型用法

  1. 按上一节命令安装并重启 DSH。
  2. 在 设置 → 自动模型 中指定主模型,并按任务类型维护副模型清单(模态、标签、是否免费)。
  3. 在会话里选 「自动(Auto) → 自动选择」,照常发消息;需要看图、写代码、长文时无需每轮手动换模型。
  4. 若希望尽量用免费额度,开启 优先使用免费模型,并给合适候选勾选 免费。
  5. 文生图/图生图场景:为副模型配好 image-gen / image-to-image 与 tools,并确保会话里已有对应画图工具。

适用场景与注意

适合:在同一 Harness 会话里混合代码、多模态、长上下文等任务,希望用规则化清单 + 主模型路由减少手工切模型;愿意接受每轮多一次轻量路由调用(约几百 token)。

务必了解:

  • 插件以当前 DSH 进程权限运行;安装前请阅读源码与 MIT 许可证,确认清单中的 Provider/模型与 Key 配置符合你的安全策略。
  • 请求大小按字符/图片估算,不精确;上下文超限依赖失败重试兜底。主模型只看任务摘要,不适合需要通读全文的细粒度路由决策(副模型执行时仍有完整上下文)。
  • 计费/用量按 auto/auto 记录;系统提示里的 {{model}} 显示为 auto。
  • 上下文窗口默认取候选最小值(偏安全),可在设置中覆盖。

仓库含 33 个路由用例(npm test → node test/router.test.mjs),主要逻辑在 index.js(Host)、client.js(设置页)。

结尾

dsh-auto-model 把「选哪个模型干这轮活」从手工切换变成可配置的清单 + 主模型路由,同时明确边界:不替代 DSH 的工具、审批与沙箱。若要固定版本安装或查看标签表与限制说明,请以 GitHub README 为准。

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

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

小夜