Three-Province and Six-Ministry System (dsh-san-sheng-liu-bu): Automatically switching inference adjustment and tool selection according to task difficulty

前言

在 DeepSeek Harness(DSH)里跑同一套模型时,若每一步都带上十几万 token 的上下文、把推理档固定在 high,并让所有工具 schema 参与往返,单步延迟会明显高于「只问一句简单问题」时的直觉预期。慢的主因往往不在模型本身或缓存,而在 harness 每步的默认组合:大上下文、高推理、全量工具。

下面介绍社区插件 dsh-san-sheng-liu-bu(三省六部制流程优化插件,维护者 qiushuiqianpingsha,分类:工作流)。它在本地用启发式规则给用户消息打分,把任务分成简单、中等、复杂(以及「不确定」时先问用户),再对应调整 reasoningEffort 与简单档下的工具可见范围,让简单任务少想、少带工具,复杂任务仍保留 high 与全量工具。

这是什么

插件全名见 package.json:三省六部制流程优化插件,npm 包名 dsh-san-sheng-liu-bu,当前版本 0.1.0,许可证 MIT,要求 DSH ^0.2.0-rc.1 || ^0.2.1-rc.1 与 Node ^22.19.0 || >=24.0.0。

名称对应实现分工:中书省定策(本地判定难度)→ 门下省审议(不确定时倒计时提问)→ 尚书省六部执行(按档位改推理与工具)。它不调用额外模型做分类,判定逻辑在 lib/classify.js,零网络、零 LLM 开销。

核心功能

档位与工具映射

判定 推理档位(reasoningEffort) 工具
简单 simple off(可通过配置改为 low) 默认隐藏约 50 个重工具(web、子代理、团队、终端、任务、会话检索、hindsight、媒体渲染等,清单可配 denyTools)
中等 medium low 全部保留
复杂 complex high 全部保留
不确定 ask 弹出带倒计时的提问卡(简单/中等/复杂),超时按中等 按用户选择处理

说明:DeepSeek 的 deepseek-flash 只支持 off / low / high / max,没有 medium。因此「中等」在实现上落地为 low,属于配置取舍,而非插件缺陷。

本地判定规则(启发式)

对用户消息加权打分,主要信号包括:

  • 偏简单:篇幅短(如少于 60 字、少于 160 字加分)、事实类动词(查一下、翻译、多少钱、等于等)、短问句、出现「简单 / 快速 / 一句话」等。
  • 偏复杂:长文、多行、代码围栏、路径或 URL、多条项目符号、复杂动词(分析、排查、调试、优化、重构、设计、实现、部署等,有上限)、连接词(然后、接着、分别等)。
  • 延续上一轮:问候语或「继续 / 好的 / ok」在开启 continuationReuse 时复用上一轮档位。
  • 交给用户:含糊短句(如「帮我看看」)或双方分数接近时进入 ask;子代理消息(存在 parentSession)不参与判定,避免误弹提问。

挂载点(为何能影响「本步」)

  • agent/inbox/claimed:同步阶段、早于本步工具表生成;在此调用 agent.ctx.tools.restrict() 才能限制当前步的工具 schema。
  • agent/request(waterfall):改写每步请求的 reasoningEffort;改写前用 ctx.llm.resolveModelInfo() 校验模型是否支持该档位,不支持则不改,避免 UNSUPPORTED_REASONING_EFFORT 导致整轮失败;complex 档默认显式写回 high,避免继承上一轮的 off。
  • agent/pre-step:处理不确定时的 userQuestions.askTimed() 提问卡。
  • agent/status(idle) 与 agent/disposed:解除工具限制,避免残留。

插件通过 dsh.bundle.patch(cordis.patch.yml)登记进 profile 的 bundle 列表,下次加载生效;GUI 需重启或重连才能拉起重载后的组合。

安装与启用

安装示例来自项目 README(本地 link 路径需按你的机器替换):

$env:ELECTRON_RUN_AS_NODE=1
& "D:\Program Files (x86)\deepseek harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add link:"C:\Users\55061\Documents\deepseek-harness\default-workspace\plugins\dsh-san-sheng-liu-bu"

卸载:

& "...\dsh.cmd" plugin --profile desktop remove dsh-san-sheng-liu-bu

装完后可在 profile 的 package.json 里检查 dsh.profile.bundles 是否出现 dsh-san-sheng-liu-bu。

在 profile 的 cordis.patch.yml 中为 id san-sheng-liu-bu 增加 config:,字段定义见 lib/index.js 的 Config:

字段 默认 说明
enabled true 总开关
simpleEffort "off" 简单档推理;"" 表示不改请求
mediumEffort "low" 中等档
complexEffort "high" 复杂档
modeOverride "" 强制 simple / medium / complex,跳过判定
restrictSimpleTools true 简单档是否隐藏重工具
denyTools 约 50 个 简单档隐藏清单
askOnUncertain true 不确定是否提问;关则直接中等
askTimeoutMs 90000 提问卡倒计时(毫秒)
continuationReuse true 「继续 / 好的」复用上一轮档位
debug false 判定与档位切换 debug 日志

示例片段:

- id: san-sheng-liu-bu
  name: 'dsh-san-sheng-liu-bu'
  config:
    simpleEffort: low
    askTimeoutMs: 60000
    debug: true

典型用法与验证

README 给出的可复现检查步骤:

  1. 安装后确认 dsh.profile.bundles 含 dsh-san-sheng-liu-bu。
  2. 新会话发送「1+1等于几」,期望请求头里 reasoningEffort=off,且工具数量明显减少(可对比 ~/.dsh/sessions/**/session.v4.jsonl.zstd 中的 request header)。
  3. 发送「帮我看看」,应出现倒计时提问卡;不回答则默认 90 秒(可配 askTimeoutMs)后按中等继续。
  4. 多步骤、含代码或部署类描述的任务,应保持 high。

若需固定行为,可将 modeOverride 设为某一档,或关闭 askOnUncertain 让含糊输入直接走中等。

适用场景与注意

适合:日常在 DSH 里混用「一句查事实」与「长链路开发/排查」的开发者,希望在不改模型的情况下降低简单步的延迟与工具负载。

边界(README 已说明):

  • 判定是启发式的,个别任务会偏轻或偏重;可依赖提问卡、modeOverride 或调配置。
  • 提问卡只在第 1 步出现,同轮后续步骤沿用已选档位。
  • 插件与 DSH 进程同权限运行;安装前请自行审阅 GitHub 源码 与 MIT 许可证。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-san-sheng-liu-bu 用本地规则把任务分成三档(加「不确定则问」),在 simple 档关闭或降低推理并裁剪重工具,在 complex 档保留 high 与全工具,针对的是 DSH 每步默认「大上下文 + high + 全工具」带来的延迟问题。

  • 目录页:https://www.skillhub.cn/plugins/qiushuiqianpingsha/dsh-san-sheng-liu-bu
  • 仓库:https://github.com/qiushuiqianpingsha/dsh-san-sheng-liu-bu
羽毛球分组比赛记分
小程序二维码

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

Xiaoye