← 返回列表
✓ 可直接安装
给 DeepSeek Harness 的第三方模型pi-ai 手工声明路由提供思考强度reasoning…
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/18 · 已提供中文文档
在 DeepSeek Harness 中为第三方模型进行推理强度编辑:基于知识库 + 协议推断的按模型思考级别,在官方“模型”页面卡片内进行编辑。
综合分
45
GitHub 分
45
用户评分
—
★ Stars
26
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-better-reasoning-effortnpm 包 dsh-better-reasoning-effort 已校验归属本仓库,走 npm 安装最省事
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-better-reasoning-effort @ 0.3.10
✓Node 引擎要求 ^22.19.0 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 23:37:59
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-model-selection@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/dsh-settings@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
DSH Better Reasoning Effort
License
npm version
npm downloads
DeepSeek Harness
dsh-plugin
Version
Docs
Awesome DSH Plugin
Commit activity
Last commit
给 DeepSeek Harness 的第三方模型(pi-ai 手工声明路由)提供思考强度(reasoning effort)与输入模态(图片输入支持)设置的插件——直接在官方「模型」页的模型行里编辑,带知识库 + 协议推断的自动适配;另附官方模型菜单内的快捷思考强度滑块(白色圆形滑块,集成自 HanaAyane 的 dsh-reasoning-effort,见致谢)——Composer 右下角的官方模型 · 思考强度显示形式保持不变。
为什么需要它
DeepSeek Harness 的 llm-pi-ai 适配器原生支持每个模型声明 reasoningEfforts(接受哪些思考档位 + 每个档位发往端点的确切取值),但官方「模型」页的编辑卡刻意不暴露这个字段——官方注释明说它是 per-model 能力、provider 级旋钮会弄坏部分模型。于是:
- 第三方模型在 Composer 的模型选择器里没有思考档位选择(getSupportedThinkingLevels 短路成 ["off"]);
- 只有官方 DeepSeek API(内置 catalog)能设思考强度;
- 想给第三方模型设档位,只能手写 settings.yaml 的 reasoningEfforts / compat 块。
- 手工声明的第三方模型默认被当作纯文本(input 缺省为 ["text"]):图片附件在发送前就被拒绝,read-image 工具拒绝工作,中间每一层网关路径都读同一个标志。核心本来就接受每模型的 input: ["text", "image"] 声明——只是官方页同样不暴露。
本插件把这两份配置能力都搬回 UI:官方模型编辑卡内直接编辑,加自动适配。
特性
- 官方页内注入:官方「模型 → 编辑 → 自定义设置 → 模型行展开区」里出现编辑块,和上下文窗口 / 最大输出并列——不是另起炉灶的单列页面,而是融进官方编辑流程(同一个 settings.mutate 契约、同一种保存方式)。编辑块横跨展开区整行,档位行按官方容量字段同样的两列均分;现在包含思考强度与输入模态两个分区,由卡片的保存统一提交、编辑器只保留「放弃修改」。
- 输入模态声明:一个勾选框(「图片输入」)让手工声明的模型端到端具备视觉能力——Composer 附件、read-image 工具、代理门控读的都是同一个标志。取消勾选把声明收窄为纯文本;点「清除声明」则写入持久的 inputUnset 标记,host 自动填充会像尊重思考档位的撤销标记一样尊重它。若内核的官方「模型」页已自带输入类型编辑器(0.1.6-alpha.2 起),本区块会自动隐藏,保证模态只有一个设置入口——能力从模型行 DOM 嗅探,绝不比对版本号;旧内核继续保留本区块。
- 端点兼容控件:编辑块底部多一个分区,只在对应协议的 compat 门接受它时出现。openai-completions 路由上是思考预算字段(思考 token 预算用哪个参数发送——部分 vLLM/自建端点读 thinking_token_budget,另一些读 thinking_budget 或 thinking_budget_tokens;未设置表示三个都不发送)与 vLLM 优先级(以 --priority 启动的端点的调度优先级)。openai-responses 路由上是请求中的 max_output_tokens——部分 Responses 网关会拒收该参数,选「不发送」可让请求完全不携带输出上限。控件沿用官方字段形态(说明在上、官方枚举宽度、提示在下),每一项都写清了自己的作用。这些开关是端点级透传而非模型能力:知识库刻意不预测它们(没有哪个模型"已知"会拒收 max_output_tokens),因此「自动适配」不会填——遇到需要的网关手动设一次即可。设错或换网关后把下拉框选回"未设置"再保存卡片即可真正删除该键;编辑器只会删除它自己展示过的那几个键,你手写在 settings.yaml 里的其他 compat 字段不会被波及。
- 分区式建议展示:「自动适配」在独立一行报告应用了什么(来源 · 置信度),单独说明模态建议的出处(端点列表 / 知识库 / 命名启发式——最后一种明确标注低置信度),并把参考容量(上下文窗口、最大输出)渲染进独立的只读区块,标题写明"仅提示,不自动填充"。数值带千分位,可直接照抄进官方容量输入框。
- 随卡片保存落盘(编辑期零写入):编辑块也会出现在"尚未保存"的行上,两种形态同一条链路——新建供应商的卡片(自动适配直接用卡上填写的协议/端点),以及给已保存供应商新增的模型行(自动适配改用文档里的路由事实 + 行上已输入的显示名称)。改动即时进入待写入,点卡片的「保存」时一并落盘——官方卡片打开期间冻结了自己的设置版本号,插件因此改为跟着同一次保存写入,而不是去抢它("配置好了、保存了、却又变回原样"的成因);点「取消」或刷新会与卡片自带字段一起丢弃;绝不覆盖文档里已有的声明。注意暂存阶段表达不了"故意留空":全部清空后再暂存等同撤单、退回自动适配的填充——确要不声明的模型,请先保存行,再在行内全不勾并保存(写入持久撤销标记)。
- 自动适配:内置模型知识库(DeepSeek V3/V4/R1 及其视觉实验版(2026-09 复核:现行官方 id 为 deepseek-flash=V4.1-Flash 与 deepseek-v4-pro=V4-Pro-0813,旧 v4 拼写为兼容别名,官方枚举 Off/low/high/max、默认 high);GPT-6 Astra(official 无 None 档,传 none 返回 400)与 GPT-5.6-cyber 的专门条目;OpenAI GPT-4o/GPT-4.1/GPT-5.1–5.6 按代际(含 codex 变体)+ o 系列 + gpt-oss 开源权重 + 各代非推理 -chat 线;Claude 3.x/4.5–5 按代分档(仅官方列入 effort 支持清单的型号给出档位)、Gemini、Grok 4.3–4.6、Mistral Small 2603 / Medium 3-5(reasoning_effort 模型;已弃用的 magistral 线声明为无 effort 控制)、通义含 Qwen-VL/QvQ 与 3.8 代、智谱含 GLM-4V/4.5V/4.6V/5V 与 GLM-5.2/5.3、Kimi K2.5/K2.6/K2.7-Code/K3、MiniMax M3 思考开关、豆包、混元 hy3、阶跃含 3.5/3.6/3.7、百度 ERNIE(官方接口无 effort 控制)——全部条目已于 2026-08 逐条对照各家官方文档复核,并与公开模型目录交叉印证;视觉变体单独成条,基础条目绝不替它们声称图片能力)+ 协议推断(按 pi-ai 真实线协议 openai-completions / openai-responses / anthropic-messages,以及从 baseURL 识别的 DeepSeek 官方端点方言——仅 api.deepseek.com 这一经验证的官方域名),一键填入推荐档位与线上取值。在此无法触及 effort 式控制的家族(Llama、Nova、Phi、Cohere、Perplexity sonar)有意不设条目——低置信度的通用建议更诚实。compat 建议按协议分门:openai-completions 门接受 thinkingFormat/supportsReasoningEffort,自适应思考的 Claude 家族在 anthropic-messages 路由上补 forceAdaptiveThinking 引脚,使 pi-ai 把声明的档位以 output_config.effort 发出。
- 端点取证:自动适配还会经 host 同源路由探测供应商的原始 /models 列表(凭据只在服务端解析、绝不回显),按置信度融合信号——端点明确"不支持推理"时直接建议禁用;知识库的线上取值始终权威;每条建议标注高/中/低置信度,低置信度建议核对后再用。同一次探测还会读取模态披露(OpenRouter 式 architecture.input_modalities、models.dev 式嵌套、supported_features/capabilities 的 vision 标志、supports_vision)以及端点自报的上下文长度——显式列表优先于知识库,沉默不改变任何判断。探测镜像 harness 内核自己的模型发现(0.1.2-rc.1 起,至 0.1.6-alpha.2 逐版未变):同一协议集合(OpenAI 兼容与新增的 Anthropic Messages——原生 /v1/models 路由、x-api-key 加固定 anthropic-version)、同时接受 models 映射表富目录与标准 data 数组两种列表形态、携带供应商配置的请求头(凭据解析出来时仍赢下自己的头名)、并应用同样的 4 MB 列表上限——靠自定义请求头认证的部署,探测与官方列表同样畅通。harness 自己的归属头刻意不发送:这是同源诊断,不是 harness 请求。
- 自动填充(避开编辑期):启动时由 host 为没有 reasoningEfforts 声明的模型自动补一份推荐声明——缺失的输入模态声明也会一并补齐(可用 modalityAutofill: false 关闭;已声明、显式 false、刻意撤销的标记一律不动,容量字段则从不写入)。运行中新增的模型由浏览器侧补写,且只在你退出编辑卡片之后执行(编辑期的后台写入正是"存不上"的成因);写入采用乐观锁:若你的编辑已把设置顶高,自动填充会放弃并稍后重试,绝不与你抢写。
- 三种意图:全不勾 = 取消声明(回到继承——以 reasoningEffortsUnset 标记持久化,自动填充会尊重它,重启后依然有效);只勾 off = 禁用推理(false);勾选档位 = 写入声明。模态侧同理:未声明 = 继承提供方默认,勾选图片 = 声明收图,「清除声明」= 以 inputUnset 标记持久化撤销。编辑器随官方页重新渲染与推送的设置变更保持同步,你编辑到一半不会被打断。
- Composer 思考强度滑块(整个弹窗复刻):官方模型菜单(右下角席位弹出的 popover)打开的那一帧起,体内即替换为上游设计——滑块(白色圆钮、渐变胶囊轨道、radiation canvas + flare;档位取自当前模型适配器播报的阶梯)带 14px 内边距,一条分隔线,然后一行 模型名 · 当前档位 ›(点击打开官方模型列表)。官方“推理等级”钻取行被滑块取代(滑块本身就是档位控件);官方菜单外壳与右下角触发钮保持原样。拖动经官方 session 模型选择链路提交(乐观 + 被拒回滚,失败在菜单内提示)。档位少于两个的模型显示安静提示 + 模型行。复刻体与菜单同一帧挂载,不会先闪现官方原版窗口。切换模型会沿用你的档位:官方模型列表发起的不带档位的切换,会自动重新应用本会话内你选择的档位(会话内始终最高),其次该模型的默认思考强度,其次你在该模型上上次选择的档位(按「供应商/模型」记忆),最后是知识库记录的厂商官方默认档——与切换在同一原子提交中完成,中间不会闪现「Default」态(受滑块开关控制;目标模型阶梯不含该档位时保持官方默认行为)。全新会话与会话恢复由投影监视器走同一条链——监视器自会话诞生即接线,而非等你第一次打开模型菜单。
- Composer 模型搜索(无条件注入):官方模型菜单处于模型列表面板时,列表上方注入一个搜索框。它按供应商名、模型名与模型 ID 过滤官方行(空格分词、大小写不敏感),隐藏无命中的分组,无结果时显示空态提示。输入框内 ↓ 跳到第一个命中项,Esc 清空查询;查询生效期间方向键只在可见行之间移动(不会落到被隐藏的行上)。搜索框位于官方列表之上、官方加载提示条之下,且不改动菜单自身的尺寸与滚动。与滑块不同,它不受设置页开关控制:只要插件生效就会注入。
- 每个模型的默认思考强度(issue #4):模型行编辑器新增「默认思考强度」选择器——每个新会话打开该模型时使用的档位。它存储在设置文档的模型行上(随部署走、跨设备一致、重启不丢),跨会话优先于记住的上次档位;会话内手动选择始终最高——你选过的档位(或显式的「跟随提供方默认」)不会被任何自动机制覆盖。选择器的候选就是该模型自己声明的档位;清除后回到记忆链,留空的模型文档上不写任何字段(无需标记——没有自动填充会去填它)。
- 模型页开关:「推理强度滑块」开关从通用设置移出,放到「模型」设置页“添加提供方 / 添加自定义提供方”的下方,置于一个带边框的容器内(设置项形式与上游插件一致)。该开关无条件占据官方 settings.models.footer slot。
- 防御式注入:注入依赖官方页 DOM 结构(aria-label / class),一旦官方升级改变结构,注入器自动停用、官方页不受影响;结构恢复后下次扫描自动重新注入。
- 双语文案(中文 / English)。
安装
需要 DeepSeek Harness 0.1.5-alpha.1 及后续(当前 0.1.x 内核发布线;peer 范围 @deepseek-ai/dsh-api-remotes@^0.1.5-alpha.1 || ^0.1.6-alpha.1、@deepseek-ai/dsh-settings@^0.1.5-alpha.1 || ^0.1.6-alpha.1,另有 @deepseek-ai/schemastery@^3.18.0。peer 用逐线并集而非 >=0.1.5-alpha.1,是因为 semver 的预发布豁免只管同 major.minor.patch 元组——>=0.1.5-alpha.1 匹配不到 0.1.6 的任何预发布版)。
还在用旧版 DeepSeek Harness?本插件这条发布线面向 0.1.5-alpha 及后续——0.1.2-rc / 0.1.3-alpha 线及更早版本均不再受支持。请升级 Harness,或安装与内核匹配的本插件旧版本(例如 0.1.2-rc / 0.1.3-alpha 线请用 dsh-better-reasoning-effort@0.3.7)。
以 0.1.6-alpha.2 为编译与门禁基线(typecheck / 测试套件 / 完整构建都跑在 0.1.6-alpha.2 的各官方包上);最近一次实机运行时复核为 0.1.5-rc.1。
0.1.5-rc.2 → 0.1.6-alpha.1 的逐接缝源码复核:settings 服务(get / describe / update 与 settings/updated)与生成的 Typert ctx.remote.settings 契约、settings.models 的两个 slot 席位、slots / locale 运行时、connection 服务与 connection/reset 事件、Models 页六个锚点 aria-label 与结构类名、composer 模型弹层(aria-controls → role="menu" → menuitem / menuitemradio)、dsh.client 装载规则与 /plugins//client.js 路由、llm 服务的 prepareCall / stream 包装、webServer.register,以及 pi-ai 的 config.ts / catalog.ts(compat 键、reasoningEfforts、input)——承载实现全部零改动。两处相邻改动不在本插件的注入路径上:ui-settings-models 为 deepseek 家族端点加了新占位与提示文案,ui-input-trigger 改了斜杠命令菜单行的显示形态(本插件注入的是 ModelSelect 弹层)。0.1.5 线的既有适配说明继续成立(源码级验证:settings Remote wire、Models 页锚点、模型目录类型、slots / locale 自 0.1.2-rc.1 起全部原样;仅 llm-pi-ai compat schema 增长——pi-ai 0.85.1 新增 thinkingTokenBudgetField / vllmPriority / supportsMaxOutputTokens,以及 composer 模型菜单改为 portal 到 document.body——滑块经触发钮 aria-controls 链接跟随,内联形态保留为兜底)。新 schema 键按协议取用,旧内核写拒绝时自动剥离重试,全程无版本嗅探。接缝明细:settings Remote 是生成的 Typert ctx.remote.settings stub(无参 describe、位置参数 mutate(ns, ops, expectedRevision)、{ok, value | error} 包络、settings/conflict / settings/rejected 拒绝码);Models 页锚点(Capacities/容量、Model ID、Display name、Provider ID、Base URL、API protocol 与 settings.models.footer slot)全部原样;原始列表探测镜像内核自己的模型发现——同一协议集合(新含 Anthropic Messages,走原生 /v1/models 路由、x-api-key + anthropic-version)、同款 data/models 双形态解析、同款 4 MB 上限。client bundle 运行时不请求任何官方模块。
继续对 0.1.6-alpha.1 → 0.1.6-alpha.2 做逐接缝源码复核,只发现两处承载实现变更,现均已适配且不做版本嗅探:会话列表快照去掉了 current 选择态(导航交给视图持有方),因此 composer 滑块改为经 ctx.uiSession 的 main-view 绑定解析当前会话、并以首个 main-view 保留的目录行为兜底,同时在旧内核上继续读 current;ModelDirectory.select 改为返回 {ok:false} 拒绝结果而非抛异常,档位记忆与滑块提交路径已把两种形态归一处理。Models 页折叠区文案由 Capacities/容量 改为 Model options/模型选项,注入器按 modelAdvanced 字典键定位、自动跟随,Capacities 仍作为无字典时的兜底。0.1.6-alpha.2 另新增官方逐行「输入类型」编辑器(ModelInputTypes),本插件把它当作能力处理:注入器在每行的折叠区 DOM 里嗅探到该控件,即在这些行上隐藏自己的模态区块,保证模态只留一个设置入口(旧内核保留本插件的区块)。其余承载面——settings Remote、slot 席位、composer 菜单 DOM、pi-ai schema、llm 包装与 webServer.register——均未改动。
模型行编辑器统一走 DOM bypass(不做版本号嗅探):注入器按官方折叠区的 modelAdvanced 字典值定位(0.1.6-alpha.1 线为 Capacities/容量,0.1.6-alpha.2 起为 Model options/模型选项),因此编辑器挂进每个展开的模型行下,就在编辑 → 自定义设置流程里,也覆盖未保存行(新建供应商卡片上的暂存、保存瞬间自动写入)。滑块开关占据官方 settings.models.footer slot,声明经插件自身的 remote.settings inject——与官方 Models 页消费的是同一服务契约。模型页余下的正规席位是 keyed settings.models.provider-card(按提供方卡片分发)——卡片级 UI 的迁移路径在它,但没有任何 slot 能触及单个模型行,这正是模型行编辑器保留 DOM bypass 的原因。
从 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),填线上取值(如给 high 填 ultra,Composer 选 High 时网关收到 ultra);
- 在「输入模态」区勾选图片输入,声明模型接受什么(不勾且无声明 = 继承提供方默认,通常纯文本);
- 点「自动适配」按知识库/协议/端点列表填推荐档位与模态——参考容量会以只读提示出现,可自行照抄进官方输入框;
- 改动即时进入待写入(编辑块会这样提示),点卡片自身的「保存」时一并落盘;点「取消」或刷新页面则与卡片自带字段一起丢弃。
3. 协议兼容时,底部会出现「端点兼容」分区——openai-completions 上设思考预算字段 / vLLM 优先级,openai-responses 上设 max_output_tokens 的处理方式。
4. 全不勾 + 保存 = 取消声明(回到继承);只勾 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]
无档位调用在强制思考梯子上自动落厂商默认档。
defaultGuard: true
设 autofill: false 可完全关闭静默自动填充(启动填充与浏览器侧的运行中补全一并关闭)——Auto-adapt(自动适配) 按钮不受影响。
工作方式(架构)
浏览器 (lib/client.js) Host (lib/index.js)
├─ DOM 注入器 └─ 自动填充
│ MutationObserver 监听官方模型页 settings/updated → 为未声明模型
│ → 在模型行展开区挂 EffortEditor 补 reasoningEfforts(知识库+推断)
├─ Composer 注入
│ MutationObserver 监听整个文档
│ → ComposerSlider(root 面板)
│ → 模型搜索框(模型列表面板)
├─ EffortEditor(React 组件)
│ 档位勾选 / 线上值 / 输入模态开关 /
│ 自动适配(分区式建议展示)/ 随卡片保存写入
│ └─ 写 settings.mutate(llm-pi-ai)
- 知识库 + 协议推断:src/knowledge.ts 的 suggestEfforts(),纯函数,host 与浏览器共用——融合端点信号、精选条目(档位、模态、参考容量)、命名启发式与协议推断。
- DOM 注入:src/client/injection/models-page-editor.ts 的 reconcile(),按官方按钮 aria-label(modelAdvanced 字典值:0.1.6-alpha.1 为 Capacities/容量,0.1.6-alpha.2 起为 Model options/模型选项)定位模型行,把编辑器挂进容量折叠区。浏览器侧的装配层是 src/client/index.ts;每条注入接缝位于 src/client/injection/ 下的独立模块。
- 写入:src/client/ops.ts 的 createEditorApi(),settings.mutate 按路径改写 providers..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/dsh-api-remotes@0.1.6-alpha.2(client 契约类型,peer 范围 ^0.1.5-alpha.1 || ^0.1.6-alpha.1);开发依赖已统一到已发布的 0.1.6-alpha.2 各包,typecheck(0 错误)、测试套件(20 文件 / 389 测试全通过)与完整构建均针对该版本执行;运行时实测基线为 0.1.5-rc.1——0.1.6-alpha.1 与 0.1.6-alpha.2 目前完成的是源码级复核与上述门禁,实机复核未做。测试套件钉住 composer 菜单发现(portal 与内联双形态),0.1.2-rc.1 降级重试路径保留为安全网。
在 0.1.5-rc.1 内核上的运行时复核(2026-09):settings Remote 的 describe/mutate(ns, ops, revision) 契约、Models 页锚点、slider 的菜单发现全部原样;rc.1 对 llm-pi-ai 的两处加严已被本插件覆盖——模型级 compat 必须属于该模型解析出的协议(写拒绝时按协议剥离并重试,拒绝文案已逐字钉进测试),以及存量无效配置改为在提供方卡片上就地显示错误而非整体失败。
已知限制
- 注入依赖官方 Models 页当前 DOM(aria-label/class)。官方升级若改结构,注入自动停用,需要跟进适配;停用期间官方页不受影响。
- 官方模型菜单的箭头键焦点漫游遍历的是它自己(已被隐藏)的根单元格——对 display:none 节点 focus() 是空操作;键盘用户经 Tab 到达复刻体,复刻行的 Enter 可打开官方模型列表。
- 「自动适配」的探测路由只应答 loopback 与 IP 字面量 Host——采用核心 /api 栅栏同款 Host 白名单纪律,但暂无其 trustedHosts 出口(DNS rebinding 页面的 Host 必然是攻击者域名,因此域名宿主一律拒绝)。以域名对外提供 GUI 的局域网部署,仅此一条探测路由会得到 403(IP 字面量宿主不受影响),其余功能照常。
- reasoningEfforts 声明是建议值:网关实际接受哪些档位/取值以端点文档为准,可在 UI 里逐个修改。
- 知识库覆盖面有限——各家上新后拼写会漂移,不吃 effort 档的家族则完全无条目;未收录的模型走协议推断 + 通用档位,可手动调整。
- 端点兼容开关刻意不做自动填充:supportsMaxOutputTokens 与 vllmPriority 描述的是网关行为而不是模型能力,因此没有模型条目携带它们。安全默认(未设置)会按协议常规发送该字段;只有当网关确实拒收时才需要改。
- 模态词表跟随 pi-ai 核心(当前为 text / image)。部分网关支持的更宽能力(PDF、音频、视频)已按家族记录在案,等核心词表扩充后再开放声明——今天声明不了是设计使然,不是疏漏。
- 声明了图片能力的模型,在请求图片超出内核/端点预算时的失败模式随内核而变:0.1.6 起内核抛 IMAGE_OFFLOAD_REQUIRED,由 compaction 侧决定卸载哪几张图(0.1.5 是把最旧的图片静默换成占位文本)。声明与编辑器行为不变,这条只影响超预算请求的表现。
- 名字启发式的模态建议(-vl / vision / gpt-4o 一类视觉味 id)刻意标注为低置信度——使用前请核对。
- 自建中转:自动填充与自动适配会在无法归属官方的 openai-completions 路由上钉死 supportsDeveloperRole: false,系统提示保持 system(部分上游拒绝 developer,报角色信息不正确)。已有显式值永不覆盖——唯一的例外是端点兼容区那几个下拉框:把某一项选回"未设置"再保存卡片,就是要撤回那次设置,编辑器只会删除它自己展示过的字段。全部取消勾选 + 保存可清除声明回到裸请求(提供方默认),即中转兼容模式。
- 强制思考模型(无 off 档的梯子,如 GLM-5.3):提供商测试与 Default 调用原本会发送 thinking: disabled 而失败(如 1210)——host 侧会将其映射到梯子的厂商默认档。设 defaultGuard: false 可恢复旧行为。
致谢
Composer 思考强度滑块改编自 dsh-reasoning-effort(作者 HanaAyane,MIT 许可)——感谢原作者与 codex 风格思考强度控制的思路。
本插件取自它的部分:
- 其依托的 session 模型选择契约(按会话的模型目录 → 适配器播报的档位阶梯 → selectModel 提交,乐观快照 + 被拒回滚);
- 滑块交互形态(拖动 / 键盘操作,滑块旁显示档位名)。
集成时的刻意改动:
- 只把滑块换成白色圆形。 chibi-runner“大肥鱼”滑块(把圆钮换成鱼形贴图)不带入;其余与上游逐字一致——渐变胶囊轨道、左侧裁剪的 canvas 辐射动效与 flare 辉光、拖动/键盘契约、乐观提交 + 被拒回滚。
- 官方模型席位绝不被替换。 上游插件把整个席位顶掉(自绘触发钮 + 菜单);这里官方右下角 模型 · 思考强度* 显示形式保持原样,滑块在官方菜单弹出时注入到其顶部。
- 位置与设置项减少。 上游的“推理强度滑块 / 大肥鱼滑块”两项在通用设置页;这里只保留 推理强度滑块 开关,放在「模型」页添加提供方按钮下方的带框容器内;“大肥鱼滑块”随功能一起移除。
- 面向 0.1.5-alpha 及后续线维护(编译与门禁基线 0.1.6-alpha.2)。 这是基于 harness wire 契约的精简重写(不是上游 bundle 的 fork):无需上游的 0.1.0-rc.6 版本钉死,可跑在 0.1.5-alpha.1 及后续内核上(见上方兼容性说明),整个挂载/卸载生命周期由本插件的 DOM 注入器管理。若上游项目恢复更新,留意两点:两个插件同时装会重复——上游再次顶掉官方席位,官方触发钮会再次消失。
如果你之前用过上游插件,请移除它,避免同席位上出现两套思考强度控制:
dsh plugin --profile web remove dsh-reasoning-effort
Activity
HaoyueQin/dsh-better-reasoning-effort GitStock K-Line Chart
License
MIT扫码进群