DeepSeek Harness (DSH) Web 界面目前仅提供基础的模型列表展示,对于自定义模型(如 llm-pi-ai)的细粒度能力配置(如图片输入、推理等级映射)以及子代理委派时的模型选择策略,缺乏直接的操作入口。dsh-custom-provider 插件通过扩展设置页面,新增了「自定义模型」分区,补全了这些配置项。
插件简介¶
该插件是 DeepSeek Harness Web 设置页的扩展组件,由 homily707 维护。它将自定义模型的配置与官方的 Models 页面共存,通过新增的分区提供子代理模型白名单、图片输入支持及推理等级(Reasoning effort)映射功能。
核心功能¶
插件主要包含以下三个核心能力:
-
子代理模型白名单
在设置面板顶部新增卡片,通过下拉框选择可用模型,不支持手动手填。启用后,subagent工具会注册list_subagent_models,允许在委派时从白名单中自选provider、model和reasoning_effort。白名单外的路由会在创建子代理前被拦截。 -
图片输入支持
针对不同模型提供逐模型能力映射:llm-pi-ai:配置每模型的input字段。llm-deepseek:配置每模型的inputModalities字段。
-
Reasoning effort 映射
llm-pi-ai:支持每模型的reasoningEfforts配置(勾选等级生成选择器,值为线路拼写,off可留空,false表示非推理模型)。llm-deepseek:推理等级集合固定且锁定在路由级,此页仅提供路由级字段。
安装与启用¶
安装命令如下:
dsh plugin --profile web add "github:homily707/dsh-custom-provider"
安装完成后,需将插件包名添加到 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组中,重启 dsh web 或 dsh --profile web 后刷新页面,设置面板将出现「自定义模型」分区。
典型用法与配置¶
导航图标(可选)¶
设置面板左列的图标目前是宿主硬编码的。若需让「自定义模型」分区显示与「模型」页相同的图标,需通过 Python 脚本修改宿主文件 client.js:
python3 - <<'EOF'
f = '<dsh 安装目录>/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/client.js'
s = open(f).read()
old = '\t\tif (id === "agent-presets") return'
new = '\t\tif (id === "custom-provider") return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDataOutline16, {\n\t\t\tclassName: SettingsRoot_module_css_default.navIcon,\n\t\t\tsize: 16\n\t\t});\n' + old
assert s.count(old) == 1
open(f, 'w').write(s.replace(old, new))
EOF
本地开发¶
本地开发时,使用 link 方式添加插件:
dsh plugin --profile web add link:<本仓库检出路径>
子代理配置托管¶
子代理配置通过托管块写入 $DSH_HOME/cordis.patch.yml,使用 # >>>/<<< dsh-custom-provider subagent (managed) 标记块。配置变更后,Web profile 的 patchReload 为 live,保存即可热加载。
已知限制与注意事项¶
- 模型默认档差异:
llm-deepseek路由无逐模型 effort 映射(适配器锁定在路由级);llm-pi-ai逐模型字段仅包含能力映射,没有「每模型默认档」,默认档仅存在于路由级。 - 会话生效范围:子代理模型自选策略在会话创建时采样记录,仅对之后的新会话生效。
- Loader Patch 行为:loader patch 的
config是整键替换,托管块需全量重声明dsh-base的tool-subagent基线。若 dsh 升级改变基线,需同步index.js中的BASE_TOOL_CONFIG。 - 显式与隐式选择:省略显式选择的委派走父会话路由,不经白名单校验。
总结¶
dsh-custom-provider 解决了 DeepSeek Harness Web 界面在自定义模型能力配置和子代理委派控制上的缺失。通过直接修改设置页面的 wire,它实现了与官方 Models 页面共存且不冲突,适合需要对模型行为进行精细调优的开发者使用。