前言¶
DeepSeek Harness(dsh)把智能体循环做成「一切皆插件」:模型、工具、界面槽位都可以挂上去。日常用网页界面写代码时,会话里往往混着两类请求:一类是「这个报错是什么意思」「继续」这种短问,一类是改架构、读大文件、跑多步工具的重活。如果全程走主模型,简单问答也会吃前缀缓存和推理预算;如果全程走便宜模型,复杂任务又容易掉质量。
社区插件 dsh-model-router 做的是中间这一层:先判断这一步是不是简单问题,简单的用 flash 直答,重活仍走主模型;主模型短暂故障时可以降级重试一次;输入框下方再挂一块 token / 缓存命中 / 估算成本面板。本文按插件目录页、GitHub 仓库 README / package.json / 源码交叉核对后整理。
社区插件目录(https://deepseek-harness-plugin.com)是独立站点,和 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。GitHub 上还有另一个同名仓库 superboy911/dsh-model-router,做的是关键词路由和隔离生图,和本文介绍的不是同一个插件。
这是什么¶
dsh-model-router 是一款面向 DeepSeek Harness 网页界面的界面增强插件,由 tianji-qingtian 维护,许可证 MIT,主要语言 JavaScript。目录页收录于 2026-08-12,分类为「界面增强」。仓库 package.json 当前版本为 0.8.1,GitHub 最新 Release 也是 v0.8.1(2026-08-14)。插件声明的客户端平台是 web,需要挂到 web profile 才能看到面板。
它解决三件事:
- 简单问题不要进主模型:零前缀 flash 作答,不碰主会话的前缀缓存。
- 瞬时故障不要整轮失败:限流、服务端错误、超时、空响应时降到便宜模型再试一次。
- 用量要能看见:按会话折叠真实适配器 token,并按模型档位估一个带
≈的费用。
Harness 官方仓库写明当前仍是 developer preview,不兼容变更是预期内的。插件 README 也提醒:升级 harness 后,伪造 step 包络这一段值得复查。
核心功能¶
便宜模型裁判路由¶
请求先走 agent/pre-step 瀑布。明显的重活(强关键词或超长文本)直接进主模型,不加额外延迟。其余请求会做一次零前缀 flash 裁判:只输出 SIMPLE 或 AGENTIC 一个词,上限 64 token,并关掉思考。裁判会带上上一条 assistant 回复,用来识别「它 / 这个 / 继续」这类依赖上下文的追问,避免把追问误判成可以无上下文直答。
便宜 / 强模型对不是写死的,运行时从 llm.listModels 的目录里按 id 匹配:
- 便宜候选:
flash|chat|mini|turbo|haiku|lite|air|nano - 强候选:
pro|reasoner|opus|sonnet|max|ultra|premium|r1
原生 DeepSeek 适配器下,文档写的配对是 deepseek-v4-flash ↔ deepseek-v4-pro。
回答前先问,再直答¶
v0.8.0 起,auto 模式下命中 SIMPLE 不会立刻作答,而是弹出 harness 自带的问题 UI,让用户选:
- ⚡ 快速回答(flash):更快、成本更低
- 主模型回答:走正常智能体流程
选主模型、关掉弹窗、子代理会话,或没有问题 UI 时,都会回退到正常流程。问题文案跟随提问语言(中 / 英)。
用户选快速回答后,插件拒绝当前步骤,用便宜模型做一次零前缀单次流式调用,再把问答写进会话日志(伪造 step/start … assistant/message … step/end 包络)。界面上看起来仍是普通一问一答,答案前缀带 ⚡ 快速回答 / Quick answer · 标记。主模型不参与这一轮,也不会产生子代理会话、relay 卡片或 toast,主会话的模型和前缀缓存保持不动。
Auto / 关闭 与故障降级¶
快速回答可以按会话开关,三处入口做同一件事:
- 输入框下方面板的 Auto / 关闭
- 斜杠命令
/router auto或/router off - 模型可见工具
route_model(参数tier:auto|off)
没有「按请求指定模型」的配置项。auto/off 状态由会话投影从 command/run 事件折叠,重启后仍保持;瞬时故障降级标记是进程本地的,harness 退出即丢。
降级只覆盖这些瞬时错误:RATE_LIMIT、SERVER、TIMEOUT、EMPTY_RESPONSE。命中后把该轮标成降级,返回 { kind: 'retry' },重试进入 agent/request 时落到便宜模型,每轮最多一次。其余错误交给 provider 自己的重试策略。
另外,agent/request 在没有路由决策时会把模型拉回 agent 配置默认值,避免伪造 header 或重启后的陈旧持久化 header 粘住。
输入框下方的用量面板¶
面板挂在 conversation.composer.dock,中英文案走 harness 的 locale 服务。内容包括:
- Auto / 关闭开关
- 当前模型
miss/out/cache%/≈$一行QA×N快速回答计数(每次直答会短暂高亮)- 分模型用量明细
数字来自会话投影 modelRouter,折叠 request/header、command/run、assistant/message 事件。用的是适配器上报的真实 token(输入 / 输出 / 缓存读 / 缓存写 / 推理),不是前端自己估的调用次数。投影可重放,冷启动会话也能出数。安装前已经写进日志的历史也会被计入,这是文档写明的预期行为。
成本是档位估算,单位 USD / 百万 token,写在 src/index.js 顶部:
const PRICE_TABLE = [
{ test: CHEAP_RE, input: 0.27, output: 1.10, cacheHit: 0.07 },
{ test: STRONG_RE, input: 0.55, output: 2.19, cacheHit: 0.14 },
]
面板数字始终带 ≈。缓存命中按缓存价计,不按输入价。harness 的 TokenUsage 字段是不相交的:inputTokens 已经去掉缓存读(DeepSeek 上报 prompt_tokens = hit + miss,适配器把命中扣掉了),所以面板显示 miss … · cache N%,命中率是 hit / (hit + miss)。文档说健康的长对话通常在 90% 以上。价格表可以改成自己账号的实际报价。
安装与启用¶
目录页给出的安装命令是:
dsh plugin add github:tianji-qingtian/dsh-model-router
dsh CLI 需要在 PATH 上。如果之前只用 npx 跑过 harness,会报 command not found: dsh。仓库 README 的前置步骤是先全局安装:
npm install -g @deepseek-ai/dsh
也可以用 pnpm add -g @deepseek-ai/dsh(全局 bin 目录要在 PATH 上),或把后面的命令都加上 npx @deepseek-ai/dsh 前缀。
这个插件的客户端声明是 web 平台。仓库 README 建议装进 web profile,并固定 Release tag。README 示例仍写 #v0.7.2,仓库当前最新 Release 是 v0.8.1(含「快速回答前先问用户」)。可复现安装建议钉最新 tag:
dsh plugin --profile web add "github:tianji-qingtian/dsh-model-router#v0.8.1"
dsh --profile web
add 只改 profile 文件,运行中的实例不会热加载。重启后,输入框下方应出现 ⚡Router 面板;宿主半场加载完成后会注册 /router 和 route_model。可在 Settings → Plugins 里确认列表中有 dsh-model-router。
目录页也提示:如需可复现安装,可写成 github:tianji-qingtian/dsh-model-router#commit。某个会话里可能还跑着一个同名的动态原型(只活在当前进程),和装进 profile 的 bundle 不是一回事,harness 退出即消失。
插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前应阅读仓库源码和 MIT 许可证。
典型用法¶
装好并重启 web profile 之后,可以按下面的顺序验证。
- 打开网页界面,看输入框下方是否出现 ⚡Router 面板。开关应能在 Auto 和关闭之间切换。
- 保持 Auto,发一条自包含的短问题,例如「Python 里
list和tuple有什么区别」。裁判判成SIMPLE时会弹出 ⚡ 快速回答(flash) / 主模型回答。选快速后,回复应带⚡ 快速回答标记,面板上的QA×N会加一。 - 再发「继续展开第二点」这类追问。按文档设计,裁判能看到上一条回复,这类依赖上下文的问题应走主模型,而不是无上下文直答。
- 用斜杠命令显式开关:
/router auto
/router off
参数只能是 auto 或 off,写错会返回 usage: /router auto|off。
- 也可以让模型调
route_model,参数tier同样是auto或off。工具返回里会带当前模式,以及目录里解析到的便宜模型 id。 - 看面板上的
miss/out/cache%/≈$和分模型明细。长会话里 cache 命中率如果长期很低,优先检查是不是每次都在换模型或清上下文,而不是先改价格表。
适用场景与注意事项¶
比较适合这些情况:
- 主要在 DeepSeek Harness 网页界面里干活,希望简单问答走 flash,重构 / 多工具任务仍走主模型。
- 想在输入框旁边看到本会话的 token、缓存命中和估算费用,而不是事后去账单页对账。
- 偶尔碰到限流、超时、空响应,希望该轮自动降到便宜模型再试一次,而不是整段对话停住。
使用前要注意:
- 客户端平台是
web。只跑终端 TUI、不启网页界面时,装了也看不到 dock 面板。 package.json要求 Node.js^22.19.0 || >=24.0.0,并声明对@deepseek-ai/cordis、dsh-commands、dsh-llm、dsh-session等包的 peer 依赖。harness 升级后如果这些包对不上,需要对照 Release 再装一次。- 直答会把伪造 step 包络写进会话日志,这是插件和 harness 耦合最深的部分。官方 harness 仍在 developer preview,升级后应复查快速回答是否还符合会话不变量。
- 面板费用是档位估算,不是账单。改
PRICE_TABLE才能贴近自己的报价。 - 插件以当前 dsh 进程权限运行。安装前检查 https://github.com/tianji-qingtian/dsh-model-router 的源码和许可证;不要把目录页当成官方背书。
小结¶
dsh-model-router 把「简单问题 flash 直答、瞬时故障降级、会话用量可视化」收进 DeepSeek Harness 的网页输入框下方。路由决策发生在 agent/pre-step,费用数字来自可重放的会话投影,开关只有 auto / off,没有额外的按请求模型配置。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-model-router/
GitHub:https://github.com/tianji-qingtian/dsh-model-router