READMESource: master@5937d6cb
dsh-model-switch
DSH 自动模型切换插件 —— 像 Claude Code 的 Auto Model Switching 一样,让 DSH 根据任务类型自动选择模型:关键思考用 pro,日常执行用 flash,省钱、省延迟、还不用手动切。
在 DSH(DeepSeek Harness,Cordis 插件架构)会话中,模型不再固定一个:插件监听每次请求前的路由点,按任务类型在 DeepSeek 官方双模型之间自动切换——
| 任务类型 | 路由到 | 原因 |
|---|---|---|
| 设计文档、方案评审、复查测试、检查验证 | deepseek-v4-pro |
根本性决策需要强推理 |
| 写代码、改代码、实现、跑测试、日常问答 | deepseek-v4-flash |
快、省、够用 |
效果
你:请输出用户登录模块的设计方案 → deepseek-v4-pro (设计 → 强推理)
你:按上面的设计写代码 → deepseek-v4-flash (执行 → 快而省)
你:复查测试,检查边界条件 → deepseek-v4-pro (复查 → 强推理)
你:继续 → deepseek-v4-flash (日常 → 不抖动)
真实会话中的模型切换被记录在 DSH 的 request/header 事件里,全程可见可追溯。
特性
- 零额外成本:任务类型判定是纯规则引擎(关键词 + 阶段信号),不调用任何额外 LLM 打分
- 阶段化切换:模式 sticky,同一任务内不抖动——对 KV cache 友好,不浪费输入 token
- 手动优先:你用
/model手动选择后,插件自动让位,绝不覆盖你的显式选择 - 按 agent 隔离:多会话并行互不干扰;subagent/workflow 独立判定
- 全局生效:注册在 host 层,装一次,所有会话自动可用(无需在 cordis 会话里手动激活)
- 健壮性:动态插件沙箱兼容(安全日志)、模型目录缺失自动降级、异常永不泄漏
工作原理
用户消息 → agent/pre-step(门控:仅新用户消息边界判定)
→ 判定器 decideMode(按优先级决策任务模式)
→ agent/request(路由器三分支 → 替换本次请求的 provider/model)
→ 模型请求 → request/header 事件(切换落日志)
判定优先级(先命中者胜出):
plan 模式激活 → design(最高)
复查/审查/检查/验证 → review
写代码/实现/修改/运行 → implement(实现词优先于设计词)
设计/方案/规划/文档 → design
其余 → implement(默认)
路由器三分支:
| 分支 | 条件 | 行为 |
|---|---|---|
| 显式指定 | 会话入口/workflow 固定了模型 | 永久让位 |
| 默认或自写 | 基线 == 默认选择 或 == 插件上次写入 | 接管,应用映射 |
| UI 手动选择 | 用户 /model 选了模型 |
让位,尊重用户 |
设计细节与 DSH 源码依据:见 docs/superpowers/specs/2026-08-14-dsh-auto-model-switch-design.md。
安装
方式一:全局固化(推荐)
- 把
plugins/auto-model-switch目录链接进你的 DSH profile(例如 web):cd ~/.dsh/profiles/web pnpm add "file:/path/to/dsh-model-switch/plugins/auto-model-switch" - 在
~/.dsh/profiles/web/cordis.patch.yml注册插件实例:- insert: - id: auto-model-switch name: dsh-auto-model-switch config: {} - 重启 DSH(或等待 HMR 热应用),新会话即自动生效。
方式二:动态插件(调试用)
在 cordis preset 会话中,把 plugins/auto-model-switch/dist/code.host.js 作为 code.host 提交:
cordis_define(kind:"new")→ cordis_run。会话级生效,重启失效。
配置
当前模型映射与关键词表为代码常量,按需修改:
| 想改什么 | 改哪里 |
|---|---|
| 模型映射(design/review → pro、implement → flash) | src/router.js 的 MODEL_BY_MODE |
| 判定关键词(评审/实现/设计词表) | src/decider.js 的 KEYWORDS |
| 决策优先级 | src/decider.js 的 decideMode |
改完跑 npm test(44 个单元测试)确认,然后重新 pnpm add file: 更新 profile 链接。
测试与验证
- 单元测试:44/44 通过(
cd plugins/auto-model-switch && npm test) - 集成验证:真实 DSH 环境实测通过(实现→flash、复查→pro、连续消息不抖动、工具结果不误判、目录降级与恢复)——见
verification/verification-record-final.md - plan 模式进出、
/model手动选择、会话恢复等交互用例已由单测覆盖,真机待补验
项目结构
├── plugins/auto-model-switch/
│ ├── src/ # 源码:decider(判定器)/ router(路由器)/ plugin(Cordis 组装)
│ ├── test/ # 44 个单元测试(node:test,零依赖)
│ ├── lib/ # 固化安装包入口
│ ├── dist/ # 动态插件产物(code.host.js)
│ ├── observer/ # 观测插件(集成验证用)
│ └── verification/ # 验证手册、记录与驱动脚本
├── docs/superpowers/ # 设计文档(spec)与实现计划
└── AGENTS.md # 项目规则
相关
- DeepSeek Harness (DSH) — 本插件运行的平台
- 设计文档 — 完整设计、决策与 DSH 源码行号依据
- 验证记录 — 集成验证结论与观测证据
MIT License
No comments yet. Be the first to write one.