前言¶
在 DeepSeek Harness(dsh)里,如果你用 llm-pi-ai 适配器接 OpenAI 兼容的中转或自建网关,选好模型后,Composer 里常见的「推理等级」面板往往会消失。这不是密钥无效,也不是厂商不支持,而是配置里缺少适配器读取的 reasoningEfforts 声明:自声明路由没有安装目录里的 catalog base,@deepseek-ai/dsh-llm-pi-ai 会把这类模型解析为 reasoning: false,界面没有档位可选,强行指定还会遇到 UNSUPPORTED_REASONING_EFFORT。下面介绍社区插件 dsh-thinking-effort(维护者 buguoshixc),它通过官方支持的 settings 接缝写入缺失声明,把推理等级选择器找回来。
这是什么¶
dsh-thinking-effort 是 DSH 的第三方 bundle 插件,分类属于「模型推理」。它不做适配器接管、不拦截 HTTP、不 patch harness,只在适配器会读取的配置位置补上 reasoningEfforts(以及必要时相关的 compat),让 Composer 的「推理等级」、斜杠命令和插件页的下拉框重新有内容可选。目录页:skillhub.cn/plugins/buguoshixc/dsh-thinking-effort;源码与文档:github.com/buguoshixc/dsh-thinking-effort。
问题从哪来¶
第三方提供方在 profile 里通常长这样(节选):
# $DSH_HOME/profiles/<profile>/cordis.patch.yml
- id: llm-pi-ai
name: '@deepseek-ai/dsh-llm-pi-ai'
config:
providers:
qiyuan:
apiKeyEnv: QIYUAN_API_KEY
api: openai-completions
baseURL: https://api.qiyuanapi.cc/v1
models:
- id: deepseek-v4.1
contextWindow: 1000000
这条链路不会自动写入 reasoningEfforts。适配器逻辑是:若 entry.reasoningEfforts === undefined,则回退为 reasoning: base?.reasoning ?? false;自声明路由没有 base,于是每个模型都被当成不可调思考强度。同一中转若走 llm-deepseek 适配器可能仍有档位,那是因为那条适配器会为所服务的路由宣告 effort——本质是声明缺失,不是 key 或厂商本身的问题。
核心功能¶
插件围绕一套共用的 planner,提供四种入口:
- 启动时自动适配:默认在 load 阶段扫描所有尚未声明的第三方路由并写入档位映射,安装后通常无需额外操作。
- 斜杠命令:
/thinking、/thinking presets、/thinking adapt、/thinking set <provider>/<model> <preset>、/thinking remove …等。 - Plugins 页:侧栏 Plugins → dsh-thinking-effort,按模型下拉选择,即时生效。
- 模型工具:
thinking_effort_status、thinking_effort_set,便于在对话里排查「这个模型调不了思考强度」。
启动时还会诊断仍无法调整的路由,避免等到第一次打开模型选择器才发现新加的 key 未声明。
自动适配只处理配置里自声明的路由,不会覆盖你已写的模型声明,也不会改动 reasoningEfforts: false(明确表示该模型不推理)。对已判定不支持 reasoning_effort 的端点会写入 openai-null-off;能识别厂商主机名时用对应 preset;否则默认 autoAdaptPreset: passthrough,七档按原名下发。声明只解决「有没有档位可选」,无法从配置证明远端是否真正遵守这些值,改完后可用 /thinking explain 看每档实际发送的参数。
写入示例(与 README 一致):
providers:
qiyuan:
models:
- id: deepseek-v4.1
contextWindow: 1000000
reasoningEfforts:
off:
low: low
high: high
max: max
compat:
thinkingFormat: deepseek
安装与启用¶
插件以当前 dsh profile 的权限运行,安装前请自行审阅源码与许可证(MIT)。dsh plugin 会在 profile 目录内转发到 pnpm;从 GitHub 安装会拉取源码并在 prepare 阶段构建 lib/。
# from a checkout
dsh plugin --profile <profile> add /path/to/dsh-thinking-effort
# from GitHub (replace with your fork)
dsh plugin --profile <profile> add github:<you>/dsh-thinking-effort
在 pnpm ≥ 10 上,首次 git 依赖构建可能被拒绝,需把 pnpm 提示的包名加入 profile 的 pnpm-workspace.yaml 后重试:
allowBuilds:
dsh-thinking-effort: true
allowlist 表示允许该包在安装时执行构建脚本,只应对你信任的源码开启,并建议固定提交:github:<you>/dsh-thinking-effort#<sha>。
安装后重启 dsh(bundle 成员仅在启动时读取),并确认层已合成:
dsh --profile <profile> --dump-config # expect a row named dsh-thinking-effort
Windows 桌面版中 desktop profile 由运行中的应用占用文件锁:向 desktop 安装前请先退出 DeepSeek Harness。
兼容性(来自 README):面向 dsh 0.2.1-rc.2 构建,engines.dsh 为 >=0.2.1-rc.2 <0.3.0,dsh.manifestVersion 对应 0.2.1 包清单格式;0.2.1 之前的客户端绑定方式已不存在,更早版本不受支持。package 版本为 0.2.0,Node 要求 ^22.19.0 || >=24。
典型用法¶
默认无需操作:新加的第三方 key 在启动时会被自动声明,日志会标明路由与档位映射,例如:
# dsh-thinking-effort: 自动适配完成。
# ✅ 已自动声明 1 个模型的思考强度档位:
# 路由 qiyuan → passthrough(1 个模型)
# 端点检测为 openai,写入 passthrough
# 档位:off→(不发) minimal→minimal low→low medium→medium high→high xhigh→xhigh max→max
随后在 Composer 打开模型选择器 → 推理等级,可选 Off / Minimal / Low / Medium / High / XHigh / Max;选择与内置提供方一样会保存为 Agent 默认。
查看当前声明:
/thinking
查看某模型每档实际下发的参数:
/thinking explain qiyuan/deepseek-v4.1
按 preset 手动写入:
/thinking set qiyuan/deepseek-v4.1 deepseek-relay
需要时对单路由重新跑适配:/thinking adapt qiyuan --preset deepseek-relay。
若只想在手动执行 /thinking adapt 时才写入,可在插件自身配置中关闭自动适配:
- id: dsh-thinking-effort
name: 'dsh-thinking-effort'
config:
autoAdapt: false
autoAdaptPreset: passthrough
适用场景与注意¶
适合在 dsh 0.2.1-rc.2 线路上,用 llm-pi-ai 接 OpenAI 兼容第三方 key,且需要在 Composer 里调节推理等级(reasoning effort / 思考强度)的开发者。catalog 内置路由仍由安装目录解析能力,本插件不会去「收窄」已有 catalog 行为。
社区插件目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,选用第三方 bundle 时请自行评估信任边界与网络侧是否真正支持各档参数。
结尾¶
dsh-thinking-effort 用最小侵入的方式补全 reasoningEfforts 声明,让第三方自声明路由重新出现「推理等级」选择器,并支持自动适配、斜杠命令与 Plugins 页微调。进一步了解可访问目录页 skillhub.cn/plugins/buguoshixc/dsh-thinking-effort 与 GitHub 仓库 github.com/buguoshixc/dsh-thinking-effort。