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