dsh-plugin-select-model:在 DSH 模型菜单里接入第三方模型

前言

DeepSeek Harness(DSH)Web GUI 自带的模型菜单通常只覆盖官方或已配置好的服务商。若要在对话里使用 OpenRouter、硅基流动、自建 OpenAI 兼容网关等列表外的模型,往往需要改 profile 配置或手写 llm-pi-ai 条目,对日常在 GUI 里切换模型的开发者不够直观。

下面介绍的 dsh-plugin-select-model(维护者 mhxy13867806343)在模型菜单底部增加「添加模型」与「管理已添加模型」入口:在界面里选服务商、填 Key、从平台或公共目录拉模型清单,写入 DSH 模型服务配置与凭据库;管理弹窗里还可以把当前对话切到已添加的模型,并高亮「使用中」的行。当前版本为 v0.6.0,许可证 MIT。

这是什么

一句话定位:给 DSH Web GUI 的模型菜单加一个出口——在原生推理等级等行之后多一行「添加模型」,点开后用弹窗接入第三方模型并落库;同菜单下还有「管理已添加模型」,支持选择、编辑、删除。

插件由社区维护者 mhxy13867806343 发布在 SkillHub 目录页 与 GitHub 仓库。源码需同时包含 Host 入口 index.js 与 UI 本体 client.js,无 npm 依赖。

核心功能

模型菜单注入

  • 在模型根菜单底部(推理等级等原生行之后、带分隔线)增加「添加模型」一行,样式克隆原生菜单行,深浅色主题与键盘走查与相邻行一致。
  • 用 MutationObserver 监听菜单挂载,只在模型菜单打开时注入;菜单卸载时随 DOM 消失,插件卸载时再兜底清理。

添加模型弹窗

点击「添加模型」后关闭原生菜单,打开居中面板,包含:

  1. 第三方服务商网格:OpenAI、Anthropic、Google Gemini、DeepSeek、阿里云百炼、智谱、Moonshot、硅基流动、OpenRouter,以及「自定义(OpenAI 兼容)」。
  2. 字段:API Key、Base URL、模型名称(可下拉搜索或手输)。
  3. 底部:取消 / 添加模型。

模型列表按平台实时获取:切换服务商会清空上一平台的模型选择,并按协议请求 /models。三条通道按可信度降级:

  1. 填了平台 Key → 平台自己的 /models(浏览器直连优先,CORS 受限时走 Host 代理),状态显示「平台实时 · N 个模型」。
  2. 没填 Key → OpenRouter 公共目录按厂商前缀过滤,状态显示「公共目录 · N 个模型」。
  3. 都拿不到 → 内置常用型号;任何情况都可手动输入模型 ID。

添加成功后写入 llm-pi-ai 的 providers.<route>(api / baseURL / 模型列表),API Key 存入 DSH 凭据库(credentials.set)。Gemini 会自动改用官方 OpenAI 兼容端点;Anthropic 走 anthropic-messages 协议。自定义服务商仅手动输入,不请求平台。

管理已添加模型

模型菜单在「添加模型」下方还有「管理已添加模型 N 个」。管理弹窗提供搜索、分页(每页 5 条),每行可:

  • 选择:调用 remote.session.selectModel,把当前对话切到该模型;成功后弹窗关闭,下一轮对话即用该模型;失败时按错误码提示(如 session/model-unavailable、session/not-found)。
  • 编辑:改显示名 / 模型 ID / 地址,Key 留空则保持不变。
  • 删除:二次确认,同时移除配置与凭据。

当前正在用的模型行会主题色描边并标「使用中」,按钮变为禁用的「已选择」。高亮来自会话的 modelSelection 投影,刷新页面或切回对话后仍与真实状态一致。

Host 侧能力

index.js 注册同源路由 /api/select-model/*,用于 CORS 受限时的模型列表代理,以及添加、列出、删除本插件写入的 sel- 前缀服务商。模型查询用的 Key 仅在内存中转发,不写日志、不回显。

未实现:连通性测试(README 能力表中标记为未实现)。

安装与启用

前置条件:DSH Desktop 或带 Web GUI 的 dsh web profile;仓库内须同时有 index.js 与 client.js。

推荐:从本机目录安装

在 DSH 中通过插件管理器安装,target 为本仓库绝对路径:

plugin_manager({ action: "install_bundle", target: "/绝对路径/dsh-plugin-select-model" })

装完后一般无需手动刷新;本地目录安装为软链,客户端 client.js 改动可走 HMR。若菜单未出现新行,再刷新一次 Web GUI。不要改仓库内 package.json 或手动往 ~/.dsh/profiles/<profile>/node_modules/ 拷贝,以免卸载残留。

开发注意:改 index.js(Host 半边)后需重启 DSH 才会加载新模块;依赖 Host 代理的 Anthropic 等,升级后需重启才会实时拉取。

验证步骤

  1. 插件管理器列表可见「模型菜单 · 添加模型」标题、描述与图标(来自 locale/*.json 与 icon.svg)。
  2. 任意对话打开模型菜单,底部出现「添加模型」。
  3. 点开弹窗,服务商网格与三个输入框完整可读;切换服务商时模型下拉清单随之变化。
  4. 填写 API Key 后,下拉可显示「来自平台 · 共 N 个模型」类状态;选「自定义」则仅手输。
  5. 「管理已添加模型」中点「选择」后弹窗关闭、对话改用该模型;再打开时对应行高亮「使用中」。
  6. 超过 5 条时出现分页与搜索;「确定」关闭弹窗。

典型用法

  1. 打开对话 → 模型菜单 → 添加模型。
  2. 选择服务商(例如 OpenRouter 或 OpenAI),填写 API Key 与 Base URL(若需要)。
  3. 在模型名称下拉中选择或搜索模型 ID,点击 添加模型。
  4. 关闭并重新打开模型菜单,应出现该服务商分组下的新模型。
  5. 需要切换当前对话模型时:模型菜单 → 管理已添加模型 → 在某一行点 选择;Toast 提示后下一轮即使用该模型。

非敏感草稿(服务商、地址、模型名)会保存在 localStorage;文案通过 ctx.locale.register 支持中英文,随 DSH 语言切换。

适用场景与注意

适合谁:经常在 DSH Web GUI 里换模型、需要快速接入多家第三方 API 或 OpenAI 兼容网关,又不想每次手改 profile 配置的开发者。

权限与安全:插件以当前 DSH 进程权限运行,会向配置的 Base URL 发起请求(含浏览器直连与 Host 代理);添加模型时 Key 写入 DSH 凭据库。安装前应阅读 源码与 LICENSE,确认路由与凭据处理符合你的环境策略。Host 路由拒绝非 http/https URL,单次模型列表最多返回 500 条。

生态说明:DSH 采用「一切皆插件」思路;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-plugin-select-model 把「接第三方模型」和「在当前对话里选中它」收进模型菜单的两条入口:添加时按平台或公共目录拉清单并落库,管理时用 remote.session.selectModel 切换并持久高亮当前模型。需要细节与开发自检(Client Inspect provider SelectModel)时,以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/mhxy13867806343/dsh-plugin-select-model
  • GitHub:https://github.com/mhxy13867806343/dsh-plugin-select-model
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