dsh-auto-effort:不换模型,按轮调节 reasoningEffort

前言

在 DeepSeek Harness(DSH)里做智能体开发时,常见做法是固定一条 profile 里的模型与 reasoningEffort,或靠路由插件整轮换成另一套 provider/model。对喜鹊(Magpie)等 OpenAI 兼容第三方模型,换路由往往行不通;手动改强度又要在复杂任务与寒暄之间反复切换。dsh-auto-effort 面向的是另一类需求:保留当前请求的 provider 与 model,只按每一轮用户任务改写 reasoningEffort,并从模型真实声明的强度列表里挑选合法取值。

下面介绍该插件的定位、判定与映射方式、安装配置,以及与 dsh-router-laya 的差异。事实以仓库 README 与 package.json 为准。

这是什么

维护者 subeichen1 在 GitHub 开源的 DSH 插件 dsh-auto-effort(中文 README 标题为「自动思考强度」)。分类上属于模型推理类能力;社区目录页:https://www.skillhub.cn/plugins/subeichen1/dsh-auto-effort。源码:https://github.com/subeichen1/dsh-auto-effort。

一句话:按轮做 reasoning-effort routing,不切换模型,只设置当前模型实际支持的思考强度档位,使 Magpie 及其他第三方 OpenAI 兼容 provider 也能用同一套交互(输入框旁档位胶囊、自动/手动切换、最近判定浮层),交互延续自 dsh-router-laya,实现路径不同。

核心功能

不换模型,只改 reasoningEffort

插件在请求发出前读取 llm.resolveModelInfo().reasoning.efforts,按判定出的三档 low / high / max 映射到该列表中的具体强度 id。模型元数据缺失或强度列表为空时,请求保持原样,胶囊显示 AUTO · 不支持。

模型信息按 provider/model 缓存 5 分钟(MODEL_INFO_TTL_MS),避免每轮都向宿主查询。

档位到强度的映射

判定结果只有三档。每档有一份偏好顺序,取声明列表中第一个命中的强度;都不命中时按 pi-ai 强度序号取最近一档。若强度 id 完全不在 pi-ai 词汇里(宿主称为 adapter-owned opaque string,例如 none/thinking/deep),则按声明顺序回退:数组第一个给 low、最后一个给 max、中间给 high。

档位 偏好顺序
low low → minimal → medium → high → xhigh → max → off
high high → medium → xhigh → max → low → minimal → off
max max → xhigh → high → medium → low → minimal → off

当模型声明跨度不足以表达某一档时,胶囊会标出实际强度(例如 AUTO · 低 → xhigh),浮层说明「该模型最低只到 …」或「最高只到 …」,避免把档位名称误解为更低或更高的真实强度。

判定逻辑(纯 JS)

判定只读取用户自己发送的那条消息;经 inbox 的工具结果与注入上下文不参与打分,避免报错日志等内容拉高强度。核心规则包括:

  1. 重试 / 纠正:与上一轮文本相同则升一档;出现「又错了 / 还是不行 / 第三次」→ MAX;「不对 / 重新 / 换个」等在上一轮档位上升一档。
  2. 显式意图:「仔细 / 深入 / 一步一步 / step by step」→ 至少 high;「最高强度 / 彻底」→ MAX;「简短 / 一句话 / quickly」为封顶而非直接判 low,内容信号仍参与打分。
  3. 内容打分:长度、代码块、报错、主题词、多问号、多路径、编号清单等累计分数:≥6 → MAX,≥3 → high,否则 low;「整个项目 / 端到端 / 评审 / 设计文档」等广度信号单独 +3。
  4. 寒暄 / 继续:寒暄固定 low;「继续」沿用上一轮档位;无新用户文本的续跑步骤沿用本会话上一轮档位。

可选配置 judgeUrl 时,可将 {task, prev_tier, prev_task, session_id} POST 到 Laya 判定服务(默认超时 1 秒,judgeTimeoutMs 可调);失败回落本地规则;连续 3 次失败后暂停调用 60 秒。超过 4000 字的任务在判定前只保留开头与结尾各一段(judgeMaxChars 可配)。

相比 dsh-router-laya 依赖约 842 MB 的本地 Python 判定服务,本插件默认 零额外进程,纯 JS 确定性规则,README 称判定耗时 <1ms。

前端与本地 HTTP 路由

胶囊挂在 conversation.input.right,模式为全局 auto/manual,状态文件见下文。宿主 webServer 回环监听,提供例如:

