前言¶
在 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 处理流程中:
- 若配置对象没有
providers字段,原样返回(非 LLM provider 配置)。 - 若有
providers,遍历每一项;若看起来像 provider 配置(具备models、baseURL、apiKeyEnv、api之一),则合并defaultInput。 - 只增不减:已有
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。