前言¶
在 DeepSeek Harness 中,直接向仅支持文本的模型粘贴图片会被拒绝,报错提示不支持图像输入。@zzdream67/dsh-vision-bridge 插件通过拦截 llm/stream 流水线,在请求到达上游提供商之前,将图像块替换为视觉模型的转录文本。这使得纯文本模型能够接收包含图片描述的文本,从而完成推理任务。
安装与启用¶
安装该插件需要确保环境已安装 dsh 命令和 pnpm(dsh plugin 内部依赖 pnpm)。推荐使用 npm 安装预构建版本。
- 安装
pnpm(如果尚未安装):
npm install -g pnpm
*注:`corepack enable pnpm` 在 Windows 上有时会因为写入权限问题失败,直接通过 npm 全局安装更为可靠。*
- 执行安装命令:
dsh plugin --profile web add @zzdream67/dsh-vision-bridge
核心功能¶
该插件主要实现以下能力:
* 图像拦截与替换:拦截 LLM 流水线,将图片内容替换为视觉模型的转录。
* 模型声明注入:自动为被桥接的模型添加 input: [text, image] 声明,使其能通过 DeepSeek Harness 的准入检查。
* Web 设置页面:在 Web 设置页面注册自定义区域,提供可视化的配置界面。
配置与使用¶
插件会在 Web 设置页面的 settings.section 中注册一个自定义区域。在该页面中,可以通过三个按钮管理视觉模型:
- 测试并启用:向选定的视觉模型发送一张 16x16 的 PNG 图片。只有当该模型接受图片时,才会写入声明;失败则自动撤回。
- 直接启用:跳过测试步骤,直接写入声明。适用于已确认模型具备视觉能力的场景。
- 重新加载:从磁盘重新读取配置。由于桌面端没有重新加载手势,这是更新配置的唯一方式。
字段说明¶
在配置区域中,可调整以下参数:
| 字段 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
总开关。关闭时插件保留加载但不再介入,并撤回声明。 |
visionProvider |
'' |
视觉路由 ID。留空则插件不生效。 |
visionModel |
'' |
视觉路由中的模型 ID。留空则插件不生效。 |
prompt |
- | 发送给视觉模型的提示词。 |
bridge |
[] |
需要桥接的纯文本模型 ID 列表。 |
manageDeclarations |
true |
是否让插件自动写入/撤回模态声明。 |
cacheSize |
64 |
缓存的转录结果数量。设为 0 可禁用缓存。 |
timeoutMs |
120000 |
单张图片转录的超时时间。 |
声明机制¶
DeepSeek Harness 的准入门(dsh-host-apiproxy)会检查模型的 inputModalities。如果模型未声明支持图像,请求会被拒绝,插件无法介入。
- 当
manageDeclarations开启时,插件会自动为bridge列表中的模型添加input: [text, image]声明。 - 当插件启用且模型被桥接时,该模型实际上可以接收图像输入,因为转换发生在调用提供商之前。
- 声明是“准入标签”。它只影响主机层是否允许图像进入会话,不影响 Token 计数、上下文窗口或采样行为。
注意事项与实现细节¶
- 表单渲染:仅靠主机端的架构注册不会自动渲染表单。该插件通过手动编写浏览器端 bundle 来实现 UI。
- 卸载行为:
- 插件会记录声明前的输入状态。如果卸载时检测到输入被手动修改为错误格式,插件会保留该修改。
- 如果模型或路由已被删除,插件会跳过该条目(不会凭空重建)。
- 插件会尝试恢复所有其他路由的声明状态。
- 源码与许可证:该插件使用 MIT 许可证。安装前建议检查源码以确保符合安全要求。
总结¶
该插件解决了 DeepSeek Harness 中纯文本模型无法处理图片输入的痛点。通过在 LLM 流水线中插入视觉转录层,它让文本模型能够间接地理解图像内容。相关文档与源码可在 GitHub 查看。