dsh-vision-all:为 DSH 里所有 LLM Provider 统一补上图片输入

前言

在 DeepSeek Harness(DSH)里接 OpenAI 兼容的三方 API 时,界面能否粘贴图片,往往取决于 /v1/models 返回的元数据里是否声明了视觉能力。不少中转站不填该字段,或填了 vision: false,而上游实际支持看图。DSH 会按声明关闭图片入口,结果是模型能看图,客户端却粘不了图。手动给每个 provider 写 defaultInput 可以修,但已有 provider 和后续新增的都要重复维护。下面介绍社区插件 dsh-vision-all,在配置加载阶段为所有 LLM provider 自动合并 defaultInput,补上 image(在已有配置不覆盖的前提下)。

这是什么

dsh-vision-all 由维护者 GGBound-1229 发布,仓库地址为 https://github.com/GGBound-1229/dsh-vision-all,在 SkillHub 目录中归类为 admin-security。插件版本 0.1.1,MIT 许可证,要求 Node.js >= 20。

一句话定位:监听 DSH 内部配置事件,对含有 providers 的配置对象逐个 provider 把 image 合并进 defaultInput,并保证 text 存在;原本已有完整 defaultInput 的不会被整体覆盖,只在缺少 image 时补上。它不读取或改写 /v1/models 的声明结果来「欺骗」上游,而是在 DSH 侧不再因声明缺失而拦截图片入口。

前提:上游 provider 必须真实具备视觉能力。插件不做图片转译,不能给纯文本模型「外挂」视觉;若需要把图发给视觉模型再转成文字回传,应选用另一类插件。

核心功能

配置层面的行为

在 internal/config 处理流程中:

  1. 若配置对象没有 providers 字段,原样返回(非 LLM provider 配置)。
  2. 若有 providers,遍历每一项;若看起来像 provider 配置(具备 models、baseURL、apiKeyEnv、api 之一),则合并 defaultInput。
  3. 只增不减:已有 defaultInput 时仅在缺 image 时补上,并确保 text 存在。

效果等价于 README 中的描述:给 DSH 里所有 llm provider(包括以后新增的)自动补上 defaultInput: ["text", "image"](在合并语义下实现)。

日志与环境变量

默认调试日志路径:

  • Windows:%LOCALAPPDATA%\dsh-vision-all\debug.log
  • Linux / macOS:~/.local/state/dsh-vision-all/debug.log

启动成功时日志中应出现类似 APPLY ran、hook registered、各 provider 的 defaultInput=["text","image"],以及 patched N providers(N 为被处理的 provider 数量)。

环境变量 作用
DSH_VISION_ALL_LOG 覆盖日志路径;设为 off 则完全不写文件

关闭文件日志示例(PowerShell):

$env:DSH_VISION_ALL_LOG = "off"

关闭插件

在 profile 的 cordis.patch.yml 中增加:

- id: dsh-vision-all
  name: dsh-vision-all
  config:
    enabled: false

或从 dsh.profile.bundles 中移除包名 dsh-vision-all。

安装与启用

安装分两步:用 pnpm(或 npm)把包装进 profile 的 node_modules,再把包名写入 dsh.profile.bundles。官方 README 未提供 dsh plugin add 一类命令,以下命令来自仓库说明。

第 1 步:确认可用的包管理器

node --version
pnpm --version      # 或 npm --version

系统已有 Node 20+ 与 pnpm(或 npm)时可直接使用。若没有,需使用 DSH 自带的 node/pnpm 路径(因安装位置因机器而异,README 以 $DSH_HOME 占位,需自行定位 dsh.exe 或 resources 目录)。

第 2 步:进入 desktop profile 并安装依赖

# Linux / macOS
cd ~/.dsh/profiles/desktop
# Windows
cd $env:USERPROFILE\.dsh\profiles\desktop

任选其一:

pnpm add github:GGBound-1229/dsh-vision-all
npm install github:GGBound-1229/dsh-vision-all

GitHub 安装方式依赖本机已安装 git;若 pnpm add 报权限错误,需确认 .dsh 目录可写或使用具备写权限的终端。

第 3 步:写入 bundles

编辑 ~/.dsh/profiles/desktop/package.json(Windows 为 %USERPROFILE%\.dsh\profiles\desktop\package.json),在 dsh.profile.bundles 数组末尾增加:

"bundles": [
  "@deepseek-ai/dsh-base",
  "@deepseek-ai/dsh-web-app",
  "dsh-vision-all"
]

只增加 dependencies 而不写 bundles,DSH 不会加载插件;只写 bundles 而不安装依赖,启动会找不到包。

第 4 步:重启并验证

完全退出 DSH 后重新打开,检查上述日志路径是否出现 patched N providers。若无日志文件,优先核对 bundles 是否包含 dsh-vision-all。

装不上时的常见顺序:权限 → 是否安装 git → 是否漏写 bundles → 若使用 file: 依赖改代码后需重新安装(pnpm 为复制而非链接)。

典型用法

本插件无单独的业务 API 调用步骤;启用后正常使用 DSH 对话界面,对已通过插件补齐 defaultInput 的 provider 粘贴图片即可。验证是否生效以启动日志为准,例如:

APPLY ran
hook registered
provider hw defaultInput=["text","image"]
provider ox defaultInput=["text","image"]
patched 9 providers

适用场景与注意

适合:使用 OpenAI 兼容中转站或多 provider 配置,上游模型支持视觉,但元数据未声明或声明错误,导致 DSH 关闭图片入口的场景。

不适合:上游本身不支持视觉的模型;此时强行开放入口可能导致请求失败,而非插件能修复的问题。

安全与权限:插件以当前 DSH 进程权限运行,会参与全局 internal/config 的 waterfall 处理。安装前应阅读仓库 index.js 与 cordis.patch.yml,确认 MIT 许可证与行为符合预期。README 强调:该 listener 若未妥善处理异常,可能影响整棵插件树初始化;当前实现要求 listener 体处于 try/catch 中,并在调用 next 前校验其为函数。

DSH 生态采用「一切皆插件」思路;SkillHub(https://www.skillhub.cn/plugins/GGBound-1229/dsh-vision-all)为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-vision-all 解决的是 DSH 因 provider 元数据缺失而误关图片入口的问题,在确认上游具备视觉能力的前提下,用配置合并方式为现有与后续 provider 统一补上 image 输入声明。目录页:https://www.skillhub.cn/plugins/GGBound-1229/dsh-vision-all;源码与完整安装说明:https://github.com/GGBound-1229/dsh-vision-all。

羽毛球分组比赛记分
小程序二维码

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

小夜