路由 方法 说明
/auto-effort/state GET 模式与各会话最近 20 条判定
/auto-effort/mode GET / POST 读/写模式
/auto-effort/locale/<lang>.json GET 胶囊文案(zh / en)

路由对 Host 做本地校验,写入另校验 Origin 与 Content-Type,以降低 DNS rebinding 等风险。

安装与启用

需要 DSH 0.2.x(README 写在 0.2.2-rc.1 上验证)。npm 包 dsh-auto-effort 当前版本 1.0.0(package.json),许可证 MIT,Node >=18.17。

从插件市场:DSH 内 插件 → 市场,搜索「自动思考强度」或 dsh-auto-effort 安装。

命令行(npm 包发布后):

dsh plugin --profile web add dsh-auto-effort

从 GitHub 安装:

dsh plugin --profile web add github:subeichen1/dsh-auto-effort

装完后按宿主提示重启或刷新页面(Ctrl+R)。输入框右侧出现 AUTO · 待判定 胶囊即表示前端已挂载;若未出现,先在插件页确认 dsh-auto-effort 已启用。

说明:DSH 生态主张「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。插件在本机以当前 DSH 进程权限运行,安装前宜自行查看源码与许可证。

配置

在 profile 的 cordis.patch.yml 中覆盖 id: auto-effort 段落即可,例如:

- id: auto-effort
  config:
    mode: auto            # auto | manual
    global: true          # 覆盖所有会话(含子代理)
    respectExplicit: false # true 时若请求已带 reasoningEffort 则插件不介入
    judgeUrl: ""          # 可选 Laya /judge 地址
    judgeTimeoutMs: 1000
    efforts:
      low: [low, minimal]
      high: [high, medium]
      max: [max, xhigh]
    judge:
      scoreHigh: 3
      scoreMax: 6
      lengthTiers: [160, 500, 1200]
      judgeMaxChars: 4000
      hardKeywords: []
      broadKeywords: []

模式持久化路径:$DSH_HOME/auto-effort-mode.json;未设置 DSH_HOME 时为 ~/.dsh/auto-effort-mode.json。

两处配置需特别注意:

  • judgeUrl 非空会把任务文本(最多 judgeMaxChars 字)、prev_task、会话 id 发到远端;默认关闭。非 https 时日志会 warn 明文离机。
  • respectExplicit: true 且 profile 里 agent-default-model 已写死 reasoningEffort: max 时,每轮都算「已指定」,胶囊显示 AUTO · 已指定 · max 并灰掉,插件相当于全程让行;要自动路由请保持 respectExplicit: false 或去掉默认 reasoningEffort。

胶囊其它状态包括:AUTO · 不支持、AUTO · 离线、AUTO · 切换失败、手动(不介入)。

典型用法与自测

日常无需额外命令:在 auto 模式下发送任务即可,由规则(或可选远程 judge)选档,插件写入对应 reasoningEffort。需要固定强度时用胶囊切到 manual,或通过 /auto-effort/mode 读写模式。

开发者在仓库内可跑单元测试:

cd dsh-auto-effort
node --test

用例覆盖判定、档位选择、插件 claim/request/HTTP 全链路等;CI 在 Node 20 / 22 / 24 上执行同一命令。

本地联接开发:将仓库 junction/symlink 到 profile 的 node_modules/dsh-auto-effort,或在 package.json 中用 "dsh-auto-effort": "file:<绝对路径>" 并加入 dsh.profile.bundles。

与 dsh-router-laya 的选型

dsh-router-laya dsh-auto-effort
路由方式 换 provider/model 只改 reasoningEffort
判定 本地 Python(842 MB) 纯 JS + 可选 HTTP
喜鹊等第三方 不支持则原样放行 按模型声明强度适配
外部依赖 Python、权重、8765 端口 默认无

若你已经在用 Laya 路由的胶囊 UI,但希望 留在当前 Magpie 或自建 provider 模型上,用本插件更合适;若目标是按任务换整颗模型,仍应使用路由类插件。

结尾

dsh-auto-effort 把「按轮思考强度」做成不换模型的 reasoningEffort 补丁:读取真实强度列表、三档映射、纯 JS 判定与可选 Laya 回退,并保留胶囊交互。进一步细节见 GitHub README:https://github.com/subeichen1/dsh-auto-effort;目录页:https://www.skillhub.cn/plugins/subeichen1/dsh-auto-effort。

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

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

Xiaoye