前言¶
在 DeepSeek Harness (DSH) 中,许多文本模型(如 DeepSeek)的 inputModalities 只有 text。当尝试在对话中粘贴图片时,DSH 的 api-proxy 会在发送阶段直接拒绝含图消息(报错“当前模型不支持图片”)。dsh-image-bridge 插件解决了这一限制,使文本模型能够在 DSH 环境中接收并处理图片。
插件介绍¶
定位:DSH 插件,由开发者 haitang1 维护。
核心价值:让文本模型在 DSH 里也能正常粘贴并发送图片。
核心功能¶
- 图片落盘:图片会自动写入会话工作区的
.attachments/目录。 - 界面展示:对话区显示图片缩略图(可点击放大),不再显示文件路径文字。
- 模型输入:模型侧会收到
[图片N]:"<路径>"的文本,模型可据此调用已有的视觉或 MCP 工具(例如vision_glance、mcp__mcp-vision__analyze_image)。 - 原生支持:本身支持图片的模型不做任何处理,走原生路径。
- 技术实现:
- 包装llm.resolveModelInfo放行预检。
- 在agent/pre-step中用attachments.readImage落盘。
- 利用agent/request-error解耦显示与模型输入。
安装与启用¶
本包是 profile bundle(package.json 声明了 dsh.bundle.patch)。在 DSH 源码 checkout 根目录执行:
pnpm dsh plugin --profile web add 'github:haitang1/dsh-image-bridge#b5c64ea'
安装成功后,插件会自动加入该 profile 的 dsh.profile.bundles,下次启动(或长驻 surface 热载后)生效。
如果 CLI 不可用,可手工等价操作:
1. 编辑 $DSH_HOME/profiles/<profile>/package.json:
- 在 dependencies 添加:"dsh-image-bridge": "github:haitang1/dsh-image-bridge#b5c64ea"
- 在 dsh.profile.bundles 数组末尾添加:"dsh-image-bridge"
2. 在该 profile 目录执行 pnpm install。
原理与实现¶
文本模型通常被 api-proxy 拒绝。本插件通过三个步骤实现支持:
- 放行预检:包装
llm.resolveModelInfo,对文本模型补上image模态,让含图消息进入 agent 流程。 - 落盘:在
agent/pre-step里用attachments.readImage读出图片字节,写到工作区.attachments/<sha256>.<ext>。 - 解耦显示与模型输入:利用 DSH 的 surface replace 机制,在
agent/request-error里追加一条“仅模型可见”的替换事件,把图片块在模型可见面换成[图片N]:"<路径>",而人类 transcript 仍渲染原图。首次调用会因适配器拒绝图片在本地失败(无 API 开销),随后自动重试。
使用注意¶
- 命令与图片混用限制:命令(以
/开头)与图片不要在同一轮混用。DSH 客户端输入框的“命令路径”提交时(如/plan、/goal等)不会携带草稿图片,图片会留在输入框。变通方式是先发命令,再单独发图;或命令与图片分开两条消息发送。 - 历史图片处理:会话历史中残留的视觉模型产生的图片块(未切换前),切回文本模型后这些历史图片不在本插件处理范围,可能触发适配器报错。建议切回文本模型前清空或压缩历史。
总结¶
该插件通过包装接口和利用 DSH 的 surface replace 机制,使纯文本模型也能通过 MCP 工具处理图片。对于需要视觉能力的文本模型开发场景,这是一个必要的工具。更多详情请访问 GitHub。