前言¶
在 DeepSeek Harness(DSH)里用 llm-pi-ai 接自定义供应商时,同一路由下往往挂着多个模型:有的支持 reasoning effort,有的不支持;有的能收图片,有的只收文本。内置的供应商卡片 deliberately 不在 provider 级别提供 reasoning 控件——因为同一 provider 下各模型能力不一致,provider 级设置很容易被部分模型拒绝。
dsh-llm-model-tuning 把编辑粒度放到每个模型条目上:在 Settings → Models 的每张自定义 provider 卡片里,为路由下的模型分别配置 reasoningEfforts 与 input,并可在路由级设置 defaultInput,让目录未描述的 vision 网关仍可用。维护者为 xurunxin,分类为模型推理;社区目录见 SkillHub 插件页,源码见 GitHub。
这是什么¶
一句话:纯客户端 bundle,在 DSH Settings → Models 的 settings.models.provider-card 席位上挂一张卡片,读写 llm-pi-ai 设置段里与「按模型推理档位、多模态输入」相关的字段;Host 侧包体 intentionally 为空,仅用于让 @deepseek-ai/dsh-client-modules 扫描 dsh.client 并把 lib/client.js 纳入浏览器启动图。
写入落在 llm-pi-ai 段,无需重启——适配器按请求解析 profile。
核心功能¶
编辑的字段¶
卡片针对路由下列出的每个 model 条目编辑两个字段,并支持路由级 fallback:
| 字段 | 含义 |
|---|---|
reasoningEfforts |
模型提供的 effort 档位,以及各档位发往 wire 的拼写。false 表示非 reasoning 模型;缺省则继承已安装 catalog。 |
input |
模型接受的请求模态(text、image)。缺省则继承 catalog。 |
defaultInput(路由级) |
当 catalog 未描述某类网关时的默认输入模态 fallback。 |
与内置编辑器的关系¶
- 内置 provider 编辑器 不提供 reasoning 控件;本插件补的是 per-model 能力。
- 卡片只改
reasoningEfforts、input、defaultInput;容量、兼容开关、凭据仍由内置编辑器和settings.yaml负责。
写入与校验行为(使用时会碰到)¶
- 读写的是
llm-pi-ai段的 user 层;仅存在于 composition base 的路由会先读出 resolved 值再允许写入 user 层。 - 通过
settings.mutate路径操作写入,未渲染的字段不会被删掉;namespace revision 用于避免并发下 stale 卡片覆盖。 models与modelOverrides二选一:models整表替换 catalog,modelOverrides在其上 reshape;适配器不允许两者并存。卡片编辑 profile 里已有的一种;若两者都没有,可引导添加modelOverrides条目。input/defaultInput:声明会替换模态列表而非追加;为避免只勾 image 却丢掉 text,卡片会始终保留 text;清掉最后一个可选模态时会移除字段,让适配器默认生效。- 卡片在本地复现适配器对
reasoningEfforts的规则(每档需 wire 拼写、仅off可为空、除off外至少一档),以便拒绝时能点名具体字段。
客户端插件为何足够¶
所有贡献就是一张挂在 provider 行 settings namespace 上的卡片。可配置的 pi-ai 路由均声明 settingsNs: 'llm-pi-ai',在该 key 下注册一次即可覆盖所有自定义 provider 卡片(含已保存行与「添加 provider」草稿),Models 区本身不感知本插件。
安装与启用¶
环境要求:
- dsh 0.1.7 或更新。卡片通过
configForms服务读写;0.1.7 起已移除settingsScope,仍注入旧服务的卡片不会激活。 - 部署中须 compose
llm-pi-ai适配器(拥有本卡片所编辑的 settings namespace)。卡片用configForms.whileServed跟随适配器;无该适配器时不会出现死面板,而是完全不显示本卡片。
用插件管理器安装 bundle,target 为本包目录的绝对路径(不要手改 profile 的 package.json 或 cordis.patch.yml,也不要在 profile 目录里自行跑包管理器):
plugin_manager action: install_bundle target: <absolute path to this package>
上述命令会完成包装安装与 bundle 选择:添加依赖、链入当前 profile 的 node_modules,并把包追加到 dsh.profile.bundles(因包声明了 dsh.bundle.patch)。
安装为指向该目录的 symlink,后续改源码无需重装。新装的 bundle 可通过 HMR 激活;若替换已有 bundle,需 profile 重启 以加载新的 JavaScript 模块代。
包版本 1.1.0(见 package.json),许可证 MIT,Node >=20。
典型用法¶
- 确认 dsh ≥ 0.1.7,且 profile 已 compose
llm-pi-ai。 - 按上文命令
install_bundle到本插件目录。 - 打开 DSH Settings → Models,进入任一自定义 provider 卡片。
- 在插件提供的 per-model 区域:
- 为支持 thinking 的模型配置reasoningEfforts各档及 wire 拼写;非 reasoning 模型设为false或按 catalog 继承。
- 为 vision 等模型勾选input(text会保持;可增image)。
- 若网关 serving 的 vision 模型不在 catalog 中,在路由级设置defaultInput。 - 保存后下一请求即生效;设置落在用户
settings.yaml,卡片自身不持状态。
若 profile 使用 modelOverrides 而非整表 models,在对应 override 条目上编辑上述字段;若两者皆无,按卡片提示添加 modelOverrides 再编辑。
适用场景与注意¶
适合谁: 在 DSH 里用 llm-pi-ai 自建或多模型混挂的开发者,需要在 UI 里按模型区分 reasoning effort 与 text/image 输入,而不愿为整 provider 设一个会被部分模型拒绝的值。
限制(README 明确列出):
- 仅编辑
reasoningEfforts、input、defaultInput。 - schema 接受的 effort 档位为
off、minimal、low、medium、high、xhigh、max共七档;超出部分写入时会保留,但 UI 不提供编辑。 - 设置存于用户
settings.yaml。
安全与权限: 插件以当前 dsh 进程权限运行;安装前请自行审阅 源码仓库 与 MIT 许可证。SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。
开发者在仓库根目录可离线跑测试(无需额外安装依赖):
npm test
结尾¶
dsh-llm-model-tuning 把 Models 设置页里缺失的 per-model 推理档位与多模态输入编辑补到自定义 provider 卡片上,写入 llm-pi-ai 后随请求生效。需要 dsh 0.1.7+ 与已 compose 的 llm-pi-ai 适配器。
- 目录页:https://www.skillhub.cn/plugins/xurunxin/dsh-llm-model-tuning
- GitHub:https://github.com/xurunxin/dsh-llm-model-tuning