为 DSH Web 纯文本模型提供图片桥接:把粘贴的图片落盘成本地路径并改写为文本标记发送,模型自主调用其目录中的视觉工具查看图片。
- 语言
- JavaScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add @kbpoyo/dsh-image-bridge在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 kbpoyo/dsh-image-bridge:先查看仓库 https://github.com/kbpoyo/dsh-image-bridge 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
为 DSH Web 中不支持原生图片输入的纯文本模型提供图片桥接:把粘贴的图片保存到会话工作区的隐藏目录,用一段包含路径和「自己调用视觉工具」指引的文本替换原生图片,让模型自己到技能/工具目录里挑能力来读图。
核心能力
- 在纯文本模型会话的输入框右侧注入「桥接发送图片」按钮(多模态模型下自动隐藏)
- 接管发送回车:纯文本模型下含图消息在原生门禁前被自动改写为桥接文本,与按钮等效
- 图片落到会话工作区的隐藏目录
<cwd>/.dsh-image-bridge/,文件名带时间戳与序号 - 按宿主
attachments.imageLimits校验数量、媒体类型与单张/总大小 - 桥接文本中明确告诉模型先看自己目录里的视觉/OCR/grounding 工具,零技能绑定
- 自动清理:24 小时 TTL、总大小超过 512 MB 时按最旧优先清理,每 6 小时巡检
技术实现
- 语言: JavaScript(ES Modules,
type: "module"),客户端用 React - 关键依赖:
zod(Wire 契约 schema)、@deepseek-ai/dsh-typert-protocol(Host/Client RPC 桥接)、@deepseek-ai/cordis^4.0.1 - 架构模式: 服务端注册
TypertRemoteService暴露bridgeState/bridgeSend两个 RPC,并包装apiProxy.sessions.prompt在原生门禁前自动改写含图消息;客户端在conversation.input.rightslot 注册按钮,通过connection.rpc调用宿主 typert 端点,订阅modelDirectoriesstore + 1s 兜底轮询感知模型切换 - 入口文件:
lib/index.js(服务端 Cordis 插件)、lib/client.js(浏览器端 ModuleLoader 注入)、lib/typert.js(Wire 契约 schema)、cordis.patch.yml(DSH bundle patch)
适用场景
当你用纯文本模型(成本低或没有视觉档位)但又想让它看图时使用:粘贴图片后点「桥接发送图片」或直接回车,插件会把图片保存到本地、用文本标记告诉模型图片在哪、然后让模型去调用它自己目录里的视觉能力。适合希望复用现有会话模型而不必为图片切换到贵价多模态模型、且模型已经配置了视觉类技能/工具的用户。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | >= 0.1.0-rc.6 | peerDependencies 声明 @deepseek-ai/dsh-typert-protocol ^0.1.0-rc.6,bundle patch 通过 dsh plugin add 自动挂载 |
| Node.js | 未声明 | package.json 未声明 engines.node |
| 平台 | 跨平台 | 限制来自宿主工作区与 sandbox 服务可用性,本插件未在 package.json 中声明 os/cpu;客户端注入平台为 web(DSH Web profile) |
| 原生模块 | 无 | 不依赖任何原生模块;图片落盘与清理均通过宿主 shell 服务(base64 -d / file -b / find / du) |
安装方式
dsh plugin --profile web add github:kbpoyo/dsh-image-bridge
配置项
本插件无需额外配置。cordis.patch.yml 中 config: {} 为空对象;运行时一切参数(桥接目录根、清理 TTL/上限、模型能力查询、消息路径与尺寸提取)均从宿主服务(sandboxPolicy.workspaceRoot、attachments.imageLimits、llm.resolveModelInfo)获取。
常见问题
Q: 装好之后必须先配置什么才能用吗?
A: 不需要。cordis.patch.yml 中 config 默认为空;npm 安装后重启 dsh web 即可生效。纯文本模型会话里粘贴图片后会出现「桥接发送图片」按钮;也可运行 dsh --profile web --dump-config 确认插件配置层已挂载。
Q: 支持哪些图片格式和大小?
A: 跟随宿主 attachments.imageLimits 配置:支持 PNG / JPEG / WebP / GIF(其他 image/* 类型回退保存为 .png),单张大小、单消息总大小、单消息图片张数都由宿主定义,按钮在 onClick 时按这些限制做完整校验,超限会直接显示错误并不发送。
Q: 桥接产生的临时图片存在哪里?会一直留着吗?
A: 落到当前会话工作区下的隐藏目录 <cwd>/.dsh-image-bridge/(点号开头,常规文件管理器默认不显示)。超过 24 小时未访问的文件会被自动删除;目录总大小超过 512 MB 时按最旧优先清理;插件卸载时也会清理。手动删除该目录也无影响,下次桥接会自动重建。
Q: 切换到多模态模型后按钮会消失吗?
A: 会。客户端订阅官方模型目录 store(事件驱动)并叠加 1 秒兜底轮询,切换瞬间按钮立即隐藏;多模态模型下图片直接走原生发送,插件完全静默,不做拦截或改写。
Q: 模型真的能"看到"图片吗?需要我指定视觉工具吗?
A: 取决于模型自身目录里是否有视觉类(通用 VQA)、OCR 或 grounding 工具——插件不绑定、不调用任何具体工具,只在文本标记里写明「先查看当前可用技能与工具再调用」。你不需要指定工具;如果模型目录里没有视觉能力,它会如实告知「请安装视觉技能或切换到多模态模型」。
Q: 自定义供应商的纯文本模型下按钮一直显示,怎么办?
A: 适配器只在模型声明含 input: ['text','image'](或主动上报 image 能力)时才会上报为多模态。settings 配置的自定义供应商若模型声明里没写 input,适配器一律按纯文本上报,插件忠实读取——这是配置层事实不是 bug。解决办法是在模型声明里补 input: ['text','image'],或改用适配器托管目录、正确上报能力的模型。
Q: 发了图片之后能切回纯文本模型吗?
A: 不能,这是 DSH 原生限制(会话日志一旦含原生图片就禁止切回纯文本模型)。要切回需要执行 /compact 或开新会话;本插件不绕过这个限制。
Q: 父代理向子代理发图会自动桥接吗?
A: 不会。父代理向子代理发送的含图消息不经 session.prompt,本插件的 apiProxy.sessions.prompt 包装只覆盖主会话发送,子代理发图仍会撞上原生门禁 MODEL_DOES_NOT_SUPPORT_IMAGES。
上手难度
入门 — 用户只需要在 Web 客户端粘贴图片并点按钮(或直接回车),不需要任何配置;安装后立即可见效果,模型侧能力判定与切换感知均由插件自动处理。
已知问题与限制
- 自定义供应商(settings 配置)若模型声明未含
input: ['text','image'],适配器一律上报为纯文本,桥接按钮会如实显示——需在模型声明里补input字段(README.md:87-89) - 发送原生图片后无法切回纯文本模型(DSH 原生限制),需
/compact或新会话,插件不绕过(README.md:90) - 父代理向子代理发图不在覆盖范围:subagent 路径不经
session.prompt,仍走原生门禁(README.md:91) apiProxy.sessions.prompt启动时若不可用(宿主加载时序),自动桥接被跳过(仅按钮流程仍生效),会在控制台打印一行说明(lib/index.js:307-309)- 任意桥接失败(如桥接目录不可写、磁盘满)会回退到原生行为并在控制台打
error日志,前端 onClick 路径会显示错误提示(lib/index.js:166-171 / lib/client.js:201-205)
DSH(DeepSeek Harness)Web 插件:为不支持原生图片输入的纯文本模型提供图片桥接能力,让纯文本模型也能"看图"。
纯文本模型无法直接接收图片(DSH 原生会以 MODEL_DOES_NOT_SUPPORT_IMAGES 拒绝)。本插件把图片落盘到会话工作区,以文本标记把图片路径与处理指引注入对话,由模型自主发现并调用其技能(skill)/工具(tool)目录中的视觉类能力(通用视觉问答 / OCR / grounding)来查看图片。插件不绑定任何具体技能或工具——能力发现完全由模型自行完成。
功能
- 一键桥接:纯文本模型下,输入框粘贴图片后出现「桥接发送图片」按钮,点击即可发送,模型能读到图片。
- 回车兜底:不点按钮、直接回车发送图片,也会在发送入口自动改写为桥接标记发送,与按钮等效。
- 多模态直通:多模态模型下按钮自动隐藏、图片原生发送,插件零干预。
- 即时感知:会话中切换模型,按钮立即显隐,不闪烁、不跳动。
- 自动清理:桥接产生的临时图片定时自动清理,无需手动管理。
安装
DSH 插件通过 dsh plugin 命令安装进 profile(dsh web 对应 web profile)。
方式一:从 npm 安装(推荐)
dsh plugin --profile web add @kbpoyo/[email protected]
装完重启 dsh web 即可生效。该命令会在 profile 中安装插件并自动挂载为配置层,无需手动编辑任何配置文件。
验证:重启后,纯文本模型会话中粘贴图片出现「桥接发送图片」按钮即生效;也可用 dsh --profile web --dump-config 确认插件配置层已挂载。
方式二:手动安装(本地调试用)
- 将本包放置到 DSH profile 的
node_modules/下(如~/.dsh/profiles/web/node_modules/@kbpoyo/dsh-image-bridge/); - 在 profile 的
cordis.patch.yml的- insert:列表追加:
- id: dsh-image-bridge
name: '@kbpoyo/dsh-image-bridge'
config: {}
- 重启 DSH(插件为启动期扫描加载)。
卸载
- npm 安装的:
dsh plugin --profile web remove @kbpoyo/dsh-image-bridge,然后重启dsh web。 - 手动安装的:删除
node_modules/@kbpoyo/dsh-image-bridge/目录,并移除cordis.patch.yml中对应的@kbpoyo/dsh-image-bridge行,然后重启。
使用说明
- 在会话中选择纯文本模型(如 deepseek-v4-flash);
- 粘贴或拖入图片,点击「桥接发送图片」按钮发送(直接回车发送也会自动桥接);
- 模型会自主调用其视觉类技能/工具(通用视觉问答 / OCR / grounding)查看图片并回答,无需你手动指定工具;
- 需要 OCR 时请在提问中明确说明(如「识别图中文字」),否则默认走通用视觉问答;
- 切换到多模态模型(如 mimo-v2.5)后按钮自动消失,图片原生直通。
工作原理
- 落盘:图片写入会话工作区的隐藏目录
<cwd>/.dsh-image-bridge/(点号开头,常规文件管理器不显示;文件名img-<时间戳>-<序号>.<ext>),发送前校验attachments.imageLimits(数量 / 类型 / 单张与总大小)。 - 文本化注入:原生图片被替换为三段文本标记:
[图片附件](路径 / 尺寸 / 类型)+[用户提问]+[处理指引](默认优先通用视觉问答,OCR 仅在用户明确要求或文字不清晰时使用)。 - 发送入口自动改写:宿主侧包装
session.prompt,纯文本模型下含图消息在原生门禁(MODEL_DOES_NOT_SUPPORT_IMAGES)之前改写为桥接标记;多模态模型直通;改写失败(如桥接目录不可写)回退原生行为,与按钮流程等效。 - 零技能绑定:插件不调用、不绑定任何具体技能/工具,由模型从自身目录自主发现视觉能力。
- 能力判定与切换感知:判定来源为客户端上报当前模型(与官方模型选择器同通路,最新鲜)→ 会话最近一次请求 → 默认模型;模型切换由事件驱动即时感知(订阅官方模型目录 store),另有图片挂载期间每 1s 的兜底轮询覆盖事件漏网场景(如跨标签页切换)。
- 自动清理:TTL 24 小时;总大小超过 512MB 时按最旧优先清理;每 6 小时巡检,插件卸载时清理超龄文件。
常见问题
1. 按钮没出现? 当前模型被上报为支持图片(多模态模型),按钮按设计隐藏;或 Host 端点不可用(安全降级)。请确认会话当前模型。
2. 直接回车发送图片会怎样? 会自动桥接,与点击按钮等效;仅当桥接失败(如磁盘不可写)时才回退原生行为并报错。
3. 模型真的能"看到"图片吗? 取决于模型自身的视觉技能/工具目录——插件只负责把图片送达,不保证所有模型都具备视觉能力;模型无可用视觉能力时会如实告知。
4. 图片会一直留在磁盘吗?
不会。桥接目录为隐藏目录 <cwd>/.dsh-image-bridge/,图片 24 小时自动清理;总大小超过 512MB 时按最旧优先清理。如需手动清理,直接删除该目录即可(插件会在下次桥接时自动重建)。
5. 自定义供应商模型下按钮一直显示?
配置层未声明 input: ['text','image'] 时,适配器一律将模型上报为纯文本,插件忠实读取——需在模型声明中补 input 字段,见「已知限制」。
6. 发图后切不回纯文本模型?
这是 DSH 原生限制(会话日志含原生图片后禁止切回),需 /compact 或开新会话,插件不绕过。
7. 切换模型后按钮没反应? 刷新页面后重试;正常情况下切换瞬间生效(事件驱动 + 轮询双通道)。
已知限制
- 自定义供应商模型的能力上报:凡经 settings 配置的自定义供应商(provider),其模型声明未包含
input: ['text','image'](或适配器未上报 image 能力)时,适配器一律将其上报为inputModalities=['text']。此类模型下桥接按钮会如实显示(插件忠实读取适配器上报,无法判定其为视觉模型)——这是配置层事实,与插件无关。要让这类模型正确隐藏按钮,需在模型声明中补input字段,或改用适配器托管目录、正确上报能力的模型。 - 原生门禁不绕过:DSH 原生"会话日志含原生图片后禁止切回纯文本模型"的限制保持不变(切回需
/compact或新会话)。 - subagent 传图不在覆盖范围:父代理向子代理发送的含图消息不经
session.prompt,仍走原生门禁。
License
MIT
查看使用指南 →
该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。
收录徽章
[](https://deepseek-plugin.org/plugins/kbpoyo/dsh-image-bridge)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。