dsh-image-bridge:让 DeepSeek Harness 中的文本模型支持图片输入

前言

在 DeepSeek Harness (DSH) 中,许多文本模型(如 DeepSeek)的 inputModalities 只有 text。当尝试在对话中粘贴图片时,DSH 的 api-proxy 会在发送阶段直接拒绝含图消息(报错“当前模型不支持图片”)。dsh-image-bridge 插件解决了这一限制,使文本模型能够在 DSH 环境中接收并处理图片。

插件介绍

定位:DSH 插件,由开发者 haitang1 维护。
核心价值:让文本模型在 DSH 里也能正常粘贴并发送图片。

核心功能

  1. 图片落盘:图片会自动写入会话工作区的 .attachments/ 目录。
  2. 界面展示:对话区显示图片缩略图(可点击放大),不再显示文件路径文字。
  3. 模型输入:模型侧会收到 [图片N]:"<路径>" 的文本,模型可据此调用已有的视觉或 MCP 工具(例如 vision_glance、mcp__mcp-vision__analyze_image)。
  4. 原生支持:本身支持图片的模型不做任何处理,走原生路径。
  5. 技术实现:
    - 包装 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 拒绝。本插件通过三个步骤实现支持:

  1. 放行预检:包装 llm.resolveModelInfo,对文本模型补上 image 模态,让含图消息进入 agent 流程。
  2. 落盘:在 agent/pre-step 里用 attachments.readImage 读出图片字节,写到工作区 .attachments/<sha256>.<ext>。
  3. 解耦显示与模型输入:利用 DSH 的 surface replace 机制,在 agent/request-error 里追加一条“仅模型可见”的替换事件,把图片块在模型可见面换成 [图片N]:"<路径>",而人类 transcript 仍渲染原图。首次调用会因适配器拒绝图片在本地失败(无 API 开销),随后自动重试。

使用注意

  1. 命令与图片混用限制:命令(以 / 开头)与图片不要在同一轮混用。DSH 客户端输入框的“命令路径”提交时(如 /plan、/goal 等)不会携带草稿图片,图片会留在输入框。变通方式是先发命令,再单独发图;或命令与图片分开两条消息发送。
  2. 历史图片处理:会话历史中残留的视觉模型产生的图片块(未切换前),切回文本模型后这些历史图片不在本插件处理范围,可能触发适配器报错。建议切回文本模型前清空或压缩历史。

总结

该插件通过包装接口和利用 DSH 的 surface replace 机制,使纯文本模型也能通过 MCP 工具处理图片。对于需要视觉能力的文本模型开发场景,这是一个必要的工具。更多详情请访问 GitHub。

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

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

小夜