跳到主要内容

dsh-better-reasoning-effort

已验证

dsh-better-reasoning-effort · v0.2.1 · MIT · Web 界面

Third-party provider reasoning-effort AND input-modality settings for DeepSeek Harness: thinking levels and image-input support declared per model, auto-adapted from a model knowledge base + wire-protocol inference, edited right inside the official Models

安装

dsh plugin add dsh-better-reasoning-effort

dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南

源码

标签

说明文档

DSH Better Reasoning Effort

License npm version npm downloads DeepSeek Harness dsh-plugin Version Docs Awesome DSH Plugin

English | 中文

给 DeepSeek Harness 的第三方模型(pi-ai 手工声明路由)提供思考强度(reasoning effort)与输入模态(图片输入支持)设置的插件——直接在官方「模型」页的模型行里编辑,带知识库 + 协议推断的自动适配。

官方「模型」页模型行内的思考强度编辑器

为什么需要它

DeepSeek Harness 的 llm-pi-ai 适配器原生支持每个模型声明 reasoningEfforts(接受哪些思考档位 + 每个档位发往端点的确切取值),但官方「模型」页的编辑卡刻意不暴露这个字段——官方注释明说它是 per-model 能力、provider 级旋钮会弄坏部分模型。于是:

  • 第三方模型在 Composer 的模型选择器里没有思考档位选择getSupportedThinkingLevels 短路成 ["off"]);
  • 只有官方 DeepSeek API(内置 catalog)能设思考强度;
  • 想给第三方模型设档位,只能手写 settings.yamlreasoningEfforts / compat 块。
  • 手工声明的第三方模型默认被当作纯文本input 缺省为 ["text"]):图片附件在发送前就被拒绝,read-image 工具拒绝工作,中间每一层网关路径都读同一个标志。核心本来就接受每模型的 input: ["text", "image"] 声明——只是官方页同样不暴露。

本插件把这两份配置能力都搬回 UI:官方模型编辑卡内直接编辑,加自动适配

特性

  • 官方页内注入:官方「模型 → 编辑 → 自定义设置 → 模型行展开区」里出现编辑块,和上下文窗口 / 最大输出并列——不是另起炉灶的单列页面,而是融进官方编辑流程(同一个 settings.mutate 契约、同一种保存方式)。编辑块横跨展开区整行,档位行按官方容量字段同样的两列均分;现在包含思考强度输入模态两个分区,由底部同一对「应用 / 放弃修改」按钮统一控制。
  • 输入模态声明:一个勾选框(「图片输入」)让手工声明的模型端到端具备视觉能力——Composer 附件、read-image 工具、代理门控读的都是同一个标志。取消勾选把声明收窄为纯文本;点「清除声明」则写入持久的 inputUnset 标记,host 自动填充会像尊重思考档位的撤销标记一样尊重它。
  • 分区式建议展示:「自动适配」在独立一行报告应用了什么(来源 · 置信度),单独说明模态建议的出处(端点列表 / 知识库 / 命名启发式——最后一种明确标注低置信度),并把参考容量(上下文窗口、最大输出)渲染进独立的只读区块,标题写明"仅提示,不自动填充"。数值带千分位,可直接照抄进官方容量输入框。
  • 新建卡暂存:新建供应商的卡片上同样会出现编辑块——自动适配可直接用卡上已填的协议/端点,暂存保存选择,供应商创建后自动写入(绝不覆盖文档里已有的声明)。
  • 自动适配:内置模型知识库(DeepSeek V3/V4/R1 及其视觉实验版;OpenAI GPT-4o 与 GPT-5.1–5.6 按代际 + o 系列 + gpt-oss 开源权重 + 各代非推理 -chat 线;Claude 4.x/4.6/Opus-4.7+/5、Gemini、Grok 4.3–4.6、Mistral Magistral / Medium 3.5 / Small latest;通义含 Qwen-VL/QvQ、智谱含 GLM-4V/5V 与 GLM-5.2/5.3、Kimi K2.5/K2.6/K2.7-Code/K3、MiniMax M3 思考开关、豆包、混元 hy3、阶跃含 3.5/3.6/3.7——全部条目已于 2026-08-24 逐条对照各家官方文档复核,并与公开模型目录交叉印证;视觉变体单独成条,基础条目绝不替它们声称图片能力)+ 协议推断(按 pi-ai 真实线协议 openai-completions / openai-responses / anthropic-messages,以及从 baseURL 识别的 DeepSeek 官方端点方言),一键填入推荐档位与线上取值。在此无法触及 effort 式控制的家族(Llama、Nova、Phi、Cohere、Perplexity sonar)有意不设条目——低置信度的通用建议更诚实。compat 建议只在协议门允许的线协议上给出。
  • 端点取证:自动适配还会经 host 同源路由探测供应商的原始 /models 列表(凭据只在服务端解析、绝不回显),按置信度融合信号——端点明确"不支持推理"时直接建议禁用;知识库的线上取值始终权威;每条建议标注高/中/低置信度,低置信度建议核对后再用。同一次探测还会读取模态披露(OpenRouter 式 architecture.input_modalities、models.dev 式嵌套、supported_features/capabilities 的 vision 标志、supports_vision)以及端点自报的上下文长度——显式列表优先于知识库,沉默不改变任何判断。
  • Host 自动填充:settings 更新时,为没有 reasoningEfforts 声明的模型自动补一份推荐声明——缺失的输入模态声明也会一并补齐(可用 modalityAutofill: false 关闭;已声明、显式 false、刻意撤销的标记一律不动,容量字段则从不写入)。写入采用乐观锁:若你的编辑已把设置顶高,自动填充会放弃并等下一次更新,绝不与你抢写。
  • 三种意图:全不勾 = 取消声明(回到继承——以 reasoningEffortsUnset 标记持久化,自动填充会尊重它,重启后依然有效);只勾 off = 禁用推理(false);勾选档位 = 写入声明。模态侧同理:未声明 = 继承提供方默认,勾选图片 = 声明收图,「清除声明」= 以 inputUnset 标记持久化撤销。编辑器随官方页重新渲染与推送的设置变更保持同步,你编辑到一半不会被打断。
  • 防御式注入:注入依赖官方页 DOM 结构(aria-label / class),一旦官方升级改变结构,注入器自动停用、官方页不受影响;结构恢复后下次扫描自动重新注入。
  • 双语文案(中文 / English)。

安装

需要 DeepSeek Harness 0.1.1-rc.1 或更新版本(@deepseek-ai/dsh-api-remotes@^0.1.1-rc.1;host 侧同时 peer 依赖 @deepseek-ai/dsh-settings@^0.1.1-rc.1@deepseek-ai/schemastery@^3.18.0)。线协议契约已对照 0.1.1-rc.2 验证;更早的 rc 线不受支持。

从 npm

# 在 dsh 的 web profile 下
dsh plugin --profile web add dsh-better-reasoning-effort

从 GitHub

# 在 dsh 的 web profile 下
dsh plugin --profile web add github:HaoyueQin/dsh-better-reasoning-effort

github: 源只拉源码,lib/ 由包的 prepare 钩子构建;pnpm 默认不跑 git 依赖的构建脚本,安装器会打印需要加入 allowBuilds 的密钥,照做后重新 add

本地开发

npm install && npm run build
dsh plugin --profile web add link:D:/Project/dsh-better-reasoning-effort

重启 dsh web,硬刷新浏览器。官方「模型」页每行模型的展开区多了一块「思考强度」。

使用

  1. 在官方「模型」页配置第三方供应商(API Key 等)。
  2. 展开某个模型行:官方容量字段下方是编辑块。
    • 勾选档位(off / minimal / low / medium / high / xhigh / max),填线上取值(如给 highultra,Composer 选 High 时网关收到 ultra);
    • 在「输入模态」区勾选图片输入,声明模型接受什么(不勾且无声明 = 继承提供方默认,通常纯文本);
    • 点「自动适配」按知识库/协议/端点列表填推荐档位与模态——参考容量会以只读提示出现,可自行照抄进官方输入框;
    • 点「应用」写入设置。
  3. 全不勾 + 应用 = 取消声明(回到继承);只勾 off + 应用 = 禁用推理(false);模态行「清除声明」+ 应用 = 回到继承提供方默认。

声明后的模型在 Composer 模型选择器里立即可选思考强度;声明了图片输入的模型可以端到端传附件。

配置

host 侧接受可选的配置项(以下是默认值):

- insert:
    - id: dsh-better-reasoning-effort
      name: dsh-better-reasoning-effort
      config:
        # 启动时与设置更新后自动填充未声明的模型。
        autofill: true
        # 上述自动填充是否连带补写输入模态声明。
        modalityAutofill: true
        # 上游 /models 探测请求超时,单位毫秒。
        probeTimeoutMs: 15000
        # 启动填充的重试退避表;[] 表示只尝试一次。
        bootRetryDelaysMs: [1000, 2000, 4000, 8000, 16000, 30000]

autofill: false 可完全关闭静默自动填充——浏览器里的 Auto-adapt(自动适配) 按钮不受影响。

工作方式(架构)

浏览器 (lib/client.js)                  Host (lib/index.js)
├─ DOM 注入器                           └─ 自动填充
│   MutationObserver 监听官方模型页        settings/updated → 为未声明模型
│   → 在模型行展开区挂 EffortEditor         补 reasoningEfforts(知识库+推断)
├─ EffortEditor(React 组件)
│   档位勾选 / 线上值 / 输入模态开关 /
│   自动适配(分区式建议展示)/ 应用
│   └─ 写 settings.mutate(llm-pi-ai)
  • 知识库 + 协议推断src/knowledge.tssuggestEfforts(),纯函数,host 与浏览器共用——融合端点信号、精选条目(档位、模态、参考容量)、命名启发式与协议推断。
  • DOM 注入src/client/injector.tsreconcile(),按官方按钮 aria-label(Capacities/容量)定位模型行,把编辑器挂进容量折叠区。
  • 写入src/client/ops.tscreateEditorApi()settings.mutate 按路径改写 providers.<route>.models[i].reasoningEfforts——有模态意图时一并改写 .input——保留行内其他字段;冲突时自动重读重试一次(与官方设置表单相同的恢复策略)。
  • 共享常量src/constants.ts 承载插件 id、设置命名空间、DOM 标记,host 与浏览器共用。

开发

npm run typecheck   # tsc 严格检查 src
npm test            # vitest:知识库 / 推断 / autofill / DOM 注入 / 写入
npm run build       # lib/*.js + lib/client.js(模块加载器 bundle)

契约版本:@deepseek-ai/[email protected](client 契约类型),已通过针对 0.1.1-rc.2 各包的 typecheck、测试套件与完整构建验证。

已知限制

  • 注入依赖官方 Models 页当前 DOM(aria-label/class)。官方升级若改结构,注入自动停用,需要跟进适配;停用期间官方页不受影响。
  • 「自动适配」的探测路由只应答 loopback 与 IP 字面量 Host——采用核心 /api 栅栏同款 Host 白名单纪律,但暂无其 trustedHosts 出口(DNS rebinding 页面的 Host 必然是攻击者域名,因此域名宿主一律拒绝)。以域名对外提供 GUI 的局域网部署,仅此一条探测路由会得到 403(IP 字面量宿主不受影响),其余功能照常。
  • reasoningEfforts 声明是建议值:网关实际接受哪些档位/取值以端点文档为准,可在 UI 里逐个修改。
  • 知识库覆盖面有限——各家上新后拼写会漂移,不吃 effort 档的家族则完全无条目;未收录的模型走协议推断 + 通用档位,可手动调整。
  • 模态词表跟随 pi-ai 核心(当前为 text / image)。部分网关支持的更宽能力(PDF、音频、视频)已按家族记录在案,等核心词表扩充后再开放声明——今天声明不了是设计使然,不是疏漏。
  • 名字启发式的模态建议(*-vl* / *vision* / gpt-4o 一类视觉味 id)刻意标注为低置信度——使用前请核对。

License

MIT